1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- # -*- coding: utf-8 -*-
- __all__ = ("Map", "WeixinError")
- try:
- unicode = unicode
- except NameError:
- # python 3
- basestring = (str, bytes)
- else:
- # python 2
- bytes = str
- class WeixinError(Exception):
- def __init__(self, msg):
- super(WeixinError, self).__init__(msg)
- class Map(dict):
- """
- 提供字典的dot访问模式
- Example:
- m = Map({'first_name': 'Eduardo'}, last_name='Pool', age=24, sports=['Soccer'])
- """
- def __init__(self, *args, **kwargs):
- super(Map, self).__init__(*args, **kwargs)
- for arg in args:
- if isinstance(arg, dict):
- for k, v in arg.items():
- if isinstance(v, dict):
- v = Map(v)
- self[k] = v
- if kwargs:
- for k, v in kwargs.items():
- if isinstance(v, dict):
- v = Map(v)
- self[k] = v
- def __getattr__(self, attr):
- return self[attr]
- def __setattr__(self, key, value):
- self.__setitem__(key, value)
- def __getitem__(self, key):
- if key not in self.__dict__:
- super(Map, self).__setitem__(key, {})
- self.__dict__.update({key: Map()})
- return self.__dict__[key]
- def __setitem__(self, key, value):
- super(Map, self).__setitem__(key, value)
- self.__dict__.update({key: value})
- def __delattr__(self, item):
- self.__delitem__(item)
- def __delitem__(self, key):
- super(Map, self).__delitem__(key)
- del self.__dict__[key]
|