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 | |
parent | 7936bd4f423c12025fe8c458c25a66ab25b224bf (diff) | |
download | Ishtar-4caa53b7c64907affeecab6996c68b395f79ebd0.tar.bz2 Ishtar-4caa53b7c64907affeecab6996c68b395f79ebd0.zip |
Set cache for types
-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, |