summaryrefslogtreecommitdiff
path: root/ishtar_common/data_importer.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-01-26 00:50:58 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2015-01-26 00:50:58 +0100
commitfea70ced145dcfd326c8846bffa0004009c8daa4 (patch)
treefd3ef2bf34cff849c77c23ced9cc1ab774a9b98d /ishtar_common/data_importer.py
parentd0c12c279f1283a37729f33bf1d453d725623167 (diff)
downloadIshtar-fea70ced145dcfd326c8846bffa0004009c8daa4.tar.bz2
Ishtar-fea70ced145dcfd326c8846bffa0004009c8daa4.zip
Add a generic relation model to list general types keys. Reorganize imports.
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r--ishtar_common/data_importer.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 427b9f974..3009ba17d 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -29,6 +29,8 @@ from ishtar_common.unicode_csv import UnicodeWriter
NEW_LINE_BREAK = '#####@@@#####'
+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,
@@ -236,6 +238,17 @@ class StrChoiceFormater(Formater):
if value in self.equiv_dict:
return self.equiv_dict[value]
+class TypeFormater(StrChoiceFormater):
+ def __init__(self, model, cli=False):
+ self.equiv_dict, self.choices = {}, []
+ for item in model.objects.all():
+ self.choices.append((item.pk, unicode(item)))
+ for key in item.get_keys():
+ self.equiv_dict[key] = item
+
+ def prepare(self, value):
+ return slugify(unicode(value).strip())
+
class DateFormater(Formater):
def __init__(self, date_format="%d/%m/%Y"):
self.date_format = date_format
@@ -248,6 +261,54 @@ class DateFormater(Formater):
raise ValueError(_(u"\"%(value)s\" is not a valid date") % {
'value':value})
+class StrToBoolean(Formater):
+ def __init__(self, choices={}, cli=False, strict=False):
+ self.dct = copy.copy(choices)
+ self.cli = cli
+ self.strict= strict
+ self.missings = set()
+
+ def prepare(self, value):
+ value = unicode(value).strip()
+ if not self.strict:
+ value = slugify(value)
+ return value
+
+ def check(self, values, output=None):
+ if not output or output == 'silent':
+ return
+ msgstr = unicode(_(u"Choice for \"%s\" is not available. "\
+ u"Which one is relevant?\n"))
+ msgstr += u"1. True\n"
+ msgstr += u"2. False\n"
+ msgstr += u"3. Empty\n"
+ for value in values:
+ value = self.prepare(value)
+ if value in self.dct:
+ continue
+ if not self.cli:
+ self.missings.add(value)
+ continue
+ res = None
+ while res not in range(1, 4):
+ sys.stdout.write(msgstr % value)
+ res = raw_input(">>> ")
+ try:
+ res = int(res)
+ except ValueError:
+ pass
+ if res == 1:
+ self.dct[value] = True
+ elif res == 2:
+ self.dct[value] = False
+ else:
+ self.dct[value] = None
+
+ def format(self, value):
+ value = self.prepare(value)
+ if value in self.dct:
+ return self.dct[value]
+
logger = logging.getLogger(__name__)
class Importer(object):