diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-07-25 16:54:53 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-07-25 16:54:53 +0200 | 
| commit | 4caa53b7c64907affeecab6996c68b395f79ebd0 (patch) | |
| tree | 7c42294e7481d6e8dad610b1492e1366cdafca7f /ishtar_common/models.py | |
| parent | 7936bd4f423c12025fe8c458c25a66ab25b224bf (diff) | |
| download | Ishtar-4caa53b7c64907affeecab6996c68b395f79ebd0.tar.bz2 Ishtar-4caa53b7c64907affeecab6996c68b395f79ebd0.zip | |
Set cache for types
Diffstat (limited to 'ishtar_common/models.py')
| -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, | 
