diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/data_importer.py | 32 | ||||
| -rw-r--r-- | ishtar_common/management/commands/update_specific_importers.py | 23 | ||||
| -rw-r--r-- | ishtar_common/models.py | 3 | 
3 files changed, 47 insertions, 11 deletions
| diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 10573ff06..0a63656ab 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -560,27 +560,35 @@ class Importer(object):          'regex_not_match': _(u"The regexp doesn't match.")      } -    def __create_models(self): +    def _create_models(self):          from ishtar_common import models          q = models.ImporterType.objects.filter(slug=self.SLUG)          if not self.SLUG or q.count():              return          name = self.NAME if self.NAME else self.SLUG + +        model_name = self.OBJECT_CLS.__module__ + '.' + \ +            self.OBJECT_CLS.__name__ +          importer = models.ImporterType.objects.create(              slug=self.SLUG, name=name, description=self.DESC, -            associated_model=self.OBJECT_CLS) +            associated_models=model_name) +          for default in self.DEFAULTS:              values = self.DEFAULTS[default]              imp_default = models.ImporterDefault.objects.create(                  importer_type=importer, -                target=default.join('__')) -            parent_model = imp_default.associated_model +                target='__'.join(default))              for key in values: +                if key in ('history_modifier',): +                    continue                  value = values[key]                  if hasattr(value, 'txt_idx') and value.txt_idx:                      value = value.txt_idx                  elif hasattr(value, 'pk') and value.pk:                      value = value.pk +                if callable(value): +                    value = value()                  models.ImporterDefaultValues.objects.create(                      default_target=imp_default,                      target=key, @@ -594,12 +602,12 @@ class Importer(object):              targets = line.field_name              if type(targets) not in (list, tuple):                  targets = [targets] -            formaters = line.formaters +            formaters = line.formater              if type(formaters) not in (list, tuple):                  formaters = [formaters]              for idx, target in enumerate(targets):                  formater = formaters[idx] -                formater_name = formater.__name__ +                formater_name = formater.__class__.__name__                  if formater_name not in models.IMPORTER_TYPES_DCT:                      formater_name = 'UnknowType'                  options = '' @@ -609,20 +617,22 @@ class Importer(object):                  elif formater_name == 'UnicodeFormater':                      options = unicode(formater.max_length)                  elif formater_name == 'DateFormater': -                    options = self.date_formats[0] +                    options = formater.date_formats[0]                  formater_model, created = \                      models.FormaterType.objects.get_or_create( -                        formater_type=formater_name, options=options, -                        many_split=formater.many_split) +                        formater_type=formater_name, options=options.strip(), +                        many_split=getattr(formater, 'many_split', None) or '')                  regexp_filter = None -                if formater.regexp: +                if getattr(formater, 'regexp', None):                      regexp_filter, created = \                          models.Regexp.objects.get_or_create(                              regexp=formater.regex,                              defaults={'name': "Default name"})                  models.ImportTarget.objects.get_or_create(                      column=column, target=target, formater_type=formater_model, -                    force_new=formater.force_new, regexp_filter=regexp_filter) +                    force_new=getattr(formater, 'force_new', False), +                    regexp_filter=regexp_filter) +        return True      def __init__(self, skip_lines=0, reference_header=None,                   check_col_num=False, test=False, history_modifier=None, diff --git a/ishtar_common/management/commands/update_specific_importers.py b/ishtar_common/management/commands/update_specific_importers.py new file mode 100644 index 000000000..46669a236 --- /dev/null +++ b/ishtar_common/management/commands/update_specific_importers.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from django.core.management.base import BaseCommand +from django.conf import settings + +IMPORTERS = [] + + +if 'archaeological_files' in settings.INSTALLED_APPS: +    from archaeological_files.data_importer import FileImporterSraPdL +    IMPORTERS.append(FileImporterSraPdL) + + +class Command(BaseCommand): +    help = "Update each specific importer" + +    def handle(self, *args, **options): +        for importer in IMPORTERS: +            response = importer()._create_models() +            if response: +                self.stdout.write("%s configured\n" % importer.__name__) +                self.stdout.flush() diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 51cf1096f..09ce9aba5 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1457,6 +1457,7 @@ IMPORTER_TYPES = (      ('YearFormater', _(u"Year")),      ('StrToBoolean', _(u"String to boolean")),      ('FileFormater', pgettext_lazy("filesystem", u"File")), +    ('UnknowType', _(u"Unknow type"))  )  IMPORTER_TYPES_DCT = { @@ -1531,6 +1532,8 @@ class FormaterType(models.Model):              return DateFormater(self.options, **kwargs)          elif self.formater_type == 'StrToBoolean':              return StrToBoolean(**kwargs) +        elif self.formater_type == 'UnknowType': +            return          else:              return IMPORTER_TYPES_DCT[self.formater_type](**kwargs) | 
