jararaca 0.3.23__tar.gz → 0.3.25__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 (94) hide show
  1. {jararaca-0.3.23 → jararaca-0.3.25}/PKG-INFO +1 -1
  2. {jararaca-0.3.23 → jararaca-0.3.25}/pyproject.toml +1 -1
  3. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/__init__.py +15 -1
  4. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/observability/decorators.py +18 -2
  5. jararaca-0.3.25/src/jararaca/observability/hooks.py +59 -0
  6. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/observability/providers/otel.py +25 -2
  7. jararaca-0.3.23/src/jararaca/observability/hooks.py +0 -20
  8. {jararaca-0.3.23 → jararaca-0.3.25}/LICENSE +0 -0
  9. {jararaca-0.3.23 → jararaca-0.3.25}/README.md +0 -0
  10. {jararaca-0.3.23 → jararaca-0.3.25}/docs/CNAME +0 -0
  11. {jararaca-0.3.23 → jararaca-0.3.25}/docs/architecture.md +0 -0
  12. {jararaca-0.3.23 → jararaca-0.3.25}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
  13. {jararaca-0.3.23 → jararaca-0.3.25}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
  14. {jararaca-0.3.23 → jararaca-0.3.25}/docs/assets/tracing_example.png +0 -0
  15. {jararaca-0.3.23 → jararaca-0.3.25}/docs/expose-type.md +0 -0
  16. {jararaca-0.3.23 → jararaca-0.3.25}/docs/http-rpc.md +0 -0
  17. {jararaca-0.3.23 → jararaca-0.3.25}/docs/index.md +0 -0
  18. {jararaca-0.3.23 → jararaca-0.3.25}/docs/interceptors.md +0 -0
  19. {jararaca-0.3.23 → jararaca-0.3.25}/docs/messagebus.md +0 -0
  20. {jararaca-0.3.23 → jararaca-0.3.25}/docs/retry.md +0 -0
  21. {jararaca-0.3.23 → jararaca-0.3.25}/docs/scheduler.md +0 -0
  22. {jararaca-0.3.23 → jararaca-0.3.25}/docs/stylesheets/custom.css +0 -0
  23. {jararaca-0.3.23 → jararaca-0.3.25}/docs/websocket.md +0 -0
  24. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/__main__.py +0 -0
  25. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/broker_backend/__init__.py +0 -0
  26. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/broker_backend/mapper.py +0 -0
  27. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/broker_backend/redis_broker_backend.py +0 -0
  28. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/cli.py +0 -0
  29. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/common/__init__.py +0 -0
  30. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/core/__init__.py +0 -0
  31. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/core/providers.py +0 -0
  32. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/core/uow.py +0 -0
  33. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/di.py +0 -0
  34. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/files/entity.py.mako +0 -0
  35. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/lifecycle.py +0 -0
  36. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/__init__.py +0 -0
  37. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/bus_message_controller.py +0 -0
  38. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/consumers/__init__.py +0 -0
  39. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/decorators.py +0 -0
  40. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/implicit_headers.py +0 -0
  41. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
  42. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py +0 -0
  43. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +0 -0
  44. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/message.py +0 -0
  45. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/publisher.py +0 -0
  46. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/messagebus/worker.py +0 -0
  47. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/microservice.py +0 -0
  48. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/observability/interceptor.py +0 -0
  49. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/observability/providers/__init__.py +0 -0
  50. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/persistence/base.py +0 -0
  51. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/persistence/exports.py +0 -0
  52. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/persistence/interceptors/__init__.py +0 -0
  53. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +0 -0
  54. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/persistence/interceptors/constants.py +0 -0
  55. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/persistence/interceptors/decorators.py +0 -0
  56. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/persistence/session.py +0 -0
  57. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/persistence/sort_filter.py +0 -0
  58. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/persistence/utilities.py +0 -0
  59. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/__init__.py +0 -0
  60. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/decorators.py +0 -0
  61. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/hooks.py +0 -0
  62. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/http_microservice.py +0 -0
  63. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/server.py +0 -0
  64. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/websocket/__init__.py +0 -0
  65. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/websocket/base_types.py +0 -0
  66. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/websocket/context.py +0 -0
  67. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/websocket/decorators.py +0 -0
  68. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/websocket/redis.py +0 -0
  69. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/websocket/types.py +0 -0
  70. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/presentation/websocket/websocket_interceptor.py +0 -0
  71. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/py.typed +0 -0
  72. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/reflect/__init__.py +0 -0
  73. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/reflect/controller_inspect.py +0 -0
  74. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/reflect/metadata.py +0 -0
  75. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/rpc/__init__.py +0 -0
  76. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/rpc/http/__init__.py +0 -0
  77. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/rpc/http/backends/__init__.py +0 -0
  78. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/rpc/http/backends/httpx.py +0 -0
  79. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/rpc/http/backends/otel.py +0 -0
  80. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/rpc/http/decorators.py +0 -0
  81. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/rpc/http/httpx.py +0 -0
  82. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/scheduler/__init__.py +0 -0
  83. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/scheduler/beat_worker.py +0 -0
  84. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/scheduler/decorators.py +0 -0
  85. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/scheduler/types.py +0 -0
  86. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/tools/app_config/__init__.py +0 -0
  87. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/tools/app_config/decorators.py +0 -0
  88. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/tools/app_config/interceptor.py +0 -0
  89. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/tools/typescript/__init__.py +0 -0
  90. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/tools/typescript/decorators.py +0 -0
  91. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/tools/typescript/interface_parser.py +0 -0
  92. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/utils/__init__.py +0 -0
  93. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/utils/rabbitmq_utils.py +0 -0
  94. {jararaca-0.3.23 → jararaca-0.3.25}/src/jararaca/utils/retry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jararaca
3
- Version: 0.3.23
3
+ Version: 0.3.25
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.3.23"
3
+ version = "0.3.25"
4
4
  description = "A simple and fast API framework for Python"
5
5
  authors = ["Lucas S <me@luscasleo.dev>"]
6
6
  readme = "README.md"
@@ -18,7 +18,13 @@ if TYPE_CHECKING:
18
18
  use_app_type,
19
19
  )
20
20
  from jararaca.observability.decorators import TracedClass, TracedFunc, traced_class
21
- from jararaca.observability.hooks import spawn_trace
21
+ from jararaca.observability.hooks import (
22
+ add_event,
23
+ get_tracing_provider,
24
+ record_exception,
25
+ set_span_status,
26
+ spawn_trace,
27
+ )
22
28
  from jararaca.observability.interceptor import ObservabilityInterceptor
23
29
  from jararaca.observability.providers.otel import OtelObservabilityProvider
24
30
  from jararaca.persistence.sort_filter import (
@@ -228,6 +234,10 @@ if TYPE_CHECKING:
228
234
  "TracedClass",
229
235
  "traced_class",
230
236
  "spawn_trace",
237
+ "add_event",
238
+ "set_span_status",
239
+ "record_exception",
240
+ "get_tracing_provider",
231
241
  "QueryInjector",
232
242
  "HttpMicroservice",
233
243
  "use_current_container",
@@ -402,6 +412,10 @@ _dynamic_imports: "dict[str, tuple[str, str, str | None]]" = {
402
412
  "TracedClass": (__SPEC_PARENT__, "observability.decorators", None),
403
413
  "traced_class": (__SPEC_PARENT__, "observability.decorators", None),
404
414
  "spawn_trace": (__SPEC_PARENT__, "observability.hooks", None),
415
+ "add_event": (__SPEC_PARENT__, "observability.hooks", None),
416
+ "set_span_status": (__SPEC_PARENT__, "observability.hooks", None),
417
+ "record_exception": (__SPEC_PARENT__, "observability.hooks", None),
418
+ "get_tracing_provider": (__SPEC_PARENT__, "observability.hooks", None),
405
419
  "QueryInjector": (__SPEC_PARENT__, "persistence.utilities", None),
406
420
  "HttpMicroservice": (__SPEC_PARENT__, "presentation.http_microservice", None),
407
421
  "use_current_container": (__SPEC_PARENT__, "microservice", None),
@@ -9,6 +9,7 @@ from typing import (
9
9
  Callable,
10
10
  ContextManager,
11
11
  Generator,
12
+ Literal,
12
13
  Mapping,
13
14
  Protocol,
14
15
  Sequence,
@@ -36,10 +37,25 @@ AttributeMap = Mapping[str, AttributeValue]
36
37
 
37
38
  class TracingContextProvider(Protocol):
38
39
 
39
- def __call__(
40
+ def start_trace_context(
40
41
  self, trace_name: str, context_attributes: AttributeMap | None
41
42
  ) -> ContextManager[Any]: ...
42
43
 
44
+ def add_event(
45
+ self,
46
+ event_name: str,
47
+ event_attributes: AttributeMap | None = None,
48
+ ) -> None: ...
49
+
50
+ def set_span_status(self, status_code: Literal["OK", "ERROR", "UNSET"]) -> None: ...
51
+
52
+ def record_exception(
53
+ self,
54
+ exception: Exception,
55
+ attributes: AttributeMap | None = None,
56
+ escaped: bool = False,
57
+ ) -> None: ...
58
+
43
59
 
44
60
  class TracingContextProviderFactory(Protocol):
45
61
 
@@ -101,7 +117,7 @@ class TracedFunc:
101
117
  ) -> Any:
102
118
 
103
119
  if ctx_provider := get_tracing_ctx_provider():
104
- with ctx_provider(
120
+ with ctx_provider.start_trace_context(
105
121
  self.trace_name,
106
122
  self.trace_mapper(*args, **kwargs),
107
123
  ):
@@ -0,0 +1,59 @@
1
+ from contextlib import contextmanager
2
+ from typing import Any, Generator, Literal
3
+
4
+ from jararaca.observability.decorators import (
5
+ AttributeMap,
6
+ TracingContextProvider,
7
+ get_tracing_ctx_provider,
8
+ )
9
+
10
+
11
+ @contextmanager
12
+ def spawn_trace(
13
+ name: str,
14
+ attributes: AttributeMap | None = None,
15
+ ) -> Generator[None, Any, None]:
16
+
17
+ if trace_context_provider := get_tracing_ctx_provider():
18
+ with trace_context_provider.start_trace_context(
19
+ trace_name=name, context_attributes=attributes
20
+ ):
21
+ yield
22
+ else:
23
+ yield
24
+
25
+
26
+ def add_event(
27
+ name: str,
28
+ attributes: AttributeMap | None = None,
29
+ ) -> None:
30
+
31
+ if trace_context_provider := get_tracing_ctx_provider():
32
+ trace_context_provider.add_event(
33
+ event_name=name,
34
+ event_attributes=attributes,
35
+ )
36
+
37
+
38
+ def set_span_status(status_code: Literal["OK", "ERROR", "UNSET"]) -> None:
39
+
40
+ if trace_context_provider := get_tracing_ctx_provider():
41
+ trace_context_provider.set_span_status(status_code=status_code)
42
+
43
+
44
+ def record_exception(
45
+ exception: Exception,
46
+ attributes: AttributeMap | None = None,
47
+ escaped: bool = False,
48
+ ) -> None:
49
+
50
+ if trace_context_provider := get_tracing_ctx_provider():
51
+ trace_context_provider.record_exception(
52
+ exception=exception,
53
+ attributes=attributes,
54
+ escaped=escaped,
55
+ )
56
+
57
+
58
+ def get_tracing_provider() -> TracingContextProvider | None:
59
+ return get_tracing_ctx_provider()
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  from contextlib import asynccontextmanager, contextmanager
3
- from typing import Any, AsyncGenerator, Generator, Protocol
3
+ from typing import Any, AsyncGenerator, Generator, Literal, Protocol
4
4
 
5
5
  from opentelemetry import metrics, trace
6
6
  from opentelemetry._logs import set_logger_provider
@@ -50,7 +50,7 @@ class OtelTracingContextProvider(TracingContextProvider):
50
50
  self.app_context = app_context
51
51
 
52
52
  @contextmanager
53
- def __call__(
53
+ def start_trace_context(
54
54
  self,
55
55
  trace_name: str,
56
56
  context_attributes: AttributeMap | None,
@@ -59,6 +59,29 @@ class OtelTracingContextProvider(TracingContextProvider):
59
59
  with tracer.start_as_current_span(trace_name, attributes=context_attributes):
60
60
  yield
61
61
 
62
+ def add_event(
63
+ self, event_name: str, event_attributes: AttributeMap | None = None
64
+ ) -> None:
65
+ trace.get_current_span().add_event(name=event_name, attributes=event_attributes)
66
+
67
+ def set_span_status(self, status_code: Literal["OK", "ERROR", "UNSET"]) -> None:
68
+ span = trace.get_current_span()
69
+ if status_code == "OK":
70
+ span.set_status(trace.Status(trace.StatusCode.OK))
71
+ elif status_code == "ERROR":
72
+ span.set_status(trace.Status(trace.StatusCode.ERROR))
73
+ else:
74
+ span.set_status(trace.Status(trace.StatusCode.UNSET))
75
+
76
+ def record_exception(
77
+ self,
78
+ exception: Exception,
79
+ attributes: AttributeMap | None = None,
80
+ escaped: bool = False,
81
+ ) -> None:
82
+ span = trace.get_current_span()
83
+ span.record_exception(exception, attributes=attributes, escaped=escaped)
84
+
62
85
 
63
86
  class OtelTracingContextProviderFactory(TracingContextProviderFactory):
64
87
 
@@ -1,20 +0,0 @@
1
- from contextlib import contextmanager
2
- from typing import Any, Generator
3
-
4
- from jararaca.observability.decorators import AttributeMap, get_tracing_ctx_provider
5
-
6
-
7
- @contextmanager
8
- def spawn_trace(
9
- name: str,
10
- attributes: AttributeMap | None = None,
11
- ) -> Generator[None, Any, None]:
12
-
13
- if trace_context_provider := get_tracing_ctx_provider():
14
- with trace_context_provider(trace_name=name, context_attributes=attributes):
15
- yield
16
- else:
17
- yield
18
-
19
-
20
- spawn_trace
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