diff options
Diffstat (limited to 'archaeological_files/data_importer.py')
| -rw-r--r-- | archaeological_files/data_importer.py | 174 | 
1 files changed, 2 insertions, 172 deletions
| diff --git a/archaeological_files/data_importer.py b/archaeological_files/data_importer.py index 15072834a..5504356d5 100644 --- a/archaeological_files/data_importer.py +++ b/archaeological_files/data_importer.py @@ -17,73 +17,18 @@  # See the file COPYING for details. -import copy, datetime, re  import unicodecsv  from django.conf import settings -from django.db import IntegrityError -from django.template.defaultfilters import slugify  from django.utils.translation import ugettext_lazy as _  from ishtar_common.data_importer import * -from ishtar_common.models import Town, Person, OrganizationType +from ishtar_common.models import Person, OrganizationType  from ishtar_common.unicode_csv import unicode_csv_reader  from archaeological_files import models -from archaeological_operations.models import Parcel -from archaeological_operations.utils import parse_parcels - -RE_FILTER_CEDEX = re.compile("(.*) *(?: *CEDEX|cedex|Cedex|Cédex|cédex *\d*)") -RE_PERMIT_REFERENCE = re.compile('[A-Za-z]*(.*)') - -class StrToBoolean(Formater): -    def __init__(self, choices={}, cli=False, strict=False): -        self.dct = copy.copy(choices) -        self.cli = cli -        self.strict= strict -        self.missings = set() - -    def prepare(self, value): -        value = unicode(value).strip() -        if not self.strict: -            value = slugify(value) -        return value - -    def check(self, values, output=None): -        if not output or output == 'silent': -            return -        msgstr = unicode(_(u"Choice for \"%s\" is not available. "\ -                           u"Which one is relevant?\n")) -        msgstr += u"1. True\n" -        msgstr += u"2. False\n" -        msgstr += u"3. Empty\n" -        for value in values: -            value = self.prepare(value) -            if value in self.dct: -                continue -            if not self.cli: -                self.missings.add(value) -                continue -            res = None -            while res not in range(1, 4): -                sys.stdout.write(msgstr % value) -                res = raw_input(">>> ") -                try: -                    res = int(res) -                except ValueError: -                    pass -            if res == 1: -                self.dct[value] = True -            elif res == 2: -                self.dct[value] = False -            else: -                self.dct[value] = None - -    def format(self, value): -        value = self.prepare(value) -        if value in self.dct: -            return self.dct[value] +from archaeological_operations.data_importer import *  class ImportClosingFormater(ImportFormater):      def post_process(self, obj, context, value, owner=None): @@ -96,121 +41,6 @@ class ImportClosingFormater(ImportFormater):          obj.end_date = open_date + datetime.timedelta(30)          obj.save() -class ImportParcelFormater(ImportFormater): -    NEED = ['town',] -    PARCEL_OWNER_KEY = 'associated_file' - -    def post_process(self, obj, context, value, owner=None): -        value = value.strip() -        base_dct = {self.PARCEL_OWNER_KEY:obj, 'history_modifier':owner} -        if 'parcels' in context: -            for key in context['parcels']: -                if context['parcels'][key]: -                    base_dct[key] = context['parcels'][key] -        for parcel_dct in parse_parcels(value, owner=owner): -            parcel_dct.update(base_dct) -            try: -                Parcel.objects.get_or_create(**parcel_dct) -            except IntegrityError: -                raise ImporterError("Erreur d'import parcelle, contexte : %s" \ -                                                    % unicode(parcel_dct)) - -class ImportYearFormater(ImportFormater): -    def post_process(self, obj, context, value, owner=None): -        value = self.formater.format(value) -        if not value: -            return -        obj.year = value.year -        obj.save() - -class TownFormater(Formater): -    def __init__(self, town_full_dct={}, town_dct={}): -        self._town_full_dct = town_full_dct -        self._town_dct = town_dct -        self._initialized = False if not self._town_full_dct else True - -    def town_dct_init(self): -        for town in Town.objects.all(): -            key = (slugify(town.name.strip()), town.numero_insee[:2]) -            if key in self._town_full_dct: -                print("Danger! %s is ambiguous with another town on the same "\ -                      "department."% town.name) -                continue -            self._town_full_dct[key] = town -            key = slugify(town.name.strip()) -            if key in self._town_dct: -                print("Warning %s is ambiguous with no department provided" %\ -                      town.name) -                continue -            self._town_dct[key] = town -            self._initialized = True - -    def format(self, value, extra=None): -        if not self._initialized: -            self.town_dct_init() -        m = RE_FILTER_CEDEX.match(value) -        if m: -            value = m.groups()[0] -        if not value: -            return None -        if extra: -            key = (slugify(value), extra) -            if key in self._town_full_dct: -                return self._town_full_dct[key] -        key = slugify(value) -        if key in self._town_dct: -            return self._town_dct[key] - -class TownINSEEFormater(Formater): -    def __init__(self): -        self._town_dct = {} - -    def format(self, value, extra=None): -        value = value.strip() -        if not value: -            return None -        if value in self._town_dct: -            return self._town_dct[value] -        q = Town.objects.filter(insee_code=value) -        if not q.count(): -            return -        self._town_dct[value] = q.all()[0] -        return self._town_dct[value] - -class SurfaceFormater(Formater): -    def test(self): -        assert self.format(u"352 123") == 352123 -        assert self.format(u"456 789 m²") == 456789 -        assert self.format(u"78ha") == 780000 - -    def format(self, value, extra=None): -        value = value.strip() -        if not value: -            return None -        factor = 1 -        if value.endswith(u"m2") or value.endswith(u"m²"): -            value = value[:-2] -        if value.endswith(u"ha"): -            value = value[:-2] -            factor = 10000 -        try: -            return int(value.replace(' ', '')) * factor -        except ValueError: -            raise ImporterError("Erreur import surface : %s" \ -                                                    % unicode(value)) - -#RE_ADD_CD_POSTAL_TOWN = re.compile("(.*)[, ](\d{5}) (.*?) *(?: "\ -#                                   "*CEDEX|cedex|Cedex *\d*)*") - -RE_NAME_ADD_CD_POSTAL_TOWN = re.compile("(.*)?[, ]*" + NEW_LINE_BREAK \ -                                      + "(.*)?[, ]*(\d{2} *\d{3})[, ]*(.+)") - -RE_ADD_CD_POSTAL_TOWN = re.compile("(.*)?[, ]*(\d{2} *\d{3})[, ]*(.+)") - -RE_CD_POSTAL_FILTER = re.compile("(\d*) (\d*)") - -RE_ORGA = re.compile("([^,]*)") -  class FileImporterSraPdL(Importer):      LINE_FORMAT = []      OBJECT_CLS = models.File | 
