def lexer(self, text, ne_list=[], url=None): """ 词法分析 :param url: :param text: :param ne_list: 过滤命名实体类型 :return: """ url = url if url else getattr(self, 'lexer_url', None) url = url.format(access_token=self.token) res = requests.post(url=url, data=json.dumps(obj={'text': text}), headers=ContentType.JSON_UTF8.value) res.encoding = encodes.Unicode.UTF_8.value if res is None or res.status_code != codes.ok: raise MyError(code=codes.failed, msg='百度词法分析请求失败.') lexer_res, errors = LexerRes.LexerResSchema().load( res.json()) # type: LexerRes Assert.is_true(is_empty(errors), errors) if is_not_empty(ne_list): for lexer_item in lexer_res.items[:]: if lexer_item.ne not in ne_list: # 根据实体列表过滤 lexer_res.items.remove(lexer_item) return lexer_res
def get_file_modify_time(file_path): """ 获取文件修改时间 :param file_path: :return: """ if not os.path.isfile(file_path): raise MyError(code=requests.codes.server_error, msg='文件不存在, path: {0}'.format(file_path)) return os.path.getatime(filename=file_path)
def is_true(assert_condition, assert_msg='系统异常...', assert_code=requests.codes.server_error): """ 断言条件是否为真,为假则抛出异常 :param assert_condition:断言条件 :param assert_msg:断言信息 :param assert_code:断言code :return: """ if not assert_condition: raise MyError(code=assert_code, msg=assert_msg)
def init_token(self): """ 百度云鉴权接口 :return: :rtype:Token """ res = requests.post(url=self.token_url, headers=ContentType.JSON_UTF8.value) res.encoding = encodes.Unicode.UTF_8.value if res is None or res.status_code != codes.ok: raise MyError( code=codes.server_error, msg='百度云鉴权请求失败【{0}】'. format(res.status_code if res is not None else codes.bad) ) token, _ = Token.TokenSchema().load(res.json()) if is_not_empty(token.error): raise MyError( code=codes.server_error, msg='百度云鉴权失败【{0}】: {1}'.format(token.error, token.error_description) ) self.token = token.access_token return token
def send_wx(self): """ 发送微信信息 :return: """ res = requests.post(url=self.url, json=WXMsgSchema().dump(self).data, headers=ContentType.JSON_UTF8.value) res.encoding = Unicode.UTF_8.value if res is None or res.status_code != requests.codes.ok: raise MyError( code=requests.codes.server_error, msg='发送微信信息请求失败:{0}'.format( str(res.status_code) if res is not None else requests. codes.bad)) return res.json()
def __init__(self, api_key=None, secret_key=None, baidu_cloud=None): """ 百度云图像识别 :param str api_key: 应用的API Key :param str secret_key: 应用的Secret Key :param BaiduCloud baidu_cloud: """ self.token = None if is_not_empty(api_key) and is_not_empty(secret_key): baidu_cloud = BaiduCloud(api_key, secret_key) baidu_cloud.init_token() elif is_not_empty(baidu_cloud) and is_not_empty(baidu_cloud.token): pass else: raise MyError('缺失鉴权 Token 参数.') self.token = baidu_cloud.token
def get_files_by_suffix(dir, suffixs): """ 获取目录下包括子目录所有符合后缀条件的文件路径列表 :param dir: 目录 :param suffixs: 后缀 :return: """ if not os.path.isdir(dir) or not os.path.exists(dir): raise MyError(code=requests.codes.server_error, msg='不是有效的路径, path: {0}'.format(dir)) file_list = [] sub_dirs = [x[0] for x in os.walk(top=dir)] # sub_dirs.remove(dir) # 读取所有子目录 for sub_dir in sub_dirs: for suffix in suffixs: file_glob = os.path.join(sub_dir, '*.' + suffix) # glob.glob() 返回所有匹配的文件路径列表 # extend() 函数用于在列表末尾一次性追加另一个序列中的多个值 file_list.extend(glob.glob(pathname=file_glob)) return file_list
def __init__(self, app_id=None, api_key=None, secret_key=None, baidu_cloud=None, **kwargs): """ 音频应用 :param app_id: :param api_key: :param secret_key: :param baidu_cloud: """ self.app_id = app_id self.token = None if is_not_empty(api_key) and is_not_empty(secret_key): baidu_cloud = BaiduCloud(api_key, secret_key) baidu_cloud.init_token() elif is_not_empty(baidu_cloud) and is_not_empty(baidu_cloud.token): pass else: raise MyError('缺失鉴权 Token 参数.') self.token = baidu_cloud.token if kwargs: for key, value in kwargs.items(): setattr(self, key, value)
def __init__(self, app_id=None, api_key=None, sign=None, **kwargs): """ 讯飞开放平台数字签名 :param str app_id: 讯飞开放平台应用ID :param str api_key: 讯飞开放平台应用秘钥 :param Sign sign: 讯飞开放平台数字签名对象 """ if is_not_empty(app_id) and is_not_empty(api_key): sign = Sign(app_id, api_key) elif is_not_empty(sign) and is_not_empty(sign.signa): pass else: raise MyError('缺失数字签名参数.') self.app_id = app_id self.ts = sign.ts self.signa = sign.signa self.task_id = None if kwargs: for key, value in kwargs.items(): setattr(self, key, value)
def decorated_function(*args, **kwargs): # 根据参数类型实例化序列化实例 cls = schema_cls if isinstance(cls, type): cls = cls(*s, **ks) elif isinstance(cls, basestring): cls = create_instance(module_name, cls, *s, **ks) keys, res = func(*args, **kwargs) if not res: return res # 查询转字典 res_add = Dict(dict(zip(keys, res))) res_dic = res_add.load_nest() # 字典反序列化 entity, errors = cls.load(res_dic, partial=cls.partial_db()) if is_not_empty(errors): raise MyError(msg=errors) return entity