Django

Code

Changeset 6593

Show
Ignore:
Timestamp:
10/21/07 19:52:54 (1 year ago)
Author:
mtredinnick
Message:

Fixed #5183 -- Added deepcopy, pop() and popitem() to SortedDict. Based on
a patch from David Blewett.

Files:

Legend:

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

    r6528 r6593  
    6363            self.keyOrder = [key for key, value in data] 
    6464 
     65    def __deepcopy__(self,memo): 
     66        from copy import deepcopy 
     67        obj = self.__class__() 
     68        for k, v in self.items(): 
     69            obj[k] = deepcopy(v, memo) 
     70        return obj 
     71 
    6572    def __setitem__(self, key, value): 
    6673        dict.__setitem__(self, key, value) 
     
    7582        for k in self.keyOrder: 
    7683            yield k 
     84 
     85    def pop(self, k, *args): 
     86        result = dict.pop(self, k, *args) 
     87        try: 
     88            self.keyOrder.remove(k) 
     89        except ValueError: 
     90            # Key wasn't in the dictionary in the first place. No problem. 
     91            pass 
     92        return result 
     93 
     94    def popitem(self): 
     95        result = dict.popitem(self) 
     96        self.keyOrder.remove(result[0]) 
     97        return result 
    7798 
    7899    def items(self): 
  • django/trunk/tests/regressiontests/datastructures/tests.py

    r6506 r6593  
    5555>>> print repr(d) 
    5656{'one': 'not one', 'two': 'two', 'three': 'three'} 
     57>>> d.pop('one', 'missing') 
     58'not one' 
     59>>> d.pop('one', 'missing') 
     60'missing' 
     61 
     62We don't know which item will be popped in popitem(), so we'll just check that 
     63the number of keys has decreased. 
     64>>> l = len(d) 
     65>>> _ = d.popitem() 
     66>>> l - len(d) 
     671 
    5768 
    5869Init from sequence of tuples