summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/models.py31
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,