diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2015-05-03 23:21:46 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2015-05-03 23:21:46 +0200 |
commit | 274b8d44ccf1f099f2e22b5a6a70f9743b746c1d (patch) | |
tree | 9d23175660bb6b6d1adcbcec722bf4ea88f0b818 /ishtar_common/data_importer.py | |
parent | 40ffb48d6075a14a9591d6a7c83f40ef5afe97e5 (diff) | |
download | Ishtar-274b8d44ccf1f099f2e22b5a6a70f9743b746c1d.tar.bz2 Ishtar-274b8d44ccf1f099f2e22b5a6a70f9743b746c1d.zip |
Interface: create new import, management interface
Diffstat (limited to 'ishtar_common/data_importer.py')
-rw-r--r-- | ishtar_common/data_importer.py | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/ishtar_common/data_importer.py b/ishtar_common/data_importer.py index 194a9a5fa..cef98789e 100644 --- a/ishtar_common/data_importer.py +++ b/ishtar_common/data_importer.py @@ -21,7 +21,7 @@ import copy, csv, datetime, logging, re, sys from tempfile import NamedTemporaryFile from django.contrib.auth.models import User -from django.db import DatabaseError, IntegrityError +from django.db import DatabaseError, IntegrityError, transaction from django.template.defaultfilters import slugify from django.utils.translation import ugettext_lazy as _ @@ -275,12 +275,16 @@ class StrChoiceFormater(Formater): else: self.equiv_dict[value] = None if output == 'db' and self.db_target: - for missing in missings: - try: - q = {'target':self.db_target, 'value':missing} - models.TargetKey.objects.create(**q) - except IntegrityError: - pass + from ishtar_common.models import TargetKey + for missing in self.missings: + q = {'target':self.db_target, 'value':missing} + if TargetKey.objects.filter(**q).count(): + continue + with transaction.commit_on_success(): + try: + TargetKey.objects.create(**q) + except IntegrityError: + pass def new(self, value): return @@ -402,7 +406,8 @@ class StrToBoolean(Formater): else: self.dct[value] = None if output == 'db' and self.db_target: - for missing in missings: + from ishtar_common.models import TargetKey + for missing in self.missings: try: q = {'target':self.db_target, 'value':missing} models.TargetKey.objects.create(**q) @@ -439,7 +444,7 @@ class Importer(object): def __init__(self, skip_lines=0, reference_header=None, check_col_num=False, test=False, check_validity=True, history_modifier=None, output='silent', - importer_instance=None): + import_instance=None): """ * skip_line must be set if the data provided has got headers lines. * a reference_header can be provided to perform a data compliance @@ -458,14 +463,13 @@ class Importer(object): self.check_col_num = check_col_num self.check_validity = check_validity self.line_format = copy.copy(self.LINE_FORMAT) - self.importer_instance = importer_instance - self._initialized = False + self.import_instance = import_instance self._defaults = self.DEFAULTS.copy() self.history_modifier = history_modifier self.output = output if not self.history_modifier: - if self.importer_instance: - self.history_modifier = self.importer_instance.user + if self.import_instance: + self.history_modifier = self.import_instance.user else: # import made by the CLI: get the first admin self.history_modifier = User.objects.filter( @@ -494,11 +498,10 @@ class Importer(object): for idx, formater in enumerate(self.line_format): if formater: formater.init(vals[idx], output) - self._initialized = True - def importation(self, table): + def importation(self, table, initialize=True): self.validity_file = None - if not self._initialized: + if initialize: self.initialize(table, self.output) if self.check_validity: with NamedTemporaryFile(delete=False) as validity_file: |