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, |