diff options
| -rw-r--r-- | archaeological_operations/data_importer.py | 19 | ||||
| -rw-r--r-- | archaeological_operations/models.py | 4 | ||||
| -rw-r--r-- | ishtar_common/data_importer.py | 72 | 
3 files changed, 64 insertions, 31 deletions
| diff --git a/archaeological_operations/data_importer.py b/archaeological_operations/data_importer.py index 4402c8b17..e02b53df0 100644 --- a/archaeological_operations/data_importer.py +++ b/archaeological_operations/data_importer.py @@ -148,22 +148,31 @@ RE_ORGA = re.compile("([^,]*)")  class OperationImporterBibracte(Importer): +    DEFAULTS = { +                ('in_charge',):{ +                    'organization_type':OrganizationType.objects.get( +                                             txt_idx="operator")}, +               }      LINE_FORMAT = [          # CODE OPE -        ImportFormater('operation_code', -                IntegerFormater(),), +        ImportFormater('operation_code', IntegerFormater(),),          # REGION          None,          # TYPE operation -        ImportFormater('operation_type', -                TypeFormater(models.OperationType),), - +        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=True), +                       many=True),      ]      OBJECT_CLS = models.Operation diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py index 00c2dd523..21ae4e15a 100644 --- a/archaeological_operations/models.py +++ b/archaeological_operations/models.py @@ -157,12 +157,12 @@ class Operation(BaseHistorizedItem, OwnPerms, ValueGetter, ShortMenuItem,                    'start_date', 'excavation_end_date']      if FILES_AVAILABLE:          TABLE_COLS.insert(4, 'associated_file_short_label') -    start_date = models.DateField(_(u"Start date"), null=True, blank=True)      creation_date = models.DateField(_(u"Creation date"),                                       default=datetime.date.today) +    end_date = models.DateField(_(u"Closing date"), null=True, blank=True) +    start_date = models.DateField(_(u"Start date"), null=True, blank=True)      excavation_end_date = models.DateField(_(u"Excavation end date"), null=True,                                             blank=True) -    end_date = models.DateField(_(u"Closing date"), null=True, blank=True)      report_delivery_date = models.DateField(_(u"Report delivery date"),                                              null=True, blank=True)      scientist = models.ForeignKey(Person, blank=True, null=True, diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 6848c3130..0ce61ba01 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -179,7 +179,7 @@ class IntegerFormater(Formater):  class StrChoiceFormater(Formater):      def __init__(self, choices, strict=False, equiv_dict={}, model=None, -                 cli=False): +                 cli=False, many_split=''):          self.choices = list(choices)          self.strict = strict          self.equiv_dict = copy.deepcopy(equiv_dict) @@ -187,6 +187,7 @@ class StrChoiceFormater(Formater):          self.model = model          self.create = False          self.missings = set() +        self.many_split = many_split          for key, value in self.choices:              value = unicode(value)              if not self.strict: @@ -213,6 +214,12 @@ class StrChoiceFormater(Formater):                      + u"\n"              idx += 1          msgstr += unicode(_(u"%d. None of the above - skip")) % idx + u"\n" +        if self.many_split: +            new_values = [] +            r = re.compile(func.many_split) +            for value in values: +                new_values += r.split(value) +            values = new_values          for value in values:              base_value = copy(value)              value = self.prepare(value) @@ -255,9 +262,10 @@ class StrChoiceFormater(Formater):              return self.equiv_dict[value]  class TypeFormater(StrChoiceFormater): -    def __init__(self, model, cli=False, defaults={}): +    def __init__(self, model, cli=False, defaults={}, many_split=False):          self.model = model          self.defaults = defaults +        self.many_split = many_split          self.equiv_dict, self.choices = {}, []          for item in model.objects.all():              self.choices.append((item.pk, unicode(item))) @@ -634,32 +642,44 @@ class Importer(object):                  func = func[idx_v]              if not callable(func) and type(func) in (unicode, str):                  func = getattr(self, func) -            value = None -            try: -                if formater.regexp_formater_args: -                    args = [] -                    for idx in formater.regexp_formater_args[idx_v]: -                        args.append(val_group[idx]) -                    value = func.format(*args) -                else: -                    value = func.format(v) -            except ValueError, e: -                if formater.required: -                    self.c_errors = True -                self.errors.append((idx_line+1, idx_col+1, e.message)) -                c_values.append(None) -                return +            values = [v] +            many_values = getattr(func, 'many_split', None) +            if many_values: +                values = re.compile(func.many_split).split(values) + +            formated_values = [] +            for idx, v in enumerate(values): +                value = None +                try: +                    if formater.regexp_formater_args: +                        args = [] +                        for idx in formater.regexp_formater_args[idx_v]: +                            args.append(val_group[idx]) +                        value = func.format(*args) +                    else: +                        value = func.format(v) +                except ValueError, e: +                    if formater.required: +                        self.c_errors = True +                    self.errors.append((idx_line+1, idx_col+1, e.message)) +                    c_values.append(None) +                    return +                formated_values.append(value)              if self.message:                  self.messages.append(self.message) + +            value = formated_values +            if not many_values: +                value = formated_values[0] +              c_values.append(value) -            if value == None: -                if formater.required: -                    self.c_errors = True -                    self.errors.append((idx_line+1, idx_col+1, -                                       self.ERRORS['value_required'])) +            if value == None and  formater.required: +                self.c_errors = True +                self.errors.append((idx_line+1, idx_col+1, +                                   self.ERRORS['value_required']))                  return              field_name = formater.field_name @@ -677,7 +697,7 @@ class Importer(object):              else:                  for field_name in field_names:                      self._field_name_to_data_dict(field_name, -                                              value, data, formater.force_value) +                              value, data, formater.force_value)          if formater.reverse_for_test:              c_row.append(formater.reverse_for_test(**c_values))          else: @@ -921,7 +941,11 @@ class Importer(object):                      created = False                      obj = cls.objects.filter(**create_dict).all()[0]                  for attr, value in m2ms: -                    getattr(obj, attr).add(value) +                    values = [value] +                    if type(value) in (list, tuple): +                        values = value +                    for v in values: +                        getattr(obj, attr).add(v)              except IntegrityError:                  raise ImporterError("Erreur d'import %s, contexte : %s" \                                  % (unicode(cls), unicode(data))) | 
