diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-04-29 18:43:36 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-04-30 11:17:10 +0200 |
commit | 68190548376cd951d9e0466f385afd7ee94a5256 (patch) | |
tree | 0ae0f380fad9cc24b3380e11fc1948acf0000e71 /ishtar_common/models.py | |
parent | 8b2a8e8aff6f2143a9ae0eb266a6c34c19591b46 (diff) | |
download | Ishtar-68190548376cd951d9e0466f385afd7ee94a5256.tar.bz2 Ishtar-68190548376cd951d9e0466f385afd7ee94a5256.zip |
✨ templates: get containers values from the operation - performance: add cache (refs #5927)
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 5fb370362..bf523632a 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -307,9 +307,23 @@ class ValueGetter: return return [k[len(prefix) :] for k in filtr if k.startswith(prefix)] + def get_extra_values(self, prefix="", no_values=False, filtr=None, **kwargs): + return {} + def get_values(self, prefix="", no_values=False, filtr=None, **kwargs): if not prefix: prefix = self._prefix + extra_args = ["getvalues", str(self.pk), prefix, "1" if no_values else "0"] + if filtr: + extra_args += filtr + for k in kwargs: + extra_args += [k, str(kwargs[k])] + cache_key, values = get_cache( + self.__class__, + extra_args=extra_args + ) + if values: + return values exclude = kwargs.get("exclude", []) values = {} if ( @@ -360,8 +374,12 @@ class ValueGetter: if val.endswith(".None"): val = "" values[key] = val + values.update( + self.get_extra_values(prefix=prefix, no_values=no_values, filtr=filtr, **kwargs) + ) + # do not provide KEYS and VALUES for sub-items if (prefix and prefix != self._prefix) or no_values: - # do not provide KEYS and VALUES for sub-items + cache.set(cache_key, values, 10) return values value_list = [] for key, value_ in values.items(): @@ -370,6 +388,7 @@ class ValueGetter: value_list.append((key, str(value_))) for global_var in GlobalVar.objects.all(): values[global_var.slug] = global_var.value or "" + cache.set(cache_key, values, 10) return values @classmethod @@ -2517,8 +2536,8 @@ def documentation_get_gender_values(): class BaseGenderedType(ValueGetter): - def get_values(self, prefix="", **kwargs): - dct = super(BaseGenderedType, self).get_values(prefix=prefix, **kwargs) + def get_extra_values(self, prefix="", **kwargs): + dct = {} if not hasattr(self, "grammatical_gender"): raise NotImplementedError("This model should have a grammatical_gender field") dct[prefix + "grammatical_gender"] = self.grammatical_gender @@ -2801,8 +2820,8 @@ class TitleType(GenderedType): doc += ", **long_title** {}".format(_("Long title")) return doc - def get_values(self, prefix="", **kwargs): - dct = super(TitleType, self).get_values(prefix=prefix, **kwargs) + def get_extra_values(self, prefix="", **kwargs): + dct = super().get_extra_values(prefix=prefix, **kwargs) dct[prefix + "long_title"] = self.long_title return dct @@ -3049,10 +3068,8 @@ class Person(Address, Merge, OwnPerms, ValueGetter, MainItem): values.append(attached_to) return " ".join(values) - def get_values(self, prefix="", no_values=False, filtr=None, **kwargs): - values = super(Person, self).get_values( - prefix=prefix, no_values=no_values, filtr=filtr, **kwargs - ) + def get_extra_values(self, prefix="", no_values=False, filtr=None, **kwargs): + values = {} if not self.attached_to: values.update(Person.get_empty_values(prefix=prefix + "attached_to_")) return values @@ -4936,10 +4953,8 @@ class Document( return "" return self.image.path - def get_values(self, prefix="", no_values=False, filtr=None, **kwargs): - values = super(Document, self).get_values( - prefix=prefix, no_values=no_values, filtr=filtr, **kwargs - ) + def get_extra_values(self, prefix="", no_values=False, filtr=None, **kwargs): + values = {} if not filtr or prefix + "image_path" in filtr: values[prefix + "image_path"] = self.image_path if not filtr or prefix + "thumbnail_path" in filtr: |