summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py41
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: