Decorators¶
The helpers/decorators subpackage provides function and class decorators for cross-cutting concerns including caching,
retry logic, deprecation, timing, tracing, and transaction management.
Decorators are named without a _decorator suffix (retry, timeout, ttl_cache, ...) and detect async def
functions automatically. The old names (retry_decorator, async_trace_span, ...) keep working and emit a
DeprecationWarning and will be removed in 6.0.0; see the
Decorators tutorial.
Cache¶
Decorator for caching function return values to avoid redundant computation or I/O.
Caching decorator helpers.
archipy.helpers.decorators.ttl_caching.ttl_cache_decorator
module-attribute
¶
archipy.helpers.decorators.ttl_caching.CachedFunction ¶
Wrapper class for a cached function with a clear_cache method.
This class wraps a function to provide TTL-based caching. The cache is shared across all instances when used as an instance method decorator.
Example
@ttl_cache(ttl_seconds=60, maxsize=100)
def expensive_function(x: int) -> int:
return x * 2
# First call executes the function
result = expensive_function(5) # Returns 10
# Second call returns cached result
result = expensive_function(5) # Returns 10 (from cache)
# Clear cache manually
expensive_function.clear_cache()
Source code in archipy/helpers/decorators/ttl_caching.py
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | |
archipy.helpers.decorators.ttl_caching.CachedFunction.clear_cache ¶
Clear the cache.
This clears all cached values for this function. When used with instance methods, this clears the shared cache for all instances.
Source code in archipy/helpers/decorators/ttl_caching.py
archipy.helpers.decorators.ttl_caching.ttl_cache ¶
ttl_cache(
ttl_seconds: int | Callable[[], int] = 300,
maxsize: int = 100,
) -> Callable[[Callable[P, R]], CachedFunction[P, R]]
Decorator that provides a TTL cache for functions and methods.
The cache is shared across all instances when decorating instance methods. This is by design to allow efficient caching of expensive operations that depend only on the method arguments, not the instance state.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ttl_seconds
|
int | Callable[[], int]
|
Time to live in seconds (default: 5 minutes), or a zero-argument callable that returns the TTL (evaluated once when the decorator is applied). After this time, cached entries expire and the function is re-executed. |
300
|
maxsize
|
int
|
Maximum size of the cache (default: 100). When the cache is full, the least recently used entry is evicted. |
100
|
Returns:
| Type | Description |
|---|---|
Callable[[Callable[P, R]], CachedFunction[P, R]]
|
Decorated function with TTL caching and a clear_cache() method. |
Raises:
| Type | Description |
|---|---|
ConfigurationError
|
If |
Example
class DataService:
@ttl_cache(ttl_seconds=60, maxsize=50)
def fetch_data(self, key: str) -> dict:
# Expensive operation
return {"data": key}
service1 = DataService()
service2 = DataService()
# First call executes the function
result1 = service1.fetch_data("key1")
# Second call from different instance returns cached result
result2 = service2.fetch_data("key1") # From cache
# Clear cache manually
service1.fetch_data.clear_cache()
Note
- Exceptions are not cached; the function will be re-executed on the next call
- None values are cached like any other value
- Argument types are part of the key (
f(1)andf(1.0)are cached separately) and arguments must be hashable; calls with unhashable arguments run uncached async deffunctions are supported; the awaited result is cached- Access to the cache is guarded by a lock, so it is safe to call from several threads
- Cache is shared across all instances of a class (not per-instance)
Source code in archipy/helpers/decorators/ttl_caching.py
options: show_root_toc_entry: false heading_level: 3
Retry¶
Decorator that automatically retries a failing function call with configurable backoff strategies.
Retry decorator helpers.
archipy.helpers.decorators.retry_policy.logger
module-attribute
¶
archipy.helpers.decorators.retry_policy.retry_decorator
module-attribute
¶
archipy.helpers.decorators.retry_policy.retry ¶
retry(
max_retries: int = 3,
delay: float = 1,
retry_on: tuple[type[Exception], ...] | None = None,
ignore: tuple[type[Exception], ...] | None = None,
resource_type: str | None = None,
backoff: float = 1.0,
jitter: float = 0.0,
) -> Callable[[Callable[P, R]], Callable[P, R]]
A decorator that retries a function when it raises an exception.
Works for both regular and async def functions. Async functions are awaited and
wait with asyncio.sleep between attempts, so the event loop is never blocked.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
max_retries
|
int
|
The maximum number of attempts, including the first call
( |
3
|
delay
|
float
|
The delay (in seconds) before the first retry. Defaults to 1. |
1
|
retry_on
|
Optional[Tuple[Type[Exception], ...]]
|
A tuple of errors to retry on. If None, retries on all errors. Defaults to None. |
None
|
ignore
|
Optional[Tuple[Type[Exception], ...]]
|
A tuple of errors to ignore (not retry on).
If None, no errors are ignored. Takes precedence over |
None
|
resource_type
|
Optional[str]
|
The type of resource being exhausted. Defaults to None. |
None
|
backoff
|
float
|
Multiplier applied to the delay after every failed attempt.
|
1.0
|
jitter
|
float
|
Fraction of the delay added randomly ( |
0.0
|
Returns:
| Name | Type | Description |
|---|---|---|
Callable |
Callable[[Callable[P, R]], Callable[P, R]]
|
The decorated function with retry logic. |
Raises:
| Type | Description |
|---|---|
InvalidArgumentError
|
If |
Example
To use this decorator, apply it to a function:
@retry(max_retries=3, delay=1, backoff=2, retry_on=(ValueError,), resource_type="API")
def unreliable_function():
if random.random() < 0.5:
raise ValueError("Temporary failure")
return "Success"
result = unreliable_function()
Output:
Source code in archipy/helpers/decorators/retry_policy.py
options: show_root_toc_entry: false heading_level: 3
Timeout¶
Decorator that enforces a maximum execution time on a function call.
Timeout decorator helpers.
archipy.helpers.decorators.timeout_limit.timeout_decorator
module-attribute
¶
archipy.helpers.decorators.timeout_limit.timeout ¶
A decorator that adds a timeout to a function.
If the function takes longer than the specified number of seconds to execute,
a DeadlineExceededError is raised. The timeout is implemented with
signal.setitimer(signal.ITIMER_REAL, ...), so fractional seconds are supported.
After the call, the previous SIGALRM handler is restored and any timer that was
pending before the call is re-armed with its remaining time.
async def functions are supported too: they are bounded with asyncio.timeout, which
works in any thread and needs no signals.
Limitations
Synchronous functions rely on SIGALRM, so they work only on Unix and only when the
decorated function is called from the main thread of the main interpreter. Calling one
from another thread raises FailedPreconditionError instead of running without a timeout.
It cannot interrupt blocking C calls that do not return to the interpreter.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
seconds
|
float
|
The maximum number of seconds the function is allowed to run. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
Callable |
Callable[[Callable[P, R]], Callable[P, R]]
|
The decorated function with a timeout. |
Example
To use this decorator, apply it to any function and specify the timeout in seconds:
Source code in archipy/helpers/decorators/timeout_limit.py
options: show_root_toc_entry: false heading_level: 3
Timing¶
Decorator that measures and records the execution time of a function.
Timing and performance decorator helpers.
archipy.helpers.decorators.timing_log.logger
module-attribute
¶
archipy.helpers.decorators.timing_log.timing_decorator
module-attribute
¶
archipy.helpers.decorators.timing_log.timing ¶
A decorator that measures the execution time of a function and logs it when DEBUG logging is enabled.
The duration is also logged when the function raises an exception. Works for both regular
and async def functions; for async functions the time spent awaiting is included.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
func
|
Callable
|
The function to be decorated. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
Callable |
Callable[P, R]
|
The wrapped function which logs the execution time when DEBUG logging is enabled. |
Example
To use this decorator, simply apply it to any function. For example:
@timing
def example_function(n: int) -> str:
time.sleep(n)
return f"Slept for {n} seconds"
result = example_function(2)
Output (if DEBUG logging is enabled):
Source code in archipy/helpers/decorators/timing_log.py
options: show_root_toc_entry: false heading_level: 3
Tracing¶
OpenTelemetry span decorators for functions and classes (trace_span, trace_root, trace_class). The old
async_trace_span and async_trace_root names are deprecated aliases that will be removed in 6.0.0.
OpenTelemetry tracing decorators for function and class instrumentation.
archipy.helpers.decorators.tracing.trace_span ¶
trace_span(
name: str | None = None,
*,
kind: SpanKind | None = None,
attributes: Mapping[str, object] | None = None,
capture_args: list[str] | None = None,
) -> _SpanDecorator
Decorate a sync or async function with an OpenTelemetry child span.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str | None
|
Span name. Defaults to the function name. |
None
|
kind
|
SpanKind | None
|
OpenTelemetry |
None
|
attributes
|
Mapping[str, object] | None
|
Optional static attributes set on the span. |
None
|
capture_args
|
list[str] | None
|
Parameter names whose call values are recorded as attributes.
Sensitive names (password, token, …) are redacted to |
None
|
Returns:
| Type | Description |
|---|---|
_SpanDecorator
|
A decorator that wraps the target function in a span. |
Example
Source code in archipy/helpers/decorators/tracing.py
archipy.helpers.decorators.tracing.async_trace_span ¶
async_trace_span(
name: str | None = None,
*,
kind: SpanKind | None = None,
attributes: Mapping[str, object] | None = None,
capture_args: list[str] | None = None,
) -> _AsyncSpanDecorator
Decorate an async function with an OpenTelemetry child span.
Deprecated
Use :func:trace_span, which supports async functions directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str | None
|
Span name. Defaults to the function name. |
None
|
kind
|
SpanKind | None
|
OpenTelemetry |
None
|
attributes
|
Mapping[str, object] | None
|
Optional static attributes set on the span. |
None
|
capture_args
|
list[str] | None
|
Parameter names whose call values are recorded as attributes.
Sensitive names (password, token, …) are redacted to |
None
|
Returns:
| Type | Description |
|---|---|
_AsyncSpanDecorator
|
A decorator that wraps the target coroutine function in a span. |
Raises:
| Type | Description |
|---|---|
InvalidArgumentError
|
If the decorated object is not a coroutine function. |
Source code in archipy/helpers/decorators/tracing.py
archipy.helpers.decorators.tracing.trace_root ¶
trace_root(
name: str | None = None,
*,
kind: SpanKind | None = None,
attributes: Mapping[str, object] | None = None,
capture_args: list[str] | None = None,
) -> _SpanDecorator
Decorate a sync or async function with a root OpenTelemetry span.
Starts the span with a fresh context detached from any parent span
(INVALID_SPAN context).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str | None
|
Span name. Defaults to the function name. |
None
|
kind
|
SpanKind | None
|
OpenTelemetry |
None
|
attributes
|
Mapping[str, object] | None
|
Optional static attributes set on the span. |
None
|
capture_args
|
list[str] | None
|
Parameter names whose call values are recorded as attributes.
Sensitive names (password, token, …) are redacted to |
None
|
Returns:
| Type | Description |
|---|---|
_SpanDecorator
|
A decorator that wraps the target function in a root span. |
Source code in archipy/helpers/decorators/tracing.py
archipy.helpers.decorators.tracing.async_trace_root ¶
async_trace_root(
name: str | None = None,
*,
kind: SpanKind | None = None,
attributes: Mapping[str, object] | None = None,
capture_args: list[str] | None = None,
) -> _AsyncSpanDecorator
Decorate an async function with a root OpenTelemetry span.
Deprecated
Use :func:trace_root, which supports async functions directly.
Starts the span with a fresh context detached from any parent span
(INVALID_SPAN context).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str | None
|
Span name. Defaults to the function name. |
None
|
kind
|
SpanKind | None
|
OpenTelemetry |
None
|
attributes
|
Mapping[str, object] | None
|
Optional static attributes set on the span. |
None
|
capture_args
|
list[str] | None
|
Parameter names whose call values are recorded as attributes.
Sensitive names (password, token, …) are redacted to |
None
|
Returns:
| Type | Description |
|---|---|
_AsyncSpanDecorator
|
A decorator that wraps the target coroutine function in a root span. |
Raises:
| Type | Description |
|---|---|
InvalidArgumentError
|
If the decorated object is not a coroutine function. |
Source code in archipy/helpers/decorators/tracing.py
archipy.helpers.decorators.tracing.trace_class ¶
trace_class(
*,
exclude: list[str] | None = None,
capture_args: list[str] | None = None,
) -> Callable[[type], type]
Decorate a class so public methods are wrapped with OpenTelemetry spans.
Skips names starting with _, dunder methods, and property attributes.
staticmethod and classmethod wrappers are preserved after wrapping
the underlying function. Span names use ClassName.method_name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
exclude
|
list[str] | None
|
Method names to leave unwrapped. |
None
|
capture_args
|
list[str] | None
|
Parameter names recorded as span attributes on all wrapped methods.
Sensitive names (password, token, …) are redacted to |
None
|
Returns:
| Type | Description |
|---|---|
Callable[[type], type]
|
A class decorator. |
Example
Source code in archipy/helpers/decorators/tracing.py
options: show_root_toc_entry: false heading_level: 3
Metrics¶
OpenTelemetry metrics decorators for duration histograms and call counters (measure_duration, count_calls). Both
accept sync and async functions; the async_* names are deprecated aliases that will be removed in 6.0.0.
OpenTelemetry metrics decorators for duration histograms and call counters.
archipy.helpers.decorators.metrics.clear_instrument_caches ¶
Clear cached histogram and counter instruments.
Call after provider reset/re-init so instruments are rebound to the new
MeterProvider. Used by OtelUtils.reset_for_testing().
Source code in archipy/helpers/decorators/metrics.py
archipy.helpers.decorators.metrics.measure_duration ¶
measure_duration(
name: str | None = None,
*,
unit: str = "s",
attributes: Mapping[str, AttributeValue] | None = None,
) -> _MetricDecorator
Decorate a sync or async function to record execution duration as a histogram.
Instrument name defaults to {module}.{qualname}.duration. The histogram
is cached in a module-level map keyed by provider id + instrument name. Each
recording includes a status attribute of ok, error or cancelled.
Works for def and async def functions alike. No-ops when OTel is disabled
or config.OTEL.METRICS_ENABLED is False.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str | None
|
Histogram instrument name. Defaults to module-qualified duration name. |
None
|
unit
|
str
|
Unit of the recorded duration. Defaults to |
's'
|
attributes
|
Mapping[str, AttributeValue] | None
|
Optional static attributes merged into each recording. |
None
|
Returns:
| Type | Description |
|---|---|
_MetricDecorator
|
A decorator that records duration around the target function. |
Source code in archipy/helpers/decorators/metrics.py
archipy.helpers.decorators.metrics.async_measure_duration ¶
async_measure_duration(
name: str | None = None,
*,
unit: str = "s",
attributes: Mapping[str, AttributeValue] | None = None,
) -> _AsyncMetricDecorator
Decorate an async function to record execution duration as a histogram.
Deprecated
Use :func:measure_duration, which supports async functions directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str | None
|
Histogram instrument name. Defaults to module-qualified duration name. |
None
|
unit
|
str
|
Unit of the recorded duration. Defaults to |
's'
|
attributes
|
Mapping[str, AttributeValue] | None
|
Optional static attributes merged into each recording. |
None
|
Returns:
| Type | Description |
|---|---|
_AsyncMetricDecorator
|
A decorator that records duration around the target coroutine function. |
Raises:
| Type | Description |
|---|---|
InvalidArgumentError
|
If the decorated object is not a coroutine function. |
Source code in archipy/helpers/decorators/metrics.py
archipy.helpers.decorators.metrics.count_calls ¶
count_calls(
name: str | None = None,
*,
attributes: Mapping[str, AttributeValue] | None = None,
) -> _MetricDecorator
Decorate a sync or async function to increment a call counter.
Instrument name defaults to {module}.{qualname}.calls. The counter is
cached in a module-level map keyed by provider id + instrument name. Each
increment includes a status attribute of ok, error or cancelled.
Works for def and async def functions alike. No-ops when OTel is disabled
or config.OTEL.METRICS_ENABLED is False.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str | None
|
Counter instrument name. Defaults to module-qualified calls name. |
None
|
attributes
|
Mapping[str, AttributeValue] | None
|
Optional static attributes merged into each recording. |
None
|
Returns:
| Type | Description |
|---|---|
_MetricDecorator
|
A decorator that counts invocations of the target function. |
Source code in archipy/helpers/decorators/metrics.py
archipy.helpers.decorators.metrics.async_count_calls ¶
async_count_calls(
name: str | None = None,
*,
attributes: Mapping[str, AttributeValue] | None = None,
) -> _AsyncMetricDecorator
Decorate an async function to increment a call counter.
Deprecated
Use :func:count_calls, which supports async functions directly.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str | None
|
Counter instrument name. Defaults to module-qualified calls name. |
None
|
attributes
|
Mapping[str, AttributeValue] | None
|
Optional static attributes merged into each recording. |
None
|
Returns:
| Type | Description |
|---|---|
_AsyncMetricDecorator
|
A decorator that counts invocations of the target coroutine function. |
Raises:
| Type | Description |
|---|---|
InvalidArgumentError
|
If the decorated object is not a coroutine function. |
Source code in archipy/helpers/decorators/metrics.py
options: show_root_toc_entry: false heading_level: 3
Singleton¶
Decorator that ensures a class is instantiated only once throughout the application lifecycle.
Singleton decorator helpers.
archipy.helpers.decorators.singleton_class.singleton_decorator
module-attribute
¶
archipy.helpers.decorators.singleton_class.singleton ¶
A decorator to create thread-safe Singleton classes.
This decorator ensures that only one instance of a class is created. The decorated name
is still the class itself, so isinstance, subclassing and class-level attributes keep
working. Constructor arguments passed after the first instantiation are ignored.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
thread_safe
|
bool
|
If True, enables thread-safety for instance creation. Defaults to True. |
True
|
Returns:
| Name | Type | Description |
|---|---|---|
function |
Callable[[T], T]
|
A decorator function that can be applied to a class. |
Example
To create a Singleton class, apply the singleton and optionally specify
whether thread-safety should be enabled:
@singleton(thread_safe=True)
class MySingletonClass:
def __init__(self, value):
self.value = value
# Create instances of MySingletonClass
instance1 = MySingletonClass(10)
instance2 = MySingletonClass(20)
# Verify that both instances are the same
print(instance1.value) # Output: 10
print(instance2.value) # Output: 10
print(instance1 is instance2) # Output: True
print(isinstance(instance1, MySingletonClass)) # Output: True
Source code in archipy/helpers/decorators/singleton_class.py
options: show_root_toc_entry: false heading_level: 3
SQLAlchemy Atomic¶
The SQLAlchemy atomic decorators moved to the adapters layer; see
Base SQLAlchemy. The old
archipy.helpers.decorators names still work and emit a DeprecationWarning; they will be removed in 6.0.0.
Deprecation Warnings¶
Decorator that emits a deprecation warning when a decorated function or class is used.
Decorators that warn on deprecated usage.
archipy.helpers.decorators.deprecation_warnings.method_deprecation_warning ¶
method_deprecation_warning(
message: str | None = None,
) -> Callable[[Callable[P, R]], Callable[P, R]]
A decorator that issues a deprecation warning when the decorated method is called.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
message
|
str
|
The deprecation message to display when the method is called. Defaults to "This method is deprecated and will be removed in a future version." |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
Callable |
Callable[[Callable[P, R]], Callable[P, R]]
|
The decorated method that issues a deprecation warning. |
Example
To use this decorator, apply it to a method:
class MyClass:
@method_deprecation_warning("This method is deprecated and will be removed in a future version.")
def old_method(self):
return "This is the old method."
# Calling the method will issue a deprecation warning
obj = MyClass()
result = obj.old_method()
Output:
Source code in archipy/helpers/decorators/deprecation_warnings.py
archipy.helpers.decorators.deprecation_warnings.class_deprecation_warning ¶
A decorator that issues a deprecation warning when the decorated class is instantiated.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
message
|
str
|
The deprecation message to display when the class is instantiated. Defaults to "This class is deprecated and will be removed in a future version." |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
Callable |
Callable[[T], T]
|
The decorated class that issues a deprecation warning. |
Example
To use this decorator, apply it to a class:
@class_deprecation_warning("This class is deprecated and will be removed in a future version.")
class OldClass:
def __init__(self):
pass
# Instantiating the class will issue a deprecation warning
obj = OldClass()
Output:
Source code in archipy/helpers/decorators/deprecation_warnings.py
options: show_root_toc_entry: false heading_level: 3
Deprecation Exception¶
Decorator that raises an exception when a deprecated function or class is called.
Decorators that raise on deprecated usage.
archipy.helpers.decorators.deprecation_exception.method_deprecation_error ¶
method_deprecation_error(
operation: str | None = None,
lang: LanguageType = LanguageType.EN,
) -> Callable[[Callable[P, R]], Callable[P, R]]
Decorator that raises a DeprecationError when the decorated method is called.
This decorator is used to mark methods as deprecated and immediately prevent their use by raising a DeprecationError when they are called. This is stricter than a warning and ensures deprecated methods cannot be used.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
operation
|
str
|
The name of the operation that is deprecated. Defaults to the name of the decorated method. |
None
|
lang
|
LanguageType
|
The language for the error message (default: "en"). |
EN
|
Returns:
| Name | Type | Description |
|---|---|---|
Callable |
Callable[[Callable[P, R]], Callable[P, R]]
|
The decorated method that raises a DeprecationException. |
Example
To use this decorator, apply it to a method:
class MyClass:
@method_deprecation_error(operation="old_method", lang=LanguageType.EN)
def old_method(self):
return "This is the old method."
# Calling the method will raise a DeprecationException
obj = MyClass()
result = obj.old_method()
Output:
Source code in archipy/helpers/decorators/deprecation_exception.py
archipy.helpers.decorators.deprecation_exception.class_deprecation_error ¶
class_deprecation_error(
operation: str | None = None,
lang: LanguageType = LanguageType.FA,
) -> Callable[[T], T]
A decorator that raises a DeprecationException when the decorated class is instantiated.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
operation
|
str
|
The name of the operation that is deprecated. Defaults to the name of the decorated class. |
None
|
lang
|
str
|
The language for the error message (default: "fa"). |
FA
|
Returns:
| Name | Type | Description |
|---|---|---|
Callable |
Callable[[T], T]
|
The decorated class that raises a DeprecationException. |
Example
To use this decorator, apply it to a class:
@class_deprecation_error(operation="OldClass", lang="en")
class OldClass:
def __init__(self):
pass
# Instantiating the class will raise a DeprecationException
obj = OldClass()
Output:
Source code in archipy/helpers/decorators/deprecation_exception.py
options: show_root_toc_entry: false heading_level: 3
gRPC Rate Limit¶
Decorator that declares per-RPC rate-limit windows on gRPC servicer methods. Read by
GrpcServerRateLimitInterceptor and AsyncGrpcServerRateLimitInterceptor.
Decorator for declaring per-RPC gRPC rate-limit windows on servicer methods.
archipy.helpers.decorators.grpc_rate_limit_window.grpc_rate_limit_decorator
module-attribute
¶
archipy.helpers.decorators.grpc_rate_limit_window.grpc_rate_limit ¶
grpc_rate_limit(
calls_count: int = 1,
milliseconds: int = 0,
seconds: int = 0,
minutes: int = 0,
hours: int = 0,
days: int = 0,
) -> Callable[[Callable[P, R]], Callable[P, R]]
Attach a rate-limit window to a gRPC servicer method without wrapping it.
Stack multiple decorators on one method to enforce burst and sustained limits.
The GrpcServerRateLimitInterceptor reads __archipy_rate_limit_windows__
and enforces each window in declaration order.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
calls_count
|
int
|
Maximum allowed requests within the window. |
1
|
milliseconds
|
int
|
Milliseconds component of the window. |
0
|
seconds
|
int
|
Seconds component of the window. |
0
|
minutes
|
int
|
Minutes component of the window. |
0
|
hours
|
int
|
Hours component of the window. |
0
|
days
|
int
|
Days component of the window. |
0
|
Returns:
| Type | Description |
|---|---|
Callable[[Callable[P, R]], Callable[P, R]]
|
A decorator that records the window on the target function. |
Raises:
| Type | Description |
|---|---|
InvalidArgumentError
|
If |
Source code in archipy/helpers/decorators/grpc_rate_limit_window.py
options: show_root_toc_entry: false heading_level: 3