buz 2.15.10rc5__py3-none-any.whl → 2.15.10rc6__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.
@@ -114,8 +114,8 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
114
114
  async def configure_http_check_server(self, health_check_port: int) -> web.TCPSite:
115
115
  self._logger.info(f"Starting health check server on port {health_check_port}")
116
116
  app = web.Application()
117
- app.router.add_get("/health", lambda request: self.__health_check())
118
- app.router.add_get("/ready", lambda request: self.__is_ready())
117
+ app.router.add_get("/health", self.__health_check)
118
+ app.router.add_get("/ready", self.__is_ready)
119
119
 
120
120
  runner = web.AppRunner(app)
121
121
  await runner.setup()
@@ -351,6 +351,8 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
351
351
  self._logger.info(
352
352
  f"rebalancing in progress, assigning partitions {topics_partitions} to consumer {consumer.get_consumer_group()}"
353
353
  )
354
+ for topic_partition in topics_partitions:
355
+ self.__queue_per_consumer_mapper[consumer].create_key(topic_partition)
354
356
 
355
357
  async def __on_partition_revoked(self, consumer: AIOKafkaConsumer, topics_partitions: set[TopicPartition]) -> None:
356
358
  self._logger.info(
@@ -362,7 +364,7 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
362
364
  consumer_fqn=consumer.get_consumer_group(),
363
365
  ):
364
366
  for topic_partition in topics_partitions:
365
- self.__queue_per_consumer_mapper[consumer].clear(topic_partition)
367
+ self.__queue_per_consumer_mapper[consumer].remove_key(topic_partition)
366
368
 
367
369
  self.decrease_number_of_rebalancing_in_progress()
368
370
 
@@ -382,7 +384,7 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
382
384
  async def __manage_kafka_consumers_stopping(self) -> None:
383
385
  await gather(*[kafka_consumer.stop() for kafka_consumer in self.__queue_per_consumer_mapper.keys()])
384
386
 
385
- async def __health_check(self) -> web.Response:
387
+ async def __health_check(self, request: web.Request) -> web.Response:
386
388
  health_information = {
387
389
  "subscribers": [subscriber.fqn() for subscriber in self.__subscribers],
388
390
  "number_of_subscribers": len(self.__subscribers),
@@ -391,7 +393,7 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
391
393
 
392
394
  return web.Response(text=json.dumps(health_information), content_type="application/json")
393
395
 
394
- async def __is_ready(self) -> web.Response:
396
+ async def __is_ready(self, request: web.Request) -> web.Response:
395
397
  is_ready = self.__is_worked_initialized
396
398
  status_code = 200 if is_ready else 503
397
399
 
@@ -47,4 +47,6 @@ class KafkaCallbackRebalancer(ConsumerRebalanceListener):
47
47
 
48
48
  if self.__rebalancing_start_time is not None:
49
49
  elapsed_time_ms = int((datetime.now() - self.__rebalancing_start_time).total_seconds() * 1000)
50
- self.__logger.info(f"Rebalancing process ended, elapsed time: {elapsed_time_ms} ms")
50
+ self.__logger.info(
51
+ f"Rebalancing for topic {set(v.topic for v in assigned)} ended, elapsed time: {elapsed_time_ms} ms"
52
+ )
@@ -12,18 +12,22 @@ class InMemoryMultiqueueRepository(MultiqueueRepository[K, R]):
12
12
  self.__queues = cast(dict[K, Queue[R]], {})
13
13
  self.__last_key_index = 0
14
14
 
15
- def clear(self, key: K) -> None:
16
- self.__queues.pop(key, None)
15
+ def create_key(self, key: K) -> None:
16
+ self.__queues[key] = Queue[R]()
17
+
18
+ def remove_key(self, key: K) -> None:
19
+ if key not in self.__queues:
20
+ return
21
+
22
+ self.__queues.pop(key)
17
23
 
18
24
  def push(self, key: K, record: R) -> None:
19
25
  if key not in self.__queues:
20
- self.__add_key(key)
26
+ return
27
+
21
28
  queue = self.__queues[key]
22
29
  queue.put(record)
23
30
 
24
- def __add_key(self, key: K) -> None:
25
- self.__queues[key] = Queue[R]()
26
-
27
31
  def pop(self) -> Optional[R]:
28
32
  if not self.__queues:
29
33
  return None
@@ -7,7 +7,11 @@ R = TypeVar("R")
7
7
 
8
8
  class MultiqueueRepository(ABC, Generic[K, R]):
9
9
  @abstractmethod
10
- def clear(self, key: K) -> None:
10
+ def create_key(self, key: K) -> None:
11
+ pass
12
+
13
+ @abstractmethod
14
+ def remove_key(self, key: K) -> None:
11
15
  pass
12
16
 
13
17
  @abstractmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buz
3
- Version: 2.15.10rc5
3
+ Version: 2.15.10rc6
4
4
  Summary: Buz is a set of light, simple and extensible implementations of event, command and query buses.
5
5
  License: MIT
6
6
  Author: Luis Pintado Lozano
@@ -22,7 +22,7 @@ Classifier: Typing :: Typed
22
22
  Provides-Extra: aiokafka
23
23
  Provides-Extra: kombu
24
24
  Provides-Extra: pypendency
25
- Requires-Dist: aiohttp (>=3.11.13,<4.0.0)
25
+ Requires-Dist: aiohttp (>=3.12.15,<4.0.0)
26
26
  Requires-Dist: aiokafka[lz4] (==0.12.0) ; extra == "aiokafka"
27
27
  Requires-Dist: asgiref (>=3.8.1,<4.0.0) ; extra == "aiokafka"
28
28
  Requires-Dist: cachetools (>=5.5.0,<6.0.0)
@@ -47,7 +47,7 @@ buz/event/exceptions/worker_execution_exception.py,sha256=6mgztvXOCG_9VZ_Jptkk72
47
47
  buz/event/infrastructure/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
48
  buz/event/infrastructure/buz_kafka/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
49
  buz/event/infrastructure/buz_kafka/async_buz_kafka_event_bus.py,sha256=SyLblUVlwWOaNfZzK7vL6Ee4m-85vZVCH0rjOgqVAww,4913
50
- buz/event/infrastructure/buz_kafka/base_buz_aiokafka_async_consumer.py,sha256=M5mdbht294CE6UYtH7wfV9BoZTJIMLdyO9Wvb94PG_Q,20867
50
+ buz/event/infrastructure/buz_kafka/base_buz_aiokafka_async_consumer.py,sha256=guVuZUQjxR-1ECuHjJ7Z7DTtIs2E7BSmazuP73dxgcY,21013
51
51
  buz/event/infrastructure/buz_kafka/buz_aiokafka_async_consumer.py,sha256=DRe3u69LD7Yt9WjA_hK_PRznM08_Mz4hxC_4poppjck,6446
52
52
  buz/event/infrastructure/buz_kafka/buz_aiokafka_multi_threaded_consumer.py,sha256=-pJVJq3b2SFmPT7SNmdPhqN2o64Hsjwds-shQ-Y7ytg,6389
53
53
  buz/event/infrastructure/buz_kafka/buz_kafka_event_bus.py,sha256=ymRSvcYVgbVCPgHN6rMBVBHQ5heCSwCDl6EffyqGVX8,4601
@@ -167,7 +167,7 @@ buz/kafka/infrastructure/aiokafka/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
167
167
  buz/kafka/infrastructure/aiokafka/aiokafka_consumer.py,sha256=3-73e2CJhSjHONsCH_kZB1x5EwhnzLG2cCKGmkU4q0s,10008
168
168
  buz/kafka/infrastructure/aiokafka/aiokafka_producer.py,sha256=LteHKIHpT6MKplwmwsPYMsd2GWNJCzus65XDHCIdoN8,3823
169
169
  buz/kafka/infrastructure/aiokafka/rebalance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
- buz/kafka/infrastructure/aiokafka/rebalance/kafka_callback_rebalancer.py,sha256=E0BB5mNU7x9LOpPF_77YuFl7sIaIwDL4bnOG6o5h8uw,2194
170
+ buz/kafka/infrastructure/aiokafka/rebalance/kafka_callback_rebalancer.py,sha256=0IMc_TH4cHjIQiBWOFei_yMx6GbhO58CS-daKzffly4,2259
171
171
  buz/kafka/infrastructure/aiokafka/translators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
172
  buz/kafka/infrastructure/aiokafka/translators/consumer_initial_offset_position_translator.py,sha256=WmxkQfoXeTy9mIJtGGhM0eDKeQxhcJczeVAGCbtonVI,617
173
173
  buz/kafka/infrastructure/cdc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -241,16 +241,16 @@ buz/query/synchronous/self_process/self_process_query_bus.py,sha256=pKGJxXBWtqU4
241
241
  buz/query/synchronous/synced_async/__init__.py,sha256=TdFmIBeFIpl3Tvmh_FJpJMXJdPdfRxOstVqnPUi23mo,125
242
242
  buz/query/synchronous/synced_async/synced_async_query_bus.py,sha256=WxXHeEl1Pnh5Yiui8oMJKIOdzhQBGq1yAnAEk_gniRg,470
243
243
  buz/queue/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
244
- buz/queue/in_memory/in_memory_multiqueue_repository.py,sha256=2jFSeVVbliOV-6m7AhjSkTT2stgFuHmfvNfrPTyyTzs,1523
244
+ buz/queue/in_memory/in_memory_multiqueue_repository.py,sha256=F-5Cw6Ny8OmcmYSHOBCiSdZZfcCNBK99otq0qIPQ2Wk,1568
245
245
  buz/queue/in_memory/in_memory_queue_repository.py,sha256=hUPuQRmbrzQtR5gv4XYCM9aFQHX0U3Q3lt0yi0MIPYk,505
246
- buz/queue/multiqueue_repository.py,sha256=Wc4OE_jDB4mLyyhWKnizXskvgYm2glxvGW2ez1oa9Zs,531
246
+ buz/queue/multiqueue_repository.py,sha256=Lg5QiMOsT_ZfzuOokjKlNsTJGoicqA7dt5gT4C9ppL8,612
247
247
  buz/queue/queue_repository.py,sha256=W3_lkosFu71XoiqRTT7An4kVjJQ3w0fZmFlaAfHeraM,385
248
248
  buz/serializer/message_to_bytes_serializer.py,sha256=uQ6JSTn24mLQvN48alwVXa6lfgfgCJN5vSzo829VuBQ,332
249
249
  buz/serializer/message_to_json_bytes_serializer.py,sha256=RGZJ64t4t4Pz2FCASZZCv-2LiWnertC8scE9ZzQkBsU,764
250
250
  buz/wrapper/__init__.py,sha256=GnRdJFcncn-qp0hzDG9dBHLmTJSbHFVjE_yr-MdW_n4,77
251
251
  buz/wrapper/async_to_sync.py,sha256=OfK-vrVUhuN-LLLvekLdMbQYtH0ue5lfbvuasj6ovMI,698
252
252
  buz/wrapper/event_loop.py,sha256=pfBJ1g-8A2a3YgW8Gf9Fg0kkewoh3-wgTy2KIFDyfHk,266
253
- buz-2.15.10rc5.dist-info/LICENSE,sha256=Jytu2S-2SPEgsB0y6BF-_LUxIWY7402fl0JSh36TLZE,1062
254
- buz-2.15.10rc5.dist-info/METADATA,sha256=_A4RF9Cj31ACjYG6USaqvQun5VK74cl1scb9wQkc7S8,1601
255
- buz-2.15.10rc5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
256
- buz-2.15.10rc5.dist-info/RECORD,,
253
+ buz-2.15.10rc6.dist-info/LICENSE,sha256=Jytu2S-2SPEgsB0y6BF-_LUxIWY7402fl0JSh36TLZE,1062
254
+ buz-2.15.10rc6.dist-info/METADATA,sha256=hIQPwtZ0Kwc54AxWOljmfsUTbiAGGZt9OtWukGK1m1E,1601
255
+ buz-2.15.10rc6.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
256
+ buz-2.15.10rc6.dist-info/RECORD,,