使用(Usage)
装饰器
decorators.common
handle_exception(func=None, default=False, is_raise=False, retry_for=Exception, max_retries=1, retry_delay=0, retry_jitter=True, log_args=True, logger_name='pykit_tools.error', logger_level=logging.ERROR, logger_pre_level=logging.WARNING)
装饰器 用于捕获函数异常,并在出现异常的时候返回默认值
| Parameters: |
|
|---|
| Returns: |
|
|---|
time_record(func=None, format_key=None, format_ret=None, logger_name='pykit_tools.error', logger_level=logging.ERROR)
装饰器 函数耗时统计
| Parameters: |
|
|---|
| Returns: |
|
|---|
decorators.cache
method_deco_cache(func=None, key=None, timeout=60, scene=CacheScene.DEFAULT.value, cannot_cache=(None, False), cache_client=None, cache_max_length=33554432, logger_name='pykit_tools.error', logger_level=logging.ERROR)
装饰器 方法缓存结果, 只能缓存json序列化的数据类型
注意:若是在类的实例方法上使用,需要注意 self 参数的影响,可设置key或者将类单例后使用
| Parameters: |
|
|---|
Returns: function
singleton_refresh_regular(cls=None, timeout=5)
装饰器 带定时刷新的单例装饰器
应用场景:例如某对象实例化后带有session相关信息,有一定有效期的情况可以在类上加上该装饰器
| Parameters: |
|
|---|
| Returns: |
|
|---|
示例:
@singleton_refresh_regular
class YouClass(Singleton):
pass
decorators.req_utils
requests_logger(func=None, default_ua='', logger_name='pykit_tools.requests', logger_level=logging.ERROR)
装饰器 应用于对 requests 库的请求进行日志记录.
扩展 requests 请求函数可传递的参数:
- log_request: 是否记录请求的参数,默认True
- log_response: 是否记录响应内容,默认True,设置为False后可通过参数legal_codes控制记录响应内容
- legal_codes: 合法的响应状态码列表/元组,仅当响应状态码不在列表/元组中才记录响应内容,默认None记录所有响应内容
- format_resp: 格式化响应内容的函数,用于格式化响应内容,默认None使用response.text
- raise_for: 需要抛出的异常类型/异常元组,仅当异常匹配才抛出异常,默认None不抛出异常
| Parameters: |
|
|---|
| Returns: |
|
|---|
示例:
import typing
import requests
from pykit_tools.decorators.req_utils import requests_logger
class BaseRequest(object):
def __init__(self, default_ua: str = "", logger_name: str = "pykit_tools.requests"):
self.request = requests_logger(requests.request, default_ua=default_ua, logger_name=logger_name)
def get(self, url: str, **kwargs: typing.Any) -> requests.Response:
return self.request("GET", url, **kwargs)
def post(self, url: str, **kwargs: typing.Any) -> requests.Response:
return self.request("POST", url, **kwargs)
def put(self, url: str, **kwargs: typing.Any) -> requests.Response:
return self.request("PUT", url, **kwargs)
def delete(self, url: str, **kwargs: typing.Any) -> requests.Response:
return self.request("DELETE", url, **kwargs)
def patch(self, url: str, **kwargs: typing.Any) -> requests.Response:
return self.request("PATCH", url, **kwargs)
def head(self, url: str, **kwargs: typing.Any) -> requests.Response:
return self.request("HEAD", url, **kwargs)
def options(self, url: str, **kwargs: typing.Any) -> requests.Response:
return self.request("OPTIONS", url, **kwargs)
br = BaseRequest()
# 控制日志输出内容
br.get("https://www.baidu.com", log_request=False, log_response=True)
# 控制异常抛出
br.get("https://www.baidu.com", raise_for=Exception)
装饰器相关
decorators.cache.CacheScene
Bases: ChoiceEnum
枚举 缓存场景类型,定义值详见源码。
应用于装饰器 method_deco_cache
Source code in pykit_tools/decorators/cache.py
43 44 45 46 47 48 49 50 51 52 | |
decorators.cache
set_global_cache_client(client)
设置全局缓存client对象,用于存储缓存数据
| Parameters: |
|
|---|
注意
client必须有get(key)和set(key, value, timeout)方法,一般使用redis客户端
get_global_cache_client()
获取全局缓存client对象
| Returns: |
|
|---|
日志相关
log.adapter
LoggerFormatAdapter
Bases: LoggerAdapter
日志按照字段格式化输出
示例
# 其中 get_format_logger 中使用该类
timer_common_logger = get_format_logger("pykit_tools.timer", ["location", "key", "cost", "ret"])
timer_common_logger.info(dict(location="my-method", key="my-key", cost=3, ret=True))
# 日志输出>> "my-method my-key 3 True"
__init__(logger, extra, fields=None, delimiter=' ', fmt='{}')
初始化构造对象
| Parameters: |
|
|---|
process(msg, kwargs)
覆写 logging.LoggerAdapter.process 处理自定义格式化日志信息
| Parameters: |
|
|---|
| Returns: |
|
|---|
get_format_logger(name, fields, delimiter=' ', extra=None)
根据 LoggerFormatAdapter 获取 logger
| Parameters: |
|
|---|
| Returns: |
|
|---|
log.handlers
MultiProcessTimedRotatingFileHandler
Bases: TimedRotatingFileHandler
Similar with logging.TimedRotatingFileHandler, while this one is Multi process safe.
多进程使用的LoggerHandler
设计模式
patterns.singleton
Singleton
可以提供给类直接继承
SingletonMeta
Bases: type
设计模式:单例类
示例
class YouClass(metaclass=SingletonMeta)
pass
其他
cmd
exec_command(command, timeout=60, log_cmd=False, err_max_length=1024, logger_name='pykit_tools.cmd', logger_level=logging.ERROR, popen_kwargs=None)
执行shell命令
| Parameters: |
|
|---|
| Returns: |
|
|---|
str_tool
base64url_decode(value)
对URL安全编码进行解码
| Parameters: |
|
|---|
| Returns: |
|
|---|
base64url_encode(value)
对内容进行URL安全的Base64编码,需要将结果中的部分编码替换:
- 将结果中的加号
+替换成短划线-; - 将结果中的正斜线
/替换成下划线_; - 将结果中尾部的所有等号
=省略。
| Parameters: |
|
|---|
| Returns: |
|
|---|
compute_md5(*args, **kwargs)
根据输入的参数计算出唯一值(将参数值拼接后最后计算md5)
| Parameters: |
|
|---|
| Returns: |
|
|---|
is_number(s)
判断字符串是否是数值
| Parameters: |
|
|---|
| Returns: |
|
|---|
str_to_number(s)
字符串转化成数字
| Parameters: |
|
|---|
| Returns: |
|
|---|
utils
CacheMap
Bases: object
缓存对象
注意
若是key太多,容易OOM内存溢出; 且进程销毁会回收
clean()
清理过期的数据
clear()
清理所有缓存过的数据
delete(key)
根据key删除数据
| Parameters: |
|
|---|
| Returns: |
|
|---|
get(key)
根据key获取缓存的数据
| Parameters: |
|
|---|
| Returns: |
|
|---|
set(key, value, timeout=60)
根据key设置数据值value
| Parameters: |
|
|---|
| Returns: |
|
|---|
find_method_by_str(method_path)
通过字符串初始化方法
| Parameters: |
|
|---|
| Returns: |
|
|---|
get_caller_location(caller)
或者 类/方法 在项目中的路径 Args: caller: 方法或者类
| Returns: |
|
|---|