8383
8484try :
8585 from typeutils import make_sentinel
86- _MISSING = make_sentinel (var_name = '_MISSING' )
86+
87+ _MISSING = make_sentinel (var_name = "_MISSING" )
8788except ImportError :
8889 _MISSING = object ()
8990
9091
9192PREV , NEXT , KEY , VALUE , SPREV , SNEXT = range (6 )
9293
9394
94- __all__ = ['MultiDict' , 'OMD' , 'OrderedMultiDict' , 'OneToOne' , 'ManyToMany' , 'subdict' , 'FrozenDict' ]
95+ __all__ = [
96+ "MultiDict" ,
97+ "OMD" ,
98+ "OrderedMultiDict" ,
99+ "OneToOne" ,
100+ "ManyToMany" ,
101+ "subdict" ,
102+ "FrozenDict" ,
103+ ]
95104
96105try :
97106 profile
@@ -173,10 +182,13 @@ class OrderedMultiDict(dict):
173182 behavior, just use :meth:`~OrderedMultiDict.todict()`.
174183
175184 """
185+
176186 def __init__ (self , * args , ** kwargs ):
177187 if len (args ) > 1 :
178- raise TypeError ('%s expected at most 1 argument, got %s'
179- % (self .__class__ .__name__ , len (args )))
188+ raise TypeError (
189+ "%s expected at most 1 argument, got %s"
190+ % (self .__class__ .__name__ , len (args ))
191+ )
180192 super (OrderedMultiDict , self ).__init__ ()
181193
182194 self ._clear_ll ()
@@ -293,7 +305,7 @@ def update(self, E, **F):
293305 del self [k ]
294306 for k , v in E .iteritems (multi = True ):
295307 self_add (k , v )
296- elif callable (getattr (E , ' keys' , None )):
308+ elif callable (getattr (E , " keys" , None )):
297309 for k in E .keys ():
298310 self [k ] = E [k ]
299311 else :
@@ -318,7 +330,7 @@ def update_extend(self, E, **F):
318330 iterator = iter (E .items ())
319331 elif isinstance (E , OrderedMultiDict ):
320332 iterator = E .iteritems (multi = True )
321- elif hasattr (E , ' keys' ):
333+ elif hasattr (E , " keys" ):
322334 iterator = ((k , E [k ]) for k in E .keys ())
323335 else :
324336 iterator = E
@@ -355,12 +367,13 @@ def __eq__(self, other):
355367 for (selfk , selfv ), (otherk , otherv ) in zipped_items :
356368 if selfk != otherk or selfv != otherv :
357369 return False
358- if not (next (selfi , _MISSING ) is _MISSING
359- and next (otheri , _MISSING ) is _MISSING ):
370+ if not (
371+ next (selfi , _MISSING ) is _MISSING and next (otheri , _MISSING ) is _MISSING
372+ ):
360373 # leftovers (TODO: watch for StopIteration?)
361374 return False
362375 return True
363- elif hasattr (other , ' keys' ):
376+ elif hasattr (other , " keys" ):
364377 for selfk in self :
365378 try :
366379 other [selfk ] == self [selfk ]
@@ -408,7 +421,7 @@ def poplast(self, k=_MISSING, default=_MISSING):
408421 k = self .root [PREV ][KEY ]
409422 else :
410423 if default is _MISSING :
411- raise KeyError (' empty %r' % type (self ))
424+ raise KeyError (" empty %r" % type (self ))
412425 return default
413426 try :
414427 self ._remove (k )
@@ -555,8 +568,12 @@ def sortedvalues(self, key=None, reverse=False):
555568 except AttributeError :
556569 superself_iteritems = super (OrderedMultiDict , self ).items ()
557570 # (not reverse) because they pop off in reverse order for reinsertion
558- sorted_val_map = dict ([(k , sorted (v , key = key , reverse = (not reverse )))
559- for k , v in superself_iteritems ])
571+ sorted_val_map = dict (
572+ [
573+ (k , sorted (v , key = key , reverse = (not reverse )))
574+ for k , v in superself_iteritems
575+ ]
576+ )
560577 ret = self .__class__ ()
561578 for k in self .iterkeys (multi = True ):
562579 ret .add (k , sorted_val_map [k ].pop ())
@@ -626,8 +643,8 @@ def __reversed__(self):
626643
627644 def __repr__ (self ):
628645 cn = self .__class__ .__name__
629- kvs = ', ' .join ([repr ((k , v )) for k , v in self .iteritems (multi = True )])
630- return ' %s([%s])' % (cn , kvs )
646+ kvs = ", " .join ([repr ((k , v )) for k , v in self .iteritems (multi = True )])
647+ return " %s([%s])" % (cn , kvs )
631648
632649 def viewkeys (self ):
633650 "OMD.viewkeys() -> a set-like object providing a view on OMD's keys"
@@ -652,6 +669,7 @@ class FastIterOrderedMultiDict(OrderedMultiDict):
652669 is faster and uses constant memory but adding duplicate key-value
653670 pairs is slower. Brainchild of Mark Williams.
654671 """
672+
655673 def _clear_ll (self ):
656674 # TODO: always reset objects? (i.e., no else block below)
657675 try :
@@ -660,9 +678,7 @@ def _clear_ll(self):
660678 _map = self ._map = {}
661679 self .root = []
662680 _map .clear ()
663- self .root [:] = [self .root , self .root ,
664- None , None ,
665- self .root , self .root ]
681+ self .root [:] = [self .root , self .root , None , None , self .root , self .root ]
666682
667683 def _insert (self , k , v ):
668684 root = self .root
@@ -671,9 +687,7 @@ def _insert(self, k, v):
671687 last = root [PREV ]
672688
673689 if cells is empty :
674- cell = [last , root ,
675- k , v ,
676- last , root ]
690+ cell = [last , root , k , v , last , root ]
677691 # was the last one skipped?
678692 if last [SPREV ][SNEXT ] is root :
679693 last [SPREV ][SNEXT ] = cell
@@ -683,9 +697,7 @@ def _insert(self, k, v):
683697 # if the previous was skipped, go back to the cell that
684698 # skipped it
685699 sprev = last [SPREV ] if (last [SPREV ][SNEXT ] is not last ) else last
686- cell = [last , root ,
687- k , v ,
688- sprev , root ]
700+ cell = [last , root , k , v , sprev , root ]
689701 # skip me
690702 last [SNEXT ] = root
691703 last [NEXT ] = root [PREV ] = root [SPREV ] = cell
@@ -777,7 +789,8 @@ class OneToOne(dict):
777789 For a very similar project, with even more one-to-one
778790 functionality, check out `bidict <https://github.com/jab/bidict>`_.
779791 """
780- __slots__ = ('inv' ,)
792+
793+ __slots__ = ("inv" ,)
781794
782795 def __init__ (self , * a , ** kw ):
783796 raise_on_dupe = False
@@ -807,11 +820,14 @@ def __init__(self, *a, **kw):
807820 for k , v in self .items ():
808821 val_multidict .setdefault (v , []).append (k )
809822
810- dupes = dict ([(v , k_list ) for v , k_list in
811- val_multidict .items () if len (k_list ) > 1 ])
823+ dupes = dict (
824+ [(v , k_list ) for v , k_list in val_multidict .items () if len (k_list ) > 1 ]
825+ )
812826
813- raise ValueError ('expected unique values, got multiple keys for'
814- ' the following values: %r' % dupes )
827+ raise ValueError (
828+ "expected unique values, got multiple keys for"
829+ " the following values: %r" % dupes
830+ )
815831
816832 @classmethod
817833 def unique (cls , * a , ** kw ):
@@ -907,6 +923,7 @@ class ManyToMany(object):
907923
908924 also, can be used as a directed graph among hashable python objects
909925 """
926+
910927 def __init__ (self , items = None ):
911928 self .data = {}
912929 if type (items ) is tuple and items and items [0 ] is _PAIRING :
@@ -956,7 +973,7 @@ def update(self, iterable):
956973 self .inv .data [k ] = other .inv .data [k ]
957974 else :
958975 self .inv .data [k ].update (other .inv .data [k ])
959- elif callable (getattr (iterable , ' keys' , None )):
976+ elif callable (getattr (iterable , " keys" , None )):
960977 for k in iterable .keys ():
961978 self .add (k , iterable [k ])
962979 else :
@@ -1014,7 +1031,7 @@ def __eq__(self, other):
10141031
10151032 def __repr__ (self ):
10161033 cn = self .__class__ .__name__
1017- return ' %s(%r)' % (cn , list (self .iteritems ()))
1034+ return " %s(%r)" % (cn , list (self .iteritems ()))
10181035
10191036
10201037def subdict (d , keep = None , drop = None ):
@@ -1066,7 +1083,8 @@ class FrozenDict(dict):
10661083 works everywhere a dict would, including JSON serialization.
10671084
10681085 """
1069- __slots__ = ('_hash' ,)
1086+
1087+ __slots__ = ("_hash" ,)
10701088
10711089 def updated (self , * a , ** kw ):
10721090 """Make a copy and add items from a dictionary or iterable (and/or
@@ -1084,7 +1102,7 @@ def fromkeys(cls, keys, value=None):
10841102
10851103 def __repr__ (self ):
10861104 cn = self .__class__ .__name__
1087- return ' %s(%s)' % (cn , dict .__repr__ (self ))
1105+ return " %s(%s)" % (cn , dict .__repr__ (self ))
10881106
10891107 def __reduce_ex__ (self , protocol ):
10901108 return type (self ), (dict (self ),)
@@ -1109,7 +1127,7 @@ def __copy__(self):
11091127 # block everything else
11101128 def _raise_frozen_typeerror (self , * a , ** kw ):
11111129 "raises a TypeError, because FrozenDicts are immutable"
1112- raise TypeError (' %s object is immutable' % self .__class__ .__name__ )
1130+ raise TypeError (" %s object is immutable" % self .__class__ .__name__ )
11131131
11141132 __ior__ = __setitem__ = __delitem__ = update = _raise_frozen_typeerror
11151133 setdefault = pop = popitem = clear = _raise_frozen_typeerror
0 commit comments