summaryrefslogtreecommitdiff
path: root/ishtar_common/serializers_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/serializers_utils.py')
-rw-r--r--ishtar_common/serializers_utils.py47
1 files changed, 41 insertions, 6 deletions
diff --git a/ishtar_common/serializers_utils.py b/ishtar_common/serializers_utils.py
index 74ffbe176..c03a55e35 100644
--- a/ishtar_common/serializers_utils.py
+++ b/ishtar_common/serializers_utils.py
@@ -9,6 +9,7 @@ from zipfile import ZipFile
from django.contrib.sites.models import Site
from django.core.serializers import serialize
+from django.db.models import Q
from ishtar_common.version import get_version
from . import models
@@ -19,7 +20,10 @@ SERIALIZATION_VERSION = "1.0"
def get_model_from_filename(filename):
filename = filename.split(".")[0] # remove extension
- module_name, model_name = filename.split("__")
+ splitted = filename.split("__")
+ if len(splitted) != 2:
+ return
+ module_name, model_name = splitted
if module_name == "django":
if model_name in ("Group", "Permission"):
module = importlib.import_module("django.contrib.auth.models")
@@ -107,6 +111,21 @@ def archive_serialization(result, archive_dir=None, archive=False,
return archive_name
+GENERIC_QUERYSET_FILTER = {
+ "Regexp": {"ImporterType": 'columns__importer_type__pk__in'},
+ "ImporterModel": {"ImporterType": ['importer_type_associated__pk__in',
+ 'importer_type_created__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'},
+}
+
+
def generic_get_results(model_list, dirname, no_geo=True,
result_queryset=None, serialization_include=None):
result = OrderedDict()
@@ -114,11 +133,27 @@ def generic_get_results(model_list, dirname, no_geo=True,
base_model_name = model.__name__
model_name = str(model.__module__).split(".")[0] + "__" + \
base_model_name
-
- if result_queryset and base_model_name in result_queryset:
- base_q = result_queryset[base_model_name]
- else:
- base_q = model.objects
+ base_q = model.objects
+ if result_queryset:
+ if result_queryset and base_model_name in result_queryset:
+ base_q = result_queryset[base_model_name]
+ elif base_model_name in GENERIC_QUERYSET_FILTER:
+ alt_filter = GENERIC_QUERYSET_FILTER[base_model_name]
+ for k in alt_filter:
+ if k in result_queryset:
+ terms = alt_filter[k]
+ if not isinstance(terms, (list, tuple)):
+ terms = [terms]
+ ids = [r["pk"]
+ for r in result_queryset[k].values("pk").all()]
+ q = None
+ for term in terms:
+ if not q:
+ q = Q(**{term: ids})
+ else:
+ q |= Q(**{term: ids})
+ base_q = base_q.filter(q)
+ break
q = base_q
recursion = None
if hasattr(model, "parent"):