summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/data_importer.py32
-rw-r--r--ishtar_common/management/commands/update_specific_importers.py23
-rw-r--r--ishtar_common/models.py3
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)