summaryrefslogtreecommitdiff
path: root/ishtar_common/data_importer.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-02-23 15:32:40 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2015-05-06 16:04:02 +0200
commit5ddcf476ebc029084ec5d972e2a5b2eec713b9e7 (patch)
tree14c34492ed0534f0e77169700c3c336bc60f27d7 /ishtar_common/data_importer.py
parente2007b7f320f2ce353cbd9005a0a3762e7f7e8f2 (diff)
downloadIshtar-5ddcf476ebc029084ec5d972e2a5b2eec713b9e7.tar.bz2
Ishtar-5ddcf476ebc029084ec5d972e2a5b2eec713b9e7.zip
Data importer: multiple format for DateFormater - pre treatment for cutting too long strings
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r--ishtar_common/data_importer.py24
1 files changed, 18 insertions, 6 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index c6019652c..3a321c7fd 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -351,18 +351,22 @@ class TypeFormater(StrChoiceFormater):
return self.model.objects.create(**values)
class DateFormater(Formater):
- def __init__(self, date_format="%d/%m/%Y", db_target=None):
- self.date_format = date_format
+ def __init__(self, date_formats=["%d/%m/%Y"], db_target=None):
+ self.date_formats = date_formats
+ if type(date_formats) not in (list, tuple):
+ self.date_formats = [self.date_formats]
self.db_target = db_target
def format(self, value):
value = value.strip()
if not value:
return
- try:
- return datetime.datetime.strptime(value, self.date_format).date()
- except:
- raise ValueError(_(u"\"%(value)s\" is not a valid date") % {
+ for date_format in self.date_formats:
+ try:
+ return datetime.datetime.strptime(value, date_format).date()
+ except:
+ continue
+ raise ValueError(_(u"\"%(value)s\" is not a valid date") % {
'value':value})
class StrToBoolean(Formater, ChoiceChecker):
@@ -453,6 +457,7 @@ class Importer(object):
UNICITY_KEYS = []
EXTRA_DEFAULTS = {}
DEFAULTS = {}
+ STR_CUT = {}
ERRORS = {
'header_check':_(u"The given file is not correct. Check the file "
u"format. If you use a CSV file: check that column separator "
@@ -866,12 +871,19 @@ class Importer(object):
if self.import_instance and hasattr(val, 'imports'):
val.imports.add(self.import_instance)
m2ms.append((attribute, val))
+ # default values
path = tuple(path)
if path in self._defaults:
for k in self._defaults[path]:
if k not in data or not data[k]:
data[k] = self._defaults[path][k]
+ # pre treatment
+ if path in self.STR_CUT:
+ for k in self.STR_CUT[path]:
+ if k in data and data[k]:
+ data[k] = unicode(data[k])[:self.STR_CUT[k]]
+
# filter default values
create_dict = copy.deepcopy(data)
for k in create_dict.keys():