""" A dict that implements MutableAttr. """ from attrdict.mixins import MutableAttr import six __all__ = ['AttrDict'] class AttrDict(dict, MutableAttr): """ A dict that implements MutableAttr. """ def __init__(self, *args, **kwargs): super(AttrDict, self).__init__(*args, **kwargs) self._setattr('_sequence_type', tuple) self._setattr('_allow_invalid_attributes', False) def _configuration(self): """ The configuration for an attrmap instance. """ return self._sequence_type def __getstate__(self): """ Serialize the object. """ return ( self.copy(), self._sequence_type, self._allow_invalid_attributes ) def __setstate__(self, state): """ Deserialize the object. """ mapping, sequence_type, allow_invalid_attributes = state self.update(mapping) self._setattr('_sequence_type', sequence_type) self._setattr('_allow_invalid_attributes', allow_invalid_attributes) def __repr__(self): return six.u('AttrDict({contents})').format( contents=super(AttrDict, self).__repr__() ) @classmethod def _constructor(cls, mapping, configuration): """ A standardized constructor. """ attr = cls(mapping) attr._setattr('_sequence_type', configuration) return attr