From 87afa869477c69bbb3c36083fea076e47d565d4c Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 19 Oct 2015 18:03:52 +0200 Subject: Imports: create fake importer on database for specific importers --- ishtar_common/data_importer.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'ishtar_common/data_importer.py') 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, -- cgit v1.2.3