diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-10-01 17:23:23 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-11-16 17:04:41 +0100 |
commit | 4a16a0436dd7af9a224da6cd04fc1e49b849d193 (patch) | |
tree | aee1e56bb522ec62ff624c28ff475534e590f211 /archaeological_warehouse | |
parent | a18d2452c8f15792724dd56b53d991247463ceec (diff) | |
download | Ishtar-4a16a0436dd7af9a224da6cd04fc1e49b849d193.tar.bz2 Ishtar-4a16a0436dd7af9a224da6cd04fc1e49b849d193.zip |
Performance on imports: group all post treatment to the end
Diffstat (limited to 'archaeological_warehouse')
-rw-r--r-- | archaeological_warehouse/models.py | 48 | ||||
-rw-r--r-- | archaeological_warehouse/tests.py | 8 |
2 files changed, 27 insertions, 29 deletions
diff --git a/archaeological_warehouse/models.py b/archaeological_warehouse/models.py index add786012..507077d55 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"), @@ -1226,28 +1231,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 @@ -1737,9 +1743,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() @@ -1754,6 +1758,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) @@ -1797,33 +1806,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", |