X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/410bfa05ee36ed1d99356c443a5f3f6aa3ee9578..4cf907a4492224ac83151ce54a845f72363fc4a9:/forum/models/base.py?ds=inline diff --git a/forum/models/base.py b/forum/models/base.py index 56124a8..276c8f6 100644 --- a/forum/models/base.py +++ b/forum/models/base.py @@ -14,11 +14,9 @@ from django.utils.translation import ugettext as _ from django.utils.safestring import mark_safe from django.contrib.sitemaps import ping_google import django.dispatch -from django.conf import settings -from forum import const +from forum import settings import logging -from forum.const import * class LazyQueryList(object): def __init__(self, model, items): @@ -42,6 +40,27 @@ class CachedQuerySet(models.query.QuerySet): else: return self + def get(self, *args, **kwargs): + try: + pk = [v for (k,v) in kwargs.items() if k in ('pk', 'pk__exact', 'id', 'id__exact' + ) or k.endswith('_ptr__pk') or k.endswith('_ptr__id')][0] + except: + pk = None + + if pk is not None: + key = self.model.cache_key(pk) + obj = cache.get(key) + + if obj is None: + obj = super(CachedQuerySet, self).get(*args, **kwargs) + obj.__class__.objects.cache_obj(obj) + else: + d = obj.__dict__ + + return obj + + return super(CachedQuerySet, self).get(*args, **kwargs) + from action import Action class CachedManager(models.Manager): @@ -60,27 +79,6 @@ class CachedManager(models.Manager): cache.set(self.model.cache_key(obj.id), obj, 60 * 60) - def get(self, *args, **kwargs): - try: - pk = [v for (k,v) in kwargs.items() if k in ('pk', 'pk__exact', 'id', 'id__exact' - ) or k.endswith('_ptr__pk') or k.endswith('_ptr__id')][0] - except: - pk = None - - if pk is not None: - key = self.model.cache_key(pk) - obj = cache.get(key) - - if obj is None: - obj = super(CachedManager, self).get(*args, **kwargs) - self.cache_obj(obj) - else: - d = obj.__dict__ - - return obj - - return super(CachedManager, self).get(*args, **kwargs) - def get_or_create(self, *args, **kwargs): try: return self.get(*args, **kwargs) @@ -275,7 +273,7 @@ class CancelableContent(models.Model): app_label = 'forum' -from node import Node, NodeRevision +from node import Node, NodeRevision, NodeManager