Initial commit

This commit is contained in:
kdusek
2025-12-09 12:13:01 +01:00
commit 8e654ed209
13332 changed files with 2695056 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
# SPDX-FileCopyrightText: 2022 Hynek Schlawack <hs@ox.cx>
#
# SPDX-License-Identifier: MIT
from __future__ import annotations
from typing import Iterable
from ._data import RetryHook, RetryHookFactory
from ._logging import LoggingOnRetryHook
from ._prometheus import PrometheusOnRetryHook
from ._structlog import StructlogOnRetryHook
def init_hooks(
maybe_delayed: tuple[RetryHook | RetryHookFactory, ...],
) -> tuple[RetryHook, ...]:
"""
Execute delayed hook factories and return a tuple of finalized hooks.
"""
hooks = []
for hook_or_factory in maybe_delayed:
if isinstance(hook_or_factory, RetryHookFactory):
hooks.append(hook_or_factory.hook_factory())
else:
hooks.append(hook_or_factory)
return tuple(hooks)
def get_default_hooks() -> tuple[RetryHookFactory, ...]:
"""
Return the default hooks according to availability.
"""
hooks = []
try:
import prometheus_client # noqa: F401
hooks.append(PrometheusOnRetryHook)
except ImportError:
pass
try:
import structlog # noqa: F401
hooks.append(StructlogOnRetryHook)
except ImportError:
hooks.append(LoggingOnRetryHook)
return tuple(hooks)
def set_on_retry_hooks(
hooks: Iterable[RetryHook | RetryHookFactory] | None,
) -> None:
"""
Set hooks that are called after a retry has been scheduled.
Args:
hooks:
Hooks to call after a retry has been scheduled. Passing None resets
to default. To deactivate instrumentation, pass an empty iterable.
.. versionadded:: 23.2.0
"""
from .._config import CONFIG
CONFIG.on_retry = tuple(hooks) if hooks is not None else hooks # type: ignore[assignment,arg-type]
def get_on_retry_hooks() -> tuple[RetryHook, ...]:
"""
Get hooks that are called after a retry has been scheduled.
Returns:
Hooks that will run if a retry is scheduled. Factories are called if
they haven't already.
.. versionadded:: 23.2.0
"""
from .._config import CONFIG
return CONFIG.on_retry