summaryrefslogtreecommitdiff
path: root/ishtar_common/data_importer.py
diff options
context:
space:
mode:
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
commitc42dd6617d4da7767097190cc243cf45aa021259 (patch)
tree5172e69dc2459ae1779533c440298ab52eb1c83e /ishtar_common/data_importer.py
parentc730975bd9dab4deaf79880075fb919ed9f96427 (diff)
downloadIshtar-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.py26
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]: