buz 2.15.7__tar.gz → 2.15.9__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.
Files changed (256) hide show
  1. {buz-2.15.7 → buz-2.15.9}/PKG-INFO +1 -1
  2. {buz-2.15.7 → buz-2.15.9}/pyproject.toml +1 -1
  3. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/base_buz_aiokafka_async_consumer.py +54 -12
  4. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/buz_aiokafka_async_consumer.py +2 -0
  5. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/buz_aiokafka_multi_threaded_consumer.py +2 -0
  6. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/aiokafka/aiokafka_consumer.py +4 -4
  7. {buz-2.15.7 → buz-2.15.9}/LICENSE +0 -0
  8. {buz-2.15.7 → buz-2.15.9}/README.md +0 -0
  9. {buz-2.15.7 → buz-2.15.9}/src/buz/__init__.py +0 -0
  10. {buz-2.15.7 → buz-2.15.9}/src/buz/command/__init__.py +0 -0
  11. {buz-2.15.7 → buz-2.15.9}/src/buz/command/asynchronous/__init__.py +0 -0
  12. {buz-2.15.7 → buz-2.15.9}/src/buz/command/asynchronous/base_command_handler.py +0 -0
  13. {buz-2.15.7 → buz-2.15.9}/src/buz/command/asynchronous/command_bus.py +0 -0
  14. {buz-2.15.7 → buz-2.15.9}/src/buz/command/asynchronous/command_handler.py +0 -0
  15. {buz-2.15.7 → buz-2.15.9}/src/buz/command/asynchronous/middleware/__init__.py +0 -0
  16. {buz-2.15.7 → buz-2.15.9}/src/buz/command/asynchronous/middleware/base_handle_middleware.py +0 -0
  17. {buz-2.15.7 → buz-2.15.9}/src/buz/command/asynchronous/middleware/handle_middleware.py +0 -0
  18. {buz-2.15.7 → buz-2.15.9}/src/buz/command/asynchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  19. {buz-2.15.7 → buz-2.15.9}/src/buz/command/asynchronous/self_process/__init__.py +0 -0
  20. {buz-2.15.7 → buz-2.15.9}/src/buz/command/asynchronous/self_process/self_process_command_bus.py +0 -0
  21. {buz-2.15.7 → buz-2.15.9}/src/buz/command/command.py +0 -0
  22. {buz-2.15.7 → buz-2.15.9}/src/buz/command/more_than_one_command_handler_related_exception.py +0 -0
  23. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/__init__.py +0 -0
  24. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/base_command_handler.py +0 -0
  25. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/command_bus.py +0 -0
  26. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/command_handler.py +0 -0
  27. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/middleware/__init__.py +0 -0
  28. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/middleware/base_handle_middleware.py +0 -0
  29. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/middleware/handle_middleware.py +0 -0
  30. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  31. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/self_process/__init__.py +0 -0
  32. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/self_process/self_process_command_bus.py +0 -0
  33. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/synced_async/__init__.py +0 -0
  34. {buz-2.15.7 → buz-2.15.9}/src/buz/command/synchronous/synced_async/synced_async_command_bus.py +0 -0
  35. {buz-2.15.7 → buz-2.15.9}/src/buz/event/__init__.py +0 -0
  36. {buz-2.15.7 → buz-2.15.9}/src/buz/event/async_consumer.py +0 -0
  37. {buz-2.15.7 → buz-2.15.9}/src/buz/event/async_event_bus.py +0 -0
  38. {buz-2.15.7 → buz-2.15.9}/src/buz/event/async_subscriber.py +0 -0
  39. {buz-2.15.7 → buz-2.15.9}/src/buz/event/async_worker.py +0 -0
  40. {buz-2.15.7 → buz-2.15.9}/src/buz/event/base_async_subscriber.py +0 -0
  41. {buz-2.15.7 → buz-2.15.9}/src/buz/event/base_subscriber.py +0 -0
  42. {buz-2.15.7 → buz-2.15.9}/src/buz/event/consumer.py +0 -0
  43. {buz-2.15.7 → buz-2.15.9}/src/buz/event/dead_letter_queue/__init__.py +0 -0
  44. {buz-2.15.7 → buz-2.15.9}/src/buz/event/dead_letter_queue/dlq_criteria.py +0 -0
  45. {buz-2.15.7 → buz-2.15.9}/src/buz/event/dead_letter_queue/dlq_record.py +0 -0
  46. {buz-2.15.7 → buz-2.15.9}/src/buz/event/dead_letter_queue/dlq_repository.py +0 -0
  47. {buz-2.15.7 → buz-2.15.9}/src/buz/event/event.py +0 -0
  48. {buz-2.15.7 → buz-2.15.9}/src/buz/event/event_bus.py +0 -0
  49. {buz-2.15.7 → buz-2.15.9}/src/buz/event/exceptions/__init__.py +0 -0
  50. {buz-2.15.7 → buz-2.15.9}/src/buz/event/exceptions/event_not_published_exception.py +0 -0
  51. {buz-2.15.7 → buz-2.15.9}/src/buz/event/exceptions/event_restore_exception.py +0 -0
  52. {buz-2.15.7 → buz-2.15.9}/src/buz/event/exceptions/subscribers_not_found_exception.py +0 -0
  53. {buz-2.15.7 → buz-2.15.9}/src/buz/event/exceptions/term_signal_interruption_exception.py +0 -0
  54. {buz-2.15.7 → buz-2.15.9}/src/buz/event/exceptions/worker_execution_exception.py +0 -0
  55. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/__init__.py +0 -0
  56. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/__init__.py +0 -0
  57. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/async_buz_kafka_event_bus.py +0 -0
  58. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/buz_kafka_event_bus.py +0 -0
  59. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/consume_strategy/__init__.py +0 -0
  60. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/consume_strategy/consume_strategy.py +0 -0
  61. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/consume_strategy/kafka_on_fail_strategy.py +0 -0
  62. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/consume_strategy/topic_and_subscription_group_per_subscriber_kafka_consumer_strategy.py +0 -0
  63. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/exceptions/__init__.py +0 -0
  64. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/exceptions/kafka_event_bus_config_not_valid_exception.py +0 -0
  65. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/exceptions/max_consumer_retry_exception.py +0 -0
  66. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/exceptions/retry_exception.py +0 -0
  67. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/kafka_event_async_subscriber_executor.py +0 -0
  68. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/kafka_event_subscriber_executor.py +0 -0
  69. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/kafka_event_sync_subscriber_executor.py +0 -0
  70. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/publish_strategy/__init__.py +0 -0
  71. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/publish_strategy/publish_strategy.py +0 -0
  72. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/buz_kafka/publish_strategy/topic_per_event_kafka_publish_strategy.py +0 -0
  73. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/__init__.py +0 -0
  74. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/allowed_kombu_serializer.py +0 -0
  75. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/consume_strategy/__init__.py +0 -0
  76. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/consume_strategy/consume_strategy.py +0 -0
  77. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/consume_strategy/queue_per_subscriber_consume_strategy.py +0 -0
  78. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/kombu_consumer.py +0 -0
  79. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/kombu_event_bus.py +0 -0
  80. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/publish_strategy/__init__.py +0 -0
  81. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/publish_strategy/fanout_exchange_per_event_publish_strategy.py +0 -0
  82. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/publish_strategy/publish_strategy.py +0 -0
  83. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/retry_strategy/__init__.py +0 -0
  84. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/retry_strategy/publish_retry_policy.py +0 -0
  85. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/kombu/retry_strategy/simple_publish_retry_policy.py +0 -0
  86. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/models/consuming_task.py +0 -0
  87. {buz-2.15.7 → buz-2.15.9}/src/buz/event/infrastructure/queue/__init__.py +0 -0
  88. {buz-2.15.7 → buz-2.15.9}/src/buz/event/meta_base_subscriber.py +0 -0
  89. {buz-2.15.7 → buz-2.15.9}/src/buz/event/meta_subscriber.py +0 -0
  90. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/__init__.py +0 -0
  91. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/async_consume_middleware.py +0 -0
  92. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/async_consume_middleware_chain_resolver.py +0 -0
  93. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/async_publish_middleware.py +0 -0
  94. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/async_publish_middleware_chain_resolver.py +0 -0
  95. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/base_async_consume_middleware.py +0 -0
  96. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/base_consume_middleware.py +0 -0
  97. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/base_publish_middleware.py +0 -0
  98. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/consume_middleware.py +0 -0
  99. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/consume_middleware_chain_resolver.py +0 -0
  100. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/exceptions/__init__.py +0 -0
  101. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/exceptions/event_already_in_progress_exception.py +0 -0
  102. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/publish_middleware.py +0 -0
  103. {buz-2.15.7 → buz-2.15.9}/src/buz/event/middleware/publish_middleware_chain_resolver.py +0 -0
  104. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/__init__.py +0 -0
  105. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/execution_strategy/__init__.py +0 -0
  106. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/execution_strategy/async_execution_strategy.py +0 -0
  107. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/execution_strategy/async_self_process_execution_strategy.py +0 -0
  108. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/execution_strategy/cyclic_iterator_execution_strategy.py +0 -0
  109. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/execution_strategy/execution_strategy.py +0 -0
  110. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/execution_strategy/self_process_execution_strategy.py +0 -0
  111. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/retry/__init__.py +0 -0
  112. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/retry/consume_retrier.py +0 -0
  113. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/retry/consumed_event_retry.py +0 -0
  114. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/retry/consumed_event_retry_repository.py +0 -0
  115. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/retry/max_retries_consume_retrier.py +0 -0
  116. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/retry/max_retries_negative_exception.py +0 -0
  117. {buz-2.15.7 → buz-2.15.9}/src/buz/event/strategies/retry/reject_callback.py +0 -0
  118. {buz-2.15.7 → buz-2.15.9}/src/buz/event/subscriber.py +0 -0
  119. {buz-2.15.7 → buz-2.15.9}/src/buz/event/sync/__init__.py +0 -0
  120. {buz-2.15.7 → buz-2.15.9}/src/buz/event/sync/sync_event_bus.py +0 -0
  121. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/__init__.py +0 -0
  122. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/event_to_outbox_record_translator.py +0 -0
  123. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/fqn_to_event_mapper.py +0 -0
  124. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_criteria/__init__.py +0 -0
  125. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_criteria/deliverable_records_outbox_criteria_factory.py +0 -0
  126. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_criteria/outbox_criteria.py +0 -0
  127. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_criteria/outbox_criteria_factory.py +0 -0
  128. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_criteria/outbox_sorting_criteria.py +0 -0
  129. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record.py +0 -0
  130. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record_finder/__init__.py +0 -0
  131. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record_finder/outbox_record_stream_finder.py +0 -0
  132. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record_finder/polling_outbox_record_stream_finder.py +0 -0
  133. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record_to_event_translator.py +0 -0
  134. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record_validation/__init__.py +0 -0
  135. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record_validation/abstract_outbox_record_validator.py +0 -0
  136. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_size_not_allowed_exception.py +0 -0
  137. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_validation_exception.py +0 -0
  138. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_validator.py +0 -0
  139. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_record_validation/size_outbox_record_validator.py +0 -0
  140. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/outbox_repository.py +0 -0
  141. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/transactional_outbox_event_bus.py +0 -0
  142. {buz-2.15.7 → buz-2.15.9}/src/buz/event/transactional_outbox/transactional_outbox_worker.py +0 -0
  143. {buz-2.15.7 → buz-2.15.9}/src/buz/event/worker.py +0 -0
  144. {buz-2.15.7 → buz-2.15.9}/src/buz/handler.py +0 -0
  145. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/__init__.py +0 -0
  146. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/exceptions/__init__.py +0 -0
  147. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/exceptions/not_all_partition_assigned_exception.py +0 -0
  148. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/exceptions/not_valid_kafka_message_exception.py +0 -0
  149. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/exceptions/not_valid_partition_number_exception.py +0 -0
  150. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/exceptions/topic_already_created_exception.py +0 -0
  151. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/exceptions/topic_not_found_exception.py +0 -0
  152. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/__init__.py +0 -0
  153. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/auto_create_topic_configuration.py +0 -0
  154. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/consumer_initial_offset_position.py +0 -0
  155. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/create_kafka_topic.py +0 -0
  156. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/kafka_connection_config.py +0 -0
  157. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/kafka_connection_credentials.py +0 -0
  158. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/kafka_connection_plain_text_credentials.py +0 -0
  159. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/kafka_connection_sasl_credentials.py +0 -0
  160. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/kafka_consumer_record.py +0 -0
  161. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/kafka_poll_record.py +0 -0
  162. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/kafka_supported_compression_type.py +0 -0
  163. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/kafka_supported_sasl_mechanisms.py +0 -0
  164. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/models/kafka_supported_security_protocols.py +0 -0
  165. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/services/__init__.py +0 -0
  166. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/services/async_kafka_producer.py +0 -0
  167. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/services/kafka_admin_client.py +0 -0
  168. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/services/kafka_admin_test_client.py +0 -0
  169. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/domain/services/kafka_producer.py +0 -0
  170. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/__init__.py +0 -0
  171. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/aiokafka/__init__.py +0 -0
  172. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/aiokafka/aiokafka_producer.py +0 -0
  173. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/aiokafka/rebalance/__init__.py +0 -0
  174. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/aiokafka/rebalance/kafka_callback_rebalancer.py +0 -0
  175. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/aiokafka/translators/__init__.py +0 -0
  176. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/aiokafka/translators/consumer_initial_offset_position_translator.py +0 -0
  177. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/cdc/__init__.py +0 -0
  178. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/cdc/cdc_message.py +0 -0
  179. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/cdc/cdc_payload.py +0 -0
  180. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/cdc/cdc_schema.py +0 -0
  181. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/deserializers/__init__.py +0 -0
  182. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/deserializers/byte_deserializer.py +0 -0
  183. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/deserializers/bytes_to_message_deserializer.py +0 -0
  184. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/deserializers/implementations/__init__.py +0 -0
  185. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/deserializers/implementations/cdc/cdc_record_bytes_to_event_deserializer.py +0 -0
  186. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/deserializers/implementations/cdc/not_valid_cdc_message_exception.py +0 -0
  187. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/deserializers/implementations/json_byte_deserializer.py +0 -0
  188. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/deserializers/implementations/json_bytes_to_message_deserializer.py +0 -0
  189. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/interfaces/__init__.py +0 -0
  190. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/interfaces/async_connection_manager.py +0 -0
  191. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/interfaces/connection_manager.py +0 -0
  192. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/kafka_python/__init__.py +0 -0
  193. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/kafka_python/exception/consumer_interrupted_exception.py +0 -0
  194. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/kafka_python/kafka_python_admin_client.py +0 -0
  195. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/kafka_python/kafka_python_admin_test_client.py +0 -0
  196. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/kafka_python/kafka_python_producer.py +0 -0
  197. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/kafka_python/translators/__init__.py +0 -0
  198. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/kafka_python/translators/consumer_initial_offset_position_translator.py +0 -0
  199. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/serializers/byte_serializer.py +0 -0
  200. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/serializers/implementations/cdc_record_bytes_to_event_serializer.py +0 -0
  201. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/serializers/implementations/json_byte_serializer.py +0 -0
  202. {buz-2.15.7 → buz-2.15.9}/src/buz/kafka/infrastructure/serializers/kafka_header_serializer.py +0 -0
  203. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/__init__.py +0 -0
  204. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/handler_fqn_not_found_exception.py +0 -0
  205. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/locator.py +0 -0
  206. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/message_fqn_not_found_exception.py +0 -0
  207. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/pypendency/__init__.py +0 -0
  208. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/pypendency/container_locator.py +0 -0
  209. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/pypendency/container_locator_resolution_configuration.py +0 -0
  210. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/pypendency/handler_not_found_exception.py +0 -0
  211. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/pypendency/handler_not_registered_exception.py +0 -0
  212. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/sync/__init__.py +0 -0
  213. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/sync/handler_already_registered_exception.py +0 -0
  214. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/sync/handler_not_registered_exception.py +0 -0
  215. {buz-2.15.7 → buz-2.15.9}/src/buz/locator/sync/instance_locator.py +0 -0
  216. {buz-2.15.7 → buz-2.15.9}/src/buz/message.py +0 -0
  217. {buz-2.15.7 → buz-2.15.9}/src/buz/middleware/__init__.py +0 -0
  218. {buz-2.15.7 → buz-2.15.9}/src/buz/middleware/middleware.py +0 -0
  219. {buz-2.15.7 → buz-2.15.9}/src/buz/middleware/middleware_chain_builder.py +0 -0
  220. {buz-2.15.7 → buz-2.15.9}/src/buz/py.typed +0 -0
  221. {buz-2.15.7 → buz-2.15.9}/src/buz/query/__init__.py +0 -0
  222. {buz-2.15.7 → buz-2.15.9}/src/buz/query/asynchronous/__init__.py +0 -0
  223. {buz-2.15.7 → buz-2.15.9}/src/buz/query/asynchronous/base_query_handler.py +0 -0
  224. {buz-2.15.7 → buz-2.15.9}/src/buz/query/asynchronous/middleware/__init__.py +0 -0
  225. {buz-2.15.7 → buz-2.15.9}/src/buz/query/asynchronous/middleware/base_handle_middleware.py +0 -0
  226. {buz-2.15.7 → buz-2.15.9}/src/buz/query/asynchronous/middleware/handle_middleware.py +0 -0
  227. {buz-2.15.7 → buz-2.15.9}/src/buz/query/asynchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  228. {buz-2.15.7 → buz-2.15.9}/src/buz/query/asynchronous/query_bus.py +0 -0
  229. {buz-2.15.7 → buz-2.15.9}/src/buz/query/asynchronous/query_handler.py +0 -0
  230. {buz-2.15.7 → buz-2.15.9}/src/buz/query/asynchronous/self_process/__init__.py +0 -0
  231. {buz-2.15.7 → buz-2.15.9}/src/buz/query/asynchronous/self_process/self_process_query_bus.py +0 -0
  232. {buz-2.15.7 → buz-2.15.9}/src/buz/query/more_than_one_query_handler_related_exception.py +0 -0
  233. {buz-2.15.7 → buz-2.15.9}/src/buz/query/query.py +0 -0
  234. {buz-2.15.7 → buz-2.15.9}/src/buz/query/query_response.py +0 -0
  235. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/__init__.py +0 -0
  236. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/base_query_handler.py +0 -0
  237. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/middleware/__init__.py +0 -0
  238. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/middleware/base_handle_middleware.py +0 -0
  239. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/middleware/handle_middleware.py +0 -0
  240. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  241. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/query_bus.py +0 -0
  242. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/query_handler.py +0 -0
  243. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/self_process/__init__.py +0 -0
  244. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/self_process/self_process_query_bus.py +0 -0
  245. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/synced_async/__init__.py +0 -0
  246. {buz-2.15.7 → buz-2.15.9}/src/buz/query/synchronous/synced_async/synced_async_query_bus.py +0 -0
  247. {buz-2.15.7 → buz-2.15.9}/src/buz/queue/__init__.py +0 -0
  248. {buz-2.15.7 → buz-2.15.9}/src/buz/queue/in_memory/in_memory_multiqueue_repository.py +0 -0
  249. {buz-2.15.7 → buz-2.15.9}/src/buz/queue/in_memory/in_memory_queue_repository.py +0 -0
  250. {buz-2.15.7 → buz-2.15.9}/src/buz/queue/multiqueue_repository.py +0 -0
  251. {buz-2.15.7 → buz-2.15.9}/src/buz/queue/queue_repository.py +0 -0
  252. {buz-2.15.7 → buz-2.15.9}/src/buz/serializer/message_to_bytes_serializer.py +0 -0
  253. {buz-2.15.7 → buz-2.15.9}/src/buz/serializer/message_to_json_bytes_serializer.py +0 -0
  254. {buz-2.15.7 → buz-2.15.9}/src/buz/wrapper/__init__.py +0 -0
  255. {buz-2.15.7 → buz-2.15.9}/src/buz/wrapper/async_to_sync.py +0 -0
  256. {buz-2.15.7 → buz-2.15.9}/src/buz/wrapper/event_loop.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buz
3
- Version: 2.15.7
3
+ Version: 2.15.9
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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "buz"
3
- version = "2.15.7"
3
+ version = "2.15.9"
4
4
  description = "Buz is a set of light, simple and extensible implementations of event, command and query buses."
5
5
  readme = "README.md"
6
6
  authors = ["Luis Pintado Lozano <luis.pintado.lozano@gmail.com>", "Gerardo Parra <gprauxiliar@gmail.com>"]
@@ -1,3 +1,4 @@
1
+ from collections import defaultdict
1
2
  import json
2
3
  import traceback
3
4
  from abc import abstractmethod
@@ -39,6 +40,7 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
39
40
  __SECONDS_BETWEEN_EXECUTIONS_IF_THERE_ARE_NO_TASKS_IN_THE_QUEUE = 1
40
41
  __SECONDS_BETWEEN_POLLS_IF_THERE_ARE_TASKS_IN_THE_QUEUE = 1
41
42
  __SECONDS_BETWEEN_POLLS_IF_THERE_ARE_NO_NEW_TASKS = 1
43
+ __SECONDS_TO_WAIT_BETWEEN_REBALANCING_IN_PROGRESS = 0.1
42
44
  __MAX_NUMBER_OF_CONCURRENT_POLLING_TASKS = 20
43
45
 
44
46
  def __init__(
@@ -63,6 +65,7 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
63
65
  max_poll_interval_ms: Optional[int] = None,
64
66
  heartbeat_interval_ms: Optional[int] = None,
65
67
  wait_for_connection_to_cluster_ms: Optional[int] = None,
68
+ worker_instance_id: Optional[str] = None,
66
69
  ):
67
70
  self.__connection_config = connection_config
68
71
  self.__consume_strategy = consume_strategy
@@ -102,9 +105,11 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
102
105
  max_number_of_concurrent_polling_tasks or self.__MAX_NUMBER_OF_CONCURRENT_POLLING_TASKS
103
106
  )
104
107
  self.__wait_for_connection_to_cluster_ms: Optional[int] = wait_for_connection_to_cluster_ms
108
+ self.__worker_instance_id: Optional[str] = worker_instance_id
105
109
  self.__polling_tasks_semaphore = Semaphore(self.__max_number_of_concurrent_polling_tasks)
106
- self.__task_execution_mutex = Lock()
110
+ self.__consumer_and_partition_mutex: dict[str, Lock] = defaultdict(Lock)
107
111
  self.__is_worked_initialized = False
112
+ self.__number_of_rebalancing_processes_in_progress: int = 0
108
113
 
109
114
  async def configure_http_check_server(self, health_check_port: int) -> web.TCPSite:
110
115
  self._logger.info(f"Starting health check server on port {health_check_port}")
@@ -148,6 +153,7 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
148
153
  def __print_worker_configuration(self) -> None:
149
154
  self._logger.info(
150
155
  f"Consumer configuration:\n"
156
+ f" - Worker instance id: {self.__worker_instance_id}\n"
151
157
  f" - Consume strategy: {self.__consume_strategy}\n"
152
158
  f" - Max queue size: {self.__max_queue_size}\n"
153
159
  f" - Max records retrieved per poll: {self.__max_records_retrieved_per_poll}\n"
@@ -212,6 +218,7 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
212
218
  topics = self.__consume_strategy.get_topics(subscriber)
213
219
  kafka_consumer = AIOKafkaConsumer(
214
220
  consumer_group=self.__consume_strategy.get_subscription_group(subscriber),
221
+ group_instance_id=self.__generate_consumer_group_instance_id(subscriber),
215
222
  topics=topics,
216
223
  connection_config=self.__connection_config,
217
224
  initial_offset_position=self.__consumer_initial_offset_position,
@@ -240,6 +247,11 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
240
247
  f"Initialized consumer group: '{kafka_consumer.get_consumer_group()}' subscribed to the topics: '{kafka_consumer.get_topics()}'"
241
248
  )
242
249
 
250
+ def __generate_consumer_group_instance_id(self, subscriber: MetaSubscriber) -> Optional[str]:
251
+ if self.__worker_instance_id is None:
252
+ return None
253
+ return f"{subscriber.fqn()}-{self.__worker_instance_id}"
254
+
243
255
  @abstractmethod
244
256
  async def _create_kafka_consumer_executor(self, subscriber: MetaSubscriber) -> KafkaEventSubscriberExecutor:
245
257
  pass
@@ -303,29 +315,59 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
303
315
  last_consumer, _ = next(consumer_queues_cyclic_iterator)
304
316
 
305
317
  while not self.__should_stop.is_set():
318
+ if self.is_rebalancing_in_progress():
319
+ self._logger.info("Waiting for rebalancing")
320
+ await sleep(self.__SECONDS_TO_WAIT_BETWEEN_REBALANCING_IN_PROGRESS)
321
+ continue
322
+
306
323
  if await self.__all_queues_are_empty():
307
324
  await sleep(self.__seconds_between_executions_if_there_are_no_tasks_in_the_queue)
308
325
  continue
309
326
 
310
- async with self.__task_execution_mutex:
311
- consumer: Optional[AIOKafkaConsumer] = None
327
+ consumer: Optional[AIOKafkaConsumer] = None
328
+
329
+ while consumer != last_consumer:
330
+ consumer, queue = next(consumer_queues_cyclic_iterator)
331
+ kafka_poll_record = queue.pop()
312
332
 
313
- while consumer != last_consumer:
314
- consumer, queue = next(consumer_queues_cyclic_iterator)
315
- kafka_poll_record = queue.pop()
333
+ if kafka_poll_record is not None:
334
+ consuming_task = ConsumingTask(consumer, kafka_poll_record)
335
+ async with self.__get_partition_mutex(
336
+ consumer_fqn=consuming_task.consumer.get_consumer_group(),
337
+ partition=kafka_poll_record.partition,
338
+ ):
339
+ yield consuming_task
316
340
 
317
- if kafka_poll_record is not None:
318
- yield ConsumingTask(consumer, kafka_poll_record)
319
- last_consumer = consumer
320
- break
341
+ last_consumer = consumer
342
+ break
343
+
344
+ def __get_partition_mutex(self, consumer_fqn: str, partition: int) -> Lock:
345
+ mutex_key = f"consumer_{consumer_fqn}_partition_{partition}"
346
+ return self.__consumer_and_partition_mutex[mutex_key]
321
347
 
322
348
  async def __all_queues_are_empty(self) -> bool:
323
349
  return all([queue.is_totally_empty() for queue in self.__queue_per_consumer_mapper.values()])
324
350
 
325
351
  async def __on_partition_revoked(self, consumer: AIOKafkaConsumer, topics_partitions: set[TopicPartition]) -> None:
326
- async with self.__task_execution_mutex:
327
- for topic_partition in topics_partitions:
352
+ self._logger.info(f"rebalancing in progress, revoking partitions {topics_partitions}")
353
+
354
+ self.increase_number_of_rebalancing_in_progress()
355
+ for topic_partition in topics_partitions:
356
+ async with self.__get_partition_mutex(
357
+ consumer_fqn=consumer.get_consumer_group(),
358
+ partition=topic_partition.partition,
359
+ ):
328
360
  self.__queue_per_consumer_mapper[consumer].clear(topic_partition)
361
+ self.decrease_number_of_rebalancing_in_progress()
362
+
363
+ def increase_number_of_rebalancing_in_progress(self) -> None:
364
+ self.__number_of_rebalancing_processes_in_progress += 1
365
+
366
+ def decrease_number_of_rebalancing_in_progress(self) -> None:
367
+ self.__number_of_rebalancing_processes_in_progress -= 1
368
+
369
+ def is_rebalancing_in_progress(self) -> bool:
370
+ return self.__number_of_rebalancing_processes_in_progress > 0
329
371
 
330
372
  def request_stop(self) -> None:
331
373
  self.__should_stop.set()
@@ -43,6 +43,7 @@ class BuzAIOKafkaAsyncConsumer(BaseBuzAIOKafkaAsyncConsumer):
43
43
  logger: Logger,
44
44
  consumer_initial_offset_position: ConsumerInitialOffsetPosition,
45
45
  deserializers_per_subscriber: dict[MetaSubscriber, BytesToMessageDeserializer[T]],
46
+ worker_instance_id: Optional[str] = None,
46
47
  consume_middlewares: Optional[Sequence[AsyncConsumeMiddleware]] = None,
47
48
  consume_retrier: Optional[ConsumeRetrier] = None,
48
49
  reject_callback: Optional[RejectCallback] = None,
@@ -77,6 +78,7 @@ class BuzAIOKafkaAsyncConsumer(BaseBuzAIOKafkaAsyncConsumer):
77
78
  heartbeat_interval_ms=heartbeat_interval_ms,
78
79
  health_check_port=health_check_port,
79
80
  wait_for_connection_to_cluster_ms=wait_for_connection_to_cluster_ms,
81
+ worker_instance_id=worker_instance_id,
80
82
  )
81
83
  self.__on_fail_strategy = on_fail_strategy
82
84
  self.__consume_middlewares = consume_middlewares
@@ -44,6 +44,7 @@ class BuzAIOKafkaMultiThreadedConsumer(BaseBuzAIOKafkaAsyncConsumer):
44
44
  logger: Logger,
45
45
  consumer_initial_offset_position: ConsumerInitialOffsetPosition,
46
46
  deserializers_per_subscriber: dict[Subscriber, BytesToMessageDeserializer[T]],
47
+ worker_instance_id: Optional[str] = None,
47
48
  consume_middlewares: Optional[Sequence[ConsumeMiddleware]] = None,
48
49
  consume_retrier: Optional[ConsumeRetrier] = None,
49
50
  reject_callback: Optional[RejectCallback] = None,
@@ -78,6 +79,7 @@ class BuzAIOKafkaMultiThreadedConsumer(BaseBuzAIOKafkaAsyncConsumer):
78
79
  max_poll_interval_ms=max_poll_interval_ms,
79
80
  heartbeat_interval_ms=heartbeat_interval_ms,
80
81
  wait_for_connection_to_cluster_ms=wait_for_connection_to_cluster_ms,
82
+ worker_instance_id=worker_instance_id,
81
83
  )
82
84
  self.__on_fail_strategy = on_fail_strategy
83
85
  self.__consume_middlewares = consume_middlewares
@@ -43,6 +43,7 @@ class AIOKafkaConsumer:
43
43
  on_partition_revoked: Callable[[AIOKafkaConsumer, set[TopicPartition]], Awaitable[None]],
44
44
  auto_create_topic_configuration: Optional[AutoCreateTopicConfiguration] = None,
45
45
  wait_for_connection_to_cluster_ms: Optional[int] = None,
46
+ group_instance_id: Optional[str] = None,
46
47
  ) -> None:
47
48
  self.__consumer_group = consumer_group
48
49
  self.__topics = topics
@@ -57,6 +58,7 @@ class AIOKafkaConsumer:
57
58
  self.__max_poll_interval_ms = max_poll_interval_ms
58
59
  self.__heartbeat_interval_ms = heartbeat_interval_ms
59
60
  self.__wait_for_connection_to_cluster_ms = wait_for_connection_to_cluster_ms
61
+ self.__group_instance_id = group_instance_id
60
62
  self.__check_kafka_admin_client_is_needed()
61
63
  self.__consumer = self.__generate_consumer()
62
64
 
@@ -90,6 +92,7 @@ class AIOKafkaConsumer:
90
92
 
91
93
  consumer = AIOKafkaNativeConsumer(
92
94
  None,
95
+ group_instance_id=self.__group_instance_id,
93
96
  ssl_context=ssl_context,
94
97
  bootstrap_servers=",".join(self.__connection_config.bootstrap_servers),
95
98
  security_protocol=self.__connection_config.credentials.security_protocol.value,
@@ -163,10 +166,7 @@ class AIOKafkaConsumer:
163
166
  self,
164
167
  topics_partitions: set[TopicPartition],
165
168
  ) -> None:
166
- # It could happen that the new partition assigned it was a previous one processed by this consumer, so we need to seek to the last committed offset
167
- self.__consumer.pause(*topics_partitions)
168
- await self.__consumer.seek_to_committed(*topics_partitions)
169
- self.__consumer.resume(*topics_partitions)
169
+ return
170
170
 
171
171
  async def __on_partitions_revoked(
172
172
  self,
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
File without changes
File without changes
File without changes