summaryrefslogtreecommitdiff
path: root/ishtar_common/data_importer.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-01-26 11:52:36 +0100
committerÉtienne Loks <etienne.loks@proxience.com>2015-01-26 11:52:36 +0100
commitf468cb6bc7bde671b78c076daaf73a92a8f33a69 (patch)
treed3911ac791217dc5a0ff556afce9743067d1cd1e /ishtar_common/data_importer.py
parentfea70ced145dcfd326c8846bffa0004009c8daa4 (diff)
downloadIshtar-f468cb6bc7bde671b78c076daaf73a92a8f33a69.tar.bz2
Ishtar-f468cb6bc7bde671b78c076daaf73a92a8f33a69.zip
GeneralType keys: add importer field for specific key association - better management of keys
* new importer field definition and creation * manage manual association of keys * manage overload of keys * manage automatic deletion of keys * change ImportFormater for new management of keys
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r--ishtar_common/data_importer.py36
1 files changed, 32 insertions, 4 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py
index 3009ba17d..6848c3130 100644
--- a/ishtar_common/data_importer.py
+++ b/ishtar_common/data_importer.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2013-2014 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2013-2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -185,6 +185,7 @@ class StrChoiceFormater(Formater):
self.equiv_dict = copy.deepcopy(equiv_dict)
self.cli = cli
self.model = model
+ self.create = False
self.missings = set()
for key, value in self.choices:
value = unicode(value)
@@ -206,8 +207,14 @@ class StrChoiceFormater(Formater):
u"Which one is relevant?\n"))
for idx, choice in enumerate(self.choices):
msgstr += u"%d. %s\n" % (idx+1, choice[1])
- msgstr += unicode(_(u"%d. None of the above")) % (idx+2) + u"\n"
+ idx += 2
+ if self.create:
+ msgstr += unicode(_(u"%d. None of the above - create new")) % idx \
+ + u"\n"
+ idx += 1
+ msgstr += unicode(_(u"%d. None of the above - skip")) % idx + u"\n"
for value in values:
+ base_value = copy(value)
value = self.prepare(value)
if value in self.equiv_dict:
continue
@@ -215,7 +222,7 @@ class StrChoiceFormater(Formater):
self.missings.add(value)
continue
res = None
- while res not in range(1, len(self.choices)+2):
+ while res not in range(1, idx+1):
sys.stdout.write(msgstr % value)
res = raw_input(">>> ")
try:
@@ -228,9 +235,18 @@ class StrChoiceFormater(Formater):
if self.model and v:
v = self.model.objects.get(pk=v)
self.equiv_dict[value] = v
+ self.add_key(v, value)
+ elif self.create and res == len(self.choices):
+ self.equiv_dict[value] = self.new(base_value)
else:
self.equiv_dict[value] = None
+ def new(self, value):
+ return
+
+ def add_key(self, obj, value):
+ return
+
def format(self, value):
value = self.prepare(value)
if not self.strict:
@@ -239,7 +255,9 @@ class StrChoiceFormater(Formater):
return self.equiv_dict[value]
class TypeFormater(StrChoiceFormater):
- def __init__(self, model, cli=False):
+ def __init__(self, model, cli=False, defaults={}):
+ self.model = model
+ self.defaults = defaults
self.equiv_dict, self.choices = {}, []
for item in model.objects.all():
self.choices.append((item.pk, unicode(item)))
@@ -249,6 +267,16 @@ class TypeFormater(StrChoiceFormater):
def prepare(self, value):
return slugify(unicode(value).strip())
+ def add_key(self, obj, value):
+ obj.add_key(slugify(value), force=True)
+
+ def new(self, value):
+ values = copy(self.defaults)
+ values['label'] = value
+ values['txt_idx'] = slugify(value)
+ self.model.objects.create(**values)
+ return
+
class DateFormater(Formater):
def __init__(self, date_format="%d/%m/%Y"):
self.date_format = date_format