summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/admin.py11
-rw-r--r--ishtar_common/migrations/0224_auto_20230127_1503.py68
-rw-r--r--ishtar_common/models.py62
-rw-r--r--ishtar_common/models_common.py20
-rw-r--r--ishtar_common/utils.py12
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]