Source code for dynamic_rest.tagged

"""This module contains tagging utilities for DREST data structures."""
from collections import OrderedDict


[docs]def tag_dict(obj, *args, **kwargs): """Create a TaggedDict instance. Will either be a TaggedOrderedDict or TaggedPlainDict depending on the type of `obj`.""" if isinstance(obj, OrderedDict): return _TaggedOrderedDict(obj, *args, **kwargs) else: return _TaggedPlainDict(obj, *args, **kwargs)
[docs]class TaggedDict(object):
""" Return object from `to_representation` for the `Serializer` class. Includes a reference to the `instance` and the `serializer` represented. """ def __init__(self, *args, **kwargs): self.serializer = kwargs.pop('serializer') self.instance = kwargs.pop('instance') self.embed = kwargs.pop('embed', False) if not isinstance(self, dict): raise Exception( "TaggedDict constructed not as a dict" ) super(TaggedDict, self).__init__(*args, **kwargs) def copy(self): return tag_dict( self, serializer=self.serializer, instance=self.instance, embed=self.embed ) def __repr__(self): return dict.__repr__(self) def __reduce__(self): return (dict, (dict(self),)) class _TaggedPlainDict(TaggedDict, dict): pass class _TaggedOrderedDict(TaggedDict, OrderedDict): pass