diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2015-10-19 18:03:52 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2015-10-19 18:03:52 +0200 |
commit | 87afa869477c69bbb3c36083fea076e47d565d4c (patch) | |
tree | 3ca1c92883f0c8962fb439c46f44fcf0a677d741 | |
parent | ab3d757dc4bf17c127644fad185979a630ad6240 (diff) | |
download | Ishtar-87afa869477c69bbb3c36083fea076e47d565d4c.tar.bz2 Ishtar-87afa869477c69bbb3c36083fea076e47d565d4c.zip |
Imports: create fake importer on database for specific importers
-rw-r--r-- | archaeological_files/data_importer.py | 1 | ||||
-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 |
4 files changed, 48 insertions, 11 deletions
diff --git a/archaeological_files/data_importer.py b/archaeological_files/data_importer.py index 6cba316a8..03284b25d 100644 --- a/archaeological_files/data_importer.py +++ b/archaeological_files/data_importer.py @@ -74,6 +74,7 @@ class FilePostProcessing(object): class FileImporterSraPdL(FilePostProcessing, Importer): DESC = u"Exports dossiers SRA PdL : importeur Filemaker dossiers" + SLUG = "sra-pdl-files" LINE_FORMAT = [] OBJECT_CLS = models.File DEFAULTS = { 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) |