]> git.openstreetmap.org Git - osqa.git/commitdiff
OSQA-776, limit the cache key length in the infer_cache_key method, adding a setting...
authorjordan <jordan@0cfe37f9-358a-4d5e-be75-b63607b5c754>
Thu, 10 Nov 2011 14:46:37 +0000 (14:46 +0000)
committerjordan <jordan@0cfe37f9-358a-4d5e-be75-b63607b5c754>
Thu, 10 Nov 2011 14:46:37 +0000 (14:46 +0000)
git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@1200 0cfe37f9-358a-4d5e-be75-b63607b5c754

forum/models/base.py
forum/models/tag.py
forum/models/user.py
settings.py

index 2cfe7db7c89410c5667bd864dd5c7ecc14943832..33bf0c8dfbb4afe54496fae6958a62d1b71b46a7 100644 (file)
@@ -8,6 +8,7 @@ from urllib import quote_plus, urlencode
 from django.db import models, IntegrityError, connection, transaction
 from django.utils.http import urlquote  as django_urlquote
 from django.utils.html import strip_tags
+from django.conf import settings as django_settings
 from django.core.urlresolvers import reverse
 from django.contrib.contenttypes import generic
 from django.contrib.contenttypes.models import ContentType
@@ -323,7 +324,12 @@ class BaseModel(models.Model):
             pk = [v for (k,v) in querydict.items() if k in ('pk', 'pk__exact', 'id', 'id__exact'
                             ) or k.endswith('_ptr__pk') or k.endswith('_ptr__id')][0]
 
-            return cls._generate_cache_key(pk)
+            cache_key = cls._generate_cache_key(pk)
+
+            if len(cache_key) > django_settings.CACHE_MAX_KEY_LENGTH:
+                cache_key = cache_key[:django_settings.CACHE_MAX_KEY_LENGTH]
+
+            return cache_key
         except:
             return None
 
index 067488b2f97ca6bc77c6a6f9cca25c281ceb6070..73b1e30a2a92f3dcee60b85671cfdb91f7c1e3ac 100644 (file)
@@ -1,6 +1,8 @@
 import datetime
 from base import *
 
+from django.conf import settings as django_settings
+from django.core.cache.backends.base import BaseCache
 from django.utils.translation import ugettext as _
 from django.utils.encoding import smart_unicode, force_unicode
 
@@ -45,7 +47,12 @@ class Tag(BaseModel):
     @classmethod
     def infer_cache_key(cls, querydict):
         if 'name' in querydict:
-            return cls._generate_cache_key(cls.safe_cache_name(querydict['name']))
+            cache_key = cls._generate_cache_key(cls.safe_cache_name(querydict['name']))
+
+            if len(cache_key) > django_settings.CACHE_MAX_KEY_LENGTH:
+                cache_key = cache_key[:django_settings.CACHE_MAX_KEY_LENGTH]
+
+            return cache_key
 
         return None
 
index b8528139cebc36bae14099825b9914b67a378ade..e8871f4187b662532ed489121f6b3bcdc213ebc6 100644 (file)
@@ -1,5 +1,6 @@
 from base import *
 from utils import PickledObjectField
+from django.conf import settings as django_settings
 from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.auth.models import User as DjangoUser, AnonymousUser as DjangoAnonymousUser
@@ -462,7 +463,10 @@ class UserProperty(BaseModel):
     @classmethod
     def infer_cache_key(cls, querydict):
         if 'user' in querydict and 'key' in querydict:
-            return cls._generate_cache_key("%s:%s" % (querydict['user'].id, querydict['key']))
+            cache_key = cls._generate_cache_key("%s:%s" % (querydict['user'].id, querydict['key']))
+            if len(cache_key) > django_settings.CACHE_MAX_KEY_LENGTH:
+                cache_key = cache_key[:django_settings.CACHE_MAX_KEY_LENGTH]
+            return cache_key
 
         return None
 
index a1044e559319e6300d72ffeb2fbf51028efa509c..c895381aa312a061677ada146da8977e4d564440 100644 (file)
@@ -7,6 +7,8 @@ SITE_ID = 1
 ADMIN_MEDIA_PREFIX = '/admin_media/'
 SECRET_KEY = '$oo^&_m&qwbib=(_4m_n*zn-d=g#s0he5fx9xonnym#8p6yigm'
 
+CACHE_MAX_KEY_LENGTH = 235
+
 TEMPLATE_LOADERS = [
     'django.template.loaders.filesystem.load_template_source',
     'django.template.loaders.app_directories.load_template_source',