jararaca 0.3.8__tar.gz → 0.3.10__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.3.8 → jararaca-0.3.10}/PKG-INFO +1 -1
- {jararaca-0.3.8 → jararaca-0.3.10}/pyproject.toml +1 -1
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/persistence/utilities.py +32 -20
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/tools/typescript/interface_parser.py +14 -4
- {jararaca-0.3.8 → jararaca-0.3.10}/LICENSE +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/README.md +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/docs/CNAME +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/docs/architecture.md +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/docs/assets/tracing_example.png +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/docs/index.md +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/docs/messagebus.md +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/docs/scheduler.md +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/docs/stylesheets/custom.css +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/docs/websocket.md +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/__main__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/broker_backend/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/broker_backend/mapper.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/broker_backend/redis_broker_backend.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/cli.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/common/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/core/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/core/providers.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/core/uow.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/di.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/files/entity.py.mako +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/lifecycle.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/bus_message_controller.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/consumers/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/decorators.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/message.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/publisher.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/worker.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/messagebus/worker_v2.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/microservice.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/observability/decorators.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/observability/interceptor.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/observability/providers/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/observability/providers/otel.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/persistence/base.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/persistence/exports.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/persistence/interceptors/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/persistence/session.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/persistence/sort_filter.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/decorators.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/hooks.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/http_microservice.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/server.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/websocket/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/websocket/base_types.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/websocket/context.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/websocket/decorators.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/websocket/redis.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/websocket/types.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/websocket/websocket_interceptor.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/py.typed +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/rpc/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/rpc/http/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/rpc/http/backends/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/rpc/http/backends/httpx.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/rpc/http/backends/otel.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/rpc/http/decorators.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/rpc/http/httpx.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/scheduler/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/scheduler/decorators.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/scheduler/scheduler.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/scheduler/scheduler_v2.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/scheduler/types.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/tools/app_config/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/tools/app_config/decorators.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/tools/app_config/interceptor.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/tools/metadata.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/utils/__init__.py +0 -0
- {jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/utils/rabbitmq_utils.py +0 -0
|
@@ -213,7 +213,7 @@ class CRUDOperations(Generic[IDENTIFIABLE_T]):
|
|
|
213
213
|
# region PaginatedFilter
|
|
214
214
|
class PaginatedFilter(BaseModel):
|
|
215
215
|
page: Annotated[int, Field(gt=-1)] = 0
|
|
216
|
-
page_size: int = 10
|
|
216
|
+
page_size: Annotated[int, Field(gt=0)] = 10
|
|
217
217
|
sort_models: list[SortModel] = []
|
|
218
218
|
filter_models: list[FilterModel] = []
|
|
219
219
|
|
|
@@ -307,51 +307,63 @@ class QueryOperations(Generic[QUERY_FILTER_T, QUERY_ENTITY_T]):
|
|
|
307
307
|
Callable[[Select[Tuple[QUERY_ENTITY_T]]], Select[Tuple[QUERY_ENTITY_T]]]
|
|
308
308
|
] = [],
|
|
309
309
|
) -> "Paginated[QUERY_ENTITY_T]":
|
|
310
|
+
"""
|
|
311
|
+
Executes a query with the provided filter and interceptors.
|
|
312
|
+
Args:
|
|
313
|
+
filter: The filter to apply to the query.
|
|
314
|
+
interceptors: A list of functions that can modify the query before execution.
|
|
315
|
+
Returns:
|
|
316
|
+
Paginated[QUERY_ENTITY_T]: A paginated result containing the items and metadata.
|
|
317
|
+
"""
|
|
318
|
+
|
|
319
|
+
tier_one_filtered_query = self.generate_filtered_query(
|
|
320
|
+
filter, select(self.entity_type)
|
|
321
|
+
)
|
|
310
322
|
|
|
311
|
-
|
|
323
|
+
tier_two_filtered_query = reduce(
|
|
312
324
|
lambda query, interceptor: interceptor(query),
|
|
313
325
|
interceptors,
|
|
314
|
-
|
|
326
|
+
tier_one_filtered_query,
|
|
315
327
|
)
|
|
316
328
|
|
|
317
329
|
if self.sort_rule_applier:
|
|
318
|
-
|
|
319
|
-
|
|
330
|
+
tier_two_filtered_query = (
|
|
331
|
+
self.sort_rule_applier.create_query_for_sorting_list(
|
|
332
|
+
tier_two_filtered_query, filter.sort_models
|
|
333
|
+
)
|
|
320
334
|
)
|
|
321
335
|
|
|
322
336
|
if self.filter_rule_applier:
|
|
323
|
-
|
|
324
|
-
|
|
337
|
+
tier_two_filtered_query = (
|
|
338
|
+
self.filter_rule_applier.create_query_for_filter_list(
|
|
339
|
+
tier_two_filtered_query, filter.filter_models
|
|
340
|
+
)
|
|
325
341
|
)
|
|
326
342
|
|
|
327
343
|
unpaginated_total = (
|
|
328
344
|
await self.session.execute(
|
|
329
|
-
select(func.count()).select_from(
|
|
345
|
+
select(func.count()).select_from(tier_two_filtered_query.subquery())
|
|
330
346
|
)
|
|
331
347
|
).scalar_one()
|
|
332
348
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
paginated_query = filtered_query.limit(filter.page_size).offset(
|
|
349
|
+
paginated_query = tier_two_filtered_query.limit(filter.page_size).offset(
|
|
336
350
|
(filter.page) * filter.page_size
|
|
337
351
|
)
|
|
338
352
|
|
|
339
|
-
|
|
353
|
+
paginated_total = (
|
|
340
354
|
await self.session.execute(
|
|
341
355
|
select(func.count()).select_from(paginated_query.subquery())
|
|
342
356
|
)
|
|
343
357
|
).scalar_one()
|
|
344
358
|
|
|
359
|
+
result = await self.session.execute(paginated_query)
|
|
360
|
+
result_scalars = list(self.judge_unique(result).scalars().all())
|
|
361
|
+
|
|
345
362
|
return Paginated(
|
|
346
|
-
items=
|
|
347
|
-
|
|
348
|
-
for e in self.judge_unique(
|
|
349
|
-
await self.session.execute(paginated_query)
|
|
350
|
-
).scalars()
|
|
351
|
-
],
|
|
352
|
-
total=filtered_total,
|
|
363
|
+
items=result_scalars,
|
|
364
|
+
total=paginated_total,
|
|
353
365
|
unpaginated_total=unpaginated_total,
|
|
354
|
-
total_pages=int(
|
|
366
|
+
total_pages=int(unpaginated_total / filter.page_size) + 1,
|
|
355
367
|
)
|
|
356
368
|
|
|
357
369
|
def judge_unique(
|
|
@@ -74,13 +74,23 @@ def parse_literal_value(value: Any) -> str:
|
|
|
74
74
|
use_parse_context().mapped_types.add(value.__class__)
|
|
75
75
|
return f"{value.__class__.__name__}.{value.name}"
|
|
76
76
|
if isinstance(value, str):
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return
|
|
77
|
+
# Properly escape quotes for TypeScript string literals
|
|
78
|
+
escaped_value = value.replace("\\", "\\\\").replace('"', '\\"')
|
|
79
|
+
return f'"{escaped_value}"'
|
|
80
80
|
if isinstance(value, float):
|
|
81
81
|
return str(value)
|
|
82
82
|
if isinstance(value, bool):
|
|
83
|
-
|
|
83
|
+
# Ensure Python's True/False are properly converted to JavaScript's true/false
|
|
84
|
+
return "true" if value else "false"
|
|
85
|
+
# Special handling for Python symbols that might appear in literal types
|
|
86
|
+
if value is True:
|
|
87
|
+
return "true"
|
|
88
|
+
if value is False:
|
|
89
|
+
return "false"
|
|
90
|
+
if value is None:
|
|
91
|
+
return "null"
|
|
92
|
+
if isinstance(value, int):
|
|
93
|
+
return str(value)
|
|
84
94
|
return "unknown"
|
|
85
95
|
|
|
86
96
|
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{jararaca-0.3.8 → jararaca-0.3.10}/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
|
|
File without changes
|
{jararaca-0.3.8 → jararaca-0.3.10}/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
|
{jararaca-0.3.8 → jararaca-0.3.10}/src/jararaca/presentation/websocket/websocket_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
|