#coding=utf8 TRANSLATE = 'Chinese' class ReturnValue(dict): ''' turn return value of itchat into a boolean value for requests: ..code::python import requests r = requests.get('http://httpbin.org/get') print(ReturnValue(rawResponse=r) for normal dict: ..code::python returnDict = { 'BaseResponse': { 'Ret': 0, 'ErrMsg': 'My error msg', }, } print(ReturnValue(returnDict)) ''' def __init__(self, returnValueDict={}, rawResponse=None): if rawResponse: try: returnValueDict = rawResponse.json() except ValueError: returnValueDict = { 'BaseResponse': { 'Ret': -1004, 'ErrMsg': 'Unexpected return value', }, 'Data': rawResponse.content, } for k, v in returnValueDict.items(): self[k] = v if not 'BaseResponse' in self: self['BaseResponse'] = { 'ErrMsg': 'no BaseResponse in raw response', 'Ret': -1000, } if TRANSLATE: self['BaseResponse']['RawMsg'] = self['BaseResponse'].get('ErrMsg', '') self['BaseResponse']['ErrMsg'] = \ TRANSLATION[TRANSLATE].get( self['BaseResponse'].get('Ret', '')) \ or self['BaseResponse'].get('ErrMsg', u'No ErrMsg') self['BaseResponse']['RawMsg'] = \ self['BaseResponse']['RawMsg'] or self['BaseResponse']['ErrMsg'] def __nonzero__(self): return self['BaseResponse'].get('Ret') == 0 def __bool__(self): return self.__nonzero__() def __str__(self): return '{%s}' % ', '.join( ['%s: %s' % (repr(k),repr(v)) for k,v in self.items()]) def __repr__(self): return '' % self.__str__() TRANSLATION = { 'Chinese': { -1000: u'返回值不带BaseResponse', -1001: u'无法找到对应的成员', -1002: u'文件位置错误', -1003: u'服务器拒绝连接', -1004: u'服务器返回异常值', -1005: u'参数错误', -1006: u'无效操作', 0: u'请求成功', }, }