diff options
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 |
commit | f468cb6bc7bde671b78c076daaf73a92a8f33a69 (patch) | |
tree | d3911ac791217dc5a0ff556afce9743067d1cd1e /ishtar_common/data_importer.py | |
parent | fea70ced145dcfd326c8846bffa0004009c8daa4 (diff) | |
download | Ishtar-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.py | 36 |
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 |