jararaca 0.3.7__tar.gz → 0.3.8__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.7 → jararaca-0.3.8}/PKG-INFO +1 -1
  2. {jararaca-0.3.7 → jararaca-0.3.8}/pyproject.toml +1 -1
  3. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/cli.py +72 -4
  4. {jararaca-0.3.7 → jararaca-0.3.8}/LICENSE +0 -0
  5. {jararaca-0.3.7 → jararaca-0.3.8}/README.md +0 -0
  6. {jararaca-0.3.7 → jararaca-0.3.8}/docs/CNAME +0 -0
  7. {jararaca-0.3.7 → jararaca-0.3.8}/docs/architecture.md +0 -0
  8. {jararaca-0.3.7 → jararaca-0.3.8}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
  9. {jararaca-0.3.7 → jararaca-0.3.8}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
  10. {jararaca-0.3.7 → jararaca-0.3.8}/docs/assets/tracing_example.png +0 -0
  11. {jararaca-0.3.7 → jararaca-0.3.8}/docs/index.md +0 -0
  12. {jararaca-0.3.7 → jararaca-0.3.8}/docs/messagebus.md +0 -0
  13. {jararaca-0.3.7 → jararaca-0.3.8}/docs/scheduler.md +0 -0
  14. {jararaca-0.3.7 → jararaca-0.3.8}/docs/stylesheets/custom.css +0 -0
  15. {jararaca-0.3.7 → jararaca-0.3.8}/docs/websocket.md +0 -0
  16. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/__init__.py +0 -0
  17. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/__main__.py +0 -0
  18. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/broker_backend/__init__.py +0 -0
  19. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/broker_backend/mapper.py +0 -0
  20. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/broker_backend/redis_broker_backend.py +0 -0
  21. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/common/__init__.py +0 -0
  22. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/core/__init__.py +0 -0
  23. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/core/providers.py +0 -0
  24. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/core/uow.py +0 -0
  25. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/di.py +0 -0
  26. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/files/entity.py.mako +0 -0
  27. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/lifecycle.py +0 -0
  28. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/__init__.py +0 -0
  29. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/bus_message_controller.py +0 -0
  30. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/consumers/__init__.py +0 -0
  31. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/decorators.py +0 -0
  32. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
  33. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py +0 -0
  34. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +0 -0
  35. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/message.py +0 -0
  36. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/publisher.py +0 -0
  37. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/worker.py +0 -0
  38. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/messagebus/worker_v2.py +0 -0
  39. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/microservice.py +0 -0
  40. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/observability/decorators.py +0 -0
  41. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/observability/interceptor.py +0 -0
  42. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/observability/providers/__init__.py +0 -0
  43. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/observability/providers/otel.py +0 -0
  44. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/persistence/base.py +0 -0
  45. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/persistence/exports.py +0 -0
  46. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/persistence/interceptors/__init__.py +0 -0
  47. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +0 -0
  48. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/persistence/session.py +0 -0
  49. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/persistence/sort_filter.py +0 -0
  50. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/persistence/utilities.py +0 -0
  51. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/__init__.py +0 -0
  52. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/decorators.py +0 -0
  53. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/hooks.py +0 -0
  54. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/http_microservice.py +0 -0
  55. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/server.py +0 -0
  56. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/websocket/__init__.py +0 -0
  57. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/websocket/base_types.py +0 -0
  58. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/websocket/context.py +0 -0
  59. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/websocket/decorators.py +0 -0
  60. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/websocket/redis.py +0 -0
  61. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/websocket/types.py +0 -0
  62. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/presentation/websocket/websocket_interceptor.py +0 -0
  63. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/py.typed +0 -0
  64. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/rpc/__init__.py +0 -0
  65. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/rpc/http/__init__.py +0 -0
  66. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/rpc/http/backends/__init__.py +0 -0
  67. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/rpc/http/backends/httpx.py +0 -0
  68. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/rpc/http/backends/otel.py +0 -0
  69. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/rpc/http/decorators.py +0 -0
  70. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/rpc/http/httpx.py +0 -0
  71. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/scheduler/__init__.py +0 -0
  72. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/scheduler/decorators.py +0 -0
  73. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/scheduler/scheduler.py +0 -0
  74. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/scheduler/scheduler_v2.py +0 -0
  75. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/scheduler/types.py +0 -0
  76. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/tools/app_config/__init__.py +0 -0
  77. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/tools/app_config/decorators.py +0 -0
  78. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/tools/app_config/interceptor.py +0 -0
  79. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/tools/metadata.py +0 -0
  80. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/tools/typescript/interface_parser.py +0 -0
  81. {jararaca-0.3.7 → jararaca-0.3.8}/src/jararaca/utils/__init__.py +0 -0
  82. {jararaca-0.3.7 → jararaca-0.3.8}/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.7
3
+ Version: 0.3.8
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.7"
3
+ version = "0.3.8"
4
4
  description = "A simple and fast API framework for Python"
5
5
  authors = ["Lucas S <me@luscasleo.dev>"]
6
6
  readme = "README.md"
@@ -275,11 +275,22 @@ def scheduler_v2(
275
275
  scheduler.run()
276
276
 
277
277
 
278
- def generate_interfaces(app_path: str, file_path: str) -> None:
278
+ def generate_interfaces(
279
+ app_path: str,
280
+ file_path: str | None = None,
281
+ stdout: bool = False,
282
+ post_process_cmd: str | None = None,
283
+ ) -> str:
279
284
  try:
280
285
  app = find_microservice_by_module_path(app_path)
281
286
  content = write_microservice_to_typescript_interface(app)
282
287
 
288
+ if stdout:
289
+ return content
290
+
291
+ if not file_path:
292
+ return content
293
+
283
294
  with open(file_path, "w", encoding="utf-8") as file:
284
295
  # Save current position
285
296
  file.tell()
@@ -295,8 +306,25 @@ def generate_interfaces(app_path: str, file_path: str) -> None:
295
306
  print(
296
307
  f"Generated TypeScript interfaces at {time.strftime('%H:%M:%S')} at {str(Path(file_path).absolute())}"
297
308
  )
309
+
310
+ if post_process_cmd and file_path:
311
+ import subprocess
312
+
313
+ try:
314
+ print(f"Running post-process command: {post_process_cmd}")
315
+ subprocess.run(
316
+ post_process_cmd.replace("{file}", file_path),
317
+ shell=True,
318
+ check=True,
319
+ )
320
+ print(f"Post-processing completed successfully")
321
+ except subprocess.CalledProcessError as e:
322
+ print(f"Post-processing command failed: {e}", file=sys.stderr)
323
+
324
+ return content
298
325
  except Exception as e:
299
326
  print(f"Error generating TypeScript interfaces: {e}", file=sys.stderr)
327
+ return ""
300
328
 
301
329
 
302
330
  @cli.command()
@@ -307,6 +335,7 @@ def generate_interfaces(app_path: str, file_path: str) -> None:
307
335
  @click.argument(
308
336
  "file_path",
309
337
  type=click.Path(file_okay=True, dir_okay=False),
338
+ required=False,
310
339
  )
311
340
  @click.option(
312
341
  "--watch",
@@ -317,11 +346,50 @@ def generate_interfaces(app_path: str, file_path: str) -> None:
317
346
  type=click.Path(exists=True, file_okay=False, dir_okay=True),
318
347
  default="src",
319
348
  )
320
- def gen_tsi(app_path: str, file_path: str, watch: bool, src_dir: str) -> None:
349
+ @click.option(
350
+ "--stdout",
351
+ is_flag=True,
352
+ help="Print generated interfaces to stdout instead of writing to a file",
353
+ )
354
+ @click.option(
355
+ "--post-process",
356
+ type=str,
357
+ help="Command to run after generating the interfaces, {file} will be replaced with the output file path",
358
+ )
359
+ def gen_tsi(
360
+ app_path: str,
361
+ file_path: str | None,
362
+ watch: bool,
363
+ src_dir: str,
364
+ stdout: bool,
365
+ post_process: str | None,
366
+ ) -> None:
321
367
  """Generate TypeScript interfaces from a Python microservice."""
322
368
 
369
+ if stdout and watch:
370
+ print(
371
+ "Error: --watch and --stdout options cannot be used together",
372
+ file=sys.stderr,
373
+ )
374
+ return
375
+
376
+ if not file_path and not stdout:
377
+ print("Error: either file_path or --stdout must be provided", file=sys.stderr)
378
+ return
379
+
380
+ if post_process and stdout:
381
+ print(
382
+ "Error: --post-process and --stdout options cannot be used together",
383
+ file=sys.stderr,
384
+ )
385
+ return
386
+
323
387
  # Initial generation
324
- generate_interfaces(app_path, file_path)
388
+ content = generate_interfaces(app_path, file_path, stdout, post_process)
389
+
390
+ if stdout:
391
+ print(content)
392
+ return
325
393
 
326
394
  # If watch mode is not enabled, exit
327
395
  if not watch:
@@ -350,7 +418,7 @@ def gen_tsi(app_path: str, file_path: str, watch: bool, src_dir: str) -> None:
350
418
  # Create a completely detached process to ensure classes are reloaded
351
419
  process = multiprocessing.get_context("spawn").Process(
352
420
  target=generate_interfaces,
353
- args=(app_path, file_path),
421
+ args=(app_path, file_path, False, post_process),
354
422
  daemon=False, # Non-daemon to ensure it completes
355
423
  )
356
424
  process.start()
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