一键式重试和aioretry装饰器
项目描述
KaioRetry
KaioRetry是(另一个)重试装饰器实现,它明显受到了原始 retry 模块的启发,并且实际上与它向后兼容。
基本用法
在失败时透明地执行重试
from kaioretry import retry, aioretry
@retry(exceptions=ValueError, tries=2)
def some_func(...):
...
@aioretry(exceptions=(ValueError, SomeOtherError), tries=-1, delay=1)
async def some_coroutine(...):
...
文档
如果您想了解更多,更详细的文档可在 readthedocs 上找到。
已知问题
Pylint
Pylint,似乎在检测更改函数签名的装饰器方面并不 真正出色,而kaioretry定义并使用了大量的装饰器(相对而言)。
这意味着以下基本代码
from kaioretry import aioretry
@aioretry(exceptions=ZeroDivisionError)
async def func(x, y):
return x / y
将触发以下pylint错误
E1120: No value for argument 'retry_obj' in function call (no-value-for-parameter)
根据pylint文档,解决此问题的唯一方法是使用pylint的 signature-mutators
功能。这可以通过命令行完成
pylint --signature-mutators=kaioretry._make_decorator
或通过pylint配置文件
# The TYPECHECK section accepts a signature-mutators directive.
[TYPECHECK]
# List of decorators that change the signature of a decorated function.
signature-mutators=kaioretry._make_decorator
(当然,您可以在所有aioretry()
和retry()
调用行上内联注释# pylint: disable=no-value-for-parameter
,这足以禁用一次警告,但重复这一行可能会很麻烦。signature-mutators
指令将全局禁用aioretry()
和retry()
调用的签名检查,因此这取决于您对kaioretry的使用情况,可能会更简单。)
Mypy和kaioretry.aioretry生成的函数
Mypy可能错误地将aioretry装饰的函数的类型推断为def (*Any, **Any) -> Any
,如果原始函数
- 是一个协程
- 并且返回类型提示为
Any
,或者如果参数提示为Any
。
如果原始函数完全注释为非Any
,则装饰后的函数注释应被正确推断(根据kaioretry测试)。
目前我不清楚kaioretry.aioretry
函数类型提示是否不正确,或者这是mypy或cpython的问题,或者两者都是。或者三者都是。去想吧。
关于这个问题的任何信息都将非常受欢迎。我已经花了几周时间追踪这个问题。虽然沿着这条道路让我修复了一些其他(相当无关)的类型提示错误,但这个特定的问题仍然让我感到困惑。
欢迎反馈。
总是。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
kaioretry-1.0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7413056692f17efcf16fba02f3a0fe7511ff82eca29371de69c54e6947650a06 |
|
MD5 | 454579190ea791f10968ee69daf2f7b4 |
|
BLAKE2b-256 | 7d091f25f4c473b93d9c057ae0c62e266e43eaaa23750bbd7b3b5f6e982936c3 |
kaioretry-1.0.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 97ea4b8e1333a4289f896bf77341caa07ea8b7095e3735066176ce69f6f7d270 |
|
MD5 | 80dd530215fae98884e1b580575508c6 |
|
BLAKE2b-256 | e0c0ba6d9d0de55fb3f6401df99d636bc2faead5d1c25f0ef8537c5cdbdfcad7 |