jararaca 0.3.11a12__tar.gz → 0.3.11a14__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.11a12 → jararaca-0.3.11a14}/PKG-INFO +1 -1
  2. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/pyproject.toml +1 -1
  3. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/cli.py +55 -41
  4. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/LICENSE +0 -0
  5. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/README.md +0 -0
  6. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/docs/CNAME +0 -0
  7. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/docs/architecture.md +0 -0
  8. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.jpeg +0 -0
  9. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/docs/assets/_f04774c9-7e05-4da4-8b17-8be23f6a1475.webp +0 -0
  10. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/docs/assets/tracing_example.png +0 -0
  11. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/docs/index.md +0 -0
  12. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/docs/messagebus.md +0 -0
  13. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/docs/scheduler.md +0 -0
  14. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/docs/stylesheets/custom.css +0 -0
  15. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/docs/websocket.md +0 -0
  16. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/__init__.py +0 -0
  17. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/__main__.py +0 -0
  18. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/broker_backend/__init__.py +0 -0
  19. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/broker_backend/mapper.py +0 -0
  20. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/broker_backend/redis_broker_backend.py +0 -0
  21. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/common/__init__.py +0 -0
  22. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/core/__init__.py +0 -0
  23. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/core/providers.py +0 -0
  24. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/core/uow.py +0 -0
  25. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/di.py +0 -0
  26. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/files/entity.py.mako +0 -0
  27. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/lifecycle.py +0 -0
  28. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/messagebus/__init__.py +0 -0
  29. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/messagebus/bus_message_controller.py +0 -0
  30. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/messagebus/consumers/__init__.py +0 -0
  31. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/messagebus/decorators.py +0 -0
  32. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/messagebus/interceptors/__init__.py +0 -0
  33. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py +0 -0
  34. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/messagebus/interceptors/publisher_interceptor.py +0 -0
  35. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/messagebus/message.py +0 -0
  36. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/messagebus/publisher.py +0 -0
  37. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/messagebus/worker.py +0 -0
  38. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/microservice.py +0 -0
  39. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/observability/decorators.py +0 -0
  40. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/observability/interceptor.py +0 -0
  41. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/observability/providers/__init__.py +0 -0
  42. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/observability/providers/otel.py +0 -0
  43. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/persistence/base.py +0 -0
  44. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/persistence/exports.py +0 -0
  45. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/persistence/interceptors/__init__.py +0 -0
  46. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/persistence/interceptors/aiosqa_interceptor.py +0 -0
  47. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/persistence/session.py +0 -0
  48. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/persistence/sort_filter.py +0 -0
  49. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/persistence/utilities.py +0 -0
  50. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/__init__.py +0 -0
  51. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/decorators.py +0 -0
  52. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/hooks.py +0 -0
  53. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/http_microservice.py +0 -0
  54. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/server.py +0 -0
  55. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/websocket/__init__.py +0 -0
  56. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/websocket/base_types.py +0 -0
  57. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/websocket/context.py +0 -0
  58. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/websocket/decorators.py +0 -0
  59. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/websocket/redis.py +0 -0
  60. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/websocket/types.py +0 -0
  61. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/presentation/websocket/websocket_interceptor.py +0 -0
  62. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/py.typed +0 -0
  63. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/reflect/__init__.py +0 -0
  64. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/reflect/controller_inspect.py +0 -0
  65. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/reflect/metadata.py +0 -0
  66. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/rpc/__init__.py +0 -0
  67. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/rpc/http/__init__.py +0 -0
  68. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/rpc/http/backends/__init__.py +0 -0
  69. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/rpc/http/backends/httpx.py +0 -0
  70. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/rpc/http/backends/otel.py +0 -0
  71. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/rpc/http/decorators.py +0 -0
  72. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/rpc/http/httpx.py +0 -0
  73. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/scheduler/__init__.py +0 -0
  74. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/scheduler/beat_worker.py +0 -0
  75. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/scheduler/decorators.py +0 -0
  76. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/scheduler/types.py +0 -0
  77. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/tools/app_config/__init__.py +0 -0
  78. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/tools/app_config/decorators.py +0 -0
  79. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/tools/app_config/interceptor.py +0 -0
  80. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/tools/typescript/interface_parser.py +0 -0
  81. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/src/jararaca/utils/__init__.py +0 -0
  82. {jararaca-0.3.11a12 → jararaca-0.3.11a14}/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.11a12
3
+ Version: 0.3.11a14
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.11a12"
3
+ version = "0.3.11a14"
4
4
  description = "A simple and fast API framework for Python"
5
5
  authors = ["Lucas S <me@luscasleo.dev>"]
6
6
  readme = "README.md"
@@ -78,6 +78,7 @@ async def declare_worker_infrastructure(
78
78
  broker_url: str,
79
79
  app: Microservice,
80
80
  force: bool = False,
81
+ interactive_mode: bool = False,
81
82
  ) -> None:
82
83
  """
83
84
  Declare the infrastructure (exchanges and queues) for worker.
@@ -100,25 +101,38 @@ async def declare_worker_infrastructure(
100
101
  connection = await aio_pika.connect(broker_url)
101
102
  channel = await connection.channel()
102
103
 
103
- # Force delete infrastructure if requested
104
- if force:
105
- click.echo(f"→ Force deleting existing infrastructure for exchange: {exchange}")
104
+ # Only force delete infrastructure if requested at the beginning
105
+ if force or (
106
+ interactive_mode
107
+ and click.confirm(f"Delete existing infrastructure for exchange: {exchange}?")
108
+ ):
109
+ click.echo(f"→ Deleting existing infrastructure for exchange: {exchange}")
106
110
  await RabbitmqUtils.delete_exchange(channel, exchange)
107
111
  await RabbitmqUtils.delete_exchange(channel, RabbitmqUtils.DEAD_LETTER_EXCHANGE)
108
112
  await RabbitmqUtils.delete_queue(channel, RabbitmqUtils.DEAD_LETTER_QUEUE)
109
113
 
110
- await RabbitmqUtils.declare_main_exchange(
111
- channel=channel,
112
- exchange_name=exchange,
113
- passive=not force, # If force is True, we already deleted the exchange
114
- )
114
+ try:
115
+ await RabbitmqUtils.declare_main_exchange(
116
+ channel=channel,
117
+ exchange_name=exchange,
118
+ passive=False,
119
+ )
115
120
 
116
- dlx = await RabbitmqUtils.declare_dl_exchange(channel=channel, passive=not force)
117
- dlq = await RabbitmqUtils.declare_dl_queue(channel=channel, passive=not force)
118
- await dlq.bind(dlx, routing_key=RabbitmqUtils.DEAD_LETTER_EXCHANGE)
121
+ dlx = await RabbitmqUtils.declare_dl_exchange(channel=channel, passive=False)
122
+ dlq = await RabbitmqUtils.declare_dl_queue(channel=channel, passive=False)
123
+ await dlq.bind(dlx, routing_key=RabbitmqUtils.DEAD_LETTER_EXCHANGE)
124
+ except Exception as e:
125
+ click.echo(f"Error during exchange declaration: {e}")
126
+ if force or (
127
+ interactive_mode
128
+ and click.confirm("Error occurred. Recreate infrastructure?")
129
+ ):
130
+ await channel.close()
131
+ await connection.close()
132
+ raise
133
+ click.echo("Skipping main exchange declaration due to error")
119
134
 
120
135
  # Find all message handlers and scheduled actions
121
-
122
136
  for instance_type in app.controllers:
123
137
  controller_spec = MessageBusController.get_messagebus(instance_type)
124
138
  if controller_spec is None:
@@ -127,50 +141,50 @@ async def declare_worker_infrastructure(
127
141
  _, members = inspect_controller(instance_type)
128
142
 
129
143
  # Declare queues for message handlers
130
- for name, member in members.items():
131
-
144
+ for _, member in members.items():
132
145
  message_handler = MessageHandler.get_message_incoming(
133
146
  member.member_function
134
147
  )
135
148
  if message_handler is not None:
136
-
137
149
  queue_name = f"{message_handler.message_type.MESSAGE_TOPIC}.{member.member_function.__module__}.{member.member_function.__qualname__}"
138
150
  routing_key = f"{message_handler.message_type.MESSAGE_TOPIC}.#"
139
151
 
140
- # Force delete queue if requested
141
- if force:
142
- await RabbitmqUtils.delete_queue(channel, queue_name)
143
-
144
- # Declare queue
145
- queue = await RabbitmqUtils.declare_worker_queue(
146
- channel=channel, queue_name=queue_name, passive=not force
147
- )
148
- await queue.bind(exchange=exchange, routing_key=routing_key)
149
- click.echo(
150
- f"✓ Declared message handler queue: {queue_name} (routing key: {routing_key})"
151
- )
152
+ try:
153
+ # Try to declare queue
154
+ queue = await RabbitmqUtils.declare_worker_queue(
155
+ channel=channel, queue_name=queue_name, passive=False
156
+ )
157
+ await queue.bind(exchange=exchange, routing_key=routing_key)
158
+ click.echo(
159
+ f"✓ Declared message handler queue: {queue_name} (routing key: {routing_key})"
160
+ )
161
+ except Exception as e:
162
+ click.echo(
163
+ f"⚠ Skipping message handler queue {queue_name} due to error: {e}"
164
+ )
165
+ continue
152
166
 
153
167
  scheduled_action = ScheduledAction.get_scheduled_action(
154
168
  member.member_function
155
169
  )
156
170
  if scheduled_action is not None:
157
-
158
- # Declare queues for scheduled actions
159
-
160
171
  queue_name = f"{member.member_function.__module__}.{member.member_function.__qualname__}"
161
172
  routing_key = queue_name
162
173
 
163
- # Force delete queue if requested
164
- if force:
165
- await RabbitmqUtils.delete_queue(channel, queue_name)
166
-
167
- queue = await RabbitmqUtils.declare_scheduled_action_queue(
168
- channel=channel, queue_name=queue_name, passive=not force
169
- )
170
- await queue.bind(exchange=exchange, routing_key=routing_key)
171
- click.echo(
172
- f"✓ Declared scheduled action queue: {queue_name} (routing key: {routing_key})"
173
- )
174
+ try:
175
+ # Try to declare queue
176
+ queue = await RabbitmqUtils.declare_scheduled_action_queue(
177
+ channel=channel, queue_name=queue_name, passive=False
178
+ )
179
+ await queue.bind(exchange=exchange, routing_key=routing_key)
180
+ click.echo(
181
+ f"✓ Declared scheduled action queue: {queue_name} (routing key: {routing_key})"
182
+ )
183
+ except Exception as e:
184
+ click.echo(
185
+ f"⚠ Skipping scheduled action queue {queue_name} due to error: {e}"
186
+ )
187
+ continue
174
188
 
175
189
  await channel.close()
176
190
  await connection.close()
File without changes
File without changes
File without changes
File without changes