提交 d4e175f60b38d70b60411bae70070e6784ba1ca3

作者 gaojp
1 个父辈 963401ca

海峡

正在显示 1 个修改的文件 包含 197 行增加197 行删除
1 -import requests  
2 -import time  
3 -import oss2  
4 -from common.log import *  
5 -  
6 -logger = BotLogger(os.path.basename(__file__), logname=1).getLogger()  
7 -  
8 -  
9 -def handle_error(res, normal_status_code):  
10 - """  
11 - 统一处理workai平台返回的error  
12 - :param res: 调用接口的返回  
13 - :param normal_status_code: 正常返回的status code  
14 - :return: 返回错误信息  
15 - """  
16 - if res is None or res.status_code == normal_status_code:  
17 - return ''  
18 -  
19 - logger.info('The res is %s' % res)  
20 - err = '网络或服务器繁忙!'  
21 - try:  
22 - if 'message' in res.json():  
23 - err = res.json()['message']  
24 - except Exception as e:  
25 - logger.error(str(e))  
26 -  
27 - return err  
28 -  
29 -  
30 -def get_token_by_password(username, password, tenant_id, tenant_type):  
31 - """  
32 - 密码方式获取access_token  
33 - :param username: 系统管理员用户  
34 - :param password: 系统管理员密码  
35 - :param tenant_id: 客户在workai云平台唯一表示  
36 - :return: 返回access_token, refresh_token 以及error, access_token用于访问接口的令牌, refresh_token  
37 - 用于刷新获取新的access_token, error为返回的错误信息  
38 - """  
39 - data = {  
40 - 'grant_type': 'password',  
41 - 'username': username,  
42 - 'password': password,  
43 - 'scope': 'global_access:tenant_admin,tenant:%s,tenant_type:%s' % (tenant_id, tenant_type),  
44 - }  
45 -  
46 - path = '%s/uaa/v1/auth/tokens' % WACLOUD_API_ENDPOINT  
47 - try:  
48 - res = requests.post(path, json=data, timeout=10)  
49 - err = handle_error(res, 200)  
50 - if err != '':  
51 - logger.error('Could not get the token by password for user: %s, tenant: %s' % (username, tenant_id))  
52 - return '', '', err, None  
53 -  
54 - ret = res.json()  
55 - company, username, play_type = '', '', ''  
56 - if tenant_type == '0':  
57 - play_type = 'HRO'  
58 - elif tenant_type == '1':  
59 - play_type = 'HR'  
60 -  
61 - try:  
62 - company = ret['tenant']['name']  
63 - username = ret['user']['name']  
64 - except Exception as e:  
65 - logger.error(str(e))  
66 -  
67 - return ret['access_token'], ret['refresh_token'], '', (company, username, play_type)  
68 - except Exception as e:  
69 - logger.error(str(e))  
70 - return '', '', '网络或服务器异常,请稍后再试!', None  
71 -  
72 -  
73 -def refresh_token(rtoken, tenant_id):  
74 - """  
75 - 刷新token方式获取access_token  
76 - :return: 返回access_token, refresh_token 以及error, access_token用于访问接口的令牌, refresh_token  
77 - 用于刷新获取新的access_token, error为返回的错误信息  
78 - """  
79 - data = {  
80 - 'grant_type': 'refresh_token',  
81 - 'refresh_token': rtoken,  
82 - 'scope': 'global_access:tenant_admin,tenant:%s' % tenant_id,  
83 - }  
84 -  
85 - path = '%s/uaa/v1/auth/tokens' % WACLOUD_API_ENDPOINT  
86 - res = requests.post(path, json=data)  
87 -  
88 - err = handle_error(res, 200)  
89 - if err != '':  
90 - logger.error('Could not get the token by refresh token for tenant: %s' % (tenant_id,))  
91 - return '', '', err  
92 -  
93 - ret = res.json()  
94 - return ret['access_token'], ret['refresh_token'], ''  
95 -  
96 -  
97 -def upload_file(ctx, local_path, tenant_type, file_name):  
98 - """上传附件"""  
99 - object_path = ""  
100 - if ctx is None or local_path is None:  
101 - return 401, object_path  
102 -  
103 - headers = {'Authorization': 'Bearer %s' % ctx['access_token']}  
104 - path = '%s/filemeta/v2/inits' % (WACLOUD_API_ENDPOINT,)  
105 - if tenant_type == "0":  
106 - data = {"object_type": "hro", "access_type": "sdk"}  
107 - elif tenant_type == "1":  
108 - data = {"object_type": "hr", "access_type": "sdk"}  
109 - else:  
110 - return 401, '配置文件设置tenant_type的值有误'  
111 -  
112 - res = None  
113 - try:  
114 - res = requests.post(path, json=data, headers=headers, timeout=120)  
115 - if res.status_code == 401:  
116 - access_token, _refresh_token, err = refresh_token(ctx['refresh_token'], ctx['tenant_id'])  
117 - if err != '':  
118 - return 401, object_path  
119 - ctx['access_token'] = access_token  
120 - ctx['refresh_token'] = _refresh_token  
121 - headers = {'Authorization': 'Bearer %s' % ctx['access_token']}  
122 - res = requests.post(path, json=data, headers=headers, timeout=120)  
123 -  
124 - err = handle_error(res, 200)  
125 - if err != '':  
126 - return res.status_code, object_path  
127 - except Exception as e:  
128 - logger.error(str(e))  
129 - return 401, str(e)  
130 -  
131 - try:  
132 - datas = res.json()  
133 - # 使用临时token中的认证信息初始化StsAuth实例。  
134 - # auth = oss2.Auth(datas['access_key_id'], datas['access_key_secret'])  
135 - auth = oss2.StsAuth(datas['access_key_id'], datas['access_key_secret'], datas['security_token'])  
136 - # 使用StsAuth实例初始化存储空间。  
137 - bucket = oss2.Bucket(auth, datas['domain'], datas['bucket'])  
138 - object_path = datas['object_path'] + "/" + file_name  
139 - result = bucket.put_object_from_file(object_path, local_path)  
140 - return result.status, object_path  
141 - except Exception as e:  
142 - logger.error(str(e))  
143 - return 403, str(e)  
144 -  
145 -  
146 -def update_object_path(ctx, tenant_type, object_path, types, file_name):  
147 - """上传文件路径到saas平台"""  
148 - if tenant_type == "0" or tenant_type == "1":  
149 - path = '%s/payroll/v1/do-import-data?type=%s' % (WACLOUD_API_ENDPOINT, types)  
150 - else:  
151 - return False, '平台类型设置有误'  
152 -  
153 - headers = {'Authorization': 'Bearer %s' % ctx['access_token']}  
154 - bucket = '/hro/'  
155 - if 'hx' in WACLOUD_API_ENDPOINT:  
156 - bucket = '/hxhro/'  
157 - elif "xsb" in WACLOUD_API_ENDPOINT:  
158 - bucket = "/xsbhro/"  
159 - elif "engma" in WACLOUD_API_ENDPOINT:  
160 - bucket = "/engmahro/"  
161 - elif "anbo" in WACLOUD_API_ENDPOINT:  
162 - bucket = "/anbohro/"  
163 - elif "teda" in WACLOUD_API_ENDPOINT:  
164 - bucket = "/tedahro/"  
165 - elif "hwapi" in WACLOUD_API_ENDPOINT:  
166 - bucket = "/hro/"  
167 - elif "jincao" in WACLOUD_API_ENDPOINT:  
168 - bucket = "/jchro/"  
169 - elif 'jincao' in WACLOUD_API_ENDPOINT:  
170 - bucket = '/jchro/'  
171 - elif 'bhgn' in WACLOUD_API_ENDPOINT:  
172 - bucket = '/bhgnhro/'  
173 - elif 'gongyuanhr' in WACLOUD_API_ENDPOINT:  
174 - bucket = '/szgyhro/'  
175 -  
176 -  
177 - object_path = bucket + object_path  
178 - data = {  
179 - "object_path": object_path,  
180 - "file_name": file_name  
181 - }  
182 -  
183 - try:  
184 - res = requests.post(path, json=data, headers=headers, timeout=120)  
185 - if res.status_code == 401:  
186 - time.sleep(2)  
187 - res = requests.post(path, json=data, headers=headers, timeout=120)  
188 -  
189 - err = handle_error(res, 200)  
190 - if err != '':  
191 - logger.error("上传失败:{file}, 原因:{reason}".format(file=object_path, reason=err))  
192 - if 'Internal Server Error' in err:  
193 - err = '数据助手sheet附表内容错误'  
194 - return False, err  
195 - return True, '任务办理成功'  
196 - except Exception as e:  
197 - logger.error(str(e)) 1 +import requests
  2 +import time
  3 +import oss2
  4 +from common.log import *
  5 +
  6 +logger = BotLogger(os.path.basename(__file__), logname=1).getLogger()
  7 +
  8 +
  9 +def handle_error(res, normal_status_code):
  10 + """
  11 + 统一处理workai平台返回的error
  12 + :param res: 调用接口的返回
  13 + :param normal_status_code: 正常返回的status code
  14 + :return: 返回错误信息
  15 + """
  16 + if res is None or res.status_code == normal_status_code:
  17 + return ''
  18 +
  19 + logger.info('The res is %s' % res)
  20 + err = '网络或服务器繁忙!'
  21 + try:
  22 + if 'message' in res.json():
  23 + err = res.json()['message']
  24 + except Exception as e:
  25 + logger.error(str(e))
  26 +
  27 + return err
  28 +
  29 +
  30 +def get_token_by_password(username, password, tenant_id, tenant_type):
  31 + """
  32 + 密码方式获取access_token
  33 + :param username: 系统管理员用户
  34 + :param password: 系统管理员密码
  35 + :param tenant_id: 客户在workai云平台唯一表示
  36 + :return: 返回access_token, refresh_token 以及error, access_token用于访问接口的令牌, refresh_token
  37 + 用于刷新获取新的access_token, error为返回的错误信息
  38 + """
  39 + data = {
  40 + 'grant_type': 'password',
  41 + 'username': username,
  42 + 'password': password,
  43 + 'scope': 'global_access:tenant_admin,tenant:%s,tenant_type:%s' % (tenant_id, tenant_type),
  44 + }
  45 +
  46 + path = '%s/uaa/v1/auth/tokens' % WACLOUD_API_ENDPOINT
  47 + try:
  48 + res = requests.post(path, json=data, timeout=10)
  49 + err = handle_error(res, 200)
  50 + if err != '':
  51 + logger.error('Could not get the token by password for user: %s, tenant: %s' % (username, tenant_id))
  52 + return '', '', err, None
  53 +
  54 + ret = res.json()
  55 + company, username, play_type = '', '', ''
  56 + if tenant_type == '0':
  57 + play_type = 'HRO'
  58 + elif tenant_type == '1':
  59 + play_type = 'HR'
  60 +
  61 + try:
  62 + company = ret['tenant']['name']
  63 + username = ret['user']['name']
  64 + except Exception as e:
  65 + logger.error(str(e))
  66 +
  67 + return ret['access_token'], ret['refresh_token'], '', (company, username, play_type)
  68 + except Exception as e:
  69 + logger.error(str(e))
  70 + return '', '', '网络或服务器异常,请稍后再试!', None
  71 +
  72 +
  73 +def refresh_token(rtoken, tenant_id):
  74 + """
  75 + 刷新token方式获取access_token
  76 + :return: 返回access_token, refresh_token 以及error, access_token用于访问接口的令牌, refresh_token
  77 + 用于刷新获取新的access_token, error为返回的错误信息
  78 + """
  79 + data = {
  80 + 'grant_type': 'refresh_token',
  81 + 'refresh_token': rtoken,
  82 + 'scope': 'global_access:tenant_admin,tenant:%s' % tenant_id,
  83 + }
  84 +
  85 + path = '%s/uaa/v1/auth/tokens' % WACLOUD_API_ENDPOINT
  86 + res = requests.post(path, json=data)
  87 +
  88 + err = handle_error(res, 200)
  89 + if err != '':
  90 + logger.error('Could not get the token by refresh token for tenant: %s' % (tenant_id,))
  91 + return '', '', err
  92 +
  93 + ret = res.json()
  94 + return ret['access_token'], ret['refresh_token'], ''
  95 +
  96 +
  97 +def upload_file(ctx, local_path, tenant_type, file_name):
  98 + """上传附件"""
  99 + object_path = ""
  100 + if ctx is None or local_path is None:
  101 + return 401, object_path
  102 +
  103 + headers = {'Authorization': 'Bearer %s' % ctx['access_token']}
  104 + path = '%s/filemeta/v2/inits' % (WACLOUD_API_ENDPOINT,)
  105 + if tenant_type == "0":
  106 + data = {"object_type": "hro", "access_type": "sdk"}
  107 + elif tenant_type == "1":
  108 + data = {"object_type": "hr", "access_type": "sdk"}
  109 + else:
  110 + return 401, '配置文件设置tenant_type的值有误'
  111 +
  112 + res = None
  113 + try:
  114 + res = requests.post(path, json=data, headers=headers, timeout=120)
  115 + if res.status_code == 401:
  116 + access_token, _refresh_token, err = refresh_token(ctx['refresh_token'], ctx['tenant_id'])
  117 + if err != '':
  118 + return 401, object_path
  119 + ctx['access_token'] = access_token
  120 + ctx['refresh_token'] = _refresh_token
  121 + headers = {'Authorization': 'Bearer %s' % ctx['access_token']}
  122 + res = requests.post(path, json=data, headers=headers, timeout=120)
  123 +
  124 + err = handle_error(res, 200)
  125 + if err != '':
  126 + return res.status_code, object_path
  127 + except Exception as e:
  128 + logger.error(str(e))
  129 + return 401, str(e)
  130 +
  131 + try:
  132 + datas = res.json()
  133 + # 使用临时token中的认证信息初始化StsAuth实例。
  134 + # auth = oss2.Auth(datas['access_key_id'], datas['access_key_secret'])
  135 + auth = oss2.StsAuth(datas['access_key_id'], datas['access_key_secret'], datas['security_token'])
  136 + # 使用StsAuth实例初始化存储空间。
  137 + bucket = oss2.Bucket(auth, datas['domain'], datas['bucket'])
  138 + object_path = datas['object_path'] + "/" + file_name
  139 + result = bucket.put_object_from_file(object_path, local_path)
  140 + return result.status, object_path
  141 + except Exception as e:
  142 + logger.error(str(e))
  143 + return 403, str(e)
  144 +
  145 +
  146 +def update_object_path(ctx, tenant_type, object_path, types, file_name):
  147 + """上传文件路径到saas平台"""
  148 + if tenant_type == "0" or tenant_type == "1":
  149 + path = '%s/payroll/v1/do-import-data?type=%s' % (WACLOUD_API_ENDPOINT, types)
  150 + else:
  151 + return False, '平台类型设置有误'
  152 +
  153 + headers = {'Authorization': 'Bearer %s' % ctx['access_token']}
  154 + bucket = '/hro/'
  155 + if 'hx' in WACLOUD_API_ENDPOINT:
  156 + bucket = '/new-hxhro/'
  157 + elif "xsb" in WACLOUD_API_ENDPOINT:
  158 + bucket = "/xsbhro/"
  159 + elif "engma" in WACLOUD_API_ENDPOINT:
  160 + bucket = "/engmahro/"
  161 + elif "anbo" in WACLOUD_API_ENDPOINT:
  162 + bucket = "/anbohro/"
  163 + elif "teda" in WACLOUD_API_ENDPOINT:
  164 + bucket = "/tedahro/"
  165 + elif "hwapi" in WACLOUD_API_ENDPOINT:
  166 + bucket = "/hro/"
  167 + elif "jincao" in WACLOUD_API_ENDPOINT:
  168 + bucket = "/jchro/"
  169 + elif 'jincao' in WACLOUD_API_ENDPOINT:
  170 + bucket = '/jchro/'
  171 + elif 'bhgn' in WACLOUD_API_ENDPOINT:
  172 + bucket = '/bhgnhro/'
  173 + elif 'gongyuanhr' in WACLOUD_API_ENDPOINT:
  174 + bucket = '/szgyhro/'
  175 +
  176 +
  177 + object_path = bucket + object_path
  178 + data = {
  179 + "object_path": object_path,
  180 + "file_name": file_name
  181 + }
  182 +
  183 + try:
  184 + res = requests.post(path, json=data, headers=headers, timeout=120)
  185 + if res.status_code == 401:
  186 + time.sleep(2)
  187 + res = requests.post(path, json=data, headers=headers, timeout=120)
  188 +
  189 + err = handle_error(res, 200)
  190 + if err != '':
  191 + logger.error("上传失败:{file}, 原因:{reason}".format(file=object_path, reason=err))
  192 + if 'Internal Server Error' in err:
  193 + err = '数据助手sheet附表内容错误'
  194 + return False, err
  195 + return True, '任务办理成功'
  196 + except Exception as e:
  197 + logger.error(str(e))
198 return False, '请求服务器异常:{}'.format(str(e)) 198 return False, '请求服务器异常:{}'.format(str(e))
注册登录 后发表评论