Django

Code

Changeset 2578

Show
Ignore:
Timestamp:
03/28/06 11:31:04 (2 years ago)
Author:
adrian
Message:

Fixed #1539 in trunk

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/utils/datastructures.py

    r1819 r2578  
    8181            return [] 
    8282 
    83     def _setitem_list(self, key, value): 
     83    def __setitem__(self, key, value): 
    8484        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 
    8696 
    8797    def get(self, key, default=None): 
     
    137147    def copy(self): 
    138148        "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__() 
    145150 
    146151    def update(self, other_dict): 
  • django/trunk/django/utils/httpwrappers.py

    r1816 r2578  
    6767    """A specialized MultiValueDict that takes a query string when initialized. 
    6868    This is immutable unless you create a copy of it.""" 
    69     def __init__(self, query_string): 
     69    def __init__(self, query_string, mutable=False): 
    7070        MultiValueDict.__init__(self) 
    7171        self._mutable = True 
    7272        for key, value in parse_qsl((query_string or ''), True): # keep_blank_values=True 
    7373            self.appendlist(key, value) 
    74         self._mutable = Fals
     74        self._mutable = mutabl
    7575 
    7676    def _assert_mutable(self): 
     
    7878            raise AttributeError, "This QueryDict instance is immutable" 
    7979 
    80     def _setitem_if_mutable(self, key, value): 
     80    def __setitem__(self, key, value): 
    8181        self._assert_mutable() 
    8282        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 
    8497 
    8598    def setlist(self, key, list_): 
     
    113126    def copy(self): 
    114127        "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__() 
    122129 
    123130    def urlencode(self):