| from collections import OrderedDict |
|
|
|
|
| class OrderedEasyDict(OrderedDict): |
| """Using OrderedDict for the `easydict` package |
| See Also https://pypi.python.org/pypi/easydict/ |
| """ |
| def __init__(self, d=None, **kwargs): |
| super(OrderedEasyDict, self).__init__() |
| if d is None: |
| d = OrderedDict() |
| if kwargs: |
| d.update(**kwargs) |
| for k, v in d.items(): |
| setattr(self, k, v) |
| |
| for k in self.__class__.__dict__.keys(): |
| if not (k.startswith('__') and k.endswith('__')): |
| setattr(self, k, getattr(self, k)) |
|
|
| def __setattr__(self, name, value): |
| |
| if name.startswith('_') and (name.endswith('__root') or name.endswith('__map')): |
| super(OrderedEasyDict, self).__setattr__(name, value) |
| else: |
| if isinstance(value, (list, tuple)): |
| value = [self.__class__(x) |
| if isinstance(x, dict) else x for x in value] |
| else: |
| value = self.__class__(value) if isinstance(value, dict) else value |
| super(OrderedEasyDict, self).__setattr__(name, value) |
| super(OrderedEasyDict, self).__setitem__(name, value) |
|
|
| __setitem__ = __setattr__ |
|
|
| if __name__ == "__main__": |
| import doctest |
| doctest.testmod() |