11import weakref
2- import functools
32import itertools
3+
44from mongoengine .common import _import_class
55from mongoengine .errors import DoesNotExist , MultipleObjectsReturned
66
@@ -21,7 +21,7 @@ def __init__(self, dict_items, instance, name):
2121 if isinstance (instance , (Document , EmbeddedDocument )):
2222 self ._instance = weakref .proxy (instance )
2323 self ._name = name
24- return super (BaseDict , self ).__init__ (dict_items )
24+ super (BaseDict , self ).__init__ (dict_items )
2525
2626 def __getitem__ (self , key , * args , ** kwargs ):
2727 value = super (BaseDict , self ).__getitem__ (key )
@@ -66,15 +66,15 @@ def __setstate__(self, state):
6666
6767 def clear (self , * args , ** kwargs ):
6868 self ._mark_as_changed ()
69- return super (BaseDict , self ).clear (* args , ** kwargs )
69+ return super (BaseDict , self ).clear ()
7070
7171 def pop (self , * args , ** kwargs ):
7272 self ._mark_as_changed ()
7373 return super (BaseDict , self ).pop (* args , ** kwargs )
7474
7575 def popitem (self , * args , ** kwargs ):
7676 self ._mark_as_changed ()
77- return super (BaseDict , self ).popitem (* args , ** kwargs )
77+ return super (BaseDict , self ).popitem ()
7878
7979 def setdefault (self , * args , ** kwargs ):
8080 self ._mark_as_changed ()
@@ -190,7 +190,7 @@ def remove(self, *args, **kwargs):
190190
191191 def reverse (self , * args , ** kwargs ):
192192 self ._mark_as_changed ()
193- return super (BaseList , self ).reverse (* args , ** kwargs )
193+ return super (BaseList , self ).reverse ()
194194
195195 def sort (self , * args , ** kwargs ):
196196 self ._mark_as_changed ()
@@ -369,45 +369,58 @@ class StrictDict(object):
369369 __slots__ = ()
370370 _special_fields = set (['get' , 'pop' , 'iteritems' , 'items' , 'keys' , 'create' ])
371371 _classes = {}
372+
372373 def __init__ (self , ** kwargs ):
373- for k ,v in kwargs .iteritems ():
374+ for k , v in kwargs .iteritems ():
374375 setattr (self , k , v )
376+
375377 def __getitem__ (self , key ):
376378 key = '_reserved_' + key if key in self ._special_fields else key
377379 try :
378380 return getattr (self , key )
379381 except AttributeError :
380382 raise KeyError (key )
383+
381384 def __setitem__ (self , key , value ):
382385 key = '_reserved_' + key if key in self ._special_fields else key
383386 return setattr (self , key , value )
387+
384388 def __contains__ (self , key ):
385389 return hasattr (self , key )
390+
386391 def get (self , key , default = None ):
387392 try :
388393 return self [key ]
389394 except KeyError :
390395 return default
396+
391397 def pop (self , key , default = None ):
392398 v = self .get (key , default )
393399 try :
394400 delattr (self , key )
395401 except AttributeError :
396402 pass
397403 return v
404+
398405 def iteritems (self ):
399406 for key in self :
400407 yield key , self [key ]
408+
401409 def items (self ):
402410 return [(k , self [k ]) for k in iter (self )]
411+
403412 def keys (self ):
404413 return list (iter (self ))
414+
405415 def __iter__ (self ):
406416 return (key for key in self .__slots__ if hasattr (self , key ))
417+
407418 def __len__ (self ):
408419 return len (list (self .iteritems ()))
420+
409421 def __eq__ (self , other ):
410422 return self .items () == other .items ()
423+
411424 def __neq__ (self , other ):
412425 return self .items () != other .items ()
413426
@@ -418,15 +431,18 @@ def create(cls, allowed_keys):
418431 if allowed_keys not in cls ._classes :
419432 class SpecificStrictDict (cls ):
420433 __slots__ = allowed_keys_tuple
434+
421435 def __repr__ (self ):
422- return "{%s}" % ', ' .join ('"{0!s}": {0!r}' .format (k ,v ) for (k ,v ) in self .iteritems ())
436+ return "{%s}" % ', ' .join ('"{0!s}": {0!r}' .format (k , v ) for (k , v ) in self .iteritems ())
437+
423438 cls ._classes [allowed_keys ] = SpecificStrictDict
424439 return cls ._classes [allowed_keys ]
425440
426441
427442class SemiStrictDict (StrictDict ):
428443 __slots__ = ('_extras' )
429444 _classes = {}
445+
430446 def __getattr__ (self , attr ):
431447 try :
432448 super (SemiStrictDict , self ).__getattr__ (attr )
@@ -435,6 +451,7 @@ def __getattr__(self, attr):
435451 return self .__getattribute__ ('_extras' )[attr ]
436452 except KeyError as e :
437453 raise AttributeError (e )
454+
438455 def __setattr__ (self , attr , value ):
439456 try :
440457 super (SemiStrictDict , self ).__setattr__ (attr , value )
0 commit comments