Changeset 2578
- Timestamp:
- 03/28/06 11:31:04 (2 years ago)
- Files:
-
- django/trunk/django/utils/datastructures.py (modified) (2 diffs)
- django/trunk/django/utils/httpwrappers.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/utils/datastructures.py
r1819 r2578 81 81 return [] 82 82 83 def _ setitem_list(self, key, value):83 def __setitem__(self, key, value): 84 84 dict.__setitem__(self, key, [value]) 85 __setitem__ = _setitem_list 85 86 def __copy__(self): 87 return self.__class__(dict.items(self)) 88 89 def __deepcopy__(self, memo={}): 90 import copy 91 result = self.__class__() 92 memo[id(self)] = result 93 for key, value in dict.items(self): 94 dict.__setitem__(result, copy.deepcopy(key, memo), copy.deepcopy(value, memo)) 95 return result 86 96 87 97 def get(self, key, default=None): … … 137 147 def copy(self): 138 148 "Returns a copy of this object." 139 import copy 140 # Our custom __setitem__ must be disabled for copying machinery. 141 MultiValueDict.__setitem__ = dict.__setitem__ 142 cp = copy.deepcopy(self) 143 MultiValueDict.__setitem__ = MultiValueDict._setitem_list 144 return cp 149 return self.__deepcopy__() 145 150 146 151 def update(self, other_dict): django/trunk/django/utils/httpwrappers.py
r1816 r2578 67 67 """A specialized MultiValueDict that takes a query string when initialized. 68 68 This is immutable unless you create a copy of it.""" 69 def __init__(self, query_string ):69 def __init__(self, query_string, mutable=False): 70 70 MultiValueDict.__init__(self) 71 71 self._mutable = True 72 72 for key, value in parse_qsl((query_string or ''), True): # keep_blank_values=True 73 73 self.appendlist(key, value) 74 self._mutable = False74 self._mutable = mutable 75 75 76 76 def _assert_mutable(self): … … 78 78 raise AttributeError, "This QueryDict instance is immutable" 79 79 80 def _ setitem_if_mutable(self, key, value):80 def __setitem__(self, key, value): 81 81 self._assert_mutable() 82 82 MultiValueDict.__setitem__(self, key, value) 83 __setitem__ = _setitem_if_mutable 83 84 def __copy__(self): 85 result = self.__class__('', mutable=True) 86 for key, value in dict.items(self): 87 dict.__setitem__(result, key, value) 88 return result 89 90 def __deepcopy__(self, memo={}): 91 import copy 92 result = self.__class__('', mutable=True) 93 memo[id(self)] = result 94 for key, value in dict.items(self): 95 dict.__setitem__(result, copy.deepcopy(key, memo), copy.deepcopy(value, memo)) 96 return result 84 97 85 98 def setlist(self, key, list_): … … 113 126 def copy(self): 114 127 "Returns a mutable copy of this object." 115 import copy 116 # Our custom __setitem__ must be disabled for copying machinery. 117 QueryDict.__setitem__ = dict.__setitem__ 118 cp = copy.deepcopy(self) 119 QueryDict.__setitem__ = QueryDict._setitem_if_mutable 120 cp._mutable = True 121 return cp 128 return self.__deepcopy__() 122 129 123 130 def urlencode(self):
