buz 2.22.0__tar.gz → 2.23.0__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 (273) hide show
  1. {buz-2.22.0 → buz-2.23.0}/PKG-INFO +1 -1
  2. {buz-2.22.0 → buz-2.23.0}/pyproject.toml +1 -1
  3. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/command_handler.py +7 -0
  4. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/buz_kafka_event_bus.py +5 -1
  5. buz-2.23.0/src/buz/kafka/infrastructure/serializers/implementations/cdc_partition_key_serializer.py +19 -0
  6. buz-2.23.0/src/buz/kafka/infrastructure/serializers/partitiion_key_generator.py +9 -0
  7. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/query_handler.py +7 -0
  8. buz-2.23.0/src/buz/wrapper/async_unsafe.py +67 -0
  9. buz-2.23.0/src/buz/wrapper/synchronous_only_operation_exception.py +3 -0
  10. {buz-2.22.0 → buz-2.23.0}/LICENSE +0 -0
  11. {buz-2.22.0 → buz-2.23.0}/README.md +0 -0
  12. {buz-2.22.0 → buz-2.23.0}/src/buz/__init__.py +0 -0
  13. {buz-2.22.0 → buz-2.23.0}/src/buz/command/__init__.py +0 -0
  14. {buz-2.22.0 → buz-2.23.0}/src/buz/command/asynchronous/__init__.py +0 -0
  15. {buz-2.22.0 → buz-2.23.0}/src/buz/command/asynchronous/base_command_handler.py +0 -0
  16. {buz-2.22.0 → buz-2.23.0}/src/buz/command/asynchronous/command_bus.py +0 -0
  17. {buz-2.22.0 → buz-2.23.0}/src/buz/command/asynchronous/command_handler.py +0 -0
  18. {buz-2.22.0 → buz-2.23.0}/src/buz/command/asynchronous/middleware/__init__.py +0 -0
  19. {buz-2.22.0 → buz-2.23.0}/src/buz/command/asynchronous/middleware/base_handle_middleware.py +0 -0
  20. {buz-2.22.0 → buz-2.23.0}/src/buz/command/asynchronous/middleware/handle_middleware.py +0 -0
  21. {buz-2.22.0 → buz-2.23.0}/src/buz/command/asynchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  22. {buz-2.22.0 → buz-2.23.0}/src/buz/command/asynchronous/self_process/__init__.py +0 -0
  23. {buz-2.22.0 → buz-2.23.0}/src/buz/command/asynchronous/self_process/self_process_command_bus.py +0 -0
  24. {buz-2.22.0 → buz-2.23.0}/src/buz/command/command.py +0 -0
  25. {buz-2.22.0 → buz-2.23.0}/src/buz/command/more_than_one_command_handler_related_exception.py +0 -0
  26. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/__init__.py +0 -0
  27. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/base_command_handler.py +0 -0
  28. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/command_bus.py +0 -0
  29. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/middleware/__init__.py +0 -0
  30. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/middleware/base_handle_middleware.py +0 -0
  31. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/middleware/handle_middleware.py +0 -0
  32. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  33. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/self_process/__init__.py +0 -0
  34. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/self_process/self_process_command_bus.py +0 -0
  35. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/synced_async/__init__.py +0 -0
  36. {buz-2.22.0 → buz-2.23.0}/src/buz/command/synchronous/synced_async/synced_async_command_bus.py +0 -0
  37. {buz-2.22.0 → buz-2.23.0}/src/buz/event/__init__.py +0 -0
  38. {buz-2.22.0 → buz-2.23.0}/src/buz/event/async_consumer.py +0 -0
  39. {buz-2.22.0 → buz-2.23.0}/src/buz/event/async_event_bus.py +0 -0
  40. {buz-2.22.0 → buz-2.23.0}/src/buz/event/async_subscriber.py +0 -0
  41. {buz-2.22.0 → buz-2.23.0}/src/buz/event/async_worker.py +0 -0
  42. {buz-2.22.0 → buz-2.23.0}/src/buz/event/base_async_subscriber.py +0 -0
  43. {buz-2.22.0 → buz-2.23.0}/src/buz/event/base_subscriber.py +0 -0
  44. {buz-2.22.0 → buz-2.23.0}/src/buz/event/consumer.py +0 -0
  45. {buz-2.22.0 → buz-2.23.0}/src/buz/event/dead_letter_queue/__init__.py +0 -0
  46. {buz-2.22.0 → buz-2.23.0}/src/buz/event/dead_letter_queue/dlq_criteria.py +0 -0
  47. {buz-2.22.0 → buz-2.23.0}/src/buz/event/dead_letter_queue/dlq_record.py +0 -0
  48. {buz-2.22.0 → buz-2.23.0}/src/buz/event/dead_letter_queue/dlq_repository.py +0 -0
  49. {buz-2.22.0 → buz-2.23.0}/src/buz/event/event.py +0 -0
  50. {buz-2.22.0 → buz-2.23.0}/src/buz/event/event_bus.py +0 -0
  51. {buz-2.22.0 → buz-2.23.0}/src/buz/event/exceptions/__init__.py +0 -0
  52. {buz-2.22.0 → buz-2.23.0}/src/buz/event/exceptions/event_not_published_exception.py +0 -0
  53. {buz-2.22.0 → buz-2.23.0}/src/buz/event/exceptions/event_restore_exception.py +0 -0
  54. {buz-2.22.0 → buz-2.23.0}/src/buz/event/exceptions/subscribers_not_found_exception.py +0 -0
  55. {buz-2.22.0 → buz-2.23.0}/src/buz/event/exceptions/term_signal_interruption_exception.py +0 -0
  56. {buz-2.22.0 → buz-2.23.0}/src/buz/event/exceptions/worker_execution_exception.py +0 -0
  57. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/__init__.py +0 -0
  58. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/__init__.py +0 -0
  59. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/async_buz_kafka_event_bus.py +0 -0
  60. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/base_buz_aiokafka_async_consumer.py +0 -0
  61. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/buz_aiokafka_async_consumer.py +0 -0
  62. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/buz_aiokafka_multi_threaded_consumer.py +0 -0
  63. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/consume_strategy/__init__.py +0 -0
  64. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/consume_strategy/consume_strategy.py +0 -0
  65. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/consume_strategy/kafka_on_fail_strategy.py +0 -0
  66. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/consume_strategy/topic_and_subscription_group_per_subscriber_kafka_consumer_strategy.py +0 -0
  67. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/exceptions/__init__.py +0 -0
  68. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/exceptions/kafka_event_bus_config_not_valid_exception.py +0 -0
  69. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/exceptions/max_consumer_retry_exception.py +0 -0
  70. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/exceptions/retry_exception.py +0 -0
  71. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/kafka_event_async_subscriber_executor.py +0 -0
  72. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/kafka_event_subscriber_executor.py +0 -0
  73. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/kafka_event_sync_subscriber_executor.py +0 -0
  74. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/models/cdc_process_context.py +0 -0
  75. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/models/kafka_delivery_context.py +0 -0
  76. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/publish_strategy/__init__.py +0 -0
  77. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/publish_strategy/publish_strategy.py +0 -0
  78. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/buz_kafka/publish_strategy/topic_per_event_kafka_publish_strategy.py +0 -0
  79. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/__init__.py +0 -0
  80. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/allowed_kombu_serializer.py +0 -0
  81. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/consume_strategy/__init__.py +0 -0
  82. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/consume_strategy/consume_strategy.py +0 -0
  83. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/consume_strategy/queue_per_subscriber_consume_strategy.py +0 -0
  84. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/kombu_consumer.py +0 -0
  85. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/kombu_event_bus.py +0 -0
  86. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/models/kombu_delivery_context.py +0 -0
  87. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/publish_strategy/__init__.py +0 -0
  88. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/publish_strategy/fanout_exchange_per_event_publish_strategy.py +0 -0
  89. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/publish_strategy/publish_strategy.py +0 -0
  90. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/retry_strategy/__init__.py +0 -0
  91. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/retry_strategy/publish_retry_policy.py +0 -0
  92. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/kombu/retry_strategy/simple_publish_retry_policy.py +0 -0
  93. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/models/__init__.py +0 -0
  94. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/models/consuming_task.py +0 -0
  95. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/models/delivery_context.py +0 -0
  96. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/models/execution_context.py +0 -0
  97. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/models/process_context.py +0 -0
  98. {buz-2.22.0 → buz-2.23.0}/src/buz/event/infrastructure/queue/__init__.py +0 -0
  99. {buz-2.22.0 → buz-2.23.0}/src/buz/event/meta_base_subscriber.py +0 -0
  100. {buz-2.22.0 → buz-2.23.0}/src/buz/event/meta_subscriber.py +0 -0
  101. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/__init__.py +0 -0
  102. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/async_consume_middleware.py +0 -0
  103. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/async_consume_middleware_chain_resolver.py +0 -0
  104. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/async_publish_middleware.py +0 -0
  105. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/async_publish_middleware_chain_resolver.py +0 -0
  106. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/base_async_consume_middleware.py +0 -0
  107. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/base_consume_middleware.py +0 -0
  108. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/base_publish_middleware.py +0 -0
  109. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/consume_middleware.py +0 -0
  110. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/consume_middleware_chain_resolver.py +0 -0
  111. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/exceptions/__init__.py +0 -0
  112. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/exceptions/event_already_in_progress_exception.py +0 -0
  113. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/publish_middleware.py +0 -0
  114. {buz-2.22.0 → buz-2.23.0}/src/buz/event/middleware/publish_middleware_chain_resolver.py +0 -0
  115. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/__init__.py +0 -0
  116. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/execution_strategy/__init__.py +0 -0
  117. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/execution_strategy/async_execution_strategy.py +0 -0
  118. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/execution_strategy/async_self_process_execution_strategy.py +0 -0
  119. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/execution_strategy/cyclic_iterator_execution_strategy.py +0 -0
  120. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/execution_strategy/execution_strategy.py +0 -0
  121. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/execution_strategy/self_process_execution_strategy.py +0 -0
  122. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/retry/__init__.py +0 -0
  123. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/retry/consume_retrier.py +0 -0
  124. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/retry/consumed_event_retry.py +0 -0
  125. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/retry/consumed_event_retry_repository.py +0 -0
  126. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/retry/max_retries_consume_retrier.py +0 -0
  127. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/retry/max_retries_negative_exception.py +0 -0
  128. {buz-2.22.0 → buz-2.23.0}/src/buz/event/strategies/retry/reject_callback.py +0 -0
  129. {buz-2.22.0 → buz-2.23.0}/src/buz/event/subscriber.py +0 -0
  130. {buz-2.22.0 → buz-2.23.0}/src/buz/event/sync/__init__.py +0 -0
  131. {buz-2.22.0 → buz-2.23.0}/src/buz/event/sync/models/__init__.py +0 -0
  132. {buz-2.22.0 → buz-2.23.0}/src/buz/event/sync/models/sync_delivery_context.py +0 -0
  133. {buz-2.22.0 → buz-2.23.0}/src/buz/event/sync/sync_event_bus.py +0 -0
  134. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/__init__.py +0 -0
  135. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/event_to_outbox_record_translator.py +0 -0
  136. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/fqn_to_event_mapper.py +0 -0
  137. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_criteria/__init__.py +0 -0
  138. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_criteria/deliverable_records_outbox_criteria_factory.py +0 -0
  139. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_criteria/outbox_criteria.py +0 -0
  140. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_criteria/outbox_criteria_factory.py +0 -0
  141. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_criteria/outbox_sorting_criteria.py +0 -0
  142. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record.py +0 -0
  143. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record_finder/__init__.py +0 -0
  144. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record_finder/outbox_record_stream_finder.py +0 -0
  145. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record_finder/polling_outbox_record_stream_finder.py +0 -0
  146. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record_to_event_translator.py +0 -0
  147. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record_validation/__init__.py +0 -0
  148. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record_validation/abstract_outbox_record_validator.py +0 -0
  149. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_size_not_allowed_exception.py +0 -0
  150. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_validation_exception.py +0 -0
  151. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_validator.py +0 -0
  152. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_record_validation/size_outbox_record_validator.py +0 -0
  153. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/outbox_repository.py +0 -0
  154. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/transactional_outbox_event_bus.py +0 -0
  155. {buz-2.22.0 → buz-2.23.0}/src/buz/event/transactional_outbox/transactional_outbox_worker.py +0 -0
  156. {buz-2.22.0 → buz-2.23.0}/src/buz/event/worker.py +0 -0
  157. {buz-2.22.0 → buz-2.23.0}/src/buz/handler.py +0 -0
  158. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/__init__.py +0 -0
  159. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/exceptions/__init__.py +0 -0
  160. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/exceptions/consumer_group_not_found_exception.py +0 -0
  161. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/exceptions/not_all_partition_assigned_exception.py +0 -0
  162. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/exceptions/not_valid_kafka_message_exception.py +0 -0
  163. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/exceptions/not_valid_partition_number_exception.py +0 -0
  164. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/exceptions/topic_already_created_exception.py +0 -0
  165. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/exceptions/topic_not_found_exception.py +0 -0
  166. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/__init__.py +0 -0
  167. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/auto_create_topic_configuration.py +0 -0
  168. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/consumer_initial_offset_position.py +0 -0
  169. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/create_kafka_topic.py +0 -0
  170. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/kafka_connection_config.py +0 -0
  171. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/kafka_connection_credentials.py +0 -0
  172. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/kafka_connection_plain_text_credentials.py +0 -0
  173. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/kafka_connection_sasl_credentials.py +0 -0
  174. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/kafka_consumer_record.py +0 -0
  175. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/kafka_poll_record.py +0 -0
  176. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/kafka_supported_compression_type.py +0 -0
  177. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/kafka_supported_sasl_mechanisms.py +0 -0
  178. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/models/kafka_supported_security_protocols.py +0 -0
  179. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/services/__init__.py +0 -0
  180. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/services/async_kafka_producer.py +0 -0
  181. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/services/kafka_admin_client.py +0 -0
  182. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/services/kafka_admin_test_client.py +0 -0
  183. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/domain/services/kafka_producer.py +0 -0
  184. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/__init__.py +0 -0
  185. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/aiokafka/__init__.py +0 -0
  186. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/aiokafka/aiokafka_consumer.py +0 -0
  187. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/aiokafka/aiokafka_producer.py +0 -0
  188. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/aiokafka/rebalance/__init__.py +0 -0
  189. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/aiokafka/rebalance/kafka_callback_rebalancer.py +0 -0
  190. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/aiokafka/translators/__init__.py +0 -0
  191. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/aiokafka/translators/consumer_initial_offset_position_translator.py +0 -0
  192. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/cdc/__init__.py +0 -0
  193. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/cdc/cdc_message.py +0 -0
  194. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/cdc/cdc_payload.py +0 -0
  195. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/cdc/cdc_schema.py +0 -0
  196. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/deserializers/__init__.py +0 -0
  197. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/deserializers/byte_deserializer.py +0 -0
  198. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/deserializers/bytes_to_message_deserializer.py +0 -0
  199. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/deserializers/implementations/__init__.py +0 -0
  200. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/deserializers/implementations/cdc/cannot_decode_cdc_message_exception.py +0 -0
  201. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/deserializers/implementations/cdc/cannot_restore_event_from_cdc_payload_exception.py +0 -0
  202. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/deserializers/implementations/cdc/cdc_record_bytes_to_cdc_payload_deserializer.py +0 -0
  203. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/deserializers/implementations/cdc/cdc_record_bytes_to_event_deserializer.py +0 -0
  204. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/deserializers/implementations/json_byte_deserializer.py +0 -0
  205. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/deserializers/implementations/json_bytes_to_message_deserializer.py +0 -0
  206. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/interfaces/__init__.py +0 -0
  207. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/interfaces/async_connection_manager.py +0 -0
  208. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/interfaces/connection_manager.py +0 -0
  209. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/kafka_python/__init__.py +0 -0
  210. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/kafka_python/exception/consumer_interrupted_exception.py +0 -0
  211. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/kafka_python/kafka_python_admin_client.py +0 -0
  212. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/kafka_python/kafka_python_admin_test_client.py +0 -0
  213. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/kafka_python/kafka_python_producer.py +0 -0
  214. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/kafka_python/translators/__init__.py +0 -0
  215. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/kafka_python/translators/consumer_initial_offset_position_translator.py +0 -0
  216. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/serializers/byte_serializer.py +0 -0
  217. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/serializers/implementations/cdc_record_bytes_to_event_serializer.py +0 -0
  218. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/serializers/implementations/json_byte_serializer.py +0 -0
  219. {buz-2.22.0 → buz-2.23.0}/src/buz/kafka/infrastructure/serializers/kafka_header_serializer.py +0 -0
  220. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/__init__.py +0 -0
  221. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/handler_fqn_not_found_exception.py +0 -0
  222. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/locator.py +0 -0
  223. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/message_fqn_not_found_exception.py +0 -0
  224. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/pypendency/__init__.py +0 -0
  225. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/pypendency/container_locator.py +0 -0
  226. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/pypendency/container_locator_resolution_configuration.py +0 -0
  227. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/pypendency/handler_not_found_exception.py +0 -0
  228. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/pypendency/handler_not_registered_exception.py +0 -0
  229. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/sync/__init__.py +0 -0
  230. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/sync/handler_already_registered_exception.py +0 -0
  231. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/sync/handler_not_registered_exception.py +0 -0
  232. {buz-2.22.0 → buz-2.23.0}/src/buz/locator/sync/instance_locator.py +0 -0
  233. {buz-2.22.0 → buz-2.23.0}/src/buz/message.py +0 -0
  234. {buz-2.22.0 → buz-2.23.0}/src/buz/metadata.py +0 -0
  235. {buz-2.22.0 → buz-2.23.0}/src/buz/middleware/__init__.py +0 -0
  236. {buz-2.22.0 → buz-2.23.0}/src/buz/middleware/middleware.py +0 -0
  237. {buz-2.22.0 → buz-2.23.0}/src/buz/middleware/middleware_chain_builder.py +0 -0
  238. {buz-2.22.0 → buz-2.23.0}/src/buz/py.typed +0 -0
  239. {buz-2.22.0 → buz-2.23.0}/src/buz/query/__init__.py +0 -0
  240. {buz-2.22.0 → buz-2.23.0}/src/buz/query/asynchronous/__init__.py +0 -0
  241. {buz-2.22.0 → buz-2.23.0}/src/buz/query/asynchronous/base_query_handler.py +0 -0
  242. {buz-2.22.0 → buz-2.23.0}/src/buz/query/asynchronous/middleware/__init__.py +0 -0
  243. {buz-2.22.0 → buz-2.23.0}/src/buz/query/asynchronous/middleware/base_handle_middleware.py +0 -0
  244. {buz-2.22.0 → buz-2.23.0}/src/buz/query/asynchronous/middleware/handle_middleware.py +0 -0
  245. {buz-2.22.0 → buz-2.23.0}/src/buz/query/asynchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  246. {buz-2.22.0 → buz-2.23.0}/src/buz/query/asynchronous/query_bus.py +0 -0
  247. {buz-2.22.0 → buz-2.23.0}/src/buz/query/asynchronous/query_handler.py +0 -0
  248. {buz-2.22.0 → buz-2.23.0}/src/buz/query/asynchronous/self_process/__init__.py +0 -0
  249. {buz-2.22.0 → buz-2.23.0}/src/buz/query/asynchronous/self_process/self_process_query_bus.py +0 -0
  250. {buz-2.22.0 → buz-2.23.0}/src/buz/query/more_than_one_query_handler_related_exception.py +0 -0
  251. {buz-2.22.0 → buz-2.23.0}/src/buz/query/query.py +0 -0
  252. {buz-2.22.0 → buz-2.23.0}/src/buz/query/query_response.py +0 -0
  253. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/__init__.py +0 -0
  254. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/base_query_handler.py +0 -0
  255. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/middleware/__init__.py +0 -0
  256. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/middleware/base_handle_middleware.py +0 -0
  257. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/middleware/handle_middleware.py +0 -0
  258. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/middleware/handle_middleware_chain_resolver.py +0 -0
  259. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/query_bus.py +0 -0
  260. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/self_process/__init__.py +0 -0
  261. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/self_process/self_process_query_bus.py +0 -0
  262. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/synced_async/__init__.py +0 -0
  263. {buz-2.22.0 → buz-2.23.0}/src/buz/query/synchronous/synced_async/synced_async_query_bus.py +0 -0
  264. {buz-2.22.0 → buz-2.23.0}/src/buz/queue/__init__.py +0 -0
  265. {buz-2.22.0 → buz-2.23.0}/src/buz/queue/in_memory/in_memory_multiqueue_repository.py +0 -0
  266. {buz-2.22.0 → buz-2.23.0}/src/buz/queue/in_memory/in_memory_queue_repository.py +0 -0
  267. {buz-2.22.0 → buz-2.23.0}/src/buz/queue/multiqueue_repository.py +0 -0
  268. {buz-2.22.0 → buz-2.23.0}/src/buz/queue/queue_repository.py +0 -0
  269. {buz-2.22.0 → buz-2.23.0}/src/buz/serializer/message_to_bytes_serializer.py +0 -0
  270. {buz-2.22.0 → buz-2.23.0}/src/buz/serializer/message_to_json_bytes_serializer.py +0 -0
  271. {buz-2.22.0 → buz-2.23.0}/src/buz/wrapper/__init__.py +0 -0
  272. {buz-2.22.0 → buz-2.23.0}/src/buz/wrapper/async_to_sync.py +0 -0
  273. {buz-2.22.0 → buz-2.23.0}/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.22.0
3
+ Version: 2.23.0
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.22.0"
3
+ version = "2.23.0"
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 = [
@@ -3,11 +3,18 @@ from typing import Generic, Type, TypeVar
3
3
 
4
4
  from buz import Handler
5
5
  from buz.command import Command
6
+ from buz.wrapper.async_unsafe import async_unsafe
6
7
 
7
8
  TCommand = TypeVar("TCommand", bound=Command)
8
9
 
9
10
 
10
11
  class CommandHandler(Generic[TCommand], Handler[TCommand], ABC):
12
+ def __new__(cls, *args, **kwargs):
13
+ instance = super().__new__(cls)
14
+ original_handle = instance.handle
15
+ instance.handle = async_unsafe()(original_handle)
16
+ return instance
17
+
11
18
  @classmethod
12
19
  @abstractmethod
13
20
  def handles(cls) -> Type[TCommand]:
@@ -16,6 +16,8 @@ from buz.kafka.domain.models.auto_create_topic_configuration import AutoCreateTo
16
16
  from buz.kafka.domain.models.create_kafka_topic import CreateKafkaTopic
17
17
  from buz.kafka.domain.services.kafka_admin_client import KafkaAdminClient
18
18
  from buz.kafka.domain.services.kafka_producer import KafkaProducer
19
+ from buz.kafka.infrastructure.serializers.implementations.cdc_partition_key_serializer import CDCPartitionKeySerializer
20
+ from buz.kafka.infrastructure.serializers.partitiion_key_generator import PartitionKeySerializer
19
21
 
20
22
 
21
23
  class BuzKafkaEventBus(EventBus):
@@ -28,6 +30,7 @@ class BuzKafkaEventBus(EventBus):
28
30
  kafka_admin_client: Optional[KafkaAdminClient] = None,
29
31
  publish_middlewares: Optional[list[PublishMiddleware]] = None,
30
32
  auto_create_topic_configuration: Optional[AutoCreateTopicConfiguration] = None,
33
+ partition_key_generator: Optional[PartitionKeySerializer] = None,
31
34
  ):
32
35
  self.__publish_middleware_chain_resolver = PublishMiddlewareChainResolver(publish_middlewares or [])
33
36
  self.__publish_strategy = publish_strategy
@@ -36,6 +39,7 @@ class BuzKafkaEventBus(EventBus):
36
39
  self.__kafka_admin_client = kafka_admin_client
37
40
  self.__auto_create_topic_configuration = auto_create_topic_configuration
38
41
  self.__logger = logger
42
+ self.__partition_key_generator: PartitionKeySerializer = partition_key_generator or CDCPartitionKeySerializer()
39
43
  self.__check_kafka_admin_client_is_needed()
40
44
 
41
45
  def __check_kafka_admin_client_is_needed(self) -> None:
@@ -74,7 +78,7 @@ class BuzKafkaEventBus(EventBus):
74
78
  message=event,
75
79
  headers=headers,
76
80
  topic=topic,
77
- partition_key=event.partition_key(),
81
+ partition_key=self.__partition_key_generator.generate_key(event),
78
82
  )
79
83
  except Exception as exc:
80
84
  raise EventNotPublishedException(event) from exc
@@ -0,0 +1,19 @@
1
+ from __future__ import annotations
2
+
3
+ from buz.event.event import Event
4
+ from buz.kafka.infrastructure.serializers.implementations.json_byte_serializer import JSONByteSerializer
5
+ from buz.kafka.infrastructure.serializers.partitiion_key_generator import PartitionKeySerializer
6
+
7
+ # This is a static string because the order matters and we can not trust that json encoder libraries are deterministic
8
+ PAYLOAD_CDC_SCHEMA = r"""{"schema":{"type":"string","optional":true},"payload":"[partition_key]"}"""
9
+
10
+
11
+ class CDCPartitionKeySerializer(PartitionKeySerializer):
12
+ def __init__(self) -> None:
13
+ self.__json_serializer = JSONByteSerializer()
14
+
15
+ def __generate_payload_schema(self, partition_key: str) -> str:
16
+ return PAYLOAD_CDC_SCHEMA.replace("[partition_key]", partition_key)
17
+
18
+ def generate_key(self, event: Event) -> str:
19
+ return self.__generate_payload_schema(event.partition_key())
@@ -0,0 +1,9 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+ from buz.event.event import Event
4
+
5
+
6
+ class PartitionKeySerializer(ABC):
7
+ @abstractmethod
8
+ def generate_key(self, event: Event) -> str:
9
+ pass
@@ -3,12 +3,19 @@ from typing import Generic, Type, TypeVar
3
3
 
4
4
  from buz import Handler
5
5
  from buz.query import Query, QueryResponse
6
+ from buz.wrapper.async_unsafe import async_unsafe
6
7
 
7
8
  TQuery = TypeVar("TQuery", bound=Query)
8
9
  TQueryResponse = TypeVar("TQueryResponse", bound=QueryResponse)
9
10
 
10
11
 
11
12
  class QueryHandler(Generic[TQuery, TQueryResponse], Handler[TQuery], ABC):
13
+ def __new__(cls, *args, **kwargs):
14
+ instance = super().__new__(cls)
15
+ original_handle = instance.handle
16
+ instance.handle = async_unsafe()(original_handle)
17
+ return instance
18
+
12
19
  @classmethod
13
20
  @abstractmethod
14
21
  def handles(cls) -> Type[TQuery]:
@@ -0,0 +1,67 @@
1
+ import logging
2
+ import os
3
+ from asyncio import get_running_loop
4
+ from functools import wraps
5
+ from typing import Callable, Any
6
+
7
+ from buz.wrapper.synchronous_only_operation_exception import SynchronousOnlyOperationException
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ def async_unsafe() -> Callable[[Callable], Callable]:
13
+ """
14
+ Copy-paste from Django source code. If BUZ_SYNC_HANDLERS_FAIL_ON_ASYNC env var is True then an exception is raised to
15
+ prevent event loop from being blocked. If the env var is False, a warning is logged.
16
+ """
17
+
18
+ def decorator(func: Callable) -> Callable:
19
+ @wraps(func)
20
+ def inner(*args: Any, **kwargs: Any) -> Any:
21
+ try:
22
+ get_running_loop()
23
+ except RuntimeError:
24
+ pass
25
+ else:
26
+ if __get_bool_env("BUZ_SYNC_HANDLERS_FAIL_ON_ASYNC") is True:
27
+ raise SynchronousOnlyOperationException()
28
+
29
+ logger.warning(
30
+ f"You should not call this from an async context - use a thread or sync_to_async. Class {__get_class_name(func, args)}"
31
+ )
32
+
33
+ return func(*args, **kwargs)
34
+
35
+ return inner
36
+
37
+ return decorator
38
+
39
+
40
+ def __get_bool_env(var_name: str) -> bool:
41
+ """
42
+ >>> get_bool_env("MY_BOOL_VAR")
43
+ False
44
+ >>> os.environ["MY_BOOL_VAR"] = "1"
45
+ >>> get_bool_env("MY_BOOL_VAR")
46
+ True
47
+ >>> os.environ["MY_BOOL_VAR"] = "true"
48
+ >>> get_bool_env("MY_BOOL_VAR")
49
+ True
50
+ >>> os.environ["MY_BOOL_VAR"] = "True"
51
+ >>> get_bool_env("MY_BOOL_VAR")
52
+ True
53
+ >>> os.environ["MY_BOOL_VAR"] = "0"
54
+ >>> get_bool_env("MY_BOOL_VAR")
55
+ False
56
+ >>> os.environ["MY_BOOL_VAR"] = "false"
57
+ >>> get_bool_env("MY_BOOL_VAR")
58
+ False
59
+ """
60
+ return os.environ.get(var_name, "0").lower() in ("true", "1")
61
+
62
+
63
+ def __get_class_name(func: Callable, args: tuple) -> str:
64
+ if hasattr(func, "__self__"):
65
+ return func.__self__.__class__.__name__
66
+
67
+ return args[0].__class__.__name__ if len(args) > 0 else "Unknown"
@@ -0,0 +1,3 @@
1
+ class SynchronousOnlyOperationException(Exception):
2
+ def __init__(self):
3
+ super().__init__("You cannot call this from an async context - use a thread or sync_to_async.")
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