{"id":24526,"library":"retry-async","title":"retry-async","description":"A lightweight Python library for retrying async functions with configurable backoff, jitter, and retry conditions. Supports both asyncio and trio. Current version: 0.1.4. Release cadence: intermittent.","status":"active","version":"0.1.4","language":"python","source_language":"en","source_url":"https://github.com/yourusername/retry-async","tags":["async","retry","backoff","asyncio","trio"],"install":[{"cmd":"pip install retry-async","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Used for compatibility with older Python versions","package":"typing_extensions","optional":true}],"imports":[{"note":"Function is named retry_async, not retry","wrong":"from retry_async import retry","symbol":"retry_async","correct":"from retry_async import retry_async"}],"quickstart":{"code":"import asyncio\nfrom retry_async import retry_async\n\nasync def unreliable():\n    raise ValueError(\"Oops\")\n\n@retry_async(max_tries=3, delay=1.0, backoff=2.0)\nasync def main():\n    return await unreliable()\n\nif __name__ == '__main__':\n    asyncio.run(main())","lang":"python","description":"Decorator-based retry for async functions with exponential backoff."},"warnings":[{"fix":"Ensure the decorated function is async def.","message":"The decorator must be placed on a coroutine function; using it on a regular function will raise TypeError.","severity":"gotcha","affected_versions":">=0.1.0"},{"fix":"Set max_tries to the total number of attempts (initial + retries).","message":"The `max_tries` parameter includes the initial attempt, so max_tries=1 means no retry.","severity":"gotcha","affected_versions":">=0.1.0"},{"fix":"If you relied on linear backoff, set backoff=1.0 explicitly.","message":"In version 0.1.0, the default backoff was linear, but changed to exponential in 0.1.1.","severity":"breaking","affected_versions":">=0.1.1"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Use async def and proper await syntax.","cause":"Placing @retry_async on a non-async function or forgetting to await inside a lambda.","error":"TypeError: 'coroutine' object is not callable"},{"fix":"from retry_async import retry_async","cause":"Importing the wrong name; the function is 'retry_async'.","error":"AttributeError: module 'retry_async' has no attribute 'retry'"},{"fix":"Use @retry_async() or pass params: @retry_async(max_tries=3)","cause":"Using @retry_async without arguments but without parentheses, or incorrect syntax.","error":"TypeError: retry_async() missing 1 required positional argument: 'func'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}