buz 2.14.0__tar.gz → 2.14.2__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 (253) hide show
  1. {buz-2.14.0 → buz-2.14.2}/PKG-INFO +1 -1
  2. {buz-2.14.0 → buz-2.14.2}/pyproject.toml +1 -1
  3. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/buz_aiokafka_async_consumer.py +4 -3
  4. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/buz_aiokafka_multi_threaded_consumer.py +4 -1
  5. buz-2.14.2/src/buz/event/infrastructure/buz_kafka/exceptions/retry_exception.py +12 -0
  6. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/kafka_event_async_subscriber_executor.py +22 -6
  7. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/kafka_event_sync_subscriber_executor.py +20 -3
  8. {buz-2.14.0 → buz-2.14.2}/src/buz/event/meta_subscriber.py +6 -1
  9. buz-2.14.2/src/buz/kafka/domain/exceptions/not_all_partition_assigned_exception.py +13 -0
  10. buz-2.14.2/src/buz/kafka/domain/exceptions/not_valid_partition_number_exception.py +10 -0
  11. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/services/kafka_admin_client.py +13 -0
  12. buz-2.14.2/src/buz/kafka/infrastructure/kafka_python/kafka_python_admin_client.py +402 -0
  13. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/kafka_python/kafka_python_admin_test_client.py +1 -1
  14. buz-2.14.0/src/buz/kafka/domain/exceptions/not_all_partition_assigned_exception.py +0 -8
  15. buz-2.14.0/src/buz/kafka/infrastructure/kafka_python/kafka_python_admin_client.py +0 -237
  16. {buz-2.14.0 → buz-2.14.2}/LICENSE +0 -0
  17. {buz-2.14.0 → buz-2.14.2}/README.md +0 -0
  18. {buz-2.14.0 → buz-2.14.2}/src/buz/__init__.py +0 -0
  19. {buz-2.14.0 → buz-2.14.2}/src/buz/command/__init__.py +0 -0
  20. {buz-2.14.0 → buz-2.14.2}/src/buz/command/asynchronous/__init__.py +0 -0
  21. {buz-2.14.0 → buz-2.14.2}/src/buz/command/asynchronous/base_command_handler.py +0 -0
  22. {buz-2.14.0 → buz-2.14.2}/src/buz/command/asynchronous/command_bus.py +0 -0
  23. {buz-2.14.0 → buz-2.14.2}/src/buz/command/asynchronous/command_handler.py +0 -0
  24. {buz-2.14.0 → buz-2.14.2}/src/buz/command/asynchronous/middleware/__init__.py +0 -0
  25. {buz-2.14.0 → buz-2.14.2}/src/buz/command/asynchronous/middleware/base_handle_middleware.py +0 -0
  26. {buz-2.14.0 → buz-2.14.2}/src/buz/command/asynchronous/middleware/handle_middleware.py +0 -0
  27. {buz-2.14.0 → buz-2.14.2}/src/buz/command/asynchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  28. {buz-2.14.0 → buz-2.14.2}/src/buz/command/asynchronous/self_process/__init__.py +0 -0
  29. {buz-2.14.0 → buz-2.14.2}/src/buz/command/asynchronous/self_process/self_process_command_bus.py +0 -0
  30. {buz-2.14.0 → buz-2.14.2}/src/buz/command/command.py +0 -0
  31. {buz-2.14.0 → buz-2.14.2}/src/buz/command/more_than_one_command_handler_related_exception.py +0 -0
  32. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/__init__.py +0 -0
  33. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/base_command_handler.py +0 -0
  34. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/command_bus.py +0 -0
  35. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/command_handler.py +0 -0
  36. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/middleware/__init__.py +0 -0
  37. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/middleware/base_handle_middleware.py +0 -0
  38. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/middleware/handle_middleware.py +0 -0
  39. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  40. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/self_process/__init__.py +0 -0
  41. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/self_process/self_process_command_bus.py +0 -0
  42. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/synced_async/__init__.py +0 -0
  43. {buz-2.14.0 → buz-2.14.2}/src/buz/command/synchronous/synced_async/synced_async_command_bus.py +0 -0
  44. {buz-2.14.0 → buz-2.14.2}/src/buz/event/__init__.py +0 -0
  45. {buz-2.14.0 → buz-2.14.2}/src/buz/event/async_consumer.py +0 -0
  46. {buz-2.14.0 → buz-2.14.2}/src/buz/event/async_event_bus.py +0 -0
  47. {buz-2.14.0 → buz-2.14.2}/src/buz/event/async_subscriber.py +0 -0
  48. {buz-2.14.0 → buz-2.14.2}/src/buz/event/async_worker.py +0 -0
  49. {buz-2.14.0 → buz-2.14.2}/src/buz/event/base_async_subscriber.py +0 -0
  50. {buz-2.14.0 → buz-2.14.2}/src/buz/event/base_subscriber.py +0 -0
  51. {buz-2.14.0 → buz-2.14.2}/src/buz/event/consumer.py +0 -0
  52. {buz-2.14.0 → buz-2.14.2}/src/buz/event/dead_letter_queue/__init__.py +0 -0
  53. {buz-2.14.0 → buz-2.14.2}/src/buz/event/dead_letter_queue/dlq_criteria.py +0 -0
  54. {buz-2.14.0 → buz-2.14.2}/src/buz/event/dead_letter_queue/dlq_record.py +0 -0
  55. {buz-2.14.0 → buz-2.14.2}/src/buz/event/dead_letter_queue/dlq_repository.py +0 -0
  56. {buz-2.14.0 → buz-2.14.2}/src/buz/event/event.py +0 -0
  57. {buz-2.14.0 → buz-2.14.2}/src/buz/event/event_bus.py +0 -0
  58. {buz-2.14.0 → buz-2.14.2}/src/buz/event/exceptions/__init__.py +0 -0
  59. {buz-2.14.0 → buz-2.14.2}/src/buz/event/exceptions/event_not_published_exception.py +0 -0
  60. {buz-2.14.0 → buz-2.14.2}/src/buz/event/exceptions/event_restore_exception.py +0 -0
  61. {buz-2.14.0 → buz-2.14.2}/src/buz/event/exceptions/subscribers_not_found_exception.py +0 -0
  62. {buz-2.14.0 → buz-2.14.2}/src/buz/event/exceptions/term_signal_interruption_exception.py +0 -0
  63. {buz-2.14.0 → buz-2.14.2}/src/buz/event/exceptions/worker_execution_exception.py +0 -0
  64. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/__init__.py +0 -0
  65. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/__init__.py +0 -0
  66. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/async_buz_kafka_event_bus.py +0 -0
  67. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/base_buz_aiokafka_async_consumer.py +0 -0
  68. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/buz_kafka_event_bus.py +0 -0
  69. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/consume_strategy/__init__.py +0 -0
  70. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/consume_strategy/consume_strategy.py +0 -0
  71. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/consume_strategy/kafka_on_fail_strategy.py +0 -0
  72. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/consume_strategy/topic_and_subscription_group_per_subscriber_kafka_consumer_strategy.py +0 -0
  73. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/exceptions/__init__.py +0 -0
  74. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/exceptions/kafka_event_bus_config_not_valid_exception.py +0 -0
  75. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/kafka_event_subscriber_executor.py +0 -0
  76. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/publish_strategy/__init__.py +0 -0
  77. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/publish_strategy/publish_strategy.py +0 -0
  78. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/buz_kafka/publish_strategy/topic_per_event_kafka_publish_strategy.py +0 -0
  79. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/__init__.py +0 -0
  80. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/allowed_kombu_serializer.py +0 -0
  81. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/consume_strategy/__init__.py +0 -0
  82. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/consume_strategy/consume_strategy.py +0 -0
  83. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/consume_strategy/queue_per_subscriber_consume_strategy.py +0 -0
  84. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/kombu_consumer.py +0 -0
  85. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/kombu_event_bus.py +0 -0
  86. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/publish_strategy/__init__.py +0 -0
  87. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/publish_strategy/fanout_exchange_per_event_publish_strategy.py +0 -0
  88. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/publish_strategy/publish_strategy.py +0 -0
  89. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/retry_strategy/__init__.py +0 -0
  90. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/retry_strategy/publish_retry_policy.py +0 -0
  91. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/kombu/retry_strategy/simple_publish_retry_policy.py +0 -0
  92. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/models/consuming_task.py +0 -0
  93. {buz-2.14.0 → buz-2.14.2}/src/buz/event/infrastructure/queue/__init__.py +0 -0
  94. {buz-2.14.0 → buz-2.14.2}/src/buz/event/meta_base_subscriber.py +0 -0
  95. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/__init__.py +0 -0
  96. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/async_consume_middleware.py +0 -0
  97. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/async_consume_middleware_chain_resolver.py +0 -0
  98. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/async_publish_middleware.py +0 -0
  99. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/async_publish_middleware_chain_resolver.py +0 -0
  100. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/base_consume_middleware.py +0 -0
  101. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/base_publish_middleware.py +0 -0
  102. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/consume_middleware.py +0 -0
  103. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/consume_middleware_chain_resolver.py +0 -0
  104. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/exceptions/__init__.py +0 -0
  105. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/exceptions/event_already_in_progress_exception.py +0 -0
  106. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/publish_middleware.py +0 -0
  107. {buz-2.14.0 → buz-2.14.2}/src/buz/event/middleware/publish_middleware_chain_resolver.py +0 -0
  108. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/__init__.py +0 -0
  109. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/execution_strategy/__init__.py +0 -0
  110. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/execution_strategy/async_execution_strategy.py +0 -0
  111. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/execution_strategy/async_self_process_execution_strategy.py +0 -0
  112. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/execution_strategy/cyclic_iterator_execution_strategy.py +0 -0
  113. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/execution_strategy/execution_strategy.py +0 -0
  114. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/execution_strategy/self_process_execution_strategy.py +0 -0
  115. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/retry/__init__.py +0 -0
  116. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/retry/consume_retrier.py +0 -0
  117. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/retry/consumed_event_retry.py +0 -0
  118. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/retry/consumed_event_retry_repository.py +0 -0
  119. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/retry/max_retries_consume_retrier.py +0 -0
  120. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/retry/max_retries_negative_exception.py +0 -0
  121. {buz-2.14.0 → buz-2.14.2}/src/buz/event/strategies/retry/reject_callback.py +0 -0
  122. {buz-2.14.0 → buz-2.14.2}/src/buz/event/subscriber.py +0 -0
  123. {buz-2.14.0 → buz-2.14.2}/src/buz/event/sync/__init__.py +0 -0
  124. {buz-2.14.0 → buz-2.14.2}/src/buz/event/sync/sync_event_bus.py +0 -0
  125. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/__init__.py +0 -0
  126. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/event_to_outbox_record_translator.py +0 -0
  127. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/fqn_to_event_mapper.py +0 -0
  128. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_criteria/__init__.py +0 -0
  129. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_criteria/deliverable_records_outbox_criteria_factory.py +0 -0
  130. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_criteria/outbox_criteria.py +0 -0
  131. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_criteria/outbox_criteria_factory.py +0 -0
  132. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_criteria/outbox_sorting_criteria.py +0 -0
  133. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record.py +0 -0
  134. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record_finder/__init__.py +0 -0
  135. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record_finder/outbox_record_stream_finder.py +0 -0
  136. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record_finder/polling_outbox_record_stream_finder.py +0 -0
  137. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record_to_event_translator.py +0 -0
  138. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record_validation/__init__.py +0 -0
  139. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record_validation/abstract_outbox_record_validator.py +0 -0
  140. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_size_not_allowed_exception.py +0 -0
  141. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_validation_exception.py +0 -0
  142. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_validator.py +0 -0
  143. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_record_validation/size_outbox_record_validator.py +0 -0
  144. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/outbox_repository.py +0 -0
  145. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/transactional_outbox_event_bus.py +0 -0
  146. {buz-2.14.0 → buz-2.14.2}/src/buz/event/transactional_outbox/transactional_outbox_worker.py +0 -0
  147. {buz-2.14.0 → buz-2.14.2}/src/buz/event/worker.py +0 -0
  148. {buz-2.14.0 → buz-2.14.2}/src/buz/handler.py +0 -0
  149. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/__init__.py +0 -0
  150. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/exceptions/__init__.py +0 -0
  151. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/exceptions/not_valid_kafka_message_exception.py +0 -0
  152. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/exceptions/topic_already_created_exception.py +0 -0
  153. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/exceptions/topic_not_found_exception.py +0 -0
  154. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/__init__.py +0 -0
  155. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/auto_create_topic_configuration.py +0 -0
  156. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/consumer_initial_offset_position.py +0 -0
  157. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/create_kafka_topic.py +0 -0
  158. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/kafka_connection_config.py +0 -0
  159. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/kafka_connection_credentials.py +0 -0
  160. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/kafka_connection_plain_text_credentials.py +0 -0
  161. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/kafka_connection_sasl_credentials.py +0 -0
  162. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/kafka_consumer_record.py +0 -0
  163. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/kafka_poll_record.py +0 -0
  164. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/kafka_supported_compression_type.py +0 -0
  165. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/kafka_supported_sasl_mechanisms.py +0 -0
  166. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/models/kafka_supported_security_protocols.py +0 -0
  167. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/services/__init__.py +0 -0
  168. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/services/async_kafka_producer.py +0 -0
  169. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/services/kafka_admin_test_client.py +0 -0
  170. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/domain/services/kafka_producer.py +0 -0
  171. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/__init__.py +0 -0
  172. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/aiokafka/__init__.py +0 -0
  173. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/aiokafka/aiokafka_consumer.py +0 -0
  174. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/aiokafka/aiokafka_producer.py +0 -0
  175. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/aiokafka/rebalance/__init__.py +0 -0
  176. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/aiokafka/rebalance/kafka_callback_rebalancer.py +0 -0
  177. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/aiokafka/translators/__init__.py +0 -0
  178. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/aiokafka/translators/consumer_initial_offset_position_translator.py +0 -0
  179. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/cdc/cdc_message.py +0 -0
  180. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/deserializers/__init__.py +0 -0
  181. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/deserializers/byte_deserializer.py +0 -0
  182. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/deserializers/bytes_to_message_deserializer.py +0 -0
  183. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/deserializers/implementations/__init__.py +0 -0
  184. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/deserializers/implementations/cdc/cdc_record_bytes_to_event_deserializer.py +0 -0
  185. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/deserializers/implementations/cdc/not_valid_cdc_message_exception.py +0 -0
  186. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/deserializers/implementations/json_byte_deserializer.py +0 -0
  187. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/deserializers/implementations/json_bytes_to_message_deserializer.py +0 -0
  188. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/interfaces/__init__.py +0 -0
  189. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/interfaces/async_connection_manager.py +0 -0
  190. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/interfaces/connection_manager.py +0 -0
  191. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/kafka_python/__init__.py +0 -0
  192. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/kafka_python/exception/consumer_interrupted_exception.py +0 -0
  193. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/kafka_python/kafka_python_producer.py +0 -0
  194. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/kafka_python/translators/__init__.py +0 -0
  195. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/kafka_python/translators/consumer_initial_offset_position_translator.py +0 -0
  196. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/serializers/byte_serializer.py +0 -0
  197. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/serializers/implementations/cdc_record_bytes_to_event_serializer.py +0 -0
  198. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/serializers/implementations/json_byte_serializer.py +0 -0
  199. {buz-2.14.0 → buz-2.14.2}/src/buz/kafka/infrastructure/serializers/kafka_header_serializer.py +0 -0
  200. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/__init__.py +0 -0
  201. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/handler_fqn_not_found_exception.py +0 -0
  202. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/locator.py +0 -0
  203. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/message_fqn_not_found_exception.py +0 -0
  204. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/pypendency/__init__.py +0 -0
  205. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/pypendency/container_locator.py +0 -0
  206. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/pypendency/container_locator_resolution_configuration.py +0 -0
  207. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/pypendency/handler_not_found_exception.py +0 -0
  208. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/pypendency/handler_not_registered_exception.py +0 -0
  209. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/sync/__init__.py +0 -0
  210. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/sync/handler_already_registered_exception.py +0 -0
  211. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/sync/handler_not_registered_exception.py +0 -0
  212. {buz-2.14.0 → buz-2.14.2}/src/buz/locator/sync/instance_locator.py +0 -0
  213. {buz-2.14.0 → buz-2.14.2}/src/buz/message.py +0 -0
  214. {buz-2.14.0 → buz-2.14.2}/src/buz/middleware/__init__.py +0 -0
  215. {buz-2.14.0 → buz-2.14.2}/src/buz/middleware/middleware.py +0 -0
  216. {buz-2.14.0 → buz-2.14.2}/src/buz/middleware/middleware_chain_builder.py +0 -0
  217. {buz-2.14.0 → buz-2.14.2}/src/buz/py.typed +0 -0
  218. {buz-2.14.0 → buz-2.14.2}/src/buz/query/__init__.py +0 -0
  219. {buz-2.14.0 → buz-2.14.2}/src/buz/query/asynchronous/__init__.py +0 -0
  220. {buz-2.14.0 → buz-2.14.2}/src/buz/query/asynchronous/base_query_handler.py +0 -0
  221. {buz-2.14.0 → buz-2.14.2}/src/buz/query/asynchronous/middleware/__init__.py +0 -0
  222. {buz-2.14.0 → buz-2.14.2}/src/buz/query/asynchronous/middleware/base_handle_middleware.py +0 -0
  223. {buz-2.14.0 → buz-2.14.2}/src/buz/query/asynchronous/middleware/handle_middleware.py +0 -0
  224. {buz-2.14.0 → buz-2.14.2}/src/buz/query/asynchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  225. {buz-2.14.0 → buz-2.14.2}/src/buz/query/asynchronous/query_bus.py +0 -0
  226. {buz-2.14.0 → buz-2.14.2}/src/buz/query/asynchronous/query_handler.py +0 -0
  227. {buz-2.14.0 → buz-2.14.2}/src/buz/query/asynchronous/self_process/__init__.py +0 -0
  228. {buz-2.14.0 → buz-2.14.2}/src/buz/query/asynchronous/self_process/self_process_query_bus.py +0 -0
  229. {buz-2.14.0 → buz-2.14.2}/src/buz/query/more_than_one_query_handler_related_exception.py +0 -0
  230. {buz-2.14.0 → buz-2.14.2}/src/buz/query/query.py +0 -0
  231. {buz-2.14.0 → buz-2.14.2}/src/buz/query/query_response.py +0 -0
  232. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/__init__.py +0 -0
  233. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/base_query_handler.py +0 -0
  234. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/middleware/__init__.py +0 -0
  235. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/middleware/base_handle_middleware.py +0 -0
  236. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/middleware/handle_middleware.py +0 -0
  237. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  238. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/query_bus.py +0 -0
  239. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/query_handler.py +0 -0
  240. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/self_process/__init__.py +0 -0
  241. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/self_process/self_process_query_bus.py +0 -0
  242. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/synced_async/__init__.py +0 -0
  243. {buz-2.14.0 → buz-2.14.2}/src/buz/query/synchronous/synced_async/synced_async_query_bus.py +0 -0
  244. {buz-2.14.0 → buz-2.14.2}/src/buz/queue/__init__.py +0 -0
  245. {buz-2.14.0 → buz-2.14.2}/src/buz/queue/in_memory/in_memory_multiqueue_repository.py +0 -0
  246. {buz-2.14.0 → buz-2.14.2}/src/buz/queue/in_memory/in_memory_queue_repository.py +0 -0
  247. {buz-2.14.0 → buz-2.14.2}/src/buz/queue/multiqueue_repository.py +0 -0
  248. {buz-2.14.0 → buz-2.14.2}/src/buz/queue/queue_repository.py +0 -0
  249. {buz-2.14.0 → buz-2.14.2}/src/buz/serializer/message_to_bytes_serializer.py +0 -0
  250. {buz-2.14.0 → buz-2.14.2}/src/buz/serializer/message_to_json_bytes_serializer.py +0 -0
  251. {buz-2.14.0 → buz-2.14.2}/src/buz/wrapper/__init__.py +0 -0
  252. {buz-2.14.0 → buz-2.14.2}/src/buz/wrapper/async_to_sync.py +0 -0
  253. {buz-2.14.0 → buz-2.14.2}/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.14.0
3
+ Version: 2.14.2
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.14.0"
3
+ version = "2.14.2"
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>"]
@@ -4,7 +4,6 @@ from typing import Optional, Sequence, Type, TypeVar
4
4
  from aiokafka.coordinator.assignors.abstract import AbstractPartitionAssignor
5
5
 
6
6
  from buz.event import Event
7
-
8
7
  from buz.event.async_subscriber import AsyncSubscriber
9
8
  from buz.event.infrastructure.buz_kafka.base_buz_aiokafka_async_consumer import BaseBuzAIOKafkaAsyncConsumer
10
9
  from buz.event.infrastructure.buz_kafka.consume_strategy.consume_strategy import KafkaConsumeStrategy
@@ -15,11 +14,11 @@ from buz.event.meta_subscriber import MetaSubscriber
15
14
  from buz.event.middleware.async_consume_middleware import AsyncConsumeMiddleware
16
15
  from buz.event.strategies.retry.consume_retrier import ConsumeRetrier
17
16
  from buz.event.strategies.retry.reject_callback import RejectCallback
18
-
19
17
  from buz.kafka.domain.models.auto_create_topic_configuration import AutoCreateTopicConfiguration
20
18
  from buz.kafka.domain.models.consumer_initial_offset_position import ConsumerInitialOffsetPosition
21
19
  from buz.kafka.domain.models.kafka_connection_config import KafkaConnectionConfig
22
20
  from buz.kafka.domain.services.kafka_admin_client import KafkaAdminClient
21
+ from buz.kafka.infrastructure.deserializers.byte_deserializer import ByteDeserializer
23
22
  from buz.kafka.infrastructure.deserializers.bytes_to_message_deserializer import BytesToMessageDeserializer
24
23
  from buz.kafka.infrastructure.deserializers.implementations.json_bytes_to_message_deserializer import (
25
24
  JSONBytesToMessageDeserializer,
@@ -84,7 +83,9 @@ class BuzAIOKafkaAsyncConsumer(BaseBuzAIOKafkaAsyncConsumer):
84
83
  f"Subscriber {subscriber.__class__.__name__} is not a subclass of Subscriber, probably you are trying to use a synchronous subscriber"
85
84
  )
86
85
 
87
- byte_deserializer = self._deserializers_per_subscriber.get(subscriber) or JSONBytesToMessageDeserializer(
86
+ byte_deserializer: ByteDeserializer[Event] = self._deserializers_per_subscriber.get(
87
+ subscriber
88
+ ) or JSONBytesToMessageDeserializer(
88
89
  # todo: it looks like in next python versions the inference engine is powerful enough to ensure this type, so we can remove it when we upgrade the python version of the library
89
90
  event_class=subscriber.handles() # type: ignore
90
91
  )
@@ -19,6 +19,7 @@ from buz.kafka.domain.models.auto_create_topic_configuration import AutoCreateTo
19
19
  from buz.kafka.domain.models.consumer_initial_offset_position import ConsumerInitialOffsetPosition
20
20
  from buz.kafka.domain.models.kafka_connection_config import KafkaConnectionConfig
21
21
  from buz.kafka.domain.services.kafka_admin_client import KafkaAdminClient
22
+ from buz.kafka.infrastructure.deserializers.byte_deserializer import ByteDeserializer
22
23
  from buz.kafka.infrastructure.deserializers.bytes_to_message_deserializer import BytesToMessageDeserializer
23
24
  from buz.kafka.infrastructure.deserializers.implementations.json_bytes_to_message_deserializer import (
24
25
  JSONBytesToMessageDeserializer,
@@ -83,7 +84,9 @@ class BuzAIOKafkaMultiThreadedConsumer(BaseBuzAIOKafkaAsyncConsumer):
83
84
  f"Subscriber {subscriber.__class__.__name__} is not a subclass of Subscriber, probably you are trying to use an asynchronous subscriber"
84
85
  )
85
86
 
86
- byte_deserializer = self._deserializers_per_subscriber.get(subscriber) or JSONBytesToMessageDeserializer(
87
+ byte_deserializer: ByteDeserializer[Event] = self._deserializers_per_subscriber.get(
88
+ subscriber
89
+ ) or JSONBytesToMessageDeserializer(
87
90
  # todo: it looks like in next python versions the inference engine is powerful enough to ensure this type, so we can remove it when we upgrade the python version of the library
88
91
  event_class=subscriber.handles() # type: ignore
89
92
  )
@@ -0,0 +1,12 @@
1
+ class ConsumerRetryException(Exception):
2
+ def __init__(
3
+ self,
4
+ *,
5
+ event_id: str,
6
+ subscriber_fqn: str,
7
+ number_of_executions: int,
8
+ ) -> None:
9
+ super().__init__(
10
+ f"An exception happened during the consumption of the event '{event_id}' by the subscriber '{subscriber_fqn}' "
11
+ + f"during execution number '{number_of_executions}'. Retrying the consumption..."
12
+ )
@@ -6,6 +6,7 @@ from typing import Optional, Sequence, cast
6
6
  from buz.event import Event
7
7
  from buz.event.async_subscriber import AsyncSubscriber
8
8
  from buz.event.infrastructure.buz_kafka.consume_strategy.kafka_on_fail_strategy import KafkaOnFailStrategy
9
+ from buz.event.infrastructure.buz_kafka.exceptions.retry_exception import ConsumerRetryException
9
10
  from buz.event.infrastructure.buz_kafka.kafka_event_subscriber_executor import KafkaEventSubscriberExecutor
10
11
  from buz.event.middleware.async_consume_middleware import AsyncConsumeMiddleware
11
12
  from buz.event.middleware.async_consume_middleware_chain_resolver import AsyncConsumeMiddlewareChainResolver
@@ -26,7 +27,7 @@ class KafkaEventAsyncSubscriberExecutor(KafkaEventSubscriberExecutor):
26
27
  logger: Logger,
27
28
  consume_middlewares: Optional[Sequence[AsyncConsumeMiddleware]] = None,
28
29
  seconds_between_retries: float = 5,
29
- byte_deserializer: ByteDeserializer,
30
+ byte_deserializer: ByteDeserializer[Event],
30
31
  header_deserializer: KafkaHeaderSerializer,
31
32
  on_fail_strategy: KafkaOnFailStrategy,
32
33
  consume_retrier: Optional[ConsumeRetrier] = None,
@@ -53,10 +54,17 @@ class KafkaEventAsyncSubscriberExecutor(KafkaEventSubscriberExecutor):
53
54
 
54
55
  kafka_record_value = cast(bytes, kafka_poll_record.value)
55
56
 
57
+ deserialized_value = self.__byte_deserializer.deserialize(kafka_record_value)
58
+
59
+ self.__logger.info(
60
+ f"consuming the event '{deserialized_value.id}' by the subscriber '{self.__subscriber.fqn()}', "
61
+ + f"topic: '{kafka_poll_record.topic}', partition: '{kafka_poll_record.partition}', offset: '{kafka_poll_record.offset}'"
62
+ )
63
+
56
64
  await self.__consumption_callback(
57
65
  self.__subscriber,
58
66
  KafkaConsumerRecord(
59
- value=self.__byte_deserializer.deserialize(kafka_record_value),
67
+ value=deserialized_value,
60
68
  headers=self.__header_deserializer.deserialize(kafka_poll_record.headers),
61
69
  ),
62
70
  )
@@ -78,20 +86,28 @@ class KafkaEventAsyncSubscriberExecutor(KafkaEventSubscriberExecutor):
78
86
 
79
87
  async def __perform_consume(self, event: Event, subscriber: AsyncSubscriber) -> None:
80
88
  should_retry = True
89
+ number_of_executions = 0
81
90
  while should_retry is True:
82
91
  try:
92
+ number_of_executions += 1
83
93
  await subscriber.consume(event)
84
94
  return
85
95
  except Exception as exception:
86
- self.__logger.exception(
87
- f"Event {event.id} could not be consumed by the subscriber, error: {traceback.format_exc()}"
88
- )
89
-
90
96
  if self.__should_retry(event, subscriber) is True:
97
+ self.__logger.warning(
98
+ ConsumerRetryException(
99
+ number_of_executions=number_of_executions,
100
+ event_id=event.id,
101
+ subscriber_fqn=subscriber.fqn(),
102
+ ),
103
+ exc_info=exception,
104
+ )
91
105
  self.__register_retry(event, subscriber)
92
106
  await sleep(self.__seconds_between_retires)
93
107
  continue
94
108
 
109
+ self.__logger.exception(exception)
110
+
95
111
  if self.__reject_callback:
96
112
  self.__reject_callback.on_reject(event=event, subscribers=[subscriber], exception=exception)
97
113
 
@@ -4,6 +4,7 @@ import time
4
4
  from typing import Optional, Sequence, cast
5
5
  from buz.event import Event
6
6
  from buz.event.infrastructure.buz_kafka.consume_strategy.kafka_on_fail_strategy import KafkaOnFailStrategy
7
+ from buz.event.infrastructure.buz_kafka.exceptions.retry_exception import ConsumerRetryException
7
8
  from buz.event.infrastructure.buz_kafka.kafka_event_subscriber_executor import KafkaEventSubscriberExecutor
8
9
  from buz.event.middleware.consume_middleware import ConsumeMiddleware
9
10
  from buz.event.middleware.consume_middleware_chain_resolver import ConsumeMiddlewareChainResolver
@@ -25,7 +26,7 @@ class KafkaEventSyncSubscriberExecutor(KafkaEventSubscriberExecutor):
25
26
  logger: Logger,
26
27
  consume_middlewares: Optional[Sequence[ConsumeMiddleware]] = None,
27
28
  seconds_between_retries: float = 5,
28
- byte_deserializer: ByteDeserializer,
29
+ byte_deserializer: ByteDeserializer[Event],
29
30
  header_deserializer: KafkaHeaderSerializer,
30
31
  on_fail_strategy: KafkaOnFailStrategy,
31
32
  consume_retrier: Optional[ConsumeRetrier] = None,
@@ -52,12 +53,19 @@ class KafkaEventSyncSubscriberExecutor(KafkaEventSubscriberExecutor):
52
53
 
53
54
  kafka_record_value = cast(bytes, kafka_poll_record.value)
54
55
 
56
+ deserialized_value = self.__byte_deserializer.deserialize(kafka_record_value)
57
+
58
+ self.__logger.info(
59
+ f"consuming the event '{deserialized_value.id}' by the subscriber '{self.__subscriber.fqn()}', "
60
+ + f"topic: '{kafka_poll_record.topic}', partition: '{kafka_poll_record.partition}', offset: '{kafka_poll_record.offset}'"
61
+ )
62
+
55
63
  await get_running_loop().run_in_executor(
56
64
  None,
57
65
  lambda: self.__execution_callback(
58
66
  self.__subscriber,
59
67
  KafkaConsumerRecord(
60
- value=self.__byte_deserializer.deserialize(kafka_record_value),
68
+ value=deserialized_value,
61
69
  headers=self.__header_deserializer.deserialize(kafka_poll_record.headers),
62
70
  ),
63
71
  ),
@@ -75,13 +83,22 @@ class KafkaEventSyncSubscriberExecutor(KafkaEventSubscriberExecutor):
75
83
 
76
84
  def __perform_consume(self, event: Event, subscriber: Subscriber) -> None:
77
85
  should_retry = True
86
+ execution_number = 0
78
87
  while should_retry is True:
79
88
  try:
89
+ execution_number += 1
80
90
  subscriber.consume(event)
81
91
  return
82
92
  except Exception as exception:
83
- self.__logger.warning(f"Event {event.id} could not be consumed by the subscriber {subscriber.fqn}")
84
93
  if self.__should_retry(event, subscriber) is True:
94
+ self.__logger.warning(
95
+ ConsumerRetryException(
96
+ number_of_executions=execution_number,
97
+ event_id=event.id,
98
+ subscriber_fqn=subscriber.fqn(),
99
+ ),
100
+ exc_info=exception,
101
+ )
85
102
  self.__register_retry(event, subscriber)
86
103
  time.sleep(self.__seconds_between_retires)
87
104
  continue
@@ -1,5 +1,5 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import Awaitable, Union
2
+ from typing import Awaitable, Type, Union
3
3
 
4
4
  from buz import Handler
5
5
  from buz.event import Event
@@ -9,3 +9,8 @@ class MetaSubscriber(Handler, ABC):
9
9
  @abstractmethod
10
10
  def consume(self, event: Event) -> Union[None, Awaitable[None]]:
11
11
  pass
12
+
13
+ @classmethod
14
+ @abstractmethod
15
+ def handles(cls) -> Type[Event]:
16
+ pass
@@ -0,0 +1,13 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ class NotAllPartitionAssignedException(Exception):
5
+ def __init__(
6
+ self,
7
+ *,
8
+ topic_name: str,
9
+ consumer_group: str,
10
+ ) -> None:
11
+ super().__init__(
12
+ f'Not all the partitions in the consumer group "{consumer_group}" were assigned in the topic "{topic_name}". Please disconnect the rest of subscribers'
13
+ )
@@ -0,0 +1,10 @@
1
+ class NotValidPartitionNumberException(Exception):
2
+ def __init__(
3
+ self,
4
+ *,
5
+ partition_number: int,
6
+ min_partition_number: int,
7
+ ) -> None:
8
+ super().__init__(
9
+ f'"{partition_number}" is not a valid partition number, the minimum partition number is "{min_partition_number}"'
10
+ )
@@ -40,6 +40,10 @@ class KafkaAdminClient(ConnectionManager, ABC):
40
40
  ) -> set[str]:
41
41
  pass
42
42
 
43
+ @abstractmethod
44
+ def get_number_of_partitions(self, topic: str) -> int:
45
+ pass
46
+
43
47
  # This function moves the following offset from the provided date
44
48
  # if there are no messages with a date greater than the provided offset
45
49
  # the offset will be moved to the end
@@ -52,3 +56,12 @@ class KafkaAdminClient(ConnectionManager, ABC):
52
56
  target_datetime: datetime,
53
57
  ) -> None:
54
58
  pass
59
+
60
+ @abstractmethod
61
+ def increase_topic_partitions_and_set_offset_of_related_consumer_groups_to_the_beginning_of_the_new_ones(
62
+ self,
63
+ *,
64
+ topic: str,
65
+ new_number_of_partitions: int,
66
+ ) -> None:
67
+ pass