11from __future__ import absolute_import , unicode_literals
22
3+ import copy
34import datetime
45import os
56import re
@@ -360,6 +361,7 @@ def xreadlines(self):
360361 def readlines (self ):
361362 return list (iter (self ))
362363
364+
363365class QueryDict (MultiValueDict ):
364366 """
365367 A specialized MultiValueDict that takes a query string when initialized.
@@ -374,7 +376,7 @@ class QueryDict(MultiValueDict):
374376 _encoding = None
375377
376378 def __init__ (self , query_string , mutable = False , encoding = None ):
377- MultiValueDict .__init__ (self )
379+ super ( QueryDict , self ) .__init__ ()
378380 if not encoding :
379381 encoding = settings .DEFAULT_CHARSET
380382 self .encoding = encoding
@@ -401,72 +403,58 @@ def __setitem__(self, key, value):
401403 self ._assert_mutable ()
402404 key = str_to_unicode (key , self .encoding )
403405 value = str_to_unicode (value , self .encoding )
404- MultiValueDict . __setitem__ ( self , key , value )
406+ super ( QueryDict , self ). __setitem__ ( key , value )
405407
406408 def __delitem__ (self , key ):
407409 self ._assert_mutable ()
408410 super (QueryDict , self ).__delitem__ (key )
409411
410412 def __copy__ (self ):
411413 result = self .__class__ ('' , mutable = True , encoding = self .encoding )
412- for key , value in dict . items ( self ):
413- dict . __setitem__ ( result , key , value )
414+ for key , value in self . iterlists ( ):
415+ result . setlist ( key , value )
414416 return result
415417
416418 def __deepcopy__ (self , memo ):
417- import copy
418419 result = self .__class__ ('' , mutable = True , encoding = self .encoding )
419420 memo [id (self )] = result
420- for key , value in dict . items ( self ):
421- dict . __setitem__ ( result , copy .deepcopy (key , memo ), copy .deepcopy (value , memo ))
421+ for key , value in self . iterlists ( ):
422+ result . setlist ( copy .deepcopy (key , memo ), copy .deepcopy (value , memo ))
422423 return result
423424
424425 def setlist (self , key , list_ ):
425426 self ._assert_mutable ()
426427 key = str_to_unicode (key , self .encoding )
427428 list_ = [str_to_unicode (elt , self .encoding ) for elt in list_ ]
428- MultiValueDict . setlist ( self , key , list_ )
429+ super ( QueryDict , self ). setlist ( key , list_ )
429430
430- def setlistdefault (self , key , default_list = () ):
431+ def setlistdefault (self , key , default_list = None ):
431432 self ._assert_mutable ()
432- if key not in self :
433- self .setlist (key , default_list )
434- return MultiValueDict .getlist (self , key )
433+ return super (QueryDict , self ).setlistdefault (key , default_list )
435434
436435 def appendlist (self , key , value ):
437436 self ._assert_mutable ()
438437 key = str_to_unicode (key , self .encoding )
439438 value = str_to_unicode (value , self .encoding )
440- MultiValueDict .appendlist (self , key , value )
441-
442- def update (self , other_dict ):
443- self ._assert_mutable ()
444- f = lambda s : str_to_unicode (s , self .encoding )
445- if hasattr (other_dict , 'lists' ):
446- for key , valuelist in other_dict .lists ():
447- for value in valuelist :
448- MultiValueDict .update (self , {f (key ): f (value )})
449- else :
450- d = dict ([(f (k ), f (v )) for k , v in other_dict .items ()])
451- MultiValueDict .update (self , d )
439+ super (QueryDict , self ).appendlist (key , value )
452440
453441 def pop (self , key , * args ):
454442 self ._assert_mutable ()
455- return MultiValueDict . pop ( self , key , * args )
443+ return super ( QueryDict , self ). pop ( key , * args )
456444
457445 def popitem (self ):
458446 self ._assert_mutable ()
459- return MultiValueDict .popitem (self )
447+ return super ( QueryDict , self ) .popitem ()
460448
461449 def clear (self ):
462450 self ._assert_mutable ()
463- MultiValueDict .clear (self )
451+ super ( QueryDict , self ) .clear ()
464452
465453 def setdefault (self , key , default = None ):
466454 self ._assert_mutable ()
467455 key = str_to_unicode (key , self .encoding )
468456 default = str_to_unicode (default , self .encoding )
469- return MultiValueDict . setdefault ( self , key , default )
457+ return super ( QueryDict , self ). setdefault ( key , default )
470458
471459 def copy (self ):
472460 """Returns a mutable copy of this object."""
@@ -499,6 +487,7 @@ def urlencode(self, safe=None):
499487 for v in list_ ])
500488 return '&' .join (output )
501489
490+
502491def parse_cookie (cookie ):
503492 if cookie == '' :
504493 return {}
0 commit comments