diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/admin.py | 11 | ||||
-rw-r--r-- | ishtar_common/migrations/0224_auto_20230127_1503.py | 68 | ||||
-rw-r--r-- | ishtar_common/models.py | 62 | ||||
-rw-r--r-- | ishtar_common/models_common.py | 20 | ||||
-rw-r--r-- | ishtar_common/utils.py | 12 |
5 files changed, 167 insertions, 6 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 780a65496..714b4c445 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -575,33 +575,42 @@ class IshtarSiteProfileAdmin(admin.ModelAdmin): "operation_region_code", "operation_complete_identifier", "operation_custom_index", + "operation_cached_label", "site_complete_identifier", "site_custom_index", + "site_cached_label", "file_external_id", "file_complete_identifier", "file_custom_index", + "file_cached_label", "parcel_external_id", + "parcel_cached_label", "context_record_external_id", "contextrecord_complete_identifier", "contextrecord_custom_index", + "contextrecord_cached_label", "base_find_external_id", "basefind_complete_identifier", "basefind_custom_index", + "basefind_cached_label", "find_external_id", "find_complete_identifier", "find_use_index", "find_index", "find_custom_index", + "find_cached_label", "container_external_id", "container_complete_identifier", "container_custom_index", + "container_cached_label", "warehouse_external_id", "warehouse_complete_identifier", "warehouse_custom_index", + "warehouse_cached_label", "document_external_id", "document_complete_identifier", "document_custom_index", - + "document_cached_label", ), }), ) diff --git a/ishtar_common/migrations/0224_auto_20230127_1503.py b/ishtar_common/migrations/0224_auto_20230127_1503.py new file mode 100644 index 000000000..736e2a88d --- /dev/null +++ b/ishtar_common/migrations/0224_auto_20230127_1503.py @@ -0,0 +1,68 @@ +# Generated by Django 2.2.24 on 2023-01-27 15:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ishtar_common', '0223_auto_20230120_1124'), + ] + + operations = [ + migrations.AddField( + model_name='document', + name='cached_label', + field=models.TextField(blank=True, db_index=True, default='', help_text='Generated automatically - do not edit', verbose_name='Cached name'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='basefind_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Base find cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='container_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Container cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='contextrecord_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Context record cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='document_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Document cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='file_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='File cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='find_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Find cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='operation_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Operation cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='parcel_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Parcel cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='site_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Site cached label'), + ), + migrations.AddField( + model_name='ishtarsiteprofile', + name='warehouse_cached_label', + field=models.TextField(blank=True, default='', help_text='Formula to manage cached label. If not set a default is provided', verbose_name='Warehouse cached label'), + ), + ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index b4a563d7f..8dd1fc3fe 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1196,11 +1196,17 @@ class IshtarSiteProfile(models.Model, Cached): "Separate keys with a semicolon." ), ) + operation_cached_label = models.TextField( + _("Operation cached label"), + default="", + blank=True, + help_text=_("Formula to manage cached label. If not set a default is provided"), + ) site_complete_identifier = models.TextField( _("Archaeological site complete identifier"), default="", blank=True, - help_text=_("Formula to manage archaeological site complete" " identifier."), + help_text=_("Formula to manage archaeological site complete identifier."), ) site_custom_index = models.TextField( _("Archaeological site custom index key"), @@ -1211,6 +1217,12 @@ class IshtarSiteProfile(models.Model, Cached): "index. Separate keys with a semicolon." ), ) + site_cached_label = models.TextField( + _("Site cached label"), + default="", + blank=True, + help_text=_("Formula to manage cached label. If not set a default is provided"), + ) file_external_id = models.TextField( _("File external id"), default="{year}-{numeric_reference}", @@ -1236,6 +1248,12 @@ class IshtarSiteProfile(models.Model, Cached): "index. Separate keys with a semicolon." ), ) + file_cached_label = models.TextField( + _("File cached label"), + default="", + blank=True, + help_text=_("Formula to manage cached label. If not set a default is provided"), + ) parcel_external_id = models.TextField( _("Parcel external id"), default="{associated_file__external_id}{operation__code_patriarche}-" @@ -1247,6 +1265,12 @@ class IshtarSiteProfile(models.Model, Cached): "data can be destructive." ), ) + parcel_cached_label = models.TextField( + _("Parcel cached label"), + default="", + blank=True, + help_text=_("Formula to manage cached label. If not set a default is provided"), + ) context_record_external_id = models.TextField( _("Context record external id"), default="{parcel__external_id}-{label}", @@ -1272,6 +1296,12 @@ class IshtarSiteProfile(models.Model, Cached): "Separate keys with a semicolon." ), ) + contextrecord_cached_label = models.TextField( + _("Context record cached label"), + default="", + blank=True, + help_text=_("Formula to manage cached label. If not set a default is provided"), + ) base_find_external_id = models.TextField( _("Base find external id"), default="{context_record__external_id}-{label}", @@ -1297,6 +1327,12 @@ class IshtarSiteProfile(models.Model, Cached): "Separate keys with a semicolon." ), ) + basefind_cached_label = models.TextField( + _("Base find cached label"), + default="", + blank=True, + help_text=_("Formula to manage cached label. If not set a default is provided"), + ) find_external_id = models.TextField( _("Find external id"), default="{get_first_base_find__context_record__external_id}-{label}", @@ -1322,6 +1358,12 @@ class IshtarSiteProfile(models.Model, Cached): "Separate keys with a semicolon." ), ) + find_cached_label = models.TextField( + _("Find cached label"), + default="", + blank=True, + help_text=_("Formula to manage cached label. If not set a default is provided"), + ) container_external_id = models.TextField( _("Container external id"), default="{parent_external_id}-{container_type__txt_idx}-" "{reference}", @@ -1347,6 +1389,12 @@ class IshtarSiteProfile(models.Model, Cached): "Separate keys with a semicolon." ), ) + container_cached_label = models.TextField( + _("Container cached label"), + default="", + blank=True, + help_text=_("Formula to manage cached label. If not set a default is provided"), + ) warehouse_external_id = models.TextField( _("Warehouse external id"), default="{slug}", @@ -1372,6 +1420,12 @@ class IshtarSiteProfile(models.Model, Cached): "Separate keys with a semicolon." ), ) + warehouse_cached_label = models.TextField( + _("Warehouse cached label"), + default="", + blank=True, + help_text=_("Formula to manage cached label. If not set a default is provided"), + ) document_external_id = models.TextField( _("Document external id"), default="{index}", @@ -1397,6 +1451,12 @@ class IshtarSiteProfile(models.Model, Cached): "Separate keys with a semicolon." ), ) + document_cached_label = models.TextField( + _("Document cached label"), + default="", + blank=True, + help_text=_("Formula to manage cached label. If not set a default is provided"), + ) person_raw_name = models.TextField( _("Raw name for person"), default="{name|upper} {surname}", diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index b239813f3..f50395dee 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -3982,6 +3982,13 @@ class ImageContainerModel: class CompleteIdentifierItem(models.Model, ImageContainerModel): HAS_QR_CODE = True + cached_label = models.TextField( + _("Cached name"), + blank=True, + default="", + db_index=True, + help_text=_("Generated automatically - do not edit"), + ) complete_identifier = models.TextField( _("Complete identifier"), blank=True, default="" ) @@ -4001,6 +4008,19 @@ class CompleteIdentifierItem(models.Model, ImageContainerModel): return "" return self.qrcode.path + def _profile_generate_cached_label(self): + slug = getattr(self, "SLUG", None) + if not slug: + return + return get_generated_id(slug + "_cached_label", self) + + def _generate_cached_label(self): + label = self._profile_generate_cached_label() + if not label: + # to be eventually overloaded by parent class + return str(self) + return label + def generate_qrcode(self, request=None, secure=True, tmpdir=None): url = self.get_absolute_url() site = Site.objects.get_current() diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index 2ce8a5f9b..7c7e6a6a5 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -555,9 +555,11 @@ def _cached_label_changed(sender, **kwargs): instance.refresh_cache() instance._cached_label_checked = True - cached_labels = ["cached_label"] + cached_labels = [] if hasattr(instance, "CACHED_LABELS"): cached_labels = instance.CACHED_LABELS + if hasattr(instance, "cached_label") and "cached_label" not in cached_labels: + cached_labels.append("cached_label") changed = [] for cached_label in cached_labels: gen_func = "_generate_" + cached_label @@ -1929,7 +1931,7 @@ def _update_gen_id_dct(item, dct, initial_key, fkey=None, filters=None): if not fkey: fkey = initial_key[:] if fkey.startswith("settings__"): - dct[fkey] = getattr(settings, fkey[len("settings__") :]) or "" + dct[fkey] = getattr(settings, fkey[len("settings__"):]) or "" return obj = item for k in fkey.split("__"): @@ -1965,11 +1967,13 @@ def get_generated_id(key, item): if not hasattr(profile, key): return formula = getattr(profile, key) + if not formula: + return "" dct = {} # jinja2 style if "{{" in formula or "{%" in formula: - # naive parse - only simple jija2 is managed + # naive parse - only simple jinja2 is managed key_list = [] for key in PARSE_JINJA.findall(formula): key = key.strip().split("|")[0] @@ -1986,7 +1990,7 @@ def get_generated_id(key, item): new_keys = [] for key in key_list: if key.startswith("not "): - key = key[len("not ") :].strip() + key = key[len("not "):].strip() key = key.split(".")[0] if " % " in key: keys = key.split(" % ")[1] |