# encoding: UTF-8

'''一个简单的通联数据客户端，主要使用requests开发，比通联官网的python例子更为简洁。'''


import requests
import json

FILENAME = 'datayes.json'
HTTP_OK = 200


########################################################################
class DatayesClient(object):
    """通联数据客户端"""
    
    name = u'通联数据客户端'

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        self.domain = ''    # 主域名
        self.version = ''   # API版本
        self.token = ''     # 授权码
        self.header = {}    # http请求头部
        self.settingLoaded = False  # 配置是否已经读取
        
        self.loadSetting()
        
    #----------------------------------------------------------------------
    def loadSetting(self):
        """载入配置"""
        try:
            path = os.path.abspath(os.path.dirname(__file__))
            FILENAME = os.path.join(path, FILENAME)            
            f = file(FILENAME)
        except IOError:
            print u'%s无法打开配置文件' % self.name
            return
        
        setting = json.load(f)
        try:
            self.domain = str(setting['domain'])
            self.version = str(setting['version'])
            self.token = str(setting['token'])
        except KeyError:
            print u'%s配置文件字段缺失' % self.name
            return
        
        self.header['Connection'] = 'keep_alive'
        self.header['Authorization'] = 'Bearer ' + self.token
        self.settingLoaded = True
        
        print u'%s配置载入完成' % self.name
        
    
    #----------------------------------------------------------------------
    def downloadData(self, path, params):
        """下载数据"""
        if not self.settingLoaded:
            print u'%s配置未载入' % self.name
            return None
        else:
            url = '/'.join([self.domain, self.version, path])
            r = requests.get(url=url, headers=self.header, params=params)
            
            if r.status_code != HTTP_OK:
                print u'%shttp请求失败，状态代码%s' %(self.name, r.status_code)
                return None
            else:
                result = r.json()
                if 'retMsg' in result and result['retMsg'] == 'Success':
                    return result['data']
                else:
                    if 'retMsg' in result:
                        print u'%s查询失败，返回信息%s' %(self.name, result['retMsg'])
                    elif 'message' in result:
                        print u'%s查询失败，返回信息%s' %(self.name, result['message'])
                    return None
                    
                    
    
    