summaryrefslogtreecommitdiff
path: root/archaeological_warehouse
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2021-10-01 17:23:23 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-07-08 09:58:48 +0200
commit0f39694b279007da6d924515c3376962d80f378e (patch)
treec507eadcd0c2629ea7dd18dbc75b5983f6a9039e /archaeological_warehouse
parent2bdffb95a3a4ad83800ecfb9c5885350ed852f1f (diff)
downloadIshtar-0f39694b279007da6d924515c3376962d80f378e.tar.bz2
Ishtar-0f39694b279007da6d924515c3376962d80f378e.zip
Performance on imports: group all post treatment to the end
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r--archaeological_warehouse/models.py48
-rw-r--r--archaeological_warehouse/tests.py8
2 files changed, 27 insertions, 29 deletions
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py
index de499d2b7..f84a2d75b 100644
--- a/archaeological_warehouse/models.py
+++ b/archaeological_warehouse/models.py
@@ -420,7 +420,7 @@ class Warehouse(
@post_importer_action
def add_localisations(self, context, value):
- self._add_localisations(context, value)
+ return self._add_localisations(context, value)
add_localisations.post_save = True
@@ -454,6 +454,7 @@ class Warehouse(
)
parent = None
+ items = []
for idx, value in enumerate(values):
if idx >= len(divisions):
if return_errors:
@@ -475,6 +476,10 @@ class Warehouse(
)
if created and import_object:
parent.imports.add(import_object)
+ items.append(parent)
+ if return_errors:
+ return items, None
+ return items
@property
def short_label(self):
@@ -937,7 +942,7 @@ class Container(
"empty": SearchAltName(pgettext_lazy("key for text search", "empty"), "finds"),
"parent": SearchAltName(
pgettext_lazy("key for text search", "parent-container"),
- "parent__cached_label__iexact"
+ "parent__cached_label__iexact",
),
"contain_containers": SearchAltName(
pgettext_lazy("key for text search", "contain-containers"),
@@ -1236,28 +1241,29 @@ class Container(
doc.container_ref_id = self.pk
doc.skip_history_when_saving = True
doc.save()
+ return doc
@post_importer_action
def put_document_by_external_id(self, context, value):
- self.put_document_by_key(value, "external_id")
+ return self.put_document_by_key(value, "external_id")
put_document_by_external_id.post_save = True
@post_importer_action
def put_document_by_reference(self, context, value):
- self.put_document_by_key(value, "reference")
+ return self.put_document_by_key(value, "reference")
put_document_by_reference.post_save = True
@post_importer_action
def put_document_by_internal_reference(self, context, value):
- self.put_document_by_key(value, "internal_reference")
+ return self.put_document_by_key(value, "internal_reference")
put_document_by_internal_reference.post_save = True
@post_importer_action
def put_document_by_complete_identifier(self, context, value):
- self.put_document_by_key(value, "complete_identifier")
+ return self.put_document_by_key(value, "complete_identifier")
put_document_by_complete_identifier.post_save = True
@@ -1750,9 +1756,7 @@ class Container(
return
q = Container.objects.filter(location=self.location, index__isnull=False)
self.index = (
- int(q.all().aggregate(Max("index"))["index__max"]) + 1
- if q.count()
- else 1
+ int(q.all().aggregate(Max("index"))["index__max"]) + 1 if q.count() else 1
)
if not self.cached_division:
self.cached_division = self._generate_cached_division()
@@ -1767,6 +1771,11 @@ class Container(
self.location.max_division_number = number
self.location.save()
+ def post_delete_to_update(self):
+ q = Container.objects.filter(container_tree_child__container_parent=self)
+ q.update(cached_division="")
+ return ((self.__class__, q.values_list("id", flat=True)),)
+
def save(self, *args, **kwargs):
self.pre_save()
super(Container, self).save(*args, **kwargs)
@@ -1810,33 +1819,20 @@ class Container(
def container_post_save(sender, **kwargs):
cached_label_and_geo_changed(sender=sender, **kwargs)
- # TODO: to be deleted???
- """
- if not kwargs.get('instance'):
- return
- instance = kwargs.get('instance')
- for loca in ContainerLocalisation.objects.filter(
- container=instance).exclude(
- division__warehouse=instance.location).all():
- q = WarehouseDivisionLink.objects.filter(
- warehouse=instance.location,
- division=loca.division.division
- )
- if not q.count():
- continue
- loca.division = q.all()[0]
- loca.save()
- """
def container_pre_delete(sender, **kwargs):
instance = kwargs["instance"]
+ if getattr(instance, "_no_pre_delete", False):
+ return
q = Container.objects.filter(container_tree_child__container_parent=instance)
q.update(cached_division="")
def container_post_delete(sender, **kwargs):
instance = kwargs["instance"]
+ if getattr(instance, "_no_pre_delete", False):
+ return
q = Container.objects.filter(cached_division="", location=instance.location)
for c in q.all():
c.save()
diff --git a/archaeological_warehouse/tests.py b/archaeological_warehouse/tests.py
index 4e6ca9dd9..7cd5af848 100644
--- a/archaeological_warehouse/tests.py
+++ b/archaeological_warehouse/tests.py
@@ -491,7 +491,9 @@ class WarehouseTest(TestCase):
)
self.assertTrue(error)
- error = self.warehouse._add_localisations(None, base_value, return_errors=True)
+ __, error = self.warehouse._add_localisations(
+ None, base_value, return_errors=True
+ )
self.assertIsNone(error)
parent = None
for idx, reference in enumerate(("A", "42", "allée 3;2")):
@@ -513,7 +515,7 @@ class WarehouseTest(TestCase):
self.assertEqual(container_nb + len(self.container_types), new_container_nb)
value = "A;42;allée 4"
- error = self.warehouse._add_localisations(None, value, return_errors=True)
+ __, error = self.warehouse._add_localisations(None, value, return_errors=True)
self.assertIsNone(error)
# only create a new container
self.assertEqual(new_container_nb + 1, models.Container.objects.count())
@@ -529,7 +531,7 @@ class WarehouseTest(TestCase):
# test with an empty localisation
value = "A;42;;35"
- error = self.warehouse._add_localisations(None, value, return_errors=True)
+ __, error = self.warehouse._add_localisations(None, value, return_errors=True)
self.assertIsNone(error)
q = models.Container.objects.filter(
parent__reference="42",