summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
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
commit1b754a300be8844e2e0b45839639cb92002d5d5e (patch)
tree7c42294e7481d6e8dad610b1492e1366cdafca7f /ishtar_common
parentbcd8e0af62ae225bacdf6ae237dda9fb23005d6f (diff)
downloadIshtar-1b754a300be8844e2e0b45839639cb92002d5d5e.tar.bz2
Ishtar-1b754a300be8844e2e0b45839639cb92002d5d5e.zip
Set cache for types
Diffstat (limited to 'ishtar_common')
-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,