diff options
| -rw-r--r-- | ishtar_common/models.py | 31 | 
1 files changed, 26 insertions, 5 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 21b96d85b..5b5bd8f4e 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -326,13 +326,34 @@ class GeneralType(models.Model, Cached):      @classmethod      def get_types(cls, dct={}, instances=False, exclude=[], empty_first=True,                    default=None): +        # cache +        cache_key = None +        if not instances: +            keys = [u"{}".format(ex) for ex in exclude] + [ +                empty_first and 'empty_first' or ''] + [u"{}".format(default)] +            cache_key, value = get_cache(cls, keys) +            if value: +                return value          base_dct = dct.copy()          if hasattr(cls, 'parent'): -            return cls._get_parent_types( -                base_dct, instances, exclude=exclude, empty_first=empty_first, -                default=default) -        return cls._get_types(base_dct, instances, exclude=exclude, -                              empty_first=empty_first, default=default) +            if not cache_key: +                return cls._get_parent_types( +                    base_dct, instances, exclude=exclude, +                    empty_first=empty_first, default=default) +            vals = [v for v in cls._get_parent_types( +                    base_dct, instances, exclude=exclude, +                    empty_first=empty_first, default=default)] +            cache.set(cache_key, vals, settings.CACHE_TIMEOUT) +            return vals + +        if not cache_key: +            return cls._get_types(base_dct, instances, exclude=exclude, +                                  empty_first=empty_first, default=default) +        vals = [v for v in cls._get_types( +            base_dct, instances, exclude=exclude, empty_first=empty_first, +            default=default)] +        cache.set(cache_key, vals, settings.CACHE_TIMEOUT) +        return vals      @classmethod      def _get_types(cls, dct={}, instances=False, exclude=[], empty_first=True, | 
