summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_context_records/data_importer.py82
-rw-r--r--archaeological_files/data_importer.py359
-rw-r--r--archaeological_finds/data_importer.py158
-rw-r--r--archaeological_operations/data_importer.py280
4 files changed, 0 insertions, 879 deletions
diff --git a/archaeological_context_records/data_importer.py b/archaeological_context_records/data_importer.py
deleted file mode 100644
index 5fdc67949..000000000
--- a/archaeological_context_records/data_importer.py
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# Copyright (C) 2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# See the file COPYING for details.
-
-from ishtar_common.data_importer import *
-
-from archaeological_context_records import models
-
-
-class ContextRecordsImporterBibracte(Importer):
- DESC = u"Exports Bibracte : importeur pour l'onglet UE"
- OBJECT_CLS = models.ContextRecord
- DEFAULTS = {}
- LINE_FORMAT = [
- # ID operation
- ImportFormater('operation__operation_code', IntegerFormater(),
- duplicate_fields=[('parcel__operation__operation_code',
- False)]),
- # ID UE
- ImportFormater('external_id', UnicodeFormater(120),
- duplicate_fields=[('label', False)],),
- # Type
- ImportFormater('unit', TypeFormater(models.Unit), required=False),
- # description
- ImportFormater('description', UnicodeFormater(1000), required=False,),
- # interprétation
- ImportFormater('interpretation', UnicodeFormater(1000),
- required=False,),
- # date ouverture
- ImportFormater('opening_date', DateFormater(['%Y/%m/%d']),
- required=False,),
- # date fermeture
- ImportFormater('closing_date', DateFormater(['%Y/%m/%d']),
- required=False,),
- # lien vers parcelle
- ImportFormater('parcel__external_id', UnicodeFormater(12),
- required=False,),
- # lien vers ID sig
- None,
- # commentaire
- ImportFormater('comment', UnicodeFormater(1000), required=False,),
- # ????
- None,
- # chrono #TODO! pas de vrai création de nouvelle et en cas de modif
- # c'est la zone
- ImportFormater('datings__period', TypeFormater(models.Period),
- required=False),
- ]
-
-
-class ContextRecordsRelationImporterBibracte(Importer):
- DESC = u"Exports Bibracte : importeur pour l'onglet relations entre UE"
- OBJECT_CLS = models.RecordRelations
- DEFAULTS = {}
- LINE_FORMAT = [
- # code OA
- ImportFormater(
- 'left_record__operation__operation_code', IntegerFormater(),
- duplicate_fields=[('right_record__operation__operation_code',
- False)],),
- # identifiant UE 1
- ImportFormater('left_record__external_id', UnicodeFormater(120),),
- # type relation
- ImportFormater('relation_type', TypeFormater(models.RelationType),),
- # identifiant UE 2
- ImportFormater('right_record__external_id', UnicodeFormater(120),),
- ]
diff --git a/archaeological_files/data_importer.py b/archaeological_files/data_importer.py
deleted file mode 100644
index 96b2ee007..000000000
--- a/archaeological_files/data_importer.py
+++ /dev/null
@@ -1,359 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# Copyright (C) 2013-2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# See the file COPYING for details.
-
-import datetime
-import unicodecsv
-
-from django.conf import settings
-
-from ishtar_common.data_importer import *
-from ishtar_common.models import OrganizationType
-
-from archaeological_operations.data_importer import *
-
-from archaeological_files import models
-
-
-class ImportClosingFormater(ImportFormater):
- def post_process(self, obj, context, value, owner=None):
- value = self.formater.format(value)
- if not value:
- return
- open_date = obj.reception_date or obj.creation_date
- if not open_date:
- return
- obj.end_date = open_date + datetime.timedelta(30)
- obj.save()
-
-
-class ImportMayorFormater(ImportFormater):
- def post_process(self, obj, context, value, owner=None):
- value = self.formater.format(value)
- if type(self.field_name) in (list, tuple):
- return # not managed
- associated_obj = get_object_from_path(obj, self.field_name)
- if not value or not obj.main_town or not associated_obj:
- return
- if slugify(value).endswith('le-maire'):
- value += u" de " + obj.main_town.name
- value = value[:300]
- setattr(associated_obj, self.field_name.split('__')[-1], value)
- associated_obj.save()
-
-
-class FilePostProcessing(object):
- def post_processing(self, item, data):
- if not item.end_date: # auto-close
- open_date = item.reception_date or item.creation_date
- if open_date:
- item.end_date = open_date + datetime.timedelta(30)
- item.save()
- return item
-
-
-class FileImporterSraPdL(FilePostProcessing, Importer):
- DESC = u"Exports dossiers SRA PdL : importeur Filemaker dossiers"
- SLUG = "sra-pdl-files"
- LINE_FORMAT = []
- OBJECT_CLS = models.File
- UNICITY_KEYS = ['external_id']
- DEFAULTS = {
- ('responsible_town_planning_service', 'attached_to'): {
- 'organization_type': OrganizationType.objects.get(
- txt_idx="planning_service")},
- ('general_contractor', 'attached_to'): {
- 'organization_type': OrganizationType.objects.get(
- txt_idx="general_contractor")},
- tuple(): {
- 'file_type': models.FileType.objects.get(
- txt_idx='preventive'),
- 'creation_date': datetime.datetime.now,
- },
- ('in_charge',): {'attached_to': None}, # initialized in __init__
- }
-
- def _init_line_format(self):
- tf = TownFormater()
- tf.town_dct_init()
- self.line_format = [
- None, # A, 1
- ImportFormater(
- ['general_contractor__attached_to__address', # B, 2
- 'general_contractor__attached_to__postal_code',
- 'general_contractor__attached_to__town'],
- [UnicodeFormater(500, clean=True),
- UnicodeFormater(5, re_filter=RE_CD_POSTAL_FILTER),
- UnicodeFormater(70, clean=True), ],
- regexp=RE_ADD_CD_POSTAL_TOWN,
- regexp_formater_args=[[0], [1], [2]], required=False,
- comment=u"Aménageur - adresse"),
- ImportMayorFormater(
- # C, 3 TODO - extraire nom_prenom_titre
- 'general_contractor__raw_name',
- UnicodeFormater(200),
- comment=u"Aménageur - nom brut",
- post_processing=True,
- required=False),
- None, # D, 4
- ImportFormater(
- "general_contractor__title", # E, 5
- TypeFormater(models.TitleType),
- required=False,
- comment=u"Aménageur - titre"),
- None, # F, 6
- None, # G, 7
- None, # H, 8
- ImportFormater("parcels__year", # I, 9
- YearNoFuturFormater(),
- required=False),
- # J, 10
- ImportParcelFormater('', required=False, post_processing=True),
- None, # K, 11
- ImportFormater([['main_town', 'parcels__town']], # L, 12
- tf,
- required=False,
- comment=u"Commune (si non définie avant)"),
- ImportFormater([['main_town', 'parcels__town']], # M, 13
- tf,
- required=False,
- comment=u"Commune (si non définie avant)"),
- ImportFormater('saisine_type', # N, 14
- TypeFormater(models.SaisineType),
- required=False,
- comment=u"Type de saisine"),
- None, # O, 15
- ImportFormater('name', # P, 16
- UnicodeFormater(),
- comment=u"Nom du dossier",
- required=False),
- None, # Q, 17
- ImportFormater(
- [
- 'responsible_town_planning_service__raw_name',
- # R, 18 service instructeur
- 'responsible_town_planning_service__attached_to__address',
- 'responsible_town_planning_service__'
- 'attached_to__postal_code',
- 'responsible_town_planning_service__attached_to__town'],
- [UnicodeFormater(300, clean=True),
- UnicodeFormater(300, clean=True),
- UnicodeFormater(5, re_filter=RE_CD_POSTAL_FILTER),
- UnicodeFormater(70, clean=True), ],
- regexp=RE_NAME_ADD_CD_POSTAL_TOWN,
- regexp_formater_args=[[0], [1], [2], [3]],
- comment=u"Service instructeur - adresse",
- required=False),
- ImportFormater(
- 'comment', # S, 19
- UnicodeFormater(prefix=u'* Considérants : '),
- comment=u"Commentaire",
- concat=True,
- required=False),
- ImportYearFormater('reception_date', # T, 20
- DateFormater(['%d/%m/%Y', '%d/%m/%Y']),
- comment=u"Date de réception",
- required=False,
- duplicate_fields=[['creation_date', False]]),
- None, # U, 21
- None, # V, 22
- None, # W, 23
- None, # X, 24
- None, # Y, 25
- None, # Z, 26
- None, # AA, 27
- None, # AB, 28
- None, # AC, 29
- None, # AD, 30
- None, # AE, 31
- None, # AF, 32
- None, # AG, 33
- None, # AH, 34
- ImportFormater('creation_date', # AI, 35
- DateFormater(['%d/%m/%Y', '%d/%m/%y']),
- force_value=True,
- comment=u"Date de création",
- required=False,),
- None, # AJ, 36
- ImportFormater('comment', # AK, 37
- UnicodeFormater(prefix=u"* Historique : "),
- comment=u"Commentaire",
- concat=True, required=False),
- ImportFormater('internal_reference', # AL, 38
- UnicodeFormater(60),
- comment=u"Autre référence",
- required=False),
- None, # AM, 39
- None, # AN, 40
- ImportFormater('comment', # AO, 41
- UnicodeFormater(
- prefix=u"* Justificatif de prescription : "),
- comment=u"Justificatif de prescription",
- concat=True, required=False),
- ImportFormater('comment', # AP, 42
- UnicodeFormater(
- prefix=u"* Justificatif d'intervention : "),
- comment=u"Justificatif d'intervention",
- concat=True, required=False),
- None, # AQ, 43
- None, # AR, 44
- None, # AS, 45
- None, # AT, 46
- ImportFormater('comment', # AU, 47
- UnicodeFormater(
- prefix=u"* Méthodologie de l'opération : "),
- comment=u"Méthodologie de l'opération",
- concat=True, required=False),
- None, # AV, 48
- ImportFormater('permit_reference', # AW, 49
- UnicodeFormater(300, clean=True),
- regexp=RE_PERMIT_REFERENCE,
- comment=u"Réf. du permis de construire",
- required=False),
- ImportFormater('comment', # AX, 50
- UnicodeFormater(
- prefix=u"* Référence de dossier aménageur : "),
- comment=u"Référence de dossier aménageur",
- concat=True, required=False),
- None, # AY, 51
- None, # AZ, 52
- ImportFormater('comment', # BA, 53
- UnicodeFormater(
- prefix=u"* Numéro d'arrêté préfectoral : "),
- comment=u"Numéro d'arrêté préfectoral",
- concat=True, required=False),
- ImportFormater('comment', # BB, 54
- UnicodeFormater(
- prefix=u"* Numéro d'arrêté SRA : "),
- comment=u"Numéro d'arrêté SRA",
- concat=True, required=False),
- ImportFormater('comment', # BC, 55
- UnicodeFormater(
- prefix=u"* Numéro d'arrêté de "
- u"post-diagnostic : "),
- comment=u"Numéro d'arrêté de post-diagnostic",
- concat=True, required=False),
- None, # BD, 56
- ImportFormater([['main_town', 'parcels__town']], # BE, 57
- TownINSEEFormater(),
- required=False,
- comment=u"Commune (si non définie avant)"),
- ImportFormater('comment', # BF, 58
- UnicodeFormater(2000),
- comment=u"Commentaire",
- concat=True, required=False),
- None, # BG, 59
- None, # BH, 60
- None, # BI, 61
- None, # BJ, 62
- None, # BK, 63
- None, # BL, 64
- None, # BM, 65
- None, # BN, 66
- None, # BO, 67
- None, # BP, 68
- None, # BQ, 69
- None, # BR, 70
- None, # BS, 71
- ImportFormater( # BT, 72 nom service instructeur
- ['responsible_town_planning_service__attached_to__name', ],
- [UnicodeFormater(300, clean=True), ],
- regexp=RE_ORGA,
- comment=u"Service instructeur - nom",
- required=False),
- None, # BU, 73
- None, # BV, 74
- ImportFormater(
- 'in_charge__raw_name', # BW, 75 responsable
- UnicodeFormater(200),
- comment=u"Responsable - nom brut",
- required=False),
- ImportFormater('total_surface', # BX, 76 surface totale
- SurfaceFormater(),
- comment=u"Surface totale",
- required=False),
- ImportFormater('total_developed_surface',
- # BY, 77 surface totale aménagée
- SurfaceFormater(),
- comment=u"Surface totale aménagée",
- required=False),
- None, # BZ, 78
- None, # CA, 79
- None, # CB, 80
- None, # CC, 81
- None, # CD, 82
- None, # CE, 83
- None, # CF, 84
- ImportFormater('permit_type',
- TypeFormater(models.PermitType),
- required=False,
- comment=u"Type de permis"), # CG, 85
- None, # CH, 85
- ImportFormater('year', # CI, 86
- IntegerFormater(),
- comment=u"Année du dossier",
- required=True),
- ImportFormater('numeric_reference', # CJ, 87
- IntegerFormater(),
- comment=u"Identifiant numérique",
- required=True),
- ImportFormater('external_id', # CK, 88
- UnicodeFormater(),
- comment=u"Identifiant externe",
- required=True),
- ]
-
- def __init__(self, *args, **kwargs):
- super(FileImporterSraPdL, self).__init__(*args, **kwargs)
- self.DEFAULTS[('in_charge',)]['attached_to'], created = \
- models.Organization.objects.get_or_create(
- name='SRA Pays de la Loire',
- defaults={
- 'organization_type':
- OrganizationType.objects.get(txt_idx='sra')})
- self._init_line_format()
- if tuple() not in self._defaults:
- self._defaults[tuple()] = {}
- self._defaults[tuple()]['history_modifier'] = self.history_modifier
- self._associate_db_target_to_formaters()
-
-
-def test(filename):
- importer = FileImporterSraPdL(skip_lines=3, output='cli')
- with open(filename) as csv_file:
- encodings = [settings.ENCODING, settings.ALT_ENCODING, 'utf-8']
- for encoding in encodings:
- try:
- importer.importation(
- [line for line in
- unicodecsv.reader(csv_file, encoding='utf-8')])
- # importer.importation(unicode_csv_reader(
- # [line.decode(encoding)
- # for line in csv_file.readlines()])
- print importer.get_csv_errors()
- break
- except ImporterError, e:
- print(unicode(e))
- if e.type == ImporterError.HEADER \
- and encoding != encodings[-1]:
- csv_file.seek(0)
- continue
- except UnicodeDecodeError:
- if encoding != encodings[-1]:
- csv_file.seek(0)
- continue
diff --git a/archaeological_finds/data_importer.py b/archaeological_finds/data_importer.py
deleted file mode 100644
index e0c18d1bf..000000000
--- a/archaeological_finds/data_importer.py
+++ /dev/null
@@ -1,158 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# Copyright (C) 2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# See the file COPYING for details.
-
-from ishtar_common.data_importer import *
-
-from archaeological_finds import models
-
-
-class FindsImporterBibracte(Importer):
- DESC = u"Exports Bibracte : importeur pour l'onglet mobilier"
- OBJECT_CLS = models.BaseFind
- DEFAULTS = {}
- LINE_FORMAT = [
- # OA
- ImportFormater('context_record__operation__operation_code',
- IntegerFormater(),),
- # external_id
- ImportFormater(
- 'external_id', UnicodeFormater(120, notnull=True),
- duplicate_fields=[('find__external_id', False),
- ('label', False),
- ('find__label', False)]),
- # isolé ou non (si non isolé = lot)
- None, # à corriger
- # ImportFormater(
- # 'is_isolated',
- # StrToBoolean(choices={'lot': False, 'objet': True}),
- # required=False),
- # ???
- None,
- # A voir
- None,
- # cf type
- None,
- # Type = sous classe de matériaux = Liste hiérarchique
- ImportFormater('find__material_types',
- TypeFormater(models.MaterialType), required=False),
- # ???
- None,
- # lien avec contenant
- None,
- # = nombre
- ImportFormater('find__find_number', IntegerFormater(), required=False),
- # poids
- ImportFormater('find__weight', FloatFormater(), required=False),
- # unité (g par défault)
- ImportFormater('find__weight_unit',
- StrChoiceFormater(models.WEIGHT_UNIT), required=False),
- # lien UE
- ImportFormater('context_record__external_id', UnicodeFormater(120),),
- # date decouverte
- ImportFormater('discovery_date', DateFormater(['%Y/%m/%d']),
- required=False,),
- # lien parcelle (unique)
- None,
- # etat conservation
- ImportFormater('find__conservatory_state',
- TypeFormater(models.ConservatoryState), required=False),
- # preservation_to_consider
- ImportFormater('find__preservation_to_considers',
- TypeFormater(models.TreatmentType), required=False),
- # comment
- ImportFormater('comment', UnicodeFormater(1000), required=False),
- # lien vers plusieurs chrono (voir gestion actuelle chrono)
- None,
- # ImportFormater('find__datings__period', TypeFormater(Period,
- # many_split="&"), required=False),
- # topographic_localisation
- ImportFormater('topographic_localisation', UnicodeFormater(120),
- required=False),
- # special_interest
- ImportFormater('special_interest', UnicodeFormater(120),
- required=False),
- # description
- ImportFormater('description', UnicodeFormater(1000), required=False),
- # remontage
- None
- ]
-
-
-class FindAltImporterBibracte(Importer):
- DESC = u"Exports Bibracte : importeur pour l'onglet prélèvement"
- OBJECT_CLS = models.BaseFind
- DEFAULTS = {}
- LINE_FORMAT = [
- # code OA
- ImportFormater('context_record__operation__operation_code',
- IntegerFormater(),),
- # identifiant prelevement
- ImportFormater('external_id', UnicodeFormater(120, notnull=True),
- duplicate_fields=[('find__external_id', False)]),
- # nature
- ImportFormater('find__material_types',
- TypeFormater(models.MaterialType), required=False),
- # identifiant UE
- ImportFormater('context_record__external_id', UnicodeFormater(120),),
- # identifiant materiel
- None,
- # commentaire
- ImportFormater('comment', UnicodeFormater(1000), required=False),
- ]
-
-
-class ImportTreatmentFormater(ImportFormater):
- def post_process(self, obj, context, value, owner=None):
- if obj.upstream_treatment.count():
- return
- ope_code = context['upstream_treatment'][
- 'base_finds']['context_record']['operation']['operation_code']
- ope_code = int(ope_code)
- downstream = models.Find.objects.filter(
- external_id=value,
- base_finds__context_record__operation__operation_code=ope_code)
- if not downstream.count():
- return
- downstream = downstream.all()[0]
- downstream.upstream_treatment = obj
- downstream.save()
- upstream = downstream.duplicate(owner)
- upstream.downstream_treatment = obj
- upstream.save()
- return
-
-
-class TreatmentImporterBibracte(Importer):
- DESC = u"Exports Bibracte : importeur pour l'onglet traitement"
- OBJECT_CLS = models.Treatment
- DEFAULTS = {}
- LINE_FORMAT = [
- # code OA
- ImportFormater(
- 'upstream_treatment__base_finds__context_record__operation__'
- 'operation_code',
- UnicodeFormater(120, notnull=True)),
- # identifiant
- ImportTreatmentFormater(
- 'external_id',
- UnicodeFormater(120, notnull=True), post_processing=True),
- None,
- # traitement
- ImportFormater('treatment_type', TypeFormater(models.TreatmentType),),
- ]
diff --git a/archaeological_operations/data_importer.py b/archaeological_operations/data_importer.py
deleted file mode 100644
index b4cd2f0d0..000000000
--- a/archaeological_operations/data_importer.py
+++ /dev/null
@@ -1,280 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-# Copyright (C) 2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# See the file COPYING for details.
-
-import re
-
-from django.db import IntegrityError
-from django.template.defaultfilters import slugify
-
-from ishtar_common.data_importer import *
-from ishtar_common.models import Town, OrganizationType, SourceType, \
- SupportType, Format, AuthorType
-
-from archaeological_operations import models
-from archaeological_operations.forms import OPERATOR
-from archaeological_operations.utils import parse_parcels
-
-RE_PERMIT_REFERENCE = re.compile('[A-Za-z]*(.*)')
-
-
-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:
- models.Parcel.objects.get_or_create(**parcel_dct)
- except IntegrityError:
- try:
- p = unicode(parcel_dct)
- except UnicodeDecodeError:
- try:
- p = str(parcel_dct).decode('utf-8')
- except UnicodeDecodeError:
- p = u""
- raise ImporterError(u"Erreur d'import parcelle, contexte : %s"
- % p)
-
-
-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(numero_insee=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("([^,\n]*)")
-
-
-class OperationImporterBibracte(Importer):
- OBJECT_CLS = models.Operation
- DESC = u"Exports Bibracte : importeur pour l'onglet opération"
- DEFAULTS = {
- ('operator',): {
- 'organization_type': OPERATOR
- },
- }
- LINE_FORMAT = [
- # CODE OPE
- ImportFormater('operation_code', IntegerFormater(),),
- # REGION
- None,
- # TYPE operation
- ImportFormater('operation_type', TypeFormater(models.OperationType),),
- # NOM
- ImportFormater('common_name', UnicodeFormater(120),),
- # OPERATEUR
- ImportFormater('operator__name', UnicodeFormater(120),),
- # resp. lien IMPORT avec personne
- ImportFormater('in_charge__raw_name', UnicodeFormater(300),),
- # début
- ImportFormater('start_date', DateFormater(['%Y/%m/%d']),),
- # fin
- ImportFormater('excavation_end_date', DateFormater(['%Y/%m/%d']),),
- # Chronos
- ImportFormater('periods', TypeFormater(models.Period, many_split="&"),
- required=False),
- ]
-
-RE_PARCEL_SECT_NUM = re.compile("([A-Za-z]*)([0-9]*)")
-RE_NUM_INSEE = re.compile("([0-9]*)")
-
-
-class ParcelImporterBibracte(Importer):
- OBJECT_CLS = models.Parcel
- DESC = u"Exports Bibracte : importeur pour l'onglet parcelles"
- DEFAULTS = {
- ('operator',): {
- 'organization_type': OrganizationType.objects.get(
- txt_idx="operator")},
- }
- LINE_FORMAT = [
- # code OA
- ImportFormater('operation__operation_code', IntegerFormater(),),
- # identifiant parcelle
- ImportFormater(
- ['section', 'parcel_number'],
- [UnicodeFormater(4), UnicodeFormater(6), ],
- regexp=RE_PARCEL_SECT_NUM,
- regexp_formater_args=[[0], [1]], required=False,
- duplicate_fields=[('external_id', False)],),
- # numero parcelle
- ImportFormater('parcel_number', UnicodeFormater(6),
- required=False,),
- # section cadastre
- ImportFormater('section', UnicodeFormater(4),
- required=False,),
- # annee cadastre
- ImportFormater('year', YearFormater(), required=False,),
- # nom commune
- None,
- # numero INSEE commune
- ImportFormater('town__numero_insee', UnicodeFormater(6),
- regexp=RE_NUM_INSEE, required=False,),
- # nom departement
- None,
- # lieu dit adresse
- ImportFormater('address', UnicodeFormater(500),
- required=False,),
- ]
-
-MAIN_AUTHOR, created = AuthorType.objects.get_or_create(txt_idx='main_author')
-
-
-class DocImporterBibracte(Importer):
- OBJECT_CLS = models.OperationSource
- DEFAULTS = {
- ('authors',): {'author_type': MAIN_AUTHOR},
- }
- DESC = u"Exports Bibracte : importeur pour l'onglet documentation"
- LINE_FORMAT = [
- # code OA
- ImportFormater('operation__operation_code', IntegerFormater(),),
- # identifiant documentation
- ImportFormater('external_id', UnicodeFormater(12),),
- # type
- ImportFormater('source_type', TypeFormater(SourceType),
- required=False),
- # nature support
- ImportFormater('support_type', TypeFormater(SupportType),
- required=False),
- # nombre element
- ImportFormater('item_number', IntegerFormater(), required=False),
- # auteur
- ImportFormater('authors__person__raw_name', UnicodeFormater(300),
- required=False),
- # annee
- ImportFormater('creation_date', DateFormater(['%Y']),),
- # format
- ImportFormater('format_type', TypeFormater(Format), required=False),
- # description legende
- ImportFormater('description', UnicodeFormater(1000), required=False),
- # type contenant
- None,
- # numero contenant
- None,
- # commentaire
- ImportFormater('comment', UnicodeFormater(1000), required=False),
- # echelle
- ImportFormater('scale', UnicodeFormater(30), required=False),
- # type sous contenant
- None,
- # numero sous contenant
- None,
- # informations complementaires
- ImportFormater('additional_information', UnicodeFormater(1000),
- required=False),
- ]