diff options
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: | 
