jararaca 0.3.11a16__py3-none-any.whl → 0.4.0a19__py3-none-any.whl
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.
- README.md +121 -0
- jararaca/__init__.py +189 -17
- jararaca/__main__.py +4 -0
- jararaca/broker_backend/__init__.py +4 -0
- jararaca/broker_backend/mapper.py +4 -0
- jararaca/broker_backend/redis_broker_backend.py +9 -3
- jararaca/cli.py +915 -51
- jararaca/common/__init__.py +3 -0
- jararaca/core/__init__.py +3 -0
- jararaca/core/providers.py +8 -0
- jararaca/core/uow.py +41 -7
- jararaca/di.py +4 -0
- jararaca/files/entity.py.mako +4 -0
- jararaca/helpers/__init__.py +3 -0
- jararaca/helpers/global_scheduler/__init__.py +3 -0
- jararaca/helpers/global_scheduler/config.py +21 -0
- jararaca/helpers/global_scheduler/controller.py +42 -0
- jararaca/helpers/global_scheduler/registry.py +32 -0
- jararaca/lifecycle.py +6 -2
- jararaca/messagebus/__init__.py +4 -0
- jararaca/messagebus/bus_message_controller.py +4 -0
- jararaca/messagebus/consumers/__init__.py +3 -0
- jararaca/messagebus/decorators.py +121 -61
- jararaca/messagebus/implicit_headers.py +49 -0
- jararaca/messagebus/interceptors/__init__.py +3 -0
- jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py +62 -11
- jararaca/messagebus/interceptors/message_publisher_collector.py +62 -0
- jararaca/messagebus/interceptors/publisher_interceptor.py +29 -3
- jararaca/messagebus/message.py +4 -0
- jararaca/messagebus/publisher.py +6 -0
- jararaca/messagebus/worker.py +1002 -459
- jararaca/microservice.py +113 -2
- jararaca/observability/constants.py +7 -0
- jararaca/observability/decorators.py +170 -13
- jararaca/observability/fastapi_exception_handler.py +37 -0
- jararaca/observability/hooks.py +109 -0
- jararaca/observability/interceptor.py +4 -0
- jararaca/observability/providers/__init__.py +3 -0
- jararaca/observability/providers/otel.py +225 -16
- jararaca/persistence/base.py +39 -3
- jararaca/persistence/exports.py +4 -0
- jararaca/persistence/interceptors/__init__.py +3 -0
- jararaca/persistence/interceptors/aiosqa_interceptor.py +86 -73
- jararaca/persistence/interceptors/constants.py +5 -0
- jararaca/persistence/interceptors/decorators.py +50 -0
- jararaca/persistence/session.py +3 -0
- jararaca/persistence/sort_filter.py +4 -0
- jararaca/persistence/utilities.py +73 -20
- jararaca/presentation/__init__.py +3 -0
- jararaca/presentation/decorators.py +88 -86
- jararaca/presentation/exceptions.py +23 -0
- jararaca/presentation/hooks.py +4 -0
- jararaca/presentation/http_microservice.py +4 -0
- jararaca/presentation/server.py +97 -45
- jararaca/presentation/websocket/__init__.py +3 -0
- jararaca/presentation/websocket/base_types.py +4 -0
- jararaca/presentation/websocket/context.py +4 -0
- jararaca/presentation/websocket/decorators.py +8 -41
- jararaca/presentation/websocket/redis.py +280 -53
- jararaca/presentation/websocket/types.py +4 -0
- jararaca/presentation/websocket/websocket_interceptor.py +46 -19
- jararaca/reflect/__init__.py +3 -0
- jararaca/reflect/controller_inspect.py +16 -10
- jararaca/reflect/decorators.py +252 -0
- jararaca/reflect/helpers.py +18 -0
- jararaca/reflect/metadata.py +34 -25
- jararaca/rpc/__init__.py +3 -0
- jararaca/rpc/http/__init__.py +101 -0
- jararaca/rpc/http/backends/__init__.py +14 -0
- jararaca/rpc/http/backends/httpx.py +43 -9
- jararaca/rpc/http/backends/otel.py +4 -0
- jararaca/rpc/http/decorators.py +380 -115
- jararaca/rpc/http/httpx.py +3 -0
- jararaca/scheduler/__init__.py +3 -0
- jararaca/scheduler/beat_worker.py +521 -105
- jararaca/scheduler/decorators.py +15 -22
- jararaca/scheduler/types.py +4 -0
- jararaca/tools/app_config/__init__.py +3 -0
- jararaca/tools/app_config/decorators.py +7 -19
- jararaca/tools/app_config/interceptor.py +6 -2
- jararaca/tools/typescript/__init__.py +3 -0
- jararaca/tools/typescript/decorators.py +120 -0
- jararaca/tools/typescript/interface_parser.py +1077 -174
- jararaca/utils/__init__.py +3 -0
- jararaca/utils/env_parse_utils.py +133 -0
- jararaca/utils/rabbitmq_utils.py +112 -39
- jararaca/utils/retry.py +19 -14
- jararaca-0.4.0a19.dist-info/LICENSE +674 -0
- jararaca-0.4.0a19.dist-info/LICENSES/GPL-3.0-or-later.txt +232 -0
- {jararaca-0.3.11a16.dist-info → jararaca-0.4.0a19.dist-info}/METADATA +12 -7
- jararaca-0.4.0a19.dist-info/RECORD +96 -0
- {jararaca-0.3.11a16.dist-info → jararaca-0.4.0a19.dist-info}/WHEEL +1 -1
- pyproject.toml +132 -0
- jararaca-0.3.11a16.dist-info/RECORD +0 -74
- /jararaca-0.3.11a16.dist-info/LICENSE → /LICENSE +0 -0
- {jararaca-0.3.11a16.dist-info → jararaca-0.4.0a19.dist-info}/entry_points.txt +0 -0
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Lucas S
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
4
|
+
|
|
5
|
+
import time
|
|
1
6
|
from urllib.parse import urljoin
|
|
2
7
|
|
|
3
8
|
import httpx
|
|
@@ -7,34 +12,63 @@ from jararaca.rpc.http.decorators import (
|
|
|
7
12
|
HttpRPCRequest,
|
|
8
13
|
HttpRPCResponse,
|
|
9
14
|
RPCRequestNetworkError,
|
|
15
|
+
TimeoutException,
|
|
10
16
|
)
|
|
11
17
|
|
|
12
18
|
|
|
13
19
|
class HTTPXHttpRPCAsyncBackend(HttpRPCAsyncBackend):
|
|
14
20
|
|
|
15
|
-
def __init__(self, prefix_url: str = ""):
|
|
21
|
+
def __init__(self, prefix_url: str = "", default_timeout: float = 30.0):
|
|
16
22
|
self.prefix_url = prefix_url
|
|
23
|
+
self.default_timeout = default_timeout
|
|
17
24
|
|
|
18
25
|
async def request(
|
|
19
26
|
self,
|
|
20
27
|
request: HttpRPCRequest,
|
|
21
28
|
) -> HttpRPCResponse:
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
start_time = time.time()
|
|
31
|
+
|
|
32
|
+
# Prepare timeout
|
|
33
|
+
timeout = (
|
|
34
|
+
request.timeout if request.timeout is not None else self.default_timeout
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
# Prepare request kwargs
|
|
38
|
+
request_kwargs = {
|
|
39
|
+
"method": request.method,
|
|
40
|
+
"url": urljoin(self.prefix_url, request.url),
|
|
41
|
+
"headers": request.headers,
|
|
42
|
+
"params": request.query_params,
|
|
43
|
+
"timeout": timeout,
|
|
44
|
+
}
|
|
24
45
|
|
|
46
|
+
# Handle different content types
|
|
47
|
+
if request.form_data and request.files:
|
|
48
|
+
# Multipart form data with files
|
|
49
|
+
request_kwargs["data"] = request.form_data
|
|
50
|
+
request_kwargs["files"] = request.files
|
|
51
|
+
elif request.form_data:
|
|
52
|
+
# Form data only
|
|
53
|
+
request_kwargs["data"] = request.form_data
|
|
54
|
+
elif request.body:
|
|
55
|
+
# Raw body content
|
|
56
|
+
request_kwargs["content"] = request.body
|
|
57
|
+
|
|
58
|
+
async with httpx.AsyncClient() as client:
|
|
25
59
|
try:
|
|
26
|
-
response = await client.request(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
headers=request.headers,
|
|
30
|
-
params=request.query_params,
|
|
31
|
-
content=request.body,
|
|
32
|
-
)
|
|
60
|
+
response = await client.request(**request_kwargs) # type: ignore[arg-type]
|
|
61
|
+
|
|
62
|
+
elapsed_time = time.time() - start_time
|
|
33
63
|
|
|
34
64
|
return HttpRPCResponse(
|
|
35
65
|
status_code=response.status_code,
|
|
36
66
|
data=response.content,
|
|
67
|
+
headers=dict(response.headers),
|
|
68
|
+
elapsed_time=elapsed_time,
|
|
37
69
|
)
|
|
70
|
+
except httpx.TimeoutException as err:
|
|
71
|
+
raise TimeoutException(f"Request timed out: {err}") from err
|
|
38
72
|
except httpx.NetworkError as err:
|
|
39
73
|
raise RPCRequestNetworkError(
|
|
40
74
|
request=request, backend_request=err.request
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Lucas S
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
4
|
+
|
|
1
5
|
from opentelemetry import baggage, trace
|
|
2
6
|
from opentelemetry.baggage.propagation import W3CBaggagePropagator
|
|
3
7
|
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
|