jararaca 0.3.10__py3-none-any.whl → 0.3.11__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.

Potentially problematic release.


This version of jararaca might be problematic. Click here for more details.

Files changed (34) hide show
  1. jararaca/__init__.py +76 -5
  2. jararaca/cli.py +460 -116
  3. jararaca/core/uow.py +17 -12
  4. jararaca/messagebus/decorators.py +33 -30
  5. jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py +30 -2
  6. jararaca/messagebus/interceptors/publisher_interceptor.py +7 -3
  7. jararaca/messagebus/publisher.py +14 -6
  8. jararaca/messagebus/worker.py +1102 -88
  9. jararaca/microservice.py +137 -34
  10. jararaca/observability/decorators.py +7 -3
  11. jararaca/observability/interceptor.py +4 -2
  12. jararaca/observability/providers/otel.py +14 -10
  13. jararaca/persistence/base.py +2 -1
  14. jararaca/persistence/interceptors/aiosqa_interceptor.py +167 -16
  15. jararaca/presentation/decorators.py +96 -10
  16. jararaca/presentation/server.py +31 -4
  17. jararaca/presentation/websocket/context.py +30 -4
  18. jararaca/presentation/websocket/types.py +2 -2
  19. jararaca/presentation/websocket/websocket_interceptor.py +28 -4
  20. jararaca/reflect/__init__.py +0 -0
  21. jararaca/reflect/controller_inspect.py +75 -0
  22. jararaca/{tools → reflect}/metadata.py +25 -5
  23. jararaca/scheduler/{scheduler_v2.py → beat_worker.py} +49 -53
  24. jararaca/scheduler/decorators.py +55 -20
  25. jararaca/tools/app_config/interceptor.py +4 -2
  26. jararaca/utils/rabbitmq_utils.py +259 -5
  27. jararaca/utils/retry.py +141 -0
  28. {jararaca-0.3.10.dist-info → jararaca-0.3.11.dist-info}/METADATA +2 -1
  29. {jararaca-0.3.10.dist-info → jararaca-0.3.11.dist-info}/RECORD +32 -31
  30. {jararaca-0.3.10.dist-info → jararaca-0.3.11.dist-info}/WHEEL +1 -1
  31. jararaca/messagebus/worker_v2.py +0 -617
  32. jararaca/scheduler/scheduler.py +0 -161
  33. {jararaca-0.3.10.dist-info → jararaca-0.3.11.dist-info}/LICENSE +0 -0
  34. {jararaca-0.3.10.dist-info → jararaca-0.3.11.dist-info}/entry_points.txt +0 -0
jararaca/__init__.py CHANGED
@@ -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 .messagebus.worker import MessageBusWorker
71
- from .microservice import Microservice, use_app_context, use_current_container
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