Skip to content

Commit 2da746f

Browse files
committed
correct types
1 parent cb6d6f3 commit 2da746f

2 files changed

Lines changed: 130 additions & 107 deletions

File tree

boltons/dictutils.py

Lines changed: 51 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,24 @@
8383

8484
try:
8585
from typeutils import make_sentinel
86-
_MISSING = make_sentinel(var_name='_MISSING')
86+
87+
_MISSING = make_sentinel(var_name="_MISSING")
8788
except ImportError:
8889
_MISSING = object()
8990

9091

9192
PREV, 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

96105
try:
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

10201037
def 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

Comments
 (0)