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]  | 
