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 | 
