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.

Files changed (76) hide show
  1. {jararaca-0.2.19a1 → jararaca-0.2.21}/PKG-INFO +1 -1
  2. {jararaca-0.2.19a1 → jararaca-0.2.21}/pyproject.toml +1 -1
  3. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/decorators.py +2 -2
  4. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/websocket_interceptor.py +18 -6
  5. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/tools/typescript/interface_parser.py +12 -7
  6. {jararaca-0.2.19a1 → jararaca-0.2.21}/LICENSE +0 -0
  7. {jararaca-0.2.19a1 → jararaca-0.2.21}/README.md +0 -0
  8. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Message Bus/Decorators.md +0 -0
  9. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Message Bus/Interceptors.md +0 -0
  10. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Observability/Decorators.md +0 -0
  11. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Observability/Interceptors.md +0 -0
  12. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Presentation/Decorators.md +0 -0
  13. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/RPC/RestClients/Decorators.md +0 -0
  14. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/RPC/RestClients/Middlewared.md +0 -0
  15. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Schedule/Decorators.md +0 -0
  16. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Websocket/Decorators.md +0 -0
  17. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Architecture/Websocket/Interceptors.md +0 -0
  18. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Concept/Adapters.md +0 -0
  19. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Concept/Hexagonal Architecture.md +0 -0
  20. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/Concept/Ports.md +0 -0
  21. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
  22. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
  23. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/assets/tracing_example.png +0 -0
  24. {jararaca-0.2.19a1 → jararaca-0.2.21}/docs/index.md +0 -0
  25. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/__init__.py +0 -0
  26. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/__main__.py +0 -0
  27. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/cli.py +0 -0
  28. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/common/__init__.py +0 -0
  29. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/core/__init__.py +0 -0
  30. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/core/providers.py +0 -0
  31. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/core/uow.py +0 -0
  32. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/di.py +0 -0
  33. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/files/entity.py.mako +0 -0
  34. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/lifecycle.py +0 -0
  35. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/__init__.py +0 -0
  36. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/decorators.py +0 -0
  37. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
  38. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +0 -0
  39. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/publisher.py +0 -0
  40. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/types.py +0 -0
  41. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/messagebus/worker.py +0 -0
  42. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/microservice.py +0 -0
  43. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/observability/decorators.py +0 -0
  44. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/observability/interceptor.py +0 -0
  45. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/observability/providers/__init__.py +0 -0
  46. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/observability/providers/otel.py +0 -0
  47. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/base.py +0 -0
  48. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/exports.py +0 -0
  49. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/interceptors/__init__.py +0 -0
  50. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +0 -0
  51. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/persistence/session.py +0 -0
  52. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/__init__.py +0 -0
  53. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/decorators.py +0 -0
  54. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/hooks.py +0 -0
  55. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/http_microservice.py +0 -0
  56. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/server.py +0 -0
  57. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/__init__.py +0 -0
  58. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/base_types.py +0 -0
  59. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/context.py +0 -0
  60. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/redis.py +0 -0
  61. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/presentation/websocket/types.py +0 -0
  62. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/py.typed +0 -0
  63. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/__init__.py +0 -0
  64. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/__init__.py +0 -0
  65. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/backends/__init__.py +0 -0
  66. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/backends/httpx.py +0 -0
  67. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/backends/otel.py +0 -0
  68. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/decorators.py +0 -0
  69. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/rpc/http/httpx.py +0 -0
  70. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/scheduler/__init__.py +0 -0
  71. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/scheduler/decorators.py +0 -0
  72. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/scheduler/scheduler.py +0 -0
  73. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/tools/app_config/__init__.py +0 -0
  74. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/tools/app_config/decorators.py +0 -0
  75. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/tools/app_config/interceptor.py +0 -0
  76. {jararaca-0.2.19a1 → jararaca-0.2.21}/src/jararaca/tools/metadata.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jararaca
3
- Version: 0.2.19a1
3
+ Version: 0.2.21
4
4
  Summary: A simple and fast API framework for Python
5
5
  Home-page: https://github.com/LuscasLeo/jararaca
6
6
  Author: Lucas S
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "jararaca"
3
- version = "0.2.19a1"
3
+ version = "0.2.21"
4
4
  description = "A simple and fast API framework for Python"
5
5
  authors = ["Lucas S <me@luscasleo.dev>"]
6
6
  readme = "README.md"
@@ -37,14 +37,14 @@ class WebSocketEndpoint:
37
37
  return cls
38
38
 
39
39
 
40
- INHERITS_MESSAGE = TypeVar("INHERITS_MESSAGE", bound=WebSocketMessageBase)
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[INHERITS_MESSAGE]) -> None:
47
+ def __init__(self, *message_types: type[INHERITS_WS_MESSAGE]) -> None:
48
48
  self.message_types = message_types
49
49
 
50
50
  @staticmethod
@@ -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 WebSocketEndpoint
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(rooms, message.model_dump_json().encode())
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
- field = getattr(basemodel_type, field_name)
253
- if field is None:
254
- continue
255
- string_builder.write(f" {field_name}: {parse_literal_value(field)};\n")
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