跳转到主要内容

一键式重试和aioretry装饰器

项目描述

KaioRetry

PyPI version Supported Python Version License PyPI - Downloads

Pylint Static Quality Github Action Mypy Static Quality Github Action Pylint Static Quality Github Action Documentation Status

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,如果原始函数

  1. 是一个协程
  2. 并且返回类型提示为Any,或者如果参数提示为Any

如果原始函数完全注释为非Any,则装饰后的函数注释应被正确推断(根据kaioretry测试)。

目前我不清楚kaioretry.aioretry函数类型提示是否不正确,或者这是mypy或cpython的问题,或者两者都是。或者三者都是。去想吧。

关于这个问题的任何信息都将非常受欢迎。我已经花了几周时间追踪这个问题。虽然沿着这条道路让我修复了一些其他(相当无关)的类型提示错误,但这个特定的问题仍然让我感到困惑。

欢迎反馈。

总是。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

kaioretry-1.0.2.tar.gz (21.6 KB 查看哈希值

上传时间

构建分布

kaioretry-1.0.2-py3-none-any.whl (22.6 KB 查看哈希值

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面