summaryrefslogtreecommitdiff
path: root/django/utils
diff options
context:
space:
mode:
Diffstat (limited to 'django/utils')
-rw-r--r--django/utils/cache.py23
-rw-r--r--django/utils/datastructures.py71
-rw-r--r--django/utils/translation/trans_real.py7
3 files changed, 55 insertions, 46 deletions
diff --git a/django/utils/cache.py b/django/utils/cache.py
index ae4de6dd87..5654bed7aa 100644
--- a/django/utils/cache.py
+++ b/django/utils/cache.py
@@ -20,6 +20,10 @@ An example: i18n middleware would need to distinguish caches by the
import md5
import re
import time
+try:
+ set
+except NameError:
+ from sets import Set as set # Python 2.3 fallback
from django.conf import settings
from django.core.cache import cache
@@ -70,8 +74,6 @@ def patch_cache_control(response, **kwargs):
cc = ', '.join([dictvalue(el) for el in cc.items()])
response['Cache-Control'] = cc
-vary_delim_re = re.compile(r',\s*')
-
def patch_response_headers(response, cache_timeout=None):
"""
Adds some useful headers to the given HttpResponse object:
@@ -109,14 +111,15 @@ def patch_vary_headers(response, newheaders):
# Note that we need to keep the original order intact, because cache
# implementations may rely on the order of the Vary contents in, say,
# computing an MD5 hash.
- vary = []
if response.has_header('Vary'):
- vary = vary_delim_re.split(response['Vary'])
- oldheaders = dict([(el.lower(), 1) for el in vary])
- for newheader in newheaders:
- if not newheader.lower() in oldheaders:
- vary.append(newheader)
- response['Vary'] = ', '.join(vary)
+ vary_headers = cc_delim_re.split(response['Vary'])
+ else:
+ vary_headers = []
+ # Use .lower() here so we treat headers as case-insensitive.
+ existing_headers = set([header.lower() for header in vary_headers])
+ additional_headers = [newheader for newheader in newheaders
+ if newheader.lower() not in existing_headers]
+ response['Vary'] = ', '.join(vary_headers + additional_headers)
def _generate_cache_key(request, headerlist, key_prefix):
"""Returns a cache key from the headers given in the header list."""
@@ -169,7 +172,7 @@ def learn_cache_key(request, response, cache_timeout=None, key_prefix=None):
key_prefix, iri_to_uri(request.path))
if response.has_header('Vary'):
headerlist = ['HTTP_'+header.upper().replace('-', '_')
- for header in vary_delim_re.split(response['Vary'])]
+ for header in cc_delim_re.split(response['Vary'])]
cache.set(cache_key, headerlist, cache_timeout)
return _generate_cache_key(request, headerlist, key_prefix)
else:
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index 549aa3f183..ffdc73f922 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -7,9 +7,9 @@ class MergeDict(object):
self.dicts = dicts
def __getitem__(self, key):
- for dict in self.dicts:
+ for dict_ in self.dicts:
try:
- return dict[key]
+ return dict_[key]
except KeyError:
pass
raise KeyError
@@ -24,22 +24,22 @@ class MergeDict(object):
return default
def getlist(self, key):
- for dict in self.dicts:
+ for dict_ in self.dicts:
try:
- return dict.getlist(key)
+ return dict_.getlist(key)
except KeyError:
pass
raise KeyError
def items(self):
item_list = []
- for dict in self.dicts:
- item_list.extend(dict.items())
+ for dict_ in self.dicts:
+ item_list.extend(dict_.items())
return item_list
def has_key(self, key):
- for dict in self.dicts:
- if key in dict:
+ for dict_ in self.dicts:
+ if key in dict_:
return True
return False
@@ -56,7 +56,7 @@ class SortedDict(dict):
def __init__(self, data=None):
if data is None:
data = {}
- dict.__init__(self, data)
+ super(SortedDict, self).__init__(data)
if isinstance(data, dict):
self.keyOrder = data.keys()
else:
@@ -68,12 +68,12 @@ class SortedDict(dict):
for key, value in self.iteritems()])
def __setitem__(self, key, value):
- dict.__setitem__(self, key, value)
+ super(SortedDict, self).__setitem__(key, value)
if key not in self.keyOrder:
self.keyOrder.append(key)
def __delitem__(self, key):
- dict.__delitem__(self, key)
+ super(SortedDict, self).__delitem__(key)
self.keyOrder.remove(key)
def __iter__(self):
@@ -81,7 +81,7 @@ class SortedDict(dict):
yield k
def pop(self, k, *args):
- result = dict.pop(self, k, *args)
+ result = super(SortedDict, self).pop(k, *args)
try:
self.keyOrder.remove(k)
except ValueError:
@@ -90,7 +90,7 @@ class SortedDict(dict):
return result
def popitem(self):
- result = dict.popitem(self)
+ result = super(SortedDict, self).popitem()
self.keyOrder.remove(result[0])
return result
@@ -99,7 +99,7 @@ class SortedDict(dict):
def iteritems(self):
for key in self.keyOrder:
- yield key, dict.__getitem__(self, key)
+ yield key, super(SortedDict, self).__getitem__(key)
def keys(self):
return self.keyOrder[:]
@@ -108,20 +108,20 @@ class SortedDict(dict):
return iter(self.keyOrder)
def values(self):
- return [dict.__getitem__(self, k) for k in self.keyOrder]
+ return [super(SortedDict, self).__getitem__(k) for k in self.keyOrder]
def itervalues(self):
for key in self.keyOrder:
- yield dict.__getitem__(self, key)
+ yield super(SortedDict, self).__getitem__(key)
- def update(self, dict):
- for k, v in dict.items():
+ def update(self, dict_):
+ for k, v in dict_.items():
self.__setitem__(k, v)
def setdefault(self, key, default):
if key not in self.keyOrder:
self.keyOrder.append(key)
- return dict.setdefault(self, key, default)
+ return super(SortedDict, self).setdefault(key, default)
def value_for_index(self, index):
"""Returns the value of the item at the given zero-based index."""
@@ -135,7 +135,7 @@ class SortedDict(dict):
if n < index:
index -= 1
self.keyOrder.insert(index, key)
- dict.__setitem__(self, key, value)
+ super(SortedDict, self).__setitem__(key, value)
def copy(self):
"""Returns a copy of this object."""
@@ -173,10 +173,11 @@ class MultiValueDict(dict):
single name-value pairs.
"""
def __init__(self, key_to_list_mapping=()):
- dict.__init__(self, key_to_list_mapping)
+ super(MultiValueDict, self).__init__(key_to_list_mapping)
def __repr__(self):
- return "<%s: %s>" % (self.__class__.__name__, dict.__repr__(self))
+ return "<%s: %s>" % (self.__class__.__name__,
+ super(MultiValueDict, self).__repr__())
def __getitem__(self, key):
"""
@@ -184,7 +185,7 @@ class MultiValueDict(dict):
raises KeyError if not found.
"""
try:
- list_ = dict.__getitem__(self, key)
+ list_ = super(MultiValueDict, self).__getitem__(key)
except KeyError:
raise MultiValueDictKeyError, "Key %r not found in %r" % (key, self)
try:
@@ -193,10 +194,10 @@ class MultiValueDict(dict):
return []
def __setitem__(self, key, value):
- dict.__setitem__(self, key, [value])
+ super(MultiValueDict, self).__setitem__(key, [value])
def __copy__(self):
- return self.__class__(dict.items(self))
+ return self.__class__(super(MultiValueDict, self).items())
def __deepcopy__(self, memo=None):
import copy
@@ -210,7 +211,10 @@ class MultiValueDict(dict):
return result
def get(self, key, default=None):
- """Returns the default value if the requested data doesn't exist."""
+ """
+ Returns the last data value for the passed key. If key doesn't exist
+ or value is an empty list, then default is returned.
+ """
try:
val = self[key]
except KeyError:
@@ -220,14 +224,17 @@ class MultiValueDict(dict):
return val
def getlist(self, key):
- """Returns an empty list if the requested data doesn't exist."""
+ """
+ Returns the list of values for the passed key. If key doesn't exist,
+ then an empty list is returned.
+ """
try:
- return dict.__getitem__(self, key)
+ return super(MultiValueDict, self).__getitem__(key)
except KeyError:
return []
def setlist(self, key, list_):
- dict.__setitem__(self, key, list_)
+ super(MultiValueDict, self).__setitem__(key, list_)
def setdefault(self, key, default=None):
if key not in self:
@@ -242,7 +249,7 @@ class MultiValueDict(dict):
def appendlist(self, key, value):
"""Appends an item to the internal list associated with key."""
self.setlistdefault(key, [])
- dict.__setitem__(self, key, self.getlist(key) + [value])
+ super(MultiValueDict, self).__setitem__(key, self.getlist(key) + [value])
def items(self):
"""
@@ -253,7 +260,7 @@ class MultiValueDict(dict):
def lists(self):
"""Returns a list of (key, list) pairs."""
- return dict.items(self)
+ return super(MultiValueDict, self).items()
def values(self):
"""Returns a list of the last value on every key list."""
@@ -315,7 +322,7 @@ class DotExpandedDict(dict):
try:
current[bits[-1]] = v
except TypeError: # Special-case if current isn't a dict.
- current = {bits[-1] : v}
+ current = {bits[-1]: v}
class FileDict(dict):
"""
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py
index c95c842a4f..a7259b3ce5 100644
--- a/django/utils/translation/trans_real.py
+++ b/django/utils/translation/trans_real.py
@@ -168,10 +168,9 @@ def translation(language):
res.merge(t)
return res
- if hasattr(settings, 'LOCALE_PATHS'):
- for localepath in settings.LOCALE_PATHS:
- if os.path.isdir(localepath):
- res = _merge(localepath)
+ for localepath in settings.LOCALE_PATHS:
+ if os.path.isdir(localepath):
+ res = _merge(localepath)
if projectpath and os.path.isdir(projectpath):
res = _merge(projectpath)