import re
import base64
from obs import ObsClient
OBS_ENDPOINT_DICT = {
"cn-north-7" : "https://obs.{region}.ulanqab.huawei.com"
}
OBS_DEFALUT_ENDPOINT = "https://obs.{region}.myhuaweicloud.com"
LASR_ENDPOINT_DICT = {
"cn-north-7" : "https://99e33763f1084f2cb68e2d0dcd3ed27a.apigw.cn-north-7.myhuaweicloud.com/v1/{project_id}/asr/transcriber/jobs",
}
LASR_DEFAULT_ENDPOINT = "https://sis-ext.{region}.myhuaweicloud.com/v1/{project_id}/asr/transcriber/jobs"
def build_obs_client(context, region) :
""" 创建obs_client实例
:param context: 上下文信息
:param region: obs桶所在区域,可在环境变量中指定
:return: 实例化的obs_client
"""
endpoint = OBS_ENDPOINT_DICT.get(region, None)
if endpoint is None :
endpoint = OBS_DEFALUT_ENDPOINT
ak = context.getAccessKey()
sk = context.getSecretKey()
server_url = endpoint.replace("{region}", str(region))
print(server_url)
return ObsClient(access_key_id=ak, secret_access_key=sk, server=server_url, path_style=False,
ssl_verify=False, max_retry_count=5, timeout=20)
def download_file_from_obs(obs_client, bucket_name, object_name, local_object_path) :
""" 从obs下载对象
:param obs_client: obs客户端实例
:param bucket_name: obs桶名称
:param object_name: 对象名称
:param local_object_path: 将对象保存到的本地路径
"""
try :
resp = obs_client.getObject(bucket_name, object_name, local_object_path)
print(resp)
if resp.status < 300 :
print('Download {} succeed.'.format(object_name))
else :
raise Exception('Download failed, error code: {}, error message: {}'.format(
resp.errorCode, resp.errorMessage))
except Exception as e :
raise Exception(e)
def upload_file_to_obs(obs_client, bucket_name, object_name, data_file) :
""" 上传对象到obs
:param obs_client: obs客户端实例
:param bucket_name: obs桶名称
:param object_name: 对象名称
:param data_file: 数据对象
"""
resp = obs_client.putContent(bucket_name, object_name, data_file)
if resp.status < 300 :
print('Upload {} succeed.'.format(object_name))
else :
raise Exception('Upload failed, error code: {}, error message: {}'.format(
resp.errorCode, resp.errorMessage))
def get_data_url(region, bucket_name, object_name):
endpoint = OBS_ENDPOINT_DICT.get(region, None)
if endpoint is None :
endpoint = OBS_DEFALUT_ENDPOINT
endpoint = endpoint.replace("{region}", str(region))
data_url = endpoint.split("//")[0]+"//"+ bucket_name +"."+ endpoint.split("//")[1] + "/"+object_name
print(data_url)
return data_url
def get_post_url(context, region) :
"""获取post的url
"""
post_url = LASR_ENDPOINT_DICT.get(region, None)
if post_url is None :
post_url = LASR_DEFAULT_ENDPOINT.replace("{region}", str(region))
return post_url.replace("{project_id}", str(context.getProjectID()))
def get_headers(context) :
""" 获取post的headers
"""
token = context.getToken()
headers = {
"x-auth-token" : token,
"content-type" : 'application/json'
}
return headers
def get_norm_result(event, json_data) :
""" 获取同步工作流的标准输出结果
"""
result = {
"execution_name" : event.get("execution_name", ""),
"graph_name" : event.get("graph_name", ""),
"Records" : event.get("Records", []),
"dynamic_source" : {
"tasks" : [json_data]
}
}
return result