jararaca 0.2.24__tar.gz → 0.2.26__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 (78) hide show
  1. {jararaca-0.2.24 → jararaca-0.2.26}/PKG-INFO +1 -1
  2. {jararaca-0.2.24 → jararaca-0.2.26}/pyproject.toml +1 -1
  3. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/__init__.py +24 -21
  4. jararaca-0.2.26/src/jararaca/persistence/base.py +33 -0
  5. jararaca-0.2.24/src/jararaca/persistence/base.py → jararaca-0.2.26/src/jararaca/persistence/utilities.py +8 -30
  6. {jararaca-0.2.24 → jararaca-0.2.26}/LICENSE +0 -0
  7. {jararaca-0.2.24 → jararaca-0.2.26}/README.md +0 -0
  8. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Architecture/Message Bus/Decorators.md +0 -0
  9. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Architecture/Message Bus/Interceptors.md +0 -0
  10. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Architecture/Observability/Decorators.md +0 -0
  11. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Architecture/Observability/Interceptors.md +0 -0
  12. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Architecture/Presentation/Decorators.md +0 -0
  13. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Architecture/RPC/RestClients/Decorators.md +0 -0
  14. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Architecture/RPC/RestClients/Middlewared.md +0 -0
  15. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Architecture/Schedule/Decorators.md +0 -0
  16. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Architecture/Websocket/Decorators.md +0 -0
  17. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Architecture/Websocket/Interceptors.md +0 -0
  18. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Concept/Adapters.md +0 -0
  19. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Concept/Hexagonal Architecture.md +0 -0
  20. {jararaca-0.2.24 → jararaca-0.2.26}/docs/Concept/Ports.md +0 -0
  21. {jararaca-0.2.24 → jararaca-0.2.26}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
  22. {jararaca-0.2.24 → jararaca-0.2.26}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
  23. {jararaca-0.2.24 → jararaca-0.2.26}/docs/assets/tracing_example.png +0 -0
  24. {jararaca-0.2.24 → jararaca-0.2.26}/docs/index.md +0 -0
  25. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/__main__.py +0 -0
  26. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/cli.py +0 -0
  27. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/common/__init__.py +0 -0
  28. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/core/__init__.py +0 -0
  29. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/core/providers.py +0 -0
  30. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/core/uow.py +0 -0
  31. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/di.py +0 -0
  32. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/files/entity.py.mako +0 -0
  33. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/lifecycle.py +0 -0
  34. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/messagebus/__init__.py +0 -0
  35. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/messagebus/decorators.py +0 -0
  36. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
  37. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +0 -0
  38. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/messagebus/publisher.py +0 -0
  39. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/messagebus/types.py +0 -0
  40. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/messagebus/worker.py +0 -0
  41. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/microservice.py +0 -0
  42. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/observability/decorators.py +0 -0
  43. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/observability/interceptor.py +0 -0
  44. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/observability/providers/__init__.py +0 -0
  45. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/observability/providers/otel.py +0 -0
  46. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/persistence/exports.py +0 -0
  47. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/persistence/interceptors/__init__.py +0 -0
  48. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +0 -0
  49. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/persistence/session.py +0 -0
  50. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/persistence/sort_filter.py +0 -0
  51. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/__init__.py +0 -0
  52. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/decorators.py +0 -0
  53. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/hooks.py +0 -0
  54. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/http_microservice.py +0 -0
  55. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/server.py +0 -0
  56. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/websocket/__init__.py +0 -0
  57. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/websocket/base_types.py +0 -0
  58. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/websocket/context.py +0 -0
  59. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/websocket/decorators.py +0 -0
  60. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/websocket/redis.py +0 -0
  61. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/websocket/types.py +0 -0
  62. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/presentation/websocket/websocket_interceptor.py +0 -0
  63. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/py.typed +0 -0
  64. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/rpc/__init__.py +0 -0
  65. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/rpc/http/__init__.py +0 -0
  66. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/rpc/http/backends/__init__.py +0 -0
  67. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/rpc/http/backends/httpx.py +0 -0
  68. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/rpc/http/backends/otel.py +0 -0
  69. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/rpc/http/decorators.py +0 -0
  70. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/rpc/http/httpx.py +0 -0
  71. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/scheduler/__init__.py +0 -0
  72. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/scheduler/decorators.py +0 -0
  73. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/scheduler/scheduler.py +0 -0
  74. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/tools/app_config/__init__.py +0 -0
  75. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/tools/app_config/decorators.py +0 -0
  76. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/tools/app_config/interceptor.py +0 -0
  77. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/tools/metadata.py +0 -0
  78. {jararaca-0.2.24 → jararaca-0.2.26}/src/jararaca/tools/typescript/interface_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jararaca
3
- Version: 0.2.24
3
+ Version: 0.2.26
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.24"
3
+ version = "0.2.26"
4
4
  description = "A simple and fast API framework for Python"
5
5
  authors = ["Lucas S <me@luscasleo.dev>"]
6
6
  readme = "README.md"
@@ -54,9 +54,13 @@ if TYPE_CHECKING:
54
54
  from .messagebus.types import Message, MessageOf
55
55
  from .messagebus.worker import MessageBusWorker
56
56
  from .microservice import Microservice, use_app_context, use_current_container
57
- from .persistence.base import (
58
- T_BASEMODEL,
59
- BaseEntity,
57
+ from .persistence.base import T_BASEMODEL, BaseEntity
58
+ from .persistence.interceptors.aiosqa_interceptor import (
59
+ AIOSQAConfig,
60
+ AIOSqlAlchemySessionInterceptor,
61
+ use_session,
62
+ )
63
+ from .persistence.utilities import (
60
64
  CriteriaBasedAttributeQueryInjector,
61
65
  CRUDOperations,
62
66
  DateCriteria,
@@ -71,11 +75,6 @@ if TYPE_CHECKING:
71
75
  QueryOperations,
72
76
  StringCriteria,
73
77
  )
74
- from .persistence.interceptors.aiosqa_interceptor import (
75
- AIOSQAConfig,
76
- AIOSqlAlchemySessionInterceptor,
77
- use_session,
78
- )
79
78
  from .presentation.decorators import (
80
79
  Delete,
81
80
  Get,
@@ -232,27 +231,31 @@ _dynamic_imports: "dict[str, tuple[str, str, str | None]]" = {
232
231
  "HttpPut": (__SPEC_PARENT__, "rpc.http.decorators", "Put"),
233
232
  "HttpDelete": (__SPEC_PARENT__, "rpc.http.decorators", "Delete"),
234
233
  "ObservabilityInterceptor": (__SPEC_PARENT__, "observability.interceptor", None),
235
- "QueryInjector": (__SPEC_PARENT__, "persistence.base", None),
234
+ "QueryInjector": (__SPEC_PARENT__, "persistence.utilities", None),
236
235
  "HttpMicroservice": (__SPEC_PARENT__, "presentation.http_microservice", None),
237
236
  "use_current_container": (__SPEC_PARENT__, "microservice", None),
238
237
  "T_BASEMODEL": (__SPEC_PARENT__, "persistence.base", None),
239
- "DatedEntity": (__SPEC_PARENT__, "persistence.base", None),
238
+ "DatedEntity": (__SPEC_PARENT__, "persistence.utilities", None),
240
239
  "BaseEntity": (__SPEC_PARENT__, "persistence.base", None),
241
240
  "use_ws_manager": (__SPEC_PARENT__, "presentation.websocket.context", None),
242
241
  "WebSocketEndpoint": (__SPEC_PARENT__, "presentation.websocket.decorators", None),
243
- "CriteriaBasedAttributeQueryInjector": (__SPEC_PARENT__, "persistence.base", None),
244
- "Identifiable": (__SPEC_PARENT__, "persistence.base", None),
245
- "IdentifiableEntity": (__SPEC_PARENT__, "persistence.base", None),
242
+ "CriteriaBasedAttributeQueryInjector": (
243
+ __SPEC_PARENT__,
244
+ "persistence.utilities",
245
+ None,
246
+ ),
247
+ "Identifiable": (__SPEC_PARENT__, "persistence.utilities", None),
248
+ "IdentifiableEntity": (__SPEC_PARENT__, "persistence.utilities", None),
246
249
  "MessageOf": (__SPEC_PARENT__, "messagebus.types", None),
247
250
  "Message": (__SPEC_PARENT__, "messagebus.types", None),
248
- "StringCriteria": (__SPEC_PARENT__, "persistence.base", None),
249
- "DateCriteria": (__SPEC_PARENT__, "persistence.base", None),
250
- "DateOrderedFilter": (__SPEC_PARENT__, "persistence.base", None),
251
- "DateOrderedQueryInjector": (__SPEC_PARENT__, "persistence.base", None),
252
- "Paginated": (__SPEC_PARENT__, "persistence.base", None),
253
- "PaginatedFilter": (__SPEC_PARENT__, "persistence.base", None),
254
- "QueryOperations": (__SPEC_PARENT__, "persistence.base", None),
255
- "CRUDOperations": (__SPEC_PARENT__, "persistence.base", None),
251
+ "StringCriteria": (__SPEC_PARENT__, "persistence.utilities", None),
252
+ "DateCriteria": (__SPEC_PARENT__, "persistence.utilities", None),
253
+ "DateOrderedFilter": (__SPEC_PARENT__, "persistence.utilities", None),
254
+ "DateOrderedQueryInjector": (__SPEC_PARENT__, "persistence.utilities", None),
255
+ "Paginated": (__SPEC_PARENT__, "persistence.utilities", None),
256
+ "PaginatedFilter": (__SPEC_PARENT__, "persistence.utilities", None),
257
+ "QueryOperations": (__SPEC_PARENT__, "persistence.utilities", None),
258
+ "CRUDOperations": (__SPEC_PARENT__, "persistence.utilities", None),
256
259
  "RestController": (__SPEC_PARENT__, "presentation.decorators", None),
257
260
  "MessageBusController": (__SPEC_PARENT__, "messagebus.decorators", None),
258
261
  "MessageHandler": (__SPEC_PARENT__, "messagebus.decorators", None),
@@ -0,0 +1,33 @@
1
+ from typing import Any, Self, Type, TypeVar
2
+
3
+ from pydantic import BaseModel
4
+ from sqlalchemy.orm import DeclarativeBase
5
+
6
+ IDENTIFIABLE_SCHEMA_T = TypeVar("IDENTIFIABLE_SCHEMA_T")
7
+
8
+
9
+ T_BASEMODEL = TypeVar("T_BASEMODEL", bound=BaseModel)
10
+
11
+
12
+ def recursive_get_dict(obj: Any) -> Any:
13
+ if isinstance(obj, list):
14
+ return [recursive_get_dict(v) for v in obj]
15
+ elif hasattr(obj, "__dict__"):
16
+ return {
17
+ k: recursive_get_dict(v) for k, v in obj.__dict__.items() if k[0] != "_"
18
+ }
19
+ else:
20
+ return obj
21
+
22
+
23
+ class BaseEntity(DeclarativeBase):
24
+
25
+ @classmethod
26
+ def from_basemodel(cls, mutation: T_BASEMODEL) -> "Self":
27
+ intersection = set(cls.__annotations__.keys()) & set(
28
+ mutation.model_fields.keys()
29
+ )
30
+ return cls(**{k: getattr(mutation, k) for k in intersection})
31
+
32
+ def to_basemodel(self, model: Type[T_BASEMODEL]) -> T_BASEMODEL:
33
+ return model.model_validate(recursive_get_dict(self))
@@ -21,11 +21,16 @@ from uuid import UUID, uuid4
21
21
  from pydantic import BaseModel, Field, ValidationError
22
22
  from sqlalchemy import DateTime, Result, Select, delete, func, select, update
23
23
  from sqlalchemy.ext.asyncio import AsyncSession
24
- from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
24
+ from sqlalchemy.orm import Mapped, mapped_column
25
25
 
26
+ from jararaca.persistence.base import (
27
+ IDENTIFIABLE_SCHEMA_T,
28
+ T_BASEMODEL,
29
+ BaseEntity,
30
+ recursive_get_dict,
31
+ )
26
32
  from jararaca.persistence.sort_filter import FilterModel, SortModel
27
33
 
28
- IDENTIFIABLE_SCHEMA_T = TypeVar("IDENTIFIABLE_SCHEMA_T")
29
34
  logger = logging.getLogger(__name__)
30
35
 
31
36
 
@@ -40,33 +45,6 @@ class Identifiable(BaseModel, Generic[IDENTIFIABLE_SCHEMA_T]):
40
45
  return Identifiable[IDENTIFIABLE_SCHEMA_T](id=id, data=data)
41
46
 
42
47
 
43
- T_BASEMODEL = TypeVar("T_BASEMODEL", bound=BaseModel)
44
-
45
-
46
- def recursive_get_dict(obj: Any) -> Any:
47
- if isinstance(obj, list):
48
- return [recursive_get_dict(v) for v in obj]
49
- elif hasattr(obj, "__dict__"):
50
- return {
51
- k: recursive_get_dict(v) for k, v in obj.__dict__.items() if k[0] != "_"
52
- }
53
- else:
54
- return obj
55
-
56
-
57
- class BaseEntity(DeclarativeBase):
58
-
59
- @classmethod
60
- def from_basemodel(cls, mutation: T_BASEMODEL) -> "Self":
61
- intersection = set(cls.__annotations__.keys()) & set(
62
- mutation.model_fields.keys()
63
- )
64
- return cls(**{k: getattr(mutation, k) for k in intersection})
65
-
66
- def to_basemodel(self, model: Type[T_BASEMODEL]) -> T_BASEMODEL:
67
- return model.model_validate(recursive_get_dict(self))
68
-
69
-
70
48
  def nowutc() -> datetime:
71
49
  return datetime.now(UTC)
72
50
 
@@ -208,7 +186,7 @@ class PaginatedFilter(BaseModel):
208
186
  page: Annotated[int, Field(gt=-1)] = 1
209
187
  page_size: int = 10
210
188
  sort_models: list[SortModel] = []
211
- filter_model: list[FilterModel] = []
189
+ filter_models: list[FilterModel] = []
212
190
 
213
191
 
214
192
  class QueryInjector(Protocol):
File without changes
File without changes
File without changes
File without changes
File without changes