jararaca 0.3.1__tar.gz → 0.3.2__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 (82) hide show
  1. {jararaca-0.3.1 → jararaca-0.3.2}/PKG-INFO +1 -1
  2. {jararaca-0.3.1 → jararaca-0.3.2}/pyproject.toml +1 -1
  3. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/tools/typescript/interface_parser.py +66 -40
  4. {jararaca-0.3.1 → jararaca-0.3.2}/LICENSE +0 -0
  5. {jararaca-0.3.1 → jararaca-0.3.2}/README.md +0 -0
  6. {jararaca-0.3.1 → jararaca-0.3.2}/docs/CNAME +0 -0
  7. {jararaca-0.3.1 → jararaca-0.3.2}/docs/architecture.md +0 -0
  8. {jararaca-0.3.1 → jararaca-0.3.2}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
  9. {jararaca-0.3.1 → jararaca-0.3.2}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
  10. {jararaca-0.3.1 → jararaca-0.3.2}/docs/assets/tracing_example.png +0 -0
  11. {jararaca-0.3.1 → jararaca-0.3.2}/docs/index.md +0 -0
  12. {jararaca-0.3.1 → jararaca-0.3.2}/docs/messagebus.md +0 -0
  13. {jararaca-0.3.1 → jararaca-0.3.2}/docs/scheduler.md +0 -0
  14. {jararaca-0.3.1 → jararaca-0.3.2}/docs/stylesheets/custom.css +0 -0
  15. {jararaca-0.3.1 → jararaca-0.3.2}/docs/websocket.md +0 -0
  16. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/__init__.py +0 -0
  17. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/__main__.py +0 -0
  18. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/broker_backend/__init__.py +0 -0
  19. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/broker_backend/mapper.py +0 -0
  20. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/broker_backend/redis_broker_backend.py +0 -0
  21. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/cli.py +0 -0
  22. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/common/__init__.py +0 -0
  23. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/core/__init__.py +0 -0
  24. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/core/providers.py +0 -0
  25. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/core/uow.py +0 -0
  26. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/di.py +0 -0
  27. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/files/entity.py.mako +0 -0
  28. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/lifecycle.py +0 -0
  29. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/__init__.py +0 -0
  30. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/bus_message_controller.py +0 -0
  31. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/consumers/__init__.py +0 -0
  32. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/decorators.py +0 -0
  33. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
  34. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py +0 -0
  35. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +0 -0
  36. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/message.py +0 -0
  37. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/publisher.py +0 -0
  38. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/worker.py +0 -0
  39. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/messagebus/worker_v2.py +0 -0
  40. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/microservice.py +0 -0
  41. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/observability/decorators.py +0 -0
  42. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/observability/interceptor.py +0 -0
  43. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/observability/providers/__init__.py +0 -0
  44. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/observability/providers/otel.py +0 -0
  45. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/persistence/base.py +0 -0
  46. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/persistence/exports.py +0 -0
  47. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/persistence/interceptors/__init__.py +0 -0
  48. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +0 -0
  49. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/persistence/session.py +0 -0
  50. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/persistence/sort_filter.py +0 -0
  51. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/persistence/utilities.py +0 -0
  52. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/__init__.py +0 -0
  53. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/decorators.py +0 -0
  54. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/hooks.py +0 -0
  55. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/http_microservice.py +0 -0
  56. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/server.py +0 -0
  57. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/websocket/__init__.py +0 -0
  58. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/websocket/base_types.py +0 -0
  59. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/websocket/context.py +0 -0
  60. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/websocket/decorators.py +0 -0
  61. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/websocket/redis.py +0 -0
  62. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/websocket/types.py +0 -0
  63. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/presentation/websocket/websocket_interceptor.py +0 -0
  64. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/py.typed +0 -0
  65. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/rpc/__init__.py +0 -0
  66. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/rpc/http/__init__.py +0 -0
  67. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/rpc/http/backends/__init__.py +0 -0
  68. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/rpc/http/backends/httpx.py +0 -0
  69. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/rpc/http/backends/otel.py +0 -0
  70. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/rpc/http/decorators.py +0 -0
  71. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/rpc/http/httpx.py +0 -0
  72. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/scheduler/__init__.py +0 -0
  73. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/scheduler/decorators.py +0 -0
  74. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/scheduler/scheduler.py +0 -0
  75. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/scheduler/scheduler_v2.py +0 -0
  76. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/scheduler/types.py +0 -0
  77. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/tools/app_config/__init__.py +0 -0
  78. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/tools/app_config/decorators.py +0 -0
  79. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/tools/app_config/interceptor.py +0 -0
  80. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/tools/metadata.py +0 -0
  81. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/utils/__init__.py +0 -0
  82. {jararaca-0.3.1 → jararaca-0.3.2}/src/jararaca/utils/rabbitmq_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: jararaca
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Summary: A simple and fast API framework for Python
5
5
  Author: Lucas S
6
6
  Author-email: me@luscasleo.dev
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "jararaca"
3
- version = "0.3.1"
3
+ version = "0.3.2"
4
4
  description = "A simple and fast API framework for Python"
5
5
  authors = ["Lucas S <me@luscasleo.dev>"]
6
6
  readme = "README.md"
@@ -193,10 +193,11 @@ def parse_type_to_typescript_interface(
193
193
  mapped_types.update(inherited_classes)
194
194
 
195
195
  if Enum in inherited_classes:
196
+ enum_values = sorted([(x._name_, x.value) for x in basemodel_type])
196
197
  return (
197
198
  set(),
198
199
  f"export enum {basemodel_type.__name__} {{\n"
199
- + "\n ".join([f'\t{x._name_} = "{x.value}",' for x in basemodel_type])
200
+ + "\n ".join([f'\t{name} = "{value}",' for name, value in enum_values])
200
201
  + "\n}\n",
201
202
  )
202
203
 
@@ -222,31 +223,39 @@ def parse_type_to_typescript_interface(
222
223
  extends_expression = (
223
224
  " extends %s"
224
225
  % ", ".join(
225
- [
226
- (
227
- "%s" % get_field_type_for_ts(inherited_class)
228
- if not inherited_classes_consts_conflict[inherited_class]
229
- else "Omit<%s, %s>"
230
- % (
231
- get_field_type_for_ts(inherited_class),
232
- " | ".join(
233
- '"%s"' % field_name
234
- for field_name in inherited_classes_consts_conflict[
235
- inherited_class
236
- ]
237
- ),
226
+ sorted(
227
+ [
228
+ (
229
+ "%s" % get_field_type_for_ts(inherited_class)
230
+ if not inherited_classes_consts_conflict[inherited_class]
231
+ else "Omit<%s, %s>"
232
+ % (
233
+ get_field_type_for_ts(inherited_class),
234
+ " | ".join(
235
+ sorted(
236
+ [
237
+ '"%s"' % field_name
238
+ for field_name in inherited_classes_consts_conflict[
239
+ inherited_class
240
+ ]
241
+ ]
242
+ )
243
+ ),
244
+ )
238
245
  )
239
- )
240
- for inherited_class in valid_inherited_classes
241
- ]
246
+ for inherited_class in valid_inherited_classes
247
+ ],
248
+ key=lambda x: str(x),
249
+ )
242
250
  )
243
251
  if len(valid_inherited_classes) > 0
244
252
  else ""
245
253
  )
246
254
 
247
255
  if is_generic_type(basemodel_type):
256
+ generic_args = get_generic_args(basemodel_type)
248
257
  string_builder.write(
249
- f"export interface {basemodel_type.__name__}<{', '.join([arg.__name__ for arg in get_generic_args(basemodel_type)])}>{extends_expression} {{\n"
258
+ f"export interface {basemodel_type.__name__}<{', '.join(sorted([arg.__name__ for arg in generic_args]))}>{extends_expression} {{\n"
250
259
  )
251
260
  else:
252
261
  string_builder.write(
@@ -254,12 +263,12 @@ def parse_type_to_typescript_interface(
254
263
  )
255
264
 
256
265
  if hasattr(basemodel_type, "__annotations__"):
257
- # for field_name in (f for f in dir(basemodel_type) if is_constant(f)):
258
- # field = getattr(basemodel_type, field_name)
259
- # if field is None:
260
- # continue
261
- # string_builder.write(f" {field_name}: {parse_literal_value(field)};\n")
262
- for field_name, field in basemodel_type.__annotations__.items():
266
+ # Sort fields for consistent output
267
+ annotation_items = sorted(
268
+ basemodel_type.__annotations__.items(), key=lambda x: x[0]
269
+ )
270
+
271
+ for field_name, field in annotation_items:
263
272
  if field_name in cls_consts:
264
273
  continue
265
274
 
@@ -277,8 +286,11 @@ def parse_type_to_typescript_interface(
277
286
  mapped_types.update(extract_all_envolved_types(field))
278
287
  mapped_types.add(field)
279
288
 
280
- ## Loop over computed fields
281
- members = inspect.getmembers(basemodel_type, lambda a: isinstance(a, property))
289
+ ## Loop over computed fields - sort them for consistent output
290
+ members = sorted(
291
+ inspect.getmembers(basemodel_type, lambda a: isinstance(a, property)),
292
+ key=lambda x: x[0],
293
+ )
282
294
  for field_name, field in members:
283
295
  if hasattr(field, "fget"):
284
296
  module_func_name = field.fget.__module__ + "." + field.fget.__qualname__
@@ -359,11 +371,13 @@ export type WebSocketMessageMap = {
359
371
  }
360
372
  """
361
373
  % "\n".join(
362
- [
363
- f'\t"{message.MESSAGE_ID}": {message.__name__};'
364
- for registers in websocket_registries
365
- for message in registers.message_types
366
- ]
374
+ sorted(
375
+ [
376
+ f'\t"{message.MESSAGE_ID}": {message.__name__};'
377
+ for registers in websocket_registries
378
+ for message in registers.message_types
379
+ ]
380
+ )
367
381
  )
368
382
  )
369
383
 
@@ -477,7 +491,12 @@ def write_rest_controller_to_typescript_interface(
477
491
 
478
492
  mapped_types: set[Any] = set()
479
493
 
480
- for name, member in inspect.getmembers(controller, predicate=inspect.isfunction):
494
+ # Sort members for consistent output
495
+ member_items = sorted(
496
+ inspect.getmembers(controller, predicate=inspect.isfunction), key=lambda x: x[0]
497
+ )
498
+
499
+ for name, member in member_items:
481
500
  if (mapping := HttpMapping.get_http_mapping(member)) is not None:
482
501
  return_type = member.__annotations__.get("return")
483
502
 
@@ -514,17 +533,24 @@ def write_rest_controller_to_typescript_interface(
514
533
  )
515
534
  class_buffer.write(f"\t\t\tpath: `/{final_path}`,\n")
516
535
 
536
+ # Sort headers
537
+ header_params = sorted(
538
+ [param for param in arg_params_spec if param.type_ == "header"],
539
+ key=lambda x: x.name,
540
+ )
517
541
  class_buffer.write("\t\t\theaders: {\n")
518
- for param in arg_params_spec:
519
- if param.type_ == "header":
520
- class_buffer.write(f'\t\t\t\t"{param.name}": {param.name},\n')
521
-
542
+ for param in header_params:
543
+ class_buffer.write(f'\t\t\t\t"{param.name}": {param.name},\n')
522
544
  class_buffer.write("\t\t\t},\n")
523
- class_buffer.write("\t\t\tquery: {\n")
524
545
 
525
- for param in arg_params_spec:
526
- if param.type_ == "query":
527
- class_buffer.write(f'\t\t\t\t"{param.name}": {param.name},\n')
546
+ # Sort query params
547
+ query_params = sorted(
548
+ [param for param in arg_params_spec if param.type_ == "query"],
549
+ key=lambda x: x.name,
550
+ )
551
+ class_buffer.write("\t\t\tquery: {\n")
552
+ for param in query_params:
553
+ class_buffer.write(f'\t\t\t\t"{param.name}": {param.name},\n')
528
554
  class_buffer.write("\t\t\t},\n")
529
555
 
530
556
  if (
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