diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2015-01-28 01:41:20 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2015-01-28 01:41:20 +0100 |
commit | c42dd6617d4da7767097190cc243cf45aa021259 (patch) | |
tree | 5172e69dc2459ae1779533c440298ab52eb1c83e /ishtar_common/data_importer.py | |
parent | c730975bd9dab4deaf79880075fb919ed9f96427 (diff) | |
download | Ishtar-c42dd6617d4da7767097190cc243cf45aa021259.tar.bz2 Ishtar-c42dd6617d4da7767097190cc243cf45aa021259.zip |
Fix Bibracte import - add finds imports
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r-- | ishtar_common/data_importer.py | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index d77f28e18..cde464e04 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -34,7 +34,7 @@ RE_FILTER_CEDEX = re.compile("(.*) *(?: *CEDEX|cedex|Cedex|Cédex|cédex *\d*)") class ImportFormater(object): def __init__(self, field_name, formater=None, required=True, through=None, through_key=None, through_dict=None, through_unicity_keys=None, - duplicate_field=None, regexp=None, regexp_formater_args=[], + duplicate_fields=[], regexp=None, regexp_formater_args=[], reverse_for_test=None, force_value=None, post_processing=False, concat=False, comment=""): self.field_name = field_name @@ -44,7 +44,7 @@ class ImportFormater(object): self.through_key = through_key self.through_dict = through_dict self.through_unicity_keys = through_unicity_keys - self.duplicate_field = duplicate_field + self.duplicate_fields = duplicate_fields self.regexp = regexp self.regexp_formater_args = regexp_formater_args self.reverse_for_test = reverse_for_test @@ -95,10 +95,11 @@ class Formater(object): return class UnicodeFormater(Formater): - def __init__(self, max_length, clean=False, re_filter=None): + def __init__(self, max_length, clean=False, re_filter=None, notnull=False): self.max_length = max_length self.clean = clean self.re_filter = re_filter + self.notnull = notnull def format(self, value): try: @@ -119,6 +120,8 @@ class UnicodeFormater(Formater): raise ValueError(_(u"\"%(value)s\" is too long. "\ u"The max length is %(length)d characters." ) % {'value':value, 'length':self.max_length}) + if self.notnull and not value: + return return value class BooleanFormater(Formater): @@ -306,6 +309,8 @@ class DateFormater(Formater): def format(self, value): value = value.strip() + if not value: + return try: return datetime.datetime.strptime(value, self.date_format).date() except: @@ -698,7 +703,7 @@ class Importer(object): c_values.append(value) - if value == None and formater.required: + if value == None and formater.required: self.c_errors = True self.errors.append((idx_line+1, idx_col+1, self.ERRORS['value_required'])) @@ -708,8 +713,7 @@ class Importer(object): if type(field_name) in (list, tuple): field_name = field_name[idx_v] field_names = [field_name] - if formater.duplicate_field: - duplicate_field = formater.duplicate_field + for duplicate_field in formater.duplicate_fields: if type(duplicate_field) in (list, tuple): duplicate_field = duplicate_field[idx_v] field_names += [duplicate_field] @@ -745,7 +749,15 @@ class Importer(object): data[attribute], created = self.get_object( field_object.rel.to, data[attribute], c_path) if m2m: - m2ms.append((attribute, data.pop(attribute))) + val = data.pop(attribute) + model = field_object.model + if val.__class__ != model and type(val) == dict: + if 'history_modifier' in \ + model._meta.get_all_field_names(): + val['history_modifier'] = self.history_modifier + val, created = field_object.model.objects.get_or_create( + **val) + m2ms.append((attribute, val)) path = tuple(path) if path in self._defaults: for k in self._defaults[path]: |