Skip to main content

All in one retry and aioretry decorators

Project description

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 is (yet another) retry decorator implementation, which is clearly inspired by the original retry module and is actually backward compatible with it.

Basic usage

Transparently perform retries on failures:

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(...):
    ...

Documentation

If you care to read more, a more lengthy documentation is available on readthedocs.

Known Issues

Pylint

Pylint, it seems, is not really good a detecting decorators that change function signatures, and kaioretry defines and uses a lot of decorators (relatively speaking).

This means that such basic code:

from kaioretry import aioretry

@aioretry(exceptions=ZeroDivisionError)
async def func(x, y):
    return x / y

Will trigger the following pylint errors:

E1120: No value for argument 'retry_obj' in function call (no-value-for-parameter)

According to pylint documentation, the only way to widely work around this issue is to use the signature-mutators feature of pylint. This can be done either on the command line:

pylint --signature-mutators=kaioretry._make_decorator

Or through pylint configuration file:

# 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

(Of course, you can inline a # pylint: disable=no-value-for-parameter comment on all aioretry() and retry() call lines, and it can be good enough to disable a one-time warning, but repeating that line can be tedious. The signature-mutators directive will globally disable the signature-checking for aioretry() and retry() calls, so this can be easier depending of your own usage of kaioretry.)

Mypy and functions generated by kaioretry.aioretry

Mypy may incorrectly infer the type of an aioretry-decorated function as def (*Any, **Any) -> Any if the original function:

  1. is a coroutine and
  2. has a returned type hinted as Any and/or if parameters are hinted as Any.

If the original function is fully annotated as non-Any, the resulting decorated function annotations should be correctly inferred (according to kaioretry test).

It is unclear to me right now, if the kaioretry.aioretry function type hints are incorrect or if it is an issue with either mypy or cpython. Or both. Or all 3. Go figure.

Any information on that matter would be greatly appreciated. I've spent weeks trying to track down this issue. And while walking down this path has allowed me to fix some other (rather unrelated) type-hinting boo-boos from my part, this very specific issue is still puzzling me.

Feedback welcome.

Always.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kaioretry-1.0.2.tar.gz (21.6 kB view details)

Uploaded Source

Built Distribution

kaioretry-1.0.2-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file kaioretry-1.0.2.tar.gz.

File metadata

  • Download URL: kaioretry-1.0.2.tar.gz
  • Upload date:
  • Size: 21.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.12.1 Linux/6.6.2-201.fc39.x86_64

File hashes

Hashes for kaioretry-1.0.2.tar.gz
Algorithm Hash digest
SHA256 7413056692f17efcf16fba02f3a0fe7511ff82eca29371de69c54e6947650a06
MD5 454579190ea791f10968ee69daf2f7b4
BLAKE2b-256 7d091f25f4c473b93d9c057ae0c62e266e43eaaa23750bbd7b3b5f6e982936c3

See more details on using hashes here.

File details

Details for the file kaioretry-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: kaioretry-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.12.1 Linux/6.6.2-201.fc39.x86_64

File hashes

Hashes for kaioretry-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 97ea4b8e1333a4289f896bf77341caa07ea8b7095e3735066176ce69f6f7d270
MD5 80dd530215fae98884e1b580575508c6
BLAKE2b-256 e0c0ba6d9d0de55fb3f6401df99d636bc2faead5d1c25f0ef8537c5cdbdfcad7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page