jararaca 0.3.9__tar.gz → 0.3.11__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of jararaca might be problematic. Click here for more details.
- {jararaca-0.3.9 → jararaca-0.3.11}/PKG-INFO +2 -1
- {jararaca-0.3.9 → jararaca-0.3.11}/docs/index.md +1 -17
- {jararaca-0.3.9 → jararaca-0.3.11}/docs/messagebus.md +2 -0
- jararaca-0.3.11/docs/retry.md +79 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/pyproject.toml +6 -1
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/__init__.py +76 -5
- jararaca-0.3.11/src/jararaca/cli.py +837 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/core/uow.py +17 -12
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/messagebus/decorators.py +33 -30
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py +30 -2
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +7 -3
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/messagebus/publisher.py +14 -6
- jararaca-0.3.11/src/jararaca/messagebus/worker.py +1416 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/microservice.py +137 -34
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/observability/decorators.py +7 -3
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/observability/interceptor.py +4 -2
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/observability/providers/otel.py +14 -10
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/persistence/base.py +2 -1
- jararaca-0.3.11/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +215 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/persistence/utilities.py +32 -20
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/decorators.py +96 -10
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/server.py +31 -4
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/websocket/context.py +30 -4
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/websocket/types.py +2 -2
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/websocket/websocket_interceptor.py +28 -4
- jararaca-0.3.11/src/jararaca/reflect/controller_inspect.py +75 -0
- {jararaca-0.3.9/src/jararaca/tools → jararaca-0.3.11/src/jararaca/reflect}/metadata.py +25 -5
- jararaca-0.3.9/src/jararaca/scheduler/scheduler_v2.py → jararaca-0.3.11/src/jararaca/scheduler/beat_worker.py +49 -53
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/scheduler/decorators.py +55 -20
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/tools/app_config/interceptor.py +4 -2
- jararaca-0.3.11/src/jararaca/utils/__init__.py +0 -0
- jararaca-0.3.11/src/jararaca/utils/rabbitmq_utils.py +346 -0
- jararaca-0.3.11/src/jararaca/utils/retry.py +141 -0
- jararaca-0.3.9/src/jararaca/cli.py +0 -493
- jararaca-0.3.9/src/jararaca/messagebus/worker.py +0 -402
- jararaca-0.3.9/src/jararaca/messagebus/worker_v2.py +0 -617
- jararaca-0.3.9/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +0 -64
- jararaca-0.3.9/src/jararaca/scheduler/scheduler.py +0 -161
- jararaca-0.3.9/src/jararaca/utils/rabbitmq_utils.py +0 -92
- {jararaca-0.3.9 → jararaca-0.3.11}/LICENSE +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/README.md +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/docs/CNAME +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/docs/architecture.md +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/docs/assets/tracing_example.png +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/docs/scheduler.md +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/docs/stylesheets/custom.css +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/docs/websocket.md +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/__main__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/broker_backend/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/broker_backend/mapper.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/broker_backend/redis_broker_backend.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/common/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/core/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/core/providers.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/di.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/files/entity.py.mako +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/lifecycle.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/messagebus/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/messagebus/bus_message_controller.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/messagebus/consumers/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/messagebus/message.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/observability/providers/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/persistence/exports.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/persistence/interceptors/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/persistence/session.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/persistence/sort_filter.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/hooks.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/http_microservice.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/websocket/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/websocket/base_types.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/websocket/decorators.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/presentation/websocket/redis.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/py.typed +0 -0
- {jararaca-0.3.9/src/jararaca/rpc → jararaca-0.3.11/src/jararaca/reflect}/__init__.py +0 -0
- {jararaca-0.3.9/src/jararaca/rpc/http → jararaca-0.3.11/src/jararaca/rpc}/__init__.py +0 -0
- {jararaca-0.3.9/src/jararaca/rpc/http/backends → jararaca-0.3.11/src/jararaca/rpc/http}/__init__.py +0 -0
- {jararaca-0.3.9/src/jararaca/scheduler → jararaca-0.3.11/src/jararaca/rpc/http/backends}/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/rpc/http/backends/httpx.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/rpc/http/backends/otel.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/rpc/http/decorators.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/rpc/http/httpx.py +0 -0
- {jararaca-0.3.9/src/jararaca/tools/app_config → jararaca-0.3.11/src/jararaca/scheduler}/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/scheduler/types.py +0 -0
- {jararaca-0.3.9/src/jararaca/utils → jararaca-0.3.11/src/jararaca/tools/app_config}/__init__.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/tools/app_config/decorators.py +0 -0
- {jararaca-0.3.9 → jararaca-0.3.11}/src/jararaca/tools/typescript/interface_parser.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: jararaca
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.11
|
|
4
4
|
Summary: A simple and fast API framework for Python
|
|
5
5
|
Author: Lucas S
|
|
6
6
|
Author-email: me@luscasleo.dev
|
|
@@ -16,6 +16,7 @@ Provides-Extra: watch
|
|
|
16
16
|
Requires-Dist: aio-pika (>=9.4.3,<10.0.0)
|
|
17
17
|
Requires-Dist: croniter (>=3.0.3,<4.0.0)
|
|
18
18
|
Requires-Dist: fastapi (>=0.113.0,<0.114.0)
|
|
19
|
+
Requires-Dist: frozendict (>=2.4.6,<3.0.0)
|
|
19
20
|
Requires-Dist: mako (>=1.3.5,<2.0.0)
|
|
20
21
|
Requires-Dist: opentelemetry-api (>=1.27.0,<2.0.0) ; extra == "opentelemetry"
|
|
21
22
|
Requires-Dist: opentelemetry-distro (>=0.49b2,<0.50) ; extra == "opentelemetry"
|
|
@@ -33,25 +33,9 @@ Starts a message bus worker that processes asynchronous messages from a message
|
|
|
33
33
|
|
|
34
34
|
**Options:**
|
|
35
35
|
|
|
36
|
-
- `--url`: AMQP URL (default: "amqp://guest:guest@localhost/")
|
|
37
|
-
- `--username`: AMQP username (optional)
|
|
38
|
-
- `--password`: AMQP password (optional)
|
|
39
|
-
- `--exchange`: Exchange name (default: "jararaca_ex")
|
|
40
|
-
- `--queue`: Queue name (default: "jararaca_q")
|
|
41
|
-
- `--prefetch-count`: Number of messages to prefetch (default: 1)
|
|
42
|
-
|
|
43
|
-
### `worker_v2` - Enhanced Message Bus Worker
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
jararaca worker_v2 APP_PATH [OPTIONS]
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Starts an enhanced version of the message bus worker with improved backend support.
|
|
50
|
-
|
|
51
|
-
**Options:**
|
|
52
|
-
|
|
53
36
|
- `--broker-url`: The URL for the message broker (required)
|
|
54
37
|
- `--backend-url`: The URL for the message broker backend (required)
|
|
38
|
+
- `--handlers`: Comma-separated list of handler names to listen to (optional)
|
|
55
39
|
|
|
56
40
|
### `server` - HTTP Server
|
|
57
41
|
|
|
@@ -29,6 +29,7 @@ graph TB
|
|
|
29
29
|
ack[ack]
|
|
30
30
|
nack[nack]
|
|
31
31
|
retry[retry]
|
|
32
|
+
retry_later[retry_later]
|
|
32
33
|
reject[reject]
|
|
33
34
|
end
|
|
34
35
|
|
|
@@ -42,6 +43,7 @@ graph TB
|
|
|
42
43
|
BusMessageController --> nack
|
|
43
44
|
BusMessageController --> reject
|
|
44
45
|
BusMessageController --> retry
|
|
46
|
+
BusMessageController --> retry_later
|
|
45
47
|
```
|
|
46
48
|
|
|
47
49
|
## Message Structure
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Retry Mechanism with Exponential Backoff
|
|
2
|
+
|
|
3
|
+
Jararaca implements a robust retry mechanism with exponential backoff for handling transient failures in RabbitMQ connections and operations. This mechanism helps the system gracefully handle temporary network issues, broker unavailability, and other transient failures.
|
|
4
|
+
|
|
5
|
+
## Core Components
|
|
6
|
+
|
|
7
|
+
The retry system consists of these main components:
|
|
8
|
+
|
|
9
|
+
1. `RetryConfig` - Configuration class for customizing retry behavior
|
|
10
|
+
2. `retry_with_backoff` - Utility function to execute operations with retry
|
|
11
|
+
3. `with_retry` - Decorator for applying retry logic to functions
|
|
12
|
+
|
|
13
|
+
## Retry Configuration
|
|
14
|
+
|
|
15
|
+
The `RetryConfig` class allows customization of various retry parameters:
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
class RetryConfig:
|
|
19
|
+
def __init__(
|
|
20
|
+
self,
|
|
21
|
+
max_retries: int = 5, # Maximum number of retry attempts
|
|
22
|
+
initial_delay: float = 1.0, # Initial delay between retries (seconds)
|
|
23
|
+
max_delay: float = 60.0, # Maximum delay between retries (seconds)
|
|
24
|
+
backoff_factor: float = 2.0, # Multiplier for delay after each retry
|
|
25
|
+
jitter: bool = True, # Add randomness to delay to prevent thundering herd
|
|
26
|
+
):
|
|
27
|
+
...
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Integration with MessageBus Worker
|
|
31
|
+
|
|
32
|
+
The RabbitMQ consumer in the message bus system uses the retry mechanism in several key areas:
|
|
33
|
+
|
|
34
|
+
1. **Connection Establishment**: When establishing a connection to RabbitMQ, the system will automatically retry with increasing backoff periods if the connection fails.
|
|
35
|
+
|
|
36
|
+
2. **Channel Creation**: When creating channels for publishing or consuming messages, failures trigger the retry mechanism.
|
|
37
|
+
|
|
38
|
+
3. **Consumer Setup**: Setting up message consumers uses retry logic to handle temporary failures.
|
|
39
|
+
|
|
40
|
+
## URL Configuration Parameters
|
|
41
|
+
|
|
42
|
+
Retry behavior can be customized through URL parameters when configuring the RabbitMQ connection:
|
|
43
|
+
|
|
44
|
+
| Parameter | Description | Default |
|
|
45
|
+
|-----------|-------------|---------|
|
|
46
|
+
| `connection_retry_max` | Maximum number of connection retry attempts | 5 |
|
|
47
|
+
| `connection_retry_delay` | Initial delay between connection retries (seconds) | 1.0 |
|
|
48
|
+
| `connection_retry_max_delay` | Maximum delay between connection retries (seconds) | 60.0 |
|
|
49
|
+
| `connection_retry_backoff` | Multiplier for delay after each connection retry | 2.0 |
|
|
50
|
+
| `consumer_retry_max` | Maximum number of consumer setup retry attempts | 3 |
|
|
51
|
+
| `consumer_retry_delay` | Initial delay between consumer setup retries (seconds) | 0.5 |
|
|
52
|
+
| `consumer_retry_max_delay` | Maximum delay between consumer setup retries (seconds) | 5.0 |
|
|
53
|
+
| `consumer_retry_backoff` | Multiplier for delay after each consumer setup retry | 2.0 |
|
|
54
|
+
|
|
55
|
+
## Example Usage
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
# Configure with custom retry settings in URL:
|
|
59
|
+
broker_url = "amqp://guest:guest@localhost:5672/?exchange=jararaca&prefetch_count=10&connection_retry_max=10&connection_retry_delay=2.0"
|
|
60
|
+
|
|
61
|
+
# Use custom retry configuration in code:
|
|
62
|
+
from jararaca.utils.retry import RetryConfig, retry_with_backoff
|
|
63
|
+
|
|
64
|
+
config = RetryConfig(max_retries=3, initial_delay=1.0, max_delay=30.0)
|
|
65
|
+
|
|
66
|
+
async def connect_with_retry():
|
|
67
|
+
return await retry_with_backoff(
|
|
68
|
+
establish_connection,
|
|
69
|
+
retry_config=config,
|
|
70
|
+
retry_exceptions=(ConnectionError, TimeoutError)
|
|
71
|
+
)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Benefits
|
|
75
|
+
|
|
76
|
+
1. **Resilience** - The system can recover automatically from transient failures
|
|
77
|
+
2. **Reduced downtime** - Automatic reconnection minimizes service disruption
|
|
78
|
+
3. **Configuration flexibility** - Retry behavior can be tailored to different environments
|
|
79
|
+
4. **Smart backoff** - Exponential backoff with jitter prevents overloading services during recovery
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "jararaca"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.11"
|
|
4
4
|
description = "A simple and fast API framework for Python"
|
|
5
5
|
authors = ["Lucas S <me@luscasleo.dev>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -28,6 +28,7 @@ types-croniter = "^3.0.3.20240731"
|
|
|
28
28
|
types-redis = "^4.6.0.20240903"
|
|
29
29
|
mako = "^1.3.5"
|
|
30
30
|
watchdog = { version = "^3.0.0", optional = true }
|
|
31
|
+
frozendict = "^2.4.6"
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
[tool.poetry.extras]
|
|
@@ -78,3 +79,7 @@ strict = true
|
|
|
78
79
|
# JARARACA CONFIG
|
|
79
80
|
[tool.poetry.scripts]
|
|
80
81
|
jararaca = "jararaca.cli:cli"
|
|
82
|
+
|
|
83
|
+
[[tool.mypy.overrides]]
|
|
84
|
+
module = "mako.*"
|
|
85
|
+
ignore_missing_imports = true
|
|
@@ -11,7 +11,7 @@ if TYPE_CHECKING:
|
|
|
11
11
|
retry_later,
|
|
12
12
|
use_bus_message_controller,
|
|
13
13
|
)
|
|
14
|
-
from jararaca.microservice import AppContext, AppInterceptor
|
|
14
|
+
from jararaca.microservice import AppContext, AppInterceptor, AppTransactionContext
|
|
15
15
|
from jararaca.observability.interceptor import ObservabilityInterceptor
|
|
16
16
|
from jararaca.observability.providers.otel import OtelObservabilityProvider
|
|
17
17
|
from jararaca.persistence.sort_filter import (
|
|
@@ -32,6 +32,17 @@ if TYPE_CHECKING:
|
|
|
32
32
|
raises_500_on,
|
|
33
33
|
raises_http_exception_on,
|
|
34
34
|
)
|
|
35
|
+
from jararaca.reflect.controller_inspect import (
|
|
36
|
+
ControllerMemberReflect,
|
|
37
|
+
ControllerReflect,
|
|
38
|
+
)
|
|
39
|
+
from jararaca.reflect.metadata import (
|
|
40
|
+
SetMetadata,
|
|
41
|
+
get_all_metadata,
|
|
42
|
+
get_metadata,
|
|
43
|
+
get_metadata_value,
|
|
44
|
+
provide_metadata,
|
|
45
|
+
)
|
|
35
46
|
from jararaca.rpc.http.backends.httpx import HTTPXHttpRPCAsyncBackend
|
|
36
47
|
from jararaca.rpc.http.backends.otel import TracedRequestMiddleware
|
|
37
48
|
from jararaca.rpc.http.decorators import Body
|
|
@@ -53,6 +64,7 @@ if TYPE_CHECKING:
|
|
|
53
64
|
RestClient,
|
|
54
65
|
RouteHttpErrorHandler,
|
|
55
66
|
RPCRequestNetworkError,
|
|
67
|
+
RPCUnhandleError,
|
|
56
68
|
)
|
|
57
69
|
|
|
58
70
|
from .core.providers import ProviderSpec, Token
|
|
@@ -67,13 +79,22 @@ if TYPE_CHECKING:
|
|
|
67
79
|
)
|
|
68
80
|
from .messagebus.message import Message, MessageOf
|
|
69
81
|
from .messagebus.publisher import use_publisher
|
|
70
|
-
from .
|
|
71
|
-
|
|
82
|
+
from .microservice import (
|
|
83
|
+
Microservice,
|
|
84
|
+
use_app_context,
|
|
85
|
+
use_app_transaction_context,
|
|
86
|
+
use_app_tx_ctx_data,
|
|
87
|
+
use_current_container,
|
|
88
|
+
)
|
|
72
89
|
from .persistence.base import T_BASEMODEL, BaseEntity
|
|
73
90
|
from .persistence.interceptors.aiosqa_interceptor import (
|
|
74
91
|
AIOSQAConfig,
|
|
75
92
|
AIOSqlAlchemySessionInterceptor,
|
|
93
|
+
providing_new_session,
|
|
94
|
+
providing_session,
|
|
95
|
+
providing_transaction,
|
|
76
96
|
use_session,
|
|
97
|
+
use_transaction,
|
|
77
98
|
)
|
|
78
99
|
from .persistence.utilities import (
|
|
79
100
|
CriteriaBasedAttributeQueryInjector,
|
|
@@ -118,6 +139,11 @@ if TYPE_CHECKING:
|
|
|
118
139
|
from .tools.app_config.interceptor import AppConfigurationInterceptor
|
|
119
140
|
|
|
120
141
|
__all__ = [
|
|
142
|
+
"SetMetadata",
|
|
143
|
+
"provide_metadata",
|
|
144
|
+
"get_metadata",
|
|
145
|
+
"get_all_metadata",
|
|
146
|
+
"get_metadata_value",
|
|
121
147
|
"RedisMessageBrokerBackend",
|
|
122
148
|
"FilterRuleApplier",
|
|
123
149
|
"SortRuleApplier",
|
|
@@ -128,6 +154,7 @@ if TYPE_CHECKING:
|
|
|
128
154
|
"retry",
|
|
129
155
|
"retry_later",
|
|
130
156
|
"RPCRequestNetworkError",
|
|
157
|
+
"RPCUnhandleError",
|
|
131
158
|
"FILTER_SORT_ENTITY_ATTR_MAP",
|
|
132
159
|
"FilterModel",
|
|
133
160
|
"SortFilterRunner",
|
|
@@ -187,10 +214,14 @@ if TYPE_CHECKING:
|
|
|
187
214
|
"AIOSqlAlchemySessionInterceptor",
|
|
188
215
|
"AIOSQAConfig",
|
|
189
216
|
"create_http_server",
|
|
190
|
-
"MessageBusWorker",
|
|
191
217
|
"Container",
|
|
192
218
|
"WebSocketInterceptor",
|
|
193
219
|
"use_session",
|
|
220
|
+
"use_transaction",
|
|
221
|
+
"providing_session",
|
|
222
|
+
"provide_session",
|
|
223
|
+
"providing_transaction",
|
|
224
|
+
"providing_new_session",
|
|
194
225
|
"Post",
|
|
195
226
|
"Get",
|
|
196
227
|
"Patch",
|
|
@@ -212,7 +243,12 @@ if TYPE_CHECKING:
|
|
|
212
243
|
"HttpRpcClientBuilder",
|
|
213
244
|
"HTTPXHttpRPCAsyncBackend",
|
|
214
245
|
"use_app_context",
|
|
246
|
+
"use_app_transaction_context",
|
|
247
|
+
"use_app_tx_ctx_data",
|
|
248
|
+
"AppTransactionContext",
|
|
215
249
|
"AppContext",
|
|
250
|
+
"ControllerMemberReflect",
|
|
251
|
+
"ControllerReflect",
|
|
216
252
|
"AppInterceptor",
|
|
217
253
|
"OtelObservabilityProvider",
|
|
218
254
|
]
|
|
@@ -220,6 +256,11 @@ if TYPE_CHECKING:
|
|
|
220
256
|
__SPEC_PARENT__: str = __spec__.parent # type: ignore
|
|
221
257
|
# A mapping of {<member name>: (package, <module name>)} defining dynamic imports
|
|
222
258
|
_dynamic_imports: "dict[str, tuple[str, str, str | None]]" = {
|
|
259
|
+
"SetMetadata": (__SPEC_PARENT__, "reflect.metadata", None),
|
|
260
|
+
"provide_metadata": (__SPEC_PARENT__, "reflect.metadata", None),
|
|
261
|
+
"get_metadata": (__SPEC_PARENT__, "reflect.metadata", None),
|
|
262
|
+
"get_all_metadata": (__SPEC_PARENT__, "reflect.metadata", None),
|
|
263
|
+
"get_metadata_value": (__SPEC_PARENT__, "reflect.metadata", None),
|
|
223
264
|
"RedisMessageBrokerBackend": (
|
|
224
265
|
__SPEC_PARENT__,
|
|
225
266
|
"broker_backend.redis_broker_backend",
|
|
@@ -243,6 +284,7 @@ _dynamic_imports: "dict[str, tuple[str, str, str | None]]" = {
|
|
|
243
284
|
"retry": (__SPEC_PARENT__, "messagebus.bus_message_controller", None),
|
|
244
285
|
"retry_later": (__SPEC_PARENT__, "messagebus.bus_message_controller", None),
|
|
245
286
|
"RPCRequestNetworkError": (__SPEC_PARENT__, "rpc.http.decorators", None),
|
|
287
|
+
"RPCUnhandleError": (__SPEC_PARENT__, "rpc.http.decorators", None),
|
|
246
288
|
"FILTER_SORT_ENTITY_ATTR_MAP": (__SPEC_PARENT__, "persistence.sort_filter", None),
|
|
247
289
|
"FilterModel": (__SPEC_PARENT__, "persistence.sort_filter", None),
|
|
248
290
|
"SortFilterRunner": (__SPEC_PARENT__, "persistence.sort_filter", None),
|
|
@@ -323,7 +365,6 @@ _dynamic_imports: "dict[str, tuple[str, str, str | None]]" = {
|
|
|
323
365
|
None,
|
|
324
366
|
),
|
|
325
367
|
"create_http_server": (__SPEC_PARENT__, "presentation.server", None),
|
|
326
|
-
"MessageBusWorker": (__SPEC_PARENT__, "messagebus.worker", None),
|
|
327
368
|
"Container": (__SPEC_PARENT__, "di", None),
|
|
328
369
|
"WebSocketInterceptor": (
|
|
329
370
|
__SPEC_PARENT__,
|
|
@@ -335,6 +376,31 @@ _dynamic_imports: "dict[str, tuple[str, str, str | None]]" = {
|
|
|
335
376
|
"persistence.interceptors.aiosqa_interceptor",
|
|
336
377
|
None,
|
|
337
378
|
),
|
|
379
|
+
"use_transaction": (
|
|
380
|
+
__SPEC_PARENT__,
|
|
381
|
+
"persistence.interceptors.aiosqa_interceptor",
|
|
382
|
+
None,
|
|
383
|
+
),
|
|
384
|
+
"providing_session": (
|
|
385
|
+
__SPEC_PARENT__,
|
|
386
|
+
"persistence.interceptors.aiosqa_interceptor",
|
|
387
|
+
None,
|
|
388
|
+
),
|
|
389
|
+
"provide_session": (
|
|
390
|
+
__SPEC_PARENT__,
|
|
391
|
+
"persistence.interceptors.aiosqa_interceptor",
|
|
392
|
+
None,
|
|
393
|
+
),
|
|
394
|
+
"providing_new_session": (
|
|
395
|
+
__SPEC_PARENT__,
|
|
396
|
+
"persistence.interceptors.aiosqa_interceptor",
|
|
397
|
+
None,
|
|
398
|
+
),
|
|
399
|
+
"providing_transaction": (
|
|
400
|
+
__SPEC_PARENT__,
|
|
401
|
+
"persistence.interceptors.aiosqa_interceptor",
|
|
402
|
+
None,
|
|
403
|
+
),
|
|
338
404
|
"Post": (__SPEC_PARENT__, "presentation.decorators", None),
|
|
339
405
|
"Get": (__SPEC_PARENT__, "presentation.decorators", None),
|
|
340
406
|
"Patch": (__SPEC_PARENT__, "presentation.decorators", None),
|
|
@@ -375,8 +441,13 @@ _dynamic_imports: "dict[str, tuple[str, str, str | None]]" = {
|
|
|
375
441
|
"HttpRpcClientBuilder": (__SPEC_PARENT__, "rpc.http.decorators", None),
|
|
376
442
|
"HTTPXHttpRPCAsyncBackend": (__SPEC_PARENT__, "rpc.http.backends.httpx", None),
|
|
377
443
|
"use_app_context": (__SPEC_PARENT__, "microservice", None),
|
|
444
|
+
"use_app_transaction_context": (__SPEC_PARENT__, "microservice", None),
|
|
445
|
+
"use_app_tx_ctx_data": (__SPEC_PARENT__, "microservice", None),
|
|
378
446
|
"AppContext": (__SPEC_PARENT__, "microservice", None),
|
|
379
447
|
"AppInterceptor": (__SPEC_PARENT__, "microservice", None),
|
|
448
|
+
"AppTransactionContext": (__SPEC_PARENT__, "microservice", None),
|
|
449
|
+
"ControllerMemberReflect": (__SPEC_PARENT__, "reflect.controller_inspect", None),
|
|
450
|
+
"ControllerReflect": (__SPEC_PARENT__, "reflect.controller_inspect", None),
|
|
380
451
|
}
|
|
381
452
|
|
|
382
453
|
|