diff options
| -rw-r--r-- | archaeological_operations/tests.py | 2 | ||||
| -rw-r--r-- | ishtar_common/admin.py | 7 | ||||
| -rw-r--r-- | ishtar_common/models_imports.py | 14 | ||||
| -rw-r--r-- | ishtar_common/serializers.py | 2 | ||||
| -rw-r--r-- | ishtar_common/serializers_utils.py | 57 | 
5 files changed, 71 insertions, 11 deletions
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index afa484839..f72ef2647 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -157,7 +157,7 @@ class FileInit(object):          self.item.save() -class ImportTest(object): +class ImportTest:      def setUp(self):          self.username, self.password, self.user = create_superuser()          self.ishtar_user = IshtarUser.objects.get(pk=self.user.pk) diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index cf4366bd8..3d1909275 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -1654,7 +1654,7 @@ serialize_importer_action.short_description = SERIALIZE_DESC  @admin.register(models.ImporterType, site=admin_site)  class ImporterTypeAdmin(ImportJSONActionAdmin): -    list_display = ("name", "associated_models", "available") +    list_display = ("name", "associated_models", "available", "importer_groups_label")      actions = importer_type_actions + [          serialize_importer_action,          change_value("available", True, _("Make available")), @@ -1671,10 +1671,15 @@ class ImporterGroupImporterInline(admin.TabularInline):      extra = 3 +serialize_importer_group_action = serialize_action("common_imports", IMPORT_MODEL_LIST) +serialize_importer_group_action.short_description = SERIALIZE_DESC + +  @admin.register(models.ImporterGroup, site=admin_site)  class ImporterTypeAdmin(admin.ModelAdmin):      list_display = ("name", "importer_types_label", "available")      actions = [ +        serialize_importer_group_action,          change_value("available", True, _("Make available")),          change_value("available", False, _("Make unavailable")),      ] diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py index ff920fbf2..3fbd7653d 100644 --- a/ishtar_common/models_imports.py +++ b/ishtar_common/models_imports.py @@ -38,6 +38,7 @@ from django.conf import settings  from django.contrib.contenttypes.fields import GenericForeignKey  from django.contrib.contenttypes.models import ContentType  from django.contrib.gis.db import models +from django.contrib.gis.db.models import Manager  from django.contrib.gis.gdal.error import GDALException  from django.contrib.gis.geos import GEOSGeometry  from django.contrib.gis.geos.error import GEOSException @@ -215,6 +216,10 @@ class ImporterType(models.Model):              return IMPORT_TYPES_DICT[str(self.type)]          return "" +    @property +    def importer_groups_label(self) -> str: +        return " ; ".join([imp.group.name for imp in self.groups.all()]) +      def get_libreoffice_template(self):          if not UnoCalc:              return @@ -412,16 +417,25 @@ class ImporterGroup(models.Model):          return " ; ".join([imp.importer_type.name for imp in self.importer_types.all()]) +class ImporterGroupImporterManager(Manager): +    def get_by_natural_key(self, group, importer): +        return self.get(group__slug=group, importer_type__slug=importer) + +  class ImporterGroupImporter(models.Model):      group = models.ForeignKey(ImporterGroup, on_delete=models.CASCADE, related_name="importer_types")      importer_type = models.ForeignKey(ImporterType, on_delete=models.CASCADE, related_name="groups")      order = models.PositiveIntegerField(_("Order"), default=10, validators=[MinValueValidator(1)]) +    objects = ImporterGroupImporterManager()      class Meta:          ordering = ("group", "order")          unique_together = ("group", "order")          verbose_name = _("Importer - Group <-> Importer") +    def natural_key(self): +        return self.group.slug, self.importer_type.slug +  def get_associated_model(parent_model, keys):      model = None diff --git a/ishtar_common/serializers.py b/ishtar_common/serializers.py index 071007ab2..1469e13a1 100644 --- a/ishtar_common/serializers.py +++ b/ishtar_common/serializers.py @@ -120,6 +120,8 @@ IMPORT_MODEL_LIST = [      models.ImportTarget,      models.ImporterDefaultValues,      models.ImporterDuplicateField, +    models.ImporterGroup, +    models.ImporterGroupImporter,  ] diff --git a/ishtar_common/serializers_utils.py b/ishtar_common/serializers_utils.py index eefbfd681..ada0a62cf 100644 --- a/ishtar_common/serializers_utils.py +++ b/ishtar_common/serializers_utils.py @@ -115,20 +115,59 @@ def archive_serialization(  GENERIC_QUERYSET_FILTER = {      "JsonDataSection": {"JsonDataField": "json_data_field__pk__in"}, -    "Regexp": {"ImporterType": "columns__importer_type__pk__in"}, +    "Regexp": { +        "ImporterType": "columns__importer_type__pk__in", +        "ImporterGroup": "columns__importer_type__groups__group__pk__in", +    },      "ImporterModel": {          "ImporterType": [              "importer_type_associated__pk__in",              "importer_type_created__pk__in", -        ] +        ], +        "ImporterGroup": [ +            "importer_type_associated__groups__group__pk__in", +            "importer_type_created__groups__group__pk__in", +        ], +    }, +    "ValueFormater": { +        "ImporterType": "columns__importer_type__pk__in", +        "ImporterGroup": "columns__importer_type__groups__group__pk__in", +    }, +    "ImporterColumn": { +        "ImporterType": "importer_type__pk__in", +        "ImporterGroup": "importer_type__groups__group__pk__in", +    }, +    "ImporterDefault": { +        "ImporterType": "importer_type__pk__in", +        "ImporterGroup": "importer_type__groups__group__pk__in", +    }, +    "ImportTarget": { +        "ImporterType": "column__importer_type__pk__in", +        "ImporterGroup": "column__importer_type__groups__group__pk__in",      }, -    "ValueFormater": {"ImporterType": "columns__importer_type__pk__in"}, -    "ImporterColumn": {"ImporterType": "importer_type__pk__in"}, -    "ImporterDefault": {"ImporterType": "importer_type__pk__in"}, -    "ImportTarget": {"ImporterType": "column__importer_type__pk__in"}, -    "FormaterType": {"ImporterType": "targets__column__importer_type__pk__in"}, -    "ImporterDefaultValues": {"ImporterType": "default_target__importer_type__pk__in"}, -    "ImporterDuplicateField": {"ImporterType": "column__importer_type__pk__in"}, +    "FormaterType": { +        "ImporterType": "targets__column__importer_type__pk__in", +        "ImporterGroup": "targets__column__importer_type__groups__group__pk__in", +    }, +    "ImporterDefaultValues": { +        "ImporterType": "default_target__importer_type__pk__in", +        "ImporterGroup": "default_target__importer_type__groups__group__pk__in", +    }, +    "ImporterDuplicateField": { +        "ImporterType": "column__importer_type__pk__in", +        "ImporterGroup": "column__importer_type__groups__group__pk__in", +    }, +    "ImporterGroup": { +        "ImporterType": "importer_types__importer_type__pk__in", +        "ImporterGroup": "importer_types__importer_type__groups__group__pk__in", +    }, +    "ImporterGroupImporter": { +        "ImporterType": "importer_type__pk__in", +        "ImporterGroup": "group__pk__in", +    }, +    "ImporterType": { +        "ImporterGroup": "groups__group__pk__in", +    }  }  | 
