@@ -373,15 +373,34 @@ def __ne__(self, other: typing.Any) -> bool:
373373 return not self .__eq__ (other )
374374
375375 def keys (self ) -> typing .KeysView [str ]:
376+ """
377+ :returns: a set-like object providing a view on D's keys
378+ :rtype: ~typing.KeysView
379+ """
376380 return self ._data .keys ()
377381
378382 def values (self ) -> typing .ValuesView [typing .Any ]:
383+ """
384+ :returns: an object providing a view on D's values
385+ :rtype: ~typing.ValuesView
386+ """
379387 return self ._data .values ()
380388
381389 def items (self ) -> typing .ItemsView [str , typing .Any ]:
390+ """
391+ :returns: set-like object providing a view on D's items
392+ :rtype: ~typing.ItemsView
393+ """
382394 return self ._data .items ()
383395
384396 def get (self , key : str , default : typing .Any = None ) -> typing .Any :
397+ """
398+ Get the value for key if key is in the dictionary, else default.
399+ :param str key: The key to look up.
400+ :param any default: The value to return if key is not in the dictionary. Defaults to None
401+ :returns: D[k] if k in D, else d.
402+ :rtype: any
403+ """
385404 try :
386405 return self [key ]
387406 except KeyError :
@@ -397,17 +416,38 @@ def pop(self, key: str, default: _T) -> _T: ...
397416 def pop (self , key : str , default : typing .Any ) -> typing .Any : ...
398417
399418 def pop (self , key : str , default : typing .Any = _UNSET ) -> typing .Any :
419+ """
420+ Removes specified key and return the corresponding value.
421+ :param str key: The key to pop.
422+ :param any default: The value to return if key is not in the dictionary
423+ :returns: The value corresponding to the key.
424+ :rtype: any
425+ :raises KeyError: If key is not found and default is not given.
426+ """
400427 if default is _UNSET :
401428 return self ._data .pop (key )
402429 return self ._data .pop (key , default )
403430
404431 def popitem (self ) -> typing .Tuple [str , typing .Any ]:
432+ """
433+ Removes and returns some (key, value) pair
434+ :returns: The (key, value) pair.
435+ :rtype: tuple
436+ :raises KeyError: if D is empty.
437+ """
405438 return self ._data .popitem ()
406439
407440 def clear (self ) -> None :
441+ """
442+ Remove all items from D.
443+ """
408444 self ._data .clear ()
409445
410446 def update (self , * args : typing .Any , ** kwargs : typing .Any ) -> None :
447+ """
448+ Updates D from mapping/iterable E and F.
449+ :param any args: Either a mapping object or an iterable of key-value pairs.
450+ """
411451 self ._data .update (* args , ** kwargs )
412452
413453 @typing .overload
@@ -417,6 +457,13 @@ def setdefault(self, key: str, default: None = None) -> None: ...
417457 def setdefault (self , key : str , default : typing .Any ) -> typing .Any : ...
418458
419459 def setdefault (self , key : str , default : typing .Any = _UNSET ) -> typing .Any :
460+ """
461+ Same as calling D.get(k, d), and setting D[k]=d if k not found
462+ :param str key: The key to look up.
463+ :param any default: The value to set if key is not in the dictionary
464+ :returns: D[k] if k in D, else d.
465+ :rtype: any
466+ """
420467 if default is _UNSET :
421468 return self ._data .setdefault (key )
422469 return self ._data .setdefault (key , default )
@@ -754,7 +801,7 @@ def _get_deserialize_callable_from_annotation( # pylint: disable=too-many-retur
754801 except AttributeError :
755802 model_name = annotation
756803 if module is not None :
757- annotation = _get_model (module , model_name )
804+ annotation = _get_model (module , model_name ) # type: ignore
758805
759806 try :
760807 if module and _is_model (annotation ):
@@ -894,6 +941,35 @@ def _deserialize(
894941 return _deserialize_with_callable (deserializer , value )
895942
896943
944+ def _failsafe_deserialize (
945+ deserializer : typing .Any ,
946+ value : typing .Any ,
947+ module : typing .Optional [str ] = None ,
948+ rf : typing .Optional ["_RestField" ] = None ,
949+ format : typing .Optional [str ] = None ,
950+ ) -> typing .Any :
951+ try :
952+ return _deserialize (deserializer , value , module , rf , format )
953+ except DeserializationError :
954+ _LOGGER .warning (
955+ "Ran into a deserialization error. Ignoring since this is failsafe deserialization" , exc_info = True
956+ )
957+ return None
958+
959+
960+ def _failsafe_deserialize_xml (
961+ deserializer : typing .Any ,
962+ value : typing .Any ,
963+ ) -> typing .Any :
964+ try :
965+ return _deserialize_xml (deserializer , value )
966+ except DeserializationError :
967+ _LOGGER .warning (
968+ "Ran into a deserialization error. Ignoring since this is failsafe deserialization" , exc_info = True
969+ )
970+ return None
971+
972+
897973class _RestField :
898974 def __init__ (
899975 self ,
0 commit comments