jararaca 0.3.12a6__tar.gz → 0.3.12a8__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 (88) hide show
  1. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/PKG-INFO +1 -1
  2. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/pyproject.toml +1 -1
  3. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/tools/typescript/decorators.py +16 -5
  4. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/tools/typescript/interface_parser.py +18 -36
  5. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/LICENSE +0 -0
  6. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/README.md +0 -0
  7. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/CNAME +0 -0
  8. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/architecture.md +0 -0
  9. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
  10. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
  11. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/assets/tracing_example.png +0 -0
  12. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/http-rpc.md +0 -0
  13. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/index.md +0 -0
  14. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/interceptors.md +0 -0
  15. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/messagebus.md +0 -0
  16. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/retry.md +0 -0
  17. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/scheduler.md +0 -0
  18. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/stylesheets/custom.css +0 -0
  19. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/docs/websocket.md +0 -0
  20. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/__init__.py +0 -0
  21. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/__main__.py +0 -0
  22. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/broker_backend/__init__.py +0 -0
  23. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/broker_backend/mapper.py +0 -0
  24. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/broker_backend/redis_broker_backend.py +0 -0
  25. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/cli.py +0 -0
  26. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/common/__init__.py +0 -0
  27. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/core/__init__.py +0 -0
  28. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/core/providers.py +0 -0
  29. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/core/uow.py +0 -0
  30. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/di.py +0 -0
  31. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/files/entity.py.mako +0 -0
  32. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/lifecycle.py +0 -0
  33. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/messagebus/__init__.py +0 -0
  34. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/messagebus/bus_message_controller.py +0 -0
  35. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/messagebus/consumers/__init__.py +0 -0
  36. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/messagebus/decorators.py +0 -0
  37. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
  38. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py +0 -0
  39. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +0 -0
  40. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/messagebus/message.py +0 -0
  41. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/messagebus/publisher.py +0 -0
  42. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/messagebus/worker.py +0 -0
  43. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/microservice.py +0 -0
  44. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/observability/decorators.py +0 -0
  45. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/observability/interceptor.py +0 -0
  46. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/observability/providers/__init__.py +0 -0
  47. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/observability/providers/otel.py +0 -0
  48. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/persistence/base.py +0 -0
  49. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/persistence/exports.py +0 -0
  50. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/persistence/interceptors/__init__.py +0 -0
  51. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +0 -0
  52. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/persistence/session.py +0 -0
  53. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/persistence/sort_filter.py +0 -0
  54. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/persistence/utilities.py +0 -0
  55. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/__init__.py +0 -0
  56. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/decorators.py +0 -0
  57. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/hooks.py +0 -0
  58. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/http_microservice.py +0 -0
  59. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/server.py +0 -0
  60. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/websocket/__init__.py +0 -0
  61. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/websocket/base_types.py +0 -0
  62. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/websocket/context.py +0 -0
  63. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/websocket/decorators.py +0 -0
  64. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/websocket/redis.py +0 -0
  65. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/websocket/types.py +0 -0
  66. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/presentation/websocket/websocket_interceptor.py +0 -0
  67. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/py.typed +0 -0
  68. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/reflect/__init__.py +0 -0
  69. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/reflect/controller_inspect.py +0 -0
  70. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/reflect/metadata.py +0 -0
  71. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/rpc/__init__.py +0 -0
  72. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/rpc/http/__init__.py +0 -0
  73. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/rpc/http/backends/__init__.py +0 -0
  74. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/rpc/http/backends/httpx.py +0 -0
  75. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/rpc/http/backends/otel.py +0 -0
  76. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/rpc/http/decorators.py +0 -0
  77. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/rpc/http/httpx.py +0 -0
  78. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/scheduler/__init__.py +0 -0
  79. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/scheduler/beat_worker.py +0 -0
  80. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/scheduler/decorators.py +0 -0
  81. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/scheduler/types.py +0 -0
  82. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/tools/app_config/__init__.py +0 -0
  83. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/tools/app_config/decorators.py +0 -0
  84. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/tools/app_config/interceptor.py +0 -0
  85. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/tools/typescript/__init__.py +0 -0
  86. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/utils/__init__.py +0 -0
  87. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/src/jararaca/utils/rabbitmq_utils.py +0 -0
  88. {jararaca-0.3.12a6 → jararaca-0.3.12a8}/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.12a6
3
+ Version: 0.3.12a8
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.12a6"
3
+ version = "0.3.12a8"
4
4
  description = "A simple and fast API framework for Python"
5
5
  authors = ["Lucas S <me@luscasleo.dev>"]
6
6
  readme = "README.md"
@@ -1,4 +1,4 @@
1
- from typing import Any, Callable, TypeVar
1
+ from typing import Any, Callable, TypeVar, cast
2
2
 
3
3
  DECORATED_FUNC = TypeVar("DECORATED_FUNC", bound=Callable[..., Any])
4
4
 
@@ -10,21 +10,32 @@ class QueryEndpoint:
10
10
 
11
11
  METADATA_KEY = "__jararaca_query_endpoint__"
12
12
 
13
- def __init__(self) -> None: ...
13
+ def __init__(self, has_infinite_query: bool = False) -> None:
14
+ """
15
+ Initialize the QueryEndpoint decorator.
16
+
17
+ Args:
18
+ has_infinite_query: Whether the query endpoint supports infinite queries.
19
+ Important:
20
+ - Make sure a PaginatedQuery child instance is on the first argument
21
+ - Make sure the endpoint is a Patch (recommended) or Put method
22
+ - Make sure the endpoint returns a Paginated[T]
23
+ """
24
+ self.has_infinite_query = has_infinite_query
14
25
 
15
26
  def __call__(self, func: DECORATED_FUNC) -> DECORATED_FUNC:
16
27
  """
17
28
  Decorate the function to mark it as a query endpoint.
18
29
  """
19
- setattr(func, self.METADATA_KEY, True)
30
+ setattr(func, self.METADATA_KEY, self)
20
31
  return func
21
32
 
22
33
  @staticmethod
23
- def is_query(func: Any) -> bool:
34
+ def extract_query_endpoint(func: Any) -> "QueryEndpoint":
24
35
  """
25
36
  Check if the function is marked as a query endpoint.
26
37
  """
27
- return getattr(func, QueryEndpoint.METADATA_KEY, False)
38
+ return cast(QueryEndpoint, getattr(func, QueryEndpoint.METADATA_KEY, None))
28
39
 
29
40
 
30
41
  class MutationEndpoint:
@@ -389,7 +389,7 @@ def write_microservice_to_typescript_interface(
389
389
 
390
390
  final_buffer.write(
391
391
  """
392
- import { createClassQueryHooks , createClassMutationHooks, createClassInfiniteQueryHooks } from "@jararaca/core";
392
+ import { HttpService, HttpBackend, HttpBackendRequest, ResponseType, createClassQueryHooks , createClassMutationHooks, createClassInfiniteQueryHooks, paginationModelByFirstArgPaginationFilter } from "@jararaca/core";
393
393
  export type WebSocketMessageMap = {
394
394
  %s
395
395
  }
@@ -405,37 +405,6 @@ export type WebSocketMessageMap = {
405
405
  )
406
406
  )
407
407
 
408
- final_buffer.write(
409
- """
410
- export type ResponseType =
411
- | "arraybuffer"
412
- | "blob"
413
- | "document"
414
- | "json"
415
- | "text"
416
- | "stream"
417
- | "formdata";
418
-
419
-
420
- export interface HttpBackendRequest {
421
- method: string;
422
- path: string;
423
- pathParams: { [key: string]: any };
424
- headers: { [key: string]: string };
425
- query: { [key: string]: unknown };
426
- body: unknown;
427
- responseType?: ResponseType;
428
- }
429
-
430
- export interface HttpBackend {
431
- request<T>(request: HttpBackendRequest): Promise<T>;
432
- }
433
-
434
- export abstract class HttpService {
435
- constructor(protected readonly httpBackend: HttpBackend) {}
436
- }
437
- """
438
- )
439
408
  processed_types: set[Any] = set()
440
409
  backlog: set[Any] = mapped_types_set.copy()
441
410
 
@@ -512,7 +481,7 @@ def write_rest_controller_to_typescript_interface(
512
481
 
513
482
  class_name = controller.__name__
514
483
 
515
- decorated_queries: list[tuple[str, FunctionType]] = []
484
+ decorated_queries: list[tuple[str, FunctionType, QueryEndpoint]] = []
516
485
  decorated_mutations: list[tuple[str, FunctionType]] = []
517
486
 
518
487
  class_buffer = StringIO()
@@ -533,8 +502,8 @@ def write_rest_controller_to_typescript_interface(
533
502
  if return_type is None:
534
503
  return_type = NoneType
535
504
 
536
- if QueryEndpoint.is_query(member):
537
- decorated_queries.append((name, member))
505
+ if query_endpoint := QueryEndpoint.extract_query_endpoint(member):
506
+ decorated_queries.append((name, member, query_endpoint))
538
507
  if MutationEndpoint.is_mutation(member):
539
508
  decorated_mutations.append((name, member))
540
509
 
@@ -624,9 +593,22 @@ def write_rest_controller_to_typescript_interface(
624
593
  controller_hooks_builder.write(
625
594
  f"\t...createClassQueryHooks({class_name},\n"
626
595
  )
627
- for name, member in decorated_queries:
596
+ for name, member, _ in decorated_queries:
628
597
  controller_hooks_builder.write(f'\t\t"{snake_to_camel(name)}",\n')
629
598
  controller_hooks_builder.write("\t),\n")
599
+
600
+ if decorated_queries and any(
601
+ query.has_infinite_query for _, _, query in decorated_queries
602
+ ):
603
+ controller_hooks_builder.write(
604
+ f"\t...createClassInfiniteQueryHooks({class_name}, {{\n"
605
+ )
606
+ for name, member, query in decorated_queries:
607
+ if query.has_infinite_query:
608
+ controller_hooks_builder.write(
609
+ f'\t\t"{snake_to_camel(name)}": paginationModelByFirstArgPaginationFilter(),\n'
610
+ )
611
+ controller_hooks_builder.write("\t}),\n")
630
612
  if decorated_mutations:
631
613
  controller_hooks_builder.write(
632
614
  f"\t...createClassMutationHooks({class_name},\n"
File without changes
File without changes
File without changes
File without changes
File without changes