]> 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.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
 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]
 
             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
 
         except:
             return None
 
index 067488b2f97ca6bc77c6a6f9cca25c281ceb6070..73b1e30a2a92f3dcee60b85671cfdb91f7c1e3ac 100644 (file)
@@ -1,6 +1,8 @@
 import datetime
 from base import *
 
 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
 
 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:
     @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
 
 
         return None
 
index b8528139cebc36bae14099825b9914b67a378ade..e8871f4187b662532ed489121f6b3bcdc213ebc6 100644 (file)
@@ -1,5 +1,6 @@
 from base import *
 from utils import PickledObjectField
 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
 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:
     @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
 
 
         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'
 
 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',
 TEMPLATE_LOADERS = [
     'django.template.loaders.filesystem.load_template_source',
     'django.template.loaders.app_directories.load_template_source',