jararaca 0.3.10__py3-none-any.whl → 0.3.11a1__py3-none-any.whl

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/cli.py CHANGED
@@ -11,7 +11,7 @@ from urllib.parse import urlparse, urlunsplit
11
11
 
12
12
  import click
13
13
  import uvicorn
14
- from mako.template import Template # type: ignore
14
+ from mako.template import Template
15
15
 
16
16
  from jararaca.messagebus import worker as worker_v1
17
17
  from jararaca.messagebus import worker_v2 as worker_v2_mod
@@ -303,7 +303,7 @@ def generate_interfaces(
303
303
  file.write(content)
304
304
  file.flush()
305
305
 
306
- print(
306
+ click.echo(
307
307
  f"Generated TypeScript interfaces at {time.strftime('%H:%M:%S')} at {str(Path(file_path).absolute())}"
308
308
  )
309
309
 
@@ -311,19 +311,19 @@ def generate_interfaces(
311
311
  import subprocess
312
312
 
313
313
  try:
314
- print(f"Running post-process command: {post_process_cmd}")
314
+ click.echo(f"Running post-process command: {post_process_cmd}")
315
315
  subprocess.run(
316
316
  post_process_cmd.replace("{file}", file_path),
317
317
  shell=True,
318
318
  check=True,
319
319
  )
320
- print(f"Post-processing completed successfully")
320
+ click.echo(f"Post-processing completed successfully")
321
321
  except subprocess.CalledProcessError as e:
322
- print(f"Post-processing command failed: {e}", file=sys.stderr)
322
+ click.echo(f"Post-processing command failed: {e}", file=sys.stderr)
323
323
 
324
324
  return content
325
325
  except Exception as e:
326
- print(f"Error generating TypeScript interfaces: {e}", file=sys.stderr)
326
+ click.echo(f"Error generating TypeScript interfaces: {e}", file=sys.stderr)
327
327
  return ""
328
328
 
329
329
 
@@ -367,18 +367,20 @@ def gen_tsi(
367
367
  """Generate TypeScript interfaces from a Python microservice."""
368
368
 
369
369
  if stdout and watch:
370
- print(
370
+ click.echo(
371
371
  "Error: --watch and --stdout options cannot be used together",
372
372
  file=sys.stderr,
373
373
  )
374
374
  return
375
375
 
376
376
  if not file_path and not stdout:
377
- print("Error: either file_path or --stdout must be provided", file=sys.stderr)
377
+ click.echo(
378
+ "Error: either file_path or --stdout must be provided", file=sys.stderr
379
+ )
378
380
  return
379
381
 
380
382
  if post_process and stdout:
381
- print(
383
+ click.echo(
382
384
  "Error: --post-process and --stdout options cannot be used together",
383
385
  file=sys.stderr,
384
386
  )
@@ -388,7 +390,7 @@ def gen_tsi(
388
390
  content = generate_interfaces(app_path, file_path, stdout, post_process)
389
391
 
390
392
  if stdout:
391
- print(content)
393
+ click.echo(content)
392
394
  return
393
395
 
394
396
  # If watch mode is not enabled, exit
@@ -399,7 +401,7 @@ def gen_tsi(
399
401
  from watchdog.events import FileSystemEvent, FileSystemEventHandler
400
402
  from watchdog.observers import Observer
401
403
  except ImportError:
402
- print(
404
+ click.echo(
403
405
  "Watchdog is required for watch mode. Install it with: pip install watchdog",
404
406
  file=sys.stderr,
405
407
  )
@@ -414,7 +416,7 @@ def gen_tsi(
414
416
  else str(event.src_path)
415
417
  )
416
418
  if not event.is_directory and src_path.endswith(".py"):
417
- print(f"File changed: {src_path}")
419
+ click.echo(f"File changed: {src_path}")
418
420
  # Create a completely detached process to ensure classes are reloaded
419
421
  process = multiprocessing.get_context("spawn").Process(
420
422
  target=generate_interfaces,
@@ -445,16 +447,16 @@ def gen_tsi(
445
447
 
446
448
  # Set up observer
447
449
  observer = Observer()
448
- observer.schedule(PyFileChangeHandler(), src_dir, recursive=True)
449
- observer.start()
450
+ observer.schedule(PyFileChangeHandler(), src_dir, recursive=True) # type: ignore
451
+ observer.start() # type: ignore
450
452
 
451
- print(f"Watching for changes in {os.path.abspath(src_dir)}...")
453
+ click.echo(f"Watching for changes in {os.path.abspath(src_dir)}...")
452
454
  try:
453
455
  while True:
454
456
  time.sleep(1)
455
457
  except KeyboardInterrupt:
456
- observer.stop()
457
- print("Watch mode stopped")
458
+ observer.stop() # type: ignore
459
+ click.echo("Watch mode stopped")
458
460
  observer.join()
459
461
 
460
462
 
@@ -15,6 +15,8 @@ from jararaca.messagebus.interceptors.publisher_interceptor import (
15
15
  from jararaca.messagebus.publisher import IMessage, MessagePublisher
16
16
  from jararaca.scheduler.types import DelayedMessageData
17
17
 
18
+ logger = logging.getLogger(__name__)
19
+
18
20
 
19
21
  class AIOPikaMessagePublisher(MessagePublisher):
20
22
 
@@ -28,8 +30,13 @@ class AIOPikaMessagePublisher(MessagePublisher):
28
30
  self.channel = channel
29
31
  self.exchange_name = exchange_name
30
32
  self.message_broker_backend = message_broker_backend
33
+ self.staged_delayed_messages: list[DelayedMessageData] = []
34
+ self.staged_messages: list[IMessage] = []
31
35
 
32
36
  async def publish(self, message: IMessage, topic: str) -> None:
37
+ self.staged_messages.append(message)
38
+
39
+ async def _publish(self, message: IMessage, topic: str) -> None:
33
40
  exchange = await self.channel.get_exchange(self.exchange_name, ensure=False)
34
41
  if not exchange:
35
42
  logging.warning(f"Exchange {self.exchange_name} not found")
@@ -45,7 +52,7 @@ class AIOPikaMessagePublisher(MessagePublisher):
45
52
  raise NotImplementedError(
46
53
  "Delay is not implemented for AIOPikaMessagePublisher"
47
54
  )
48
- await self.message_broker_backend.enqueue_delayed_message(
55
+ self.staged_delayed_messages.append(
49
56
  DelayedMessageData(
50
57
  message_topic=message.MESSAGE_TOPIC,
51
58
  payload=message.model_dump_json().encode(),
@@ -60,7 +67,7 @@ class AIOPikaMessagePublisher(MessagePublisher):
60
67
  raise NotImplementedError(
61
68
  "Schedule is not implemented for AIOPikaMessagePublisher"
62
69
  )
63
- await self.message_broker_backend.enqueue_delayed_message(
70
+ self.staged_delayed_messages.append(
64
71
  DelayedMessageData(
65
72
  message_topic=message.MESSAGE_TOPIC,
66
73
  payload=message.model_dump_json().encode(),
@@ -68,6 +75,27 @@ class AIOPikaMessagePublisher(MessagePublisher):
68
75
  )
69
76
  )
70
77
 
78
+ async def flush(self) -> None:
79
+ for message in self.staged_messages:
80
+ logger.debug(
81
+ f"Publishing message {message.MESSAGE_TOPIC} with payload: {message.model_dump_json()}"
82
+ )
83
+ await self._publish(message, message.MESSAGE_TOPIC)
84
+
85
+ if len(self.staged_delayed_messages) > 0:
86
+ if not self.message_broker_backend:
87
+ raise NotImplementedError(
88
+ "MessageBrokerBackend is required to publish delayed messages"
89
+ )
90
+
91
+ for delayed_message in self.staged_delayed_messages:
92
+ logger.debug(
93
+ f"Scheduling delayed message {delayed_message.message_topic} with payload: {delayed_message.payload.decode()}"
94
+ )
95
+ await self.message_broker_backend.enqueue_delayed_message(
96
+ delayed_message
97
+ )
98
+
71
99
 
72
100
  class GenericPoolConfig(BaseModel):
73
101
  max_size: int
@@ -32,3 +32,5 @@ class MessageBusPublisherInterceptor(AppInterceptor):
32
32
  async with self.connection_factory.provide_connection() as connection:
33
33
  with provide_message_publisher(self.connection_name, connection):
34
34
  yield
35
+
36
+ await connection.flush()
@@ -1,7 +1,8 @@
1
+ from abc import ABC, abstractmethod
1
2
  from contextlib import contextmanager, suppress
2
3
  from contextvars import ContextVar
3
4
  from datetime import datetime, tzinfo
4
- from typing import Any, ClassVar, Generator, Literal, Protocol
5
+ from typing import Any, ClassVar, Generator, Literal
5
6
 
6
7
  from pydantic import BaseModel
7
8
 
@@ -19,24 +20,31 @@ class IMessage(BaseModel):
19
20
  MESSAGE_TYPE: ClassVar[Literal["task", "event"]] = "task"
20
21
 
21
22
 
22
- class MessagePublisher(Protocol):
23
+ class MessagePublisher(ABC):
24
+ @abstractmethod
23
25
  async def publish(self, message: IMessage, topic: str) -> None:
24
- raise NotImplementedError()
26
+ pass
25
27
 
28
+ @abstractmethod
26
29
  async def delay(self, message: IMessage, seconds: int) -> None:
27
30
  """
28
31
  Delay the message for a given number of seconds.
29
32
  """
30
33
 
31
- raise NotImplementedError()
32
-
34
+ @abstractmethod
33
35
  async def schedule(
34
36
  self, message: IMessage, when: datetime, timezone: tzinfo
35
37
  ) -> None:
36
38
  """
37
39
  Schedule the message for a given datetime.
38
40
  """
39
- raise NotImplementedError()
41
+
42
+ @abstractmethod
43
+ async def flush(self) -> None:
44
+ """
45
+ Publish all messages that have been delayed or scheduled.
46
+ This is typically called at the end of a request or task processing.
47
+ """
40
48
 
41
49
 
42
50
  message_publishers_ctx = ContextVar[dict[str, MessagePublisher]](
@@ -135,7 +135,7 @@ class AioPikaMicroserviceConsumer:
135
135
  no_ack=handler.spec.auto_ack,
136
136
  )
137
137
 
138
- print(f"Consuming {queue_name}")
138
+ logger.info(f"Consuming {queue_name}")
139
139
 
140
140
  await self.shutdown_event.wait()
141
141
  logger.info("Worker shutting down")
@@ -58,6 +58,7 @@ class AIOSqlAlchemySessionInterceptor(AppInterceptor):
58
58
  with provide_session(self.config.connection_name, session):
59
59
  try:
60
60
  yield
61
+ print("Committing session")
61
62
  await session.commit()
62
63
  except Exception as e:
63
64
  await session.rollback()
@@ -16,12 +16,12 @@ class WebSocketConnectionManager(Protocol):
16
16
  async def remove_websocket(self, websocket: WebSocket) -> None: ...
17
17
 
18
18
 
19
- _ws_manage_ctx = ContextVar[WebSocketConnectionManager]("ws_manage_ctx")
19
+ _ws_conn_manager_ctx = ContextVar[WebSocketConnectionManager]("ws_manage_ctx")
20
20
 
21
21
 
22
22
  def use_ws_manager() -> WebSocketConnectionManager:
23
23
  try:
24
- return _ws_manage_ctx.get()
24
+ return _ws_conn_manager_ctx.get()
25
25
  except LookupError:
26
26
  raise RuntimeError("No WebSocketConnectionManager found")
27
27
 
@@ -30,9 +30,35 @@ def use_ws_manager() -> WebSocketConnectionManager:
30
30
  def provide_ws_manager(
31
31
  ws_manager: WebSocketConnectionManager,
32
32
  ) -> Generator[None, None, None]:
33
- token = _ws_manage_ctx.set(ws_manager)
33
+ token = _ws_conn_manager_ctx.set(ws_manager)
34
34
  try:
35
35
  yield
36
36
  finally:
37
37
  with suppress(ValueError):
38
- _ws_manage_ctx.reset(token)
38
+ _ws_conn_manager_ctx.reset(token)
39
+
40
+
41
+ class WebSocketMessageSender(Protocol):
42
+ async def send(self, rooms: list[str], message: WebSocketMessageBase) -> None: ...
43
+
44
+
45
+ _ws_msg_sender_ctx = ContextVar[WebSocketMessageSender]("ws_msg_sender_ctx")
46
+
47
+
48
+ def use_ws_message_sender() -> WebSocketMessageSender:
49
+ try:
50
+ return _ws_msg_sender_ctx.get()
51
+ except LookupError:
52
+ raise RuntimeError("No WebSocketMessageSender found")
53
+
54
+
55
+ @contextmanager
56
+ def provide_ws_message_sender(
57
+ ws_message_sender: WebSocketMessageSender,
58
+ ) -> Generator[None, None, None]:
59
+ token = _ws_msg_sender_ctx.set(ws_message_sender)
60
+ try:
61
+ yield
62
+ finally:
63
+ with suppress(ValueError):
64
+ _ws_msg_sender_ctx.reset(token)
@@ -1,8 +1,8 @@
1
1
  from jararaca.presentation.websocket.base_types import WebSocketMessageBase
2
- from jararaca.presentation.websocket.context import use_ws_manager
2
+ from jararaca.presentation.websocket.context import use_ws_message_sender
3
3
 
4
4
 
5
5
  class WebSocketMessage(WebSocketMessageBase):
6
6
 
7
7
  async def send(self, *rooms: str) -> None:
8
- await use_ws_manager().send(list(rooms), self)
8
+ await use_ws_message_sender().send(list(rooms), self)
@@ -25,7 +25,9 @@ from jararaca.presentation.decorators import (
25
25
  )
26
26
  from jararaca.presentation.websocket.context import (
27
27
  WebSocketConnectionManager,
28
+ WebSocketMessageSender,
28
29
  provide_ws_manager,
30
+ provide_ws_message_sender,
29
31
  )
30
32
  from jararaca.presentation.websocket.decorators import (
31
33
  INHERITS_WS_MESSAGE,
@@ -127,9 +129,23 @@ class WebSocketConnectionManagerImpl(WebSocketConnectionManager):
127
129
  # async def setup_consumer(self, websocket: WebSocket) -> None: ...
128
130
 
129
131
 
132
+ class StagingWebSocketMessageSender(WebSocketMessageSender):
133
+
134
+ def __init__(self, connection: WebSocketConnectionManager) -> None:
135
+ self.connection = connection
136
+ self.staged_messages: list[tuple[list[str], WebSocketMessageBase]] = []
137
+
138
+ async def send(self, rooms: list[str], message: WebSocketMessageBase) -> None:
139
+ self.staged_messages.append((rooms, message))
140
+
141
+ async def flush(self) -> None:
142
+ for rooms, message in self.staged_messages:
143
+ await self.connection.send(rooms, message)
144
+ self.staged_messages.clear()
145
+
146
+
130
147
  class WebSocketInterceptor(AppInterceptor, AppInterceptorWithLifecycle):
131
148
  """
132
- @Deprecated
133
149
  WebSocketInterceptor is responsible for managing WebSocket connections and
134
150
  intercepting WebSocket requests within the application. It integrates with
135
151
  the application's lifecycle and provides a router for WebSocket endpoints.
@@ -171,8 +187,14 @@ class WebSocketInterceptor(AppInterceptor, AppInterceptorWithLifecycle):
171
187
  @asynccontextmanager
172
188
  async def intercept(self, app_context: AppContext) -> AsyncGenerator[None, None]:
173
189
 
174
- with provide_ws_manager(self.connection_manager):
190
+ staging_ws_messages_sender = StagingWebSocketMessageSender(
191
+ self.connection_manager
192
+ )
193
+ with provide_ws_manager(self.connection_manager), provide_ws_message_sender(
194
+ staging_ws_messages_sender
195
+ ):
175
196
  yield
197
+ await staging_ws_messages_sender.flush()
176
198
 
177
199
  # def __wrap_with_uow_context_provider(
178
200
  # self, uow: UnitOfWorkContextProvider, func: Callable[..., Any]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: jararaca
3
- Version: 0.3.10
3
+ Version: 0.3.11a1
4
4
  Summary: A simple and fast API framework for Python
5
5
  Author: Lucas S
6
6
  Author-email: me@luscasleo.dev
@@ -3,7 +3,7 @@ jararaca/__main__.py,sha256=-O3vsB5lHdqNFjUtoELDF81IYFtR-DSiiFMzRaiSsv4,67
3
3
  jararaca/broker_backend/__init__.py,sha256=GzEIuHR1xzgCJD4FE3harNjoaYzxHMHoEL0_clUaC-k,3528
4
4
  jararaca/broker_backend/mapper.py,sha256=vTsi7sWpNvlga1PWPFg0rCJ5joJ0cdzykkIc2Tuvenc,696
5
5
  jararaca/broker_backend/redis_broker_backend.py,sha256=a7DHchy3NAiD71Ix8SwmQOUnniu7uup-Woa4ON_4J7I,5786
6
- jararaca/cli.py,sha256=sbWqviMH0JF65763fBzwUTQWHsuPmTWkup87kqTtZWo,12164
6
+ jararaca/cli.py,sha256=gYdokdAWAPI9e5fQwkQofrcbE_ofJXr1kHc7wFRufnc,12283
7
7
  jararaca/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  jararaca/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  jararaca/core/providers.py,sha256=wktH84FK7c1s2wNq-fudf1uMfi3CQBR0neU2czJ_L0U,434
@@ -16,11 +16,11 @@ jararaca/messagebus/bus_message_controller.py,sha256=Xd_qwnX5jUvgBTCarHR36fvtol9
16
16
  jararaca/messagebus/consumers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  jararaca/messagebus/decorators.py,sha256=y-w4dWbP9ZW3ZJ4mE9iIaxw01ZC5snEbOuBY5NC-Bn0,5626
18
18
  jararaca/messagebus/interceptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py,sha256=Aex87wopB34sMNzXBgi4KucVHjL2wYog3-IH75DAfDk,5387
20
- jararaca/messagebus/interceptors/publisher_interceptor.py,sha256=fQFFW9hH6ZU3UOyR7kMPrNp9wA71qEy5XlgrBQdBMS4,1230
19
+ jararaca/messagebus/interceptors/aiopika_publisher_interceptor.py,sha256=_DEHwIH9LYsA26Hu1mo9oHzLZuATgjilU9E3o-ecDjs,6520
20
+ jararaca/messagebus/interceptors/publisher_interceptor.py,sha256=wkIDoa__Q7o74cv89PXdBJFbe-ijxH8Xc_-hBEgxYjM,1272
21
21
  jararaca/messagebus/message.py,sha256=U6cyd2XknX8mtm0333slz5fanky2PFLWCmokAO56vvU,819
22
- jararaca/messagebus/publisher.py,sha256=K7WsOMVTyLmdms3ZKEshqrQc_DhNreiFK-HnmOT9Ce0,1965
23
- jararaca/messagebus/worker.py,sha256=2jReCepgMQktdLh4A3OqmOmx6KNgqUGpXIOXoBUtXSg,13778
22
+ jararaca/messagebus/publisher.py,sha256=JTkxdKbvxvDWT8nK8PVEyyX061vYYbKQMxRHXrZtcEY,2173
23
+ jararaca/messagebus/worker.py,sha256=0qkgpbH3FhprRYEEtQttKc353wQ1PpAwu-rn6n9gBm0,13784
24
24
  jararaca/messagebus/worker_v2.py,sha256=Ey9HPgVSuIYJUggJGPKmgymZHz7-2TUSYgDB52u9T10,20683
25
25
  jararaca/microservice.py,sha256=C_Txqm3xSmdHIghJigKk6TOycL5eTJv9PF6XP7TA8j4,6638
26
26
  jararaca/observability/decorators.py,sha256=XffBinFXdiNkY6eo8_1nkr_GapM0RUGBg0aicBIelag,2220
@@ -30,7 +30,7 @@ jararaca/observability/providers/otel.py,sha256=LgfoITdoQTCxKebfLcEfwMiG992wlWY_
30
30
  jararaca/persistence/base.py,sha256=Xfnpvj3yeLdpVBifH5W6AwPCLwL2ot0dpLzbPg1zwkQ,966
31
31
  jararaca/persistence/exports.py,sha256=Ghx4yoFaB4QVTb9WxrFYgmcSATXMNvrOvT8ybPNKXCA,62
32
32
  jararaca/persistence/interceptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- jararaca/persistence/interceptors/aiosqa_interceptor.py,sha256=H6ZjOdosYGCZUzKjugiXQwJkAbnsL4HnkZLOEQhULEc,1986
33
+ jararaca/persistence/interceptors/aiosqa_interceptor.py,sha256=EZz80PZVb80DrM1rOLRkKMDO-93by6xp97G7o_LzziE,2034
34
34
  jararaca/persistence/session.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  jararaca/persistence/sort_filter.py,sha256=agggpN0YvNjUr6wJjy69NkaqxoDDW13ys9B3r85OujA,9226
36
36
  jararaca/persistence/utilities.py,sha256=imcV4Oi5kXNk6m9QF2-OsnFpcTRY4w5mBYLdEx5XTSQ,14296
@@ -41,11 +41,11 @@ jararaca/presentation/http_microservice.py,sha256=g771JosV6jTY3hQtG-HkLOo-T0e-r3
41
41
  jararaca/presentation/server.py,sha256=JuEatLFhD_NFnszwXDSgtcCXNOwvQYyxoxxQ33hnAEc,3731
42
42
  jararaca/presentation/websocket/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  jararaca/presentation/websocket/base_types.py,sha256=AvUeeZ1TFhSiRMcYqZU1HaQNqSrcgTkC5R0ArP5dGmA,146
44
- jararaca/presentation/websocket/context.py,sha256=090vJmO4bWt0Hr7MI-ZtRlVHTD2JW5JvZRJTFI9XGKs,1180
44
+ jararaca/presentation/websocket/context.py,sha256=A6K5W3kqo9Hgeh1m6JiI7Cdz5SfbXcaICSVX7u1ARZo,1903
45
45
  jararaca/presentation/websocket/decorators.py,sha256=ZNd5aoA9UkyfHOt1C8D2Ffy2gQUNDEsusVnQuTgExgs,2157
46
46
  jararaca/presentation/websocket/redis.py,sha256=6wD4zGHftJXNDW3VfS65WJt2cnOgTI0zmQOfjZ_CEXE,4726
47
- jararaca/presentation/websocket/types.py,sha256=Crz88c1670YLtIhDvbeuyBV1SN-z9RtEGZxaonGvapY,294
48
- jararaca/presentation/websocket/websocket_interceptor.py,sha256=R_DfIMhi1ngFfCGy33b6yv_6LxCM-Dipkr12z6evfyk,8297
47
+ jararaca/presentation/websocket/types.py,sha256=M8snAMSdaQlKrwEM2qOgF2qrefo5Meio_oOw620Joc8,308
48
+ jararaca/presentation/websocket/websocket_interceptor.py,sha256=OET9Dv8CVJn6bkjnmMXqT_yRWr9HTyd7E-dtN7zfeQ4,9155
49
49
  jararaca/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  jararaca/rpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  jararaca/rpc/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -66,8 +66,8 @@ jararaca/tools/metadata.py,sha256=7nlCDYgItNybentPSSCc2MLqN7IpBd0VyQzfjfQycVI,14
66
66
  jararaca/tools/typescript/interface_parser.py,sha256=35xbOrZDQDyTXdMrVZQ8nnFw79f28lJuLYNHAspIqi8,30492
67
67
  jararaca/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
68
  jararaca/utils/rabbitmq_utils.py,sha256=FPDP8ZVgvitZXV-oK73D7EIANsqUzXTW7HdpEKsIsyI,2811
69
- jararaca-0.3.10.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
70
- jararaca-0.3.10.dist-info/METADATA,sha256=nud3y7-yf7Azf0PIaPkEGWR0TVNULB_KYSsqfhWAIKI,4952
71
- jararaca-0.3.10.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
72
- jararaca-0.3.10.dist-info/entry_points.txt,sha256=WIh3aIvz8LwUJZIDfs4EeH3VoFyCGEk7cWJurW38q0I,45
73
- jararaca-0.3.10.dist-info/RECORD,,
69
+ jararaca-0.3.11a1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
70
+ jararaca-0.3.11a1.dist-info/METADATA,sha256=38ZWg5TI8tUYXHtFdyn5RlmeQ5p6skk4vd8oCj5JCsA,4954
71
+ jararaca-0.3.11a1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
72
+ jararaca-0.3.11a1.dist-info/entry_points.txt,sha256=WIh3aIvz8LwUJZIDfs4EeH3VoFyCGEk7cWJurW38q0I,45
73
+ jararaca-0.3.11a1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.2
2
+ Generator: poetry-core 2.1.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any