jararaca 0.2.19a1__tar.gz → 0.2.21__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.2.19a1 → jararaca-0.2.21}/PKG-INFO +1 -1
- {jararaca-0.2.19a1 → jararaca-0.2.21}/pyproject.toml +1 -1
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/decorators.py +2 -2
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/websocket_interceptor.py +18 -6
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/tools/typescript/interface_parser.py +12 -7
- {jararaca-0.2.19a1 → jararaca-0.2.21}/LICENSE +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/README.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Message Bus/Decorators.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Message Bus/Interceptors.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Observability/Decorators.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Observability/Interceptors.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Presentation/Decorators.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/RPC/RestClients/Decorators.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/RPC/RestClients/Middlewared.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Schedule/Decorators.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Websocket/Decorators.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Websocket/Interceptors.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Concept/Adapters.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Concept/Hexagonal Architecture.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Concept/Ports.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/assets/tracing_example.png +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/index.md +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/__main__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/cli.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/common/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/core/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/core/providers.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/core/uow.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/di.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/files/entity.py.mako +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/lifecycle.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/decorators.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/publisher.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/types.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/worker.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/microservice.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/observability/decorators.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/observability/interceptor.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/observability/providers/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/observability/providers/otel.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/base.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/exports.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/interceptors/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/session.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/decorators.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/hooks.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/http_microservice.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/server.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/base_types.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/context.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/redis.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/types.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/py.typed +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/backends/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/backends/httpx.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/backends/otel.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/decorators.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/httpx.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/scheduler/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/scheduler/decorators.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/scheduler/scheduler.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/tools/app_config/__init__.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/tools/app_config/decorators.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/tools/app_config/interceptor.py +0 -0
- {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/tools/metadata.py +0 -0
|
@@ -37,14 +37,14 @@ class WebSocketEndpoint:
|
|
|
37
37
|
return cls
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
INHERITS_WS_MESSAGE = TypeVar("INHERITS_WS_MESSAGE", bound=WebSocketMessageBase)
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
class RegisterWebSocketMessage:
|
|
44
44
|
|
|
45
45
|
REGISTER_WEBSOCKET_MESSAGE_ATTR = "__register_websocket_message__"
|
|
46
46
|
|
|
47
|
-
def __init__(self, *message_types: type[
|
|
47
|
+
def __init__(self, *message_types: type[INHERITS_WS_MESSAGE]) -> None:
|
|
48
48
|
self.message_types = message_types
|
|
49
49
|
|
|
50
50
|
@staticmethod
|
{jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/websocket_interceptor.py
RENAMED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import inspect
|
|
3
3
|
from contextlib import asynccontextmanager
|
|
4
|
-
from typing import Any, AsyncGenerator, Protocol
|
|
4
|
+
from typing import Any, AsyncGenerator, Generic, Protocol
|
|
5
5
|
|
|
6
6
|
from fastapi import APIRouter
|
|
7
7
|
from fastapi import Depends as DependsF
|
|
8
8
|
from fastapi import WebSocketDisconnect
|
|
9
9
|
from fastapi.params import Depends
|
|
10
10
|
from fastapi.websockets import WebSocket, WebSocketState
|
|
11
|
+
from pydantic import BaseModel
|
|
11
12
|
|
|
12
13
|
from jararaca.core.uow import UnitOfWorkContextProvider
|
|
13
14
|
from jararaca.di import Container
|
|
@@ -26,11 +27,20 @@ from jararaca.presentation.websocket.context import (
|
|
|
26
27
|
WebSocketConnectionManager,
|
|
27
28
|
provide_ws_manager,
|
|
28
29
|
)
|
|
29
|
-
from jararaca.presentation.websocket.decorators import
|
|
30
|
+
from jararaca.presentation.websocket.decorators import (
|
|
31
|
+
INHERITS_WS_MESSAGE,
|
|
32
|
+
WebSocketEndpoint,
|
|
33
|
+
)
|
|
30
34
|
|
|
31
35
|
from .base_types import WebSocketMessageBase
|
|
32
36
|
|
|
33
37
|
|
|
38
|
+
class WebSocketMessageWrapper(BaseModel, Generic[INHERITS_WS_MESSAGE]):
|
|
39
|
+
|
|
40
|
+
MESSAGE_ID: str
|
|
41
|
+
message: INHERITS_WS_MESSAGE
|
|
42
|
+
|
|
43
|
+
|
|
34
44
|
class BroadcastFunc(Protocol):
|
|
35
45
|
async def __call__(self, message: bytes) -> None: ...
|
|
36
46
|
|
|
@@ -70,9 +80,6 @@ class WebSocketConnectionManagerImpl(WebSocketConnectionManager):
|
|
|
70
80
|
|
|
71
81
|
async def broadcast(self, message: bytes) -> None:
|
|
72
82
|
|
|
73
|
-
# for websocket in self.all_websockets:
|
|
74
|
-
# await websocket.send_bytes(message)
|
|
75
|
-
|
|
76
83
|
await self.backend.broadcast(message)
|
|
77
84
|
|
|
78
85
|
async def _broadcast_from_backend(self, message: bytes) -> None:
|
|
@@ -86,7 +93,12 @@ class WebSocketConnectionManagerImpl(WebSocketConnectionManager):
|
|
|
86
93
|
|
|
87
94
|
async def send(self, rooms: list[str], message: WebSocketMessageBase) -> None:
|
|
88
95
|
|
|
89
|
-
await self.backend.send(
|
|
96
|
+
await self.backend.send(
|
|
97
|
+
rooms,
|
|
98
|
+
WebSocketMessageWrapper(MESSAGE_ID=message.MESSAGE_ID, message=message)
|
|
99
|
+
.model_dump_json()
|
|
100
|
+
.encode(),
|
|
101
|
+
)
|
|
90
102
|
|
|
91
103
|
async def _send_from_backend(self, rooms: list[str], message: bytes) -> None:
|
|
92
104
|
async with self.lock:
|
|
@@ -31,6 +31,9 @@ from pydantic import BaseModel, PlainValidator
|
|
|
31
31
|
from jararaca.microservice import Microservice
|
|
32
32
|
from jararaca.presentation.decorators import HttpMapping, RestController
|
|
33
33
|
from jararaca.presentation.websocket.decorators import RegisterWebSocketMessage
|
|
34
|
+
from jararaca.presentation.websocket.websocket_interceptor import (
|
|
35
|
+
WebSocketMessageWrapper,
|
|
36
|
+
)
|
|
34
37
|
|
|
35
38
|
CONSTANT_PATTERN = re.compile(r"^[A-Z_]+$")
|
|
36
39
|
|
|
@@ -248,15 +251,16 @@ def parse_type_to_typescript_interface(
|
|
|
248
251
|
)
|
|
249
252
|
|
|
250
253
|
if hasattr(basemodel_type, "__annotations__"):
|
|
251
|
-
for field_name in (f for f in dir(basemodel_type) if is_constant(f)):
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
254
|
+
# for field_name in (f for f in dir(basemodel_type) if is_constant(f)):
|
|
255
|
+
# field = getattr(basemodel_type, field_name)
|
|
256
|
+
# if field is None:
|
|
257
|
+
# continue
|
|
258
|
+
# string_builder.write(f" {field_name}: {parse_literal_value(field)};\n")
|
|
256
259
|
for field_name, field in basemodel_type.__annotations__.items():
|
|
257
|
-
|
|
260
|
+
if field_name in cls_consts:
|
|
261
|
+
continue
|
|
258
262
|
string_builder.write(
|
|
259
|
-
f" {snake_to_camel(field_name)}: {get_field_type_for_ts(field)};\n"
|
|
263
|
+
f" {snake_to_camel(field_name) if not is_constant(field_name) else field_name}: {get_field_type_for_ts(field)};\n"
|
|
260
264
|
)
|
|
261
265
|
mapped_types.update(extract_all_envolved_types(field))
|
|
262
266
|
mapped_types.add(field)
|
|
@@ -308,6 +312,7 @@ def write_microservice_to_typescript_interface(
|
|
|
308
312
|
mapped_types_set: set[Any] = set()
|
|
309
313
|
|
|
310
314
|
websocket_registries: set[RegisterWebSocketMessage] = set()
|
|
315
|
+
mapped_types_set.add(WebSocketMessageWrapper)
|
|
311
316
|
|
|
312
317
|
for controller in microservice.controllers:
|
|
313
318
|
rest_controller = RestController.get_controller(controller)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jararaca-0.2.19a1 → jararaca-0.2.21}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg
RENAMED
|
File without changes
|
{jararaca-0.2.19a1 → jararaca-0.2.21}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/interceptors/publisher_interceptor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|