diff options
Diffstat (limited to 'ishtar_common/models_imports.py')
| -rw-r--r-- | ishtar_common/models_imports.py | 49 | 
1 files changed, 43 insertions, 6 deletions
| diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index 9c98f5ea8..5cb72bd18 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -30,7 +30,7 @@ import zipfile  from django.conf import settings  from django.contrib.gis.db import models -from django.core.exceptions import SuspiciousOperation +from django.core.exceptions import SuspiciousOperation, ValidationError  from django.core.files.base import ContentFile  from django.core.validators import validate_comma_separated_integer_list  from django.db.models.base import ModelBase @@ -39,6 +39,8 @@ from django.template.defaultfilters import slugify  from django.utils.functional import cached_property  from django.utils.translation import ugettext_lazy as _, pgettext_lazy +from ishtar_common.model_managers import SlugModelManager +  from ishtar_common.utils import create_slug, \      get_all_related_m2m_objects_with_model, put_session_message, \      put_session_var, get_session_var, num2col, max_size_help @@ -193,6 +195,9 @@ class ImporterType(models.Model):              if column.regexp_pre_filter:                  formater_kwargs['regexp'] = re.compile(                      column.regexp_pre_filter.regexp) +            if column.value_format: +                formater_kwargs['value_format'] = \ +                    column.value_format.format_string              formater_kwargs['concat_str'] = concat_str              formater_kwargs['duplicate_fields'] = [                  (field.field_name, field.force_new, field.concat, @@ -379,6 +384,9 @@ class ImporterColumn(models.Model):      regexp_pre_filter = models.ForeignKey(          "Regexp", blank=True, null=True, on_delete=models.SET_NULL,      ) +    value_format = models.ForeignKey( +        "ValueFormater", blank=True, null=True, on_delete=models.SET_NULL, +    )      required = models.BooleanField(_(u"Required"), default=False)      export_field_name = models.CharField(          _(u"Export field name"), blank=True, null=True, max_length=200, @@ -451,8 +459,7 @@ class NamedManager(models.Manager):  class Regexp(models.Model):      name = models.CharField(_(u"Name"), max_length=100, unique=True) -    description = models.CharField(_(u"Description"), blank=True, null=True, -                                   max_length=500) +    description = models.TextField(_(u"Description"), blank=True, null=True)      regexp = models.CharField(_(u"Regular expression"), max_length=500)      objects = NamedManager() @@ -467,6 +474,39 @@ class Regexp(models.Model):          return (self.name, ) +class ValueFormater(models.Model): +    name = models.CharField(_(u"Name"), max_length=100, unique=True) +    slug = models.SlugField(_(u"Slug"), unique=True, max_length=100) +    description = models.TextField(_(u"Description"), blank=True, null=True) +    format_string = models.CharField( +        _(u"Format string"), max_length=100, +        help_text=_(u"A string used to format a value using the Python " +                    u"\"format()\" method. The site https://pyformat.info/ " +                    u"provide good examples of usage. Only one \"{}\" entry " +                    u"is managed. The input is assumed to be a string.") +    ) +    objects = SlugModelManager() + +    class Meta: +        verbose_name = _(u"Importer - Value format") +        verbose_name_plural = _(u"Importer - Value formats") + +    def __unicode__(self): +        return self.name + +    def clean(self): +        try: +            self.format_string.format("sample value") +        except ValueError: +            raise ValidationError( +                {'format_string': _("The string provided generate an error. " +                                    "Fix it.")} +            ) + +    def natural_key(self): +        return (self.slug, ) + +  class ImportTargetManager(models.Manager):      def get_by_natural_key(self, importer_type, col_number, target):          return self.get(column__importer_type__slug=importer_type, @@ -480,9 +520,6 @@ class ImportTarget(models.Model):      """      column = models.ForeignKey(ImporterColumn, related_name='targets')      target = models.CharField(u"Target", max_length=500) -    regexp_filter = models.ForeignKey( -        "Regexp", blank=True, null=True, on_delete=models.SET_NULL, -    )      formater_type = models.ForeignKey("FormaterType")      force_new = models.BooleanField(_(u"Force creation of new items"),                                      default=False) | 
