buz 2.15.10rc5__tar.gz → 2.15.11__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.
- {buz-2.15.10rc5 → buz-2.15.11}/PKG-INFO +2 -2
- {buz-2.15.10rc5 → buz-2.15.11}/pyproject.toml +2 -2
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/base_buz_aiokafka_async_consumer.py +7 -5
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/kafka_event_async_subscriber_executor.py +20 -3
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/kafka_event_sync_subscriber_executor.py +20 -5
- buz-2.15.11/src/buz/event/infrastructure/buz_kafka/models/kafka_delivery_context.py +10 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/kombu_consumer.py +10 -2
- buz-2.15.11/src/buz/event/infrastructure/kombu/models/kombu_delivery_context.py +7 -0
- buz-2.15.11/src/buz/event/infrastructure/models/delivery_context.py +6 -0
- buz-2.15.11/src/buz/event/infrastructure/models/execution_context.py +8 -0
- buz-2.15.11/src/buz/event/middleware/async_consume_middleware.py +21 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/async_consume_middleware_chain_resolver.py +16 -5
- buz-2.15.11/src/buz/event/middleware/base_async_consume_middleware.py +37 -0
- buz-2.15.11/src/buz/event/middleware/base_consume_middleware.py +22 -0
- buz-2.15.11/src/buz/event/middleware/consume_middleware.py +16 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/consume_middleware_chain_resolver.py +13 -4
- buz-2.15.11/src/buz/event/sync/models/sync_delivery_context.py +7 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/sync/sync_event_bus.py +10 -2
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/kafka_poll_record.py +1 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/aiokafka/rebalance/kafka_callback_rebalancer.py +3 -1
- buz-2.15.11/src/buz/py.typed +0 -0
- buz-2.15.11/src/buz/queue/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/queue/in_memory/in_memory_multiqueue_repository.py +10 -6
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/queue/multiqueue_repository.py +5 -1
- buz-2.15.10rc5/src/buz/event/middleware/async_consume_middleware.py +0 -14
- buz-2.15.10rc5/src/buz/event/middleware/base_async_consume_middleware.py +0 -20
- buz-2.15.10rc5/src/buz/event/middleware/base_consume_middleware.py +0 -19
- buz-2.15.10rc5/src/buz/event/middleware/consume_middleware.py +0 -13
- {buz-2.15.10rc5 → buz-2.15.11}/LICENSE +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/README.md +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/base_command_handler.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/command_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/command_handler.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/middleware/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/middleware/base_handle_middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/middleware/handle_middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/middleware/handle_middleware_chain_resolver.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/self_process/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/self_process/self_process_command_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/command.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/more_than_one_command_handler_related_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/base_command_handler.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/command_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/command_handler.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/middleware/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/middleware/base_handle_middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/middleware/handle_middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/middleware/handle_middleware_chain_resolver.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/self_process/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/self_process/self_process_command_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/synced_async/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/synchronous/synced_async/synced_async_command_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/async_consumer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/async_event_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/async_subscriber.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/async_worker.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/base_async_subscriber.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/base_subscriber.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/consumer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/dead_letter_queue/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/dead_letter_queue/dlq_criteria.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/dead_letter_queue/dlq_record.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/dead_letter_queue/dlq_repository.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/event.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/event_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/exceptions/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/exceptions/event_not_published_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/exceptions/event_restore_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/exceptions/subscribers_not_found_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/exceptions/term_signal_interruption_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/exceptions/worker_execution_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/async_buz_kafka_event_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/buz_aiokafka_async_consumer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/buz_aiokafka_multi_threaded_consumer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/buz_kafka_event_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/consume_strategy/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/consume_strategy/consume_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/consume_strategy/kafka_on_fail_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/consume_strategy/topic_and_subscription_group_per_subscriber_kafka_consumer_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/exceptions/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/exceptions/kafka_event_bus_config_not_valid_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/exceptions/max_consumer_retry_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/exceptions/retry_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/kafka_event_subscriber_executor.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/publish_strategy/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/publish_strategy/publish_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/buz_kafka/publish_strategy/topic_per_event_kafka_publish_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/allowed_kombu_serializer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/consume_strategy/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/consume_strategy/consume_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/consume_strategy/queue_per_subscriber_consume_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/kombu_event_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/publish_strategy/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/publish_strategy/fanout_exchange_per_event_publish_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/publish_strategy/publish_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/retry_strategy/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/retry_strategy/publish_retry_policy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/kombu/retry_strategy/simple_publish_retry_policy.py +0 -0
- {buz-2.15.10rc5/src/buz/event/infrastructure/queue → buz-2.15.11/src/buz/event/infrastructure/models}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/infrastructure/models/consuming_task.py +0 -0
- {buz-2.15.10rc5/src/buz/event/middleware/exceptions → buz-2.15.11/src/buz/event/infrastructure/queue}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/meta_base_subscriber.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/meta_subscriber.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/async_publish_middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/async_publish_middleware_chain_resolver.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/base_publish_middleware.py +0 -0
- {buz-2.15.10rc5/src/buz/event/strategies → buz-2.15.11/src/buz/event/middleware/exceptions}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/exceptions/event_already_in_progress_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/publish_middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/publish_middleware_chain_resolver.py +0 -0
- {buz-2.15.10rc5/src/buz/event/strategies/execution_strategy → buz-2.15.11/src/buz/event/strategies}/__init__.py +0 -0
- {buz-2.15.10rc5/src/buz/event/strategies/retry → buz-2.15.11/src/buz/event/strategies/execution_strategy}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/execution_strategy/async_execution_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/execution_strategy/async_self_process_execution_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/execution_strategy/cyclic_iterator_execution_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/execution_strategy/execution_strategy.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/execution_strategy/self_process_execution_strategy.py +0 -0
- {buz-2.15.10rc5/src/buz/event/transactional_outbox/outbox_record_validation → buz-2.15.11/src/buz/event/strategies/retry}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/retry/consume_retrier.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/retry/consumed_event_retry.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/retry/consumed_event_retry_repository.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/retry/max_retries_consume_retrier.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/retry/max_retries_negative_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/strategies/retry/reject_callback.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/subscriber.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/sync/__init__.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/domain/exceptions → buz-2.15.11/src/buz/event/sync/models}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/event_to_outbox_record_translator.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/fqn_to_event_mapper.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_criteria/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_criteria/deliverable_records_outbox_criteria_factory.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_criteria/outbox_criteria.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_criteria/outbox_criteria_factory.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_criteria/outbox_sorting_criteria.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_record.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_record_finder/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_record_finder/outbox_record_stream_finder.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_record_finder/polling_outbox_record_stream_finder.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_record_to_event_translator.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/domain/models → buz-2.15.11/src/buz/event/transactional_outbox/outbox_record_validation}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_record_validation/abstract_outbox_record_validator.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_size_not_allowed_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_validation_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_record_validation/outbox_record_validator.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_record_validation/size_outbox_record_validator.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/outbox_repository.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/transactional_outbox_event_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/transactional_outbox/transactional_outbox_worker.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/worker.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/handler.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/__init__.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/domain/services → buz-2.15.11/src/buz/kafka/domain/exceptions}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/exceptions/not_all_partition_assigned_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/exceptions/not_valid_kafka_message_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/exceptions/not_valid_partition_number_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/exceptions/topic_already_created_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/exceptions/topic_not_found_exception.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/infrastructure → buz-2.15.11/src/buz/kafka/domain/models}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/auto_create_topic_configuration.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/consumer_initial_offset_position.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/create_kafka_topic.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/kafka_connection_config.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/kafka_connection_credentials.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/kafka_connection_plain_text_credentials.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/kafka_connection_sasl_credentials.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/kafka_consumer_record.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/kafka_supported_compression_type.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/kafka_supported_sasl_mechanisms.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/models/kafka_supported_security_protocols.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/infrastructure/aiokafka → buz-2.15.11/src/buz/kafka/domain/services}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/services/async_kafka_producer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/services/kafka_admin_client.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/services/kafka_admin_test_client.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/domain/services/kafka_producer.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/infrastructure/aiokafka/rebalance → buz-2.15.11/src/buz/kafka/infrastructure}/__init__.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/infrastructure/aiokafka/translators → buz-2.15.11/src/buz/kafka/infrastructure/aiokafka}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/aiokafka/aiokafka_consumer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/aiokafka/aiokafka_producer.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/infrastructure/cdc → buz-2.15.11/src/buz/kafka/infrastructure/aiokafka/rebalance}/__init__.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/infrastructure/deserializers → buz-2.15.11/src/buz/kafka/infrastructure/aiokafka/translators}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/aiokafka/translators/consumer_initial_offset_position_translator.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/infrastructure/deserializers/implementations → buz-2.15.11/src/buz/kafka/infrastructure/cdc}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/cdc/cdc_message.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/cdc/cdc_payload.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/cdc/cdc_schema.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/infrastructure/interfaces → buz-2.15.11/src/buz/kafka/infrastructure/deserializers}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/deserializers/byte_deserializer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/deserializers/bytes_to_message_deserializer.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/infrastructure/kafka_python → buz-2.15.11/src/buz/kafka/infrastructure/deserializers/implementations}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/deserializers/implementations/cdc/cdc_record_bytes_to_event_deserializer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/deserializers/implementations/cdc/not_valid_cdc_message_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/deserializers/implementations/json_byte_deserializer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/deserializers/implementations/json_bytes_to_message_deserializer.py +0 -0
- {buz-2.15.10rc5/src/buz/kafka/infrastructure/kafka_python/translators → buz-2.15.11/src/buz/kafka/infrastructure/interfaces}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/interfaces/async_connection_manager.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/interfaces/connection_manager.py +0 -0
- {buz-2.15.10rc5/src/buz/queue → buz-2.15.11/src/buz/kafka/infrastructure/kafka_python}/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/kafka_python/exception/consumer_interrupted_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/kafka_python/kafka_python_admin_client.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/kafka_python/kafka_python_admin_test_client.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/kafka_python/kafka_python_producer.py +0 -0
- /buz-2.15.10rc5/src/buz/py.typed → /buz-2.15.11/src/buz/kafka/infrastructure/kafka_python/translators/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/kafka_python/translators/consumer_initial_offset_position_translator.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/serializers/byte_serializer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/serializers/implementations/cdc_record_bytes_to_event_serializer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/serializers/implementations/json_byte_serializer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/kafka/infrastructure/serializers/kafka_header_serializer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/handler_fqn_not_found_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/locator.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/message_fqn_not_found_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/pypendency/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/pypendency/container_locator.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/pypendency/container_locator_resolution_configuration.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/pypendency/handler_not_found_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/pypendency/handler_not_registered_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/sync/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/sync/handler_already_registered_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/sync/handler_not_registered_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/locator/sync/instance_locator.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/message.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/middleware/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/middleware/middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/middleware/middleware_chain_builder.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/asynchronous/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/asynchronous/base_query_handler.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/asynchronous/middleware/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/asynchronous/middleware/base_handle_middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/asynchronous/middleware/handle_middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/asynchronous/middleware/handle_middleware_chain_resolver.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/asynchronous/query_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/asynchronous/query_handler.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/asynchronous/self_process/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/asynchronous/self_process/self_process_query_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/more_than_one_query_handler_related_exception.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/query.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/query_response.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/base_query_handler.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/middleware/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/middleware/base_handle_middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/middleware/handle_middleware.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/middleware/handle_middleware_chain_resolver.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/query_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/query_handler.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/self_process/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/self_process/self_process_query_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/synced_async/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/query/synchronous/synced_async/synced_async_query_bus.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/queue/in_memory/in_memory_queue_repository.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/queue/queue_repository.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/serializer/message_to_bytes_serializer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/serializer/message_to_json_bytes_serializer.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/wrapper/__init__.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/src/buz/wrapper/async_to_sync.py +0 -0
- {buz-2.15.10rc5 → buz-2.15.11}/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.
|
|
3
|
+
Version: 2.15.11
|
|
4
4
|
Summary: Buz is a set of light, simple and extensible implementations of event, command and query buses.
|
|
5
5
|
License: MIT
|
|
6
6
|
Author: Luis Pintado Lozano
|
|
@@ -22,7 +22,7 @@ Classifier: Typing :: Typed
|
|
|
22
22
|
Provides-Extra: aiokafka
|
|
23
23
|
Provides-Extra: kombu
|
|
24
24
|
Provides-Extra: pypendency
|
|
25
|
-
Requires-Dist: aiohttp (>=3.
|
|
25
|
+
Requires-Dist: aiohttp (>=3.12.15,<4.0.0)
|
|
26
26
|
Requires-Dist: aiokafka[lz4] (==0.12.0) ; extra == "aiokafka"
|
|
27
27
|
Requires-Dist: asgiref (>=3.8.1,<4.0.0) ; extra == "aiokafka"
|
|
28
28
|
Requires-Dist: cachetools (>=5.5.0,<6.0.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "buz"
|
|
3
|
-
version = "2.15.
|
|
3
|
+
version = "2.15.11"
|
|
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>"]
|
|
@@ -30,7 +30,7 @@ dacite = "^1.8.1"
|
|
|
30
30
|
aiokafka = {version = "==0.12.0", extras = ["lz4"], optional = true}
|
|
31
31
|
asgiref = {version = "^3.8.1", optional = true}
|
|
32
32
|
cachetools = "^5.5.0"
|
|
33
|
-
aiohttp = "^3.
|
|
33
|
+
aiohttp = "^3.12.15"
|
|
34
34
|
|
|
35
35
|
[tool.poetry.dev-dependencies]
|
|
36
36
|
black = "^23.3"
|
|
@@ -114,8 +114,8 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
|
|
|
114
114
|
async def configure_http_check_server(self, health_check_port: int) -> web.TCPSite:
|
|
115
115
|
self._logger.info(f"Starting health check server on port {health_check_port}")
|
|
116
116
|
app = web.Application()
|
|
117
|
-
app.router.add_get("/health",
|
|
118
|
-
app.router.add_get("/ready",
|
|
117
|
+
app.router.add_get("/health", self.__health_check)
|
|
118
|
+
app.router.add_get("/ready", self.__is_ready)
|
|
119
119
|
|
|
120
120
|
runner = web.AppRunner(app)
|
|
121
121
|
await runner.setup()
|
|
@@ -351,6 +351,8 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
|
|
|
351
351
|
self._logger.info(
|
|
352
352
|
f"rebalancing in progress, assigning partitions {topics_partitions} to consumer {consumer.get_consumer_group()}"
|
|
353
353
|
)
|
|
354
|
+
for topic_partition in topics_partitions:
|
|
355
|
+
self.__queue_per_consumer_mapper[consumer].create_key(topic_partition)
|
|
354
356
|
|
|
355
357
|
async def __on_partition_revoked(self, consumer: AIOKafkaConsumer, topics_partitions: set[TopicPartition]) -> None:
|
|
356
358
|
self._logger.info(
|
|
@@ -362,7 +364,7 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
|
|
|
362
364
|
consumer_fqn=consumer.get_consumer_group(),
|
|
363
365
|
):
|
|
364
366
|
for topic_partition in topics_partitions:
|
|
365
|
-
self.__queue_per_consumer_mapper[consumer].
|
|
367
|
+
self.__queue_per_consumer_mapper[consumer].remove_key(topic_partition)
|
|
366
368
|
|
|
367
369
|
self.decrease_number_of_rebalancing_in_progress()
|
|
368
370
|
|
|
@@ -382,7 +384,7 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
|
|
|
382
384
|
async def __manage_kafka_consumers_stopping(self) -> None:
|
|
383
385
|
await gather(*[kafka_consumer.stop() for kafka_consumer in self.__queue_per_consumer_mapper.keys()])
|
|
384
386
|
|
|
385
|
-
async def __health_check(self) -> web.Response:
|
|
387
|
+
async def __health_check(self, request: web.Request) -> web.Response:
|
|
386
388
|
health_information = {
|
|
387
389
|
"subscribers": [subscriber.fqn() for subscriber in self.__subscribers],
|
|
388
390
|
"number_of_subscribers": len(self.__subscribers),
|
|
@@ -391,7 +393,7 @@ class BaseBuzAIOKafkaAsyncConsumer(AsyncConsumer):
|
|
|
391
393
|
|
|
392
394
|
return web.Response(text=json.dumps(health_information), content_type="application/json")
|
|
393
395
|
|
|
394
|
-
async def __is_ready(self) -> web.Response:
|
|
396
|
+
async def __is_ready(self, request: web.Request) -> web.Response:
|
|
395
397
|
is_ready = self.__is_worked_initialized
|
|
396
398
|
status_code = 200 if is_ready else 503
|
|
397
399
|
|
|
@@ -8,6 +8,7 @@ from buz.event.infrastructure.buz_kafka.consume_strategy.kafka_on_fail_strategy
|
|
|
8
8
|
from buz.event.infrastructure.buz_kafka.exceptions.max_consumer_retry_exception import MaxConsumerRetryException
|
|
9
9
|
from buz.event.infrastructure.buz_kafka.exceptions.retry_exception import ConsumerRetryException
|
|
10
10
|
from buz.event.infrastructure.buz_kafka.kafka_event_subscriber_executor import KafkaEventSubscriberExecutor
|
|
11
|
+
from buz.event.infrastructure.models.execution_context import ExecutionContext
|
|
11
12
|
from buz.event.middleware.async_consume_middleware import AsyncConsumeMiddleware
|
|
12
13
|
from buz.event.middleware.async_consume_middleware_chain_resolver import AsyncConsumeMiddlewareChainResolver
|
|
13
14
|
from buz.event.strategies.retry.consume_retrier import ConsumeRetrier
|
|
@@ -15,6 +16,7 @@ from buz.event.strategies.retry.reject_callback import RejectCallback
|
|
|
15
16
|
from buz.kafka.domain.exceptions.not_valid_kafka_message_exception import NotValidKafkaMessageException
|
|
16
17
|
from buz.kafka.domain.models.kafka_consumer_record import KafkaConsumerRecord
|
|
17
18
|
from buz.kafka.domain.models.kafka_poll_record import KafkaPollRecord
|
|
19
|
+
from buz.event.infrastructure.buz_kafka.models.kafka_delivery_context import KafkaDeliveryContext
|
|
18
20
|
from buz.kafka.infrastructure.deserializers.byte_deserializer import ByteDeserializer
|
|
19
21
|
from buz.kafka.infrastructure.serializers.kafka_header_serializer import KafkaHeaderSerializer
|
|
20
22
|
|
|
@@ -67,18 +69,33 @@ class KafkaEventAsyncSubscriberExecutor(KafkaEventSubscriberExecutor):
|
|
|
67
69
|
value=deserialized_value,
|
|
68
70
|
headers=self.__header_deserializer.deserialize(kafka_poll_record.headers),
|
|
69
71
|
),
|
|
72
|
+
ExecutionContext(
|
|
73
|
+
delivery_context=KafkaDeliveryContext(
|
|
74
|
+
topic=kafka_poll_record.topic,
|
|
75
|
+
consumer_group=self.__subscriber.fqn(),
|
|
76
|
+
partition=kafka_poll_record.partition,
|
|
77
|
+
timestamp=kafka_poll_record.timestamp,
|
|
78
|
+
)
|
|
79
|
+
),
|
|
70
80
|
)
|
|
71
81
|
except NotValidKafkaMessageException:
|
|
72
82
|
self.__logger.error(
|
|
73
83
|
f'The message "{str(kafka_poll_record.value)}" is not valid, it will be consumed but not processed'
|
|
74
84
|
)
|
|
75
85
|
|
|
76
|
-
async def __consumption_callback(
|
|
86
|
+
async def __consumption_callback(
|
|
87
|
+
self, subscriber: AsyncSubscriber, message: KafkaConsumerRecord[Event], execution_context: ExecutionContext
|
|
88
|
+
) -> None:
|
|
77
89
|
await self.__consume_middleware_chain_resolver.resolve(
|
|
78
|
-
event=message.value,
|
|
90
|
+
event=message.value,
|
|
91
|
+
subscriber=subscriber,
|
|
92
|
+
execution_context=execution_context,
|
|
93
|
+
consume=self.__perform_consume,
|
|
79
94
|
)
|
|
80
95
|
|
|
81
|
-
async def __perform_consume(
|
|
96
|
+
async def __perform_consume(
|
|
97
|
+
self, event: Event, subscriber: AsyncSubscriber, execution_context: ExecutionContext
|
|
98
|
+
) -> None:
|
|
82
99
|
number_of_executions = 0
|
|
83
100
|
should_retry = True
|
|
84
101
|
|
|
@@ -7,6 +7,8 @@ from buz.event.infrastructure.buz_kafka.consume_strategy.kafka_on_fail_strategy
|
|
|
7
7
|
from buz.event.infrastructure.buz_kafka.exceptions.max_consumer_retry_exception import MaxConsumerRetryException
|
|
8
8
|
from buz.event.infrastructure.buz_kafka.exceptions.retry_exception import ConsumerRetryException
|
|
9
9
|
from buz.event.infrastructure.buz_kafka.kafka_event_subscriber_executor import KafkaEventSubscriberExecutor
|
|
10
|
+
from buz.event.infrastructure.buz_kafka.models.kafka_delivery_context import KafkaDeliveryContext
|
|
11
|
+
from buz.event.infrastructure.models.execution_context import ExecutionContext
|
|
10
12
|
from buz.event.middleware.consume_middleware import ConsumeMiddleware
|
|
11
13
|
from buz.event.middleware.consume_middleware_chain_resolver import ConsumeMiddlewareChainResolver
|
|
12
14
|
from buz.event.strategies.retry.consume_retrier import ConsumeRetrier
|
|
@@ -64,11 +66,19 @@ class KafkaEventSyncSubscriberExecutor(KafkaEventSubscriberExecutor):
|
|
|
64
66
|
await get_running_loop().run_in_executor(
|
|
65
67
|
None,
|
|
66
68
|
lambda: self.__execution_callback(
|
|
67
|
-
self.__subscriber,
|
|
68
|
-
KafkaConsumerRecord(
|
|
69
|
+
subscriber=self.__subscriber,
|
|
70
|
+
message=KafkaConsumerRecord(
|
|
69
71
|
value=deserialized_value,
|
|
70
72
|
headers=self.__header_deserializer.deserialize(kafka_poll_record.headers),
|
|
71
73
|
),
|
|
74
|
+
execution_context=ExecutionContext(
|
|
75
|
+
delivery_context=KafkaDeliveryContext(
|
|
76
|
+
topic=kafka_poll_record.topic,
|
|
77
|
+
consumer_group=self.__subscriber.fqn(),
|
|
78
|
+
partition=kafka_poll_record.partition,
|
|
79
|
+
timestamp=kafka_poll_record.timestamp,
|
|
80
|
+
)
|
|
81
|
+
),
|
|
72
82
|
),
|
|
73
83
|
)
|
|
74
84
|
|
|
@@ -77,12 +87,17 @@ class KafkaEventSyncSubscriberExecutor(KafkaEventSubscriberExecutor):
|
|
|
77
87
|
f'The message "{str(kafka_poll_record.value)}" is not valid, it will be consumed but not processed'
|
|
78
88
|
)
|
|
79
89
|
|
|
80
|
-
def __execution_callback(
|
|
90
|
+
def __execution_callback(
|
|
91
|
+
self, subscriber: Subscriber, message: KafkaConsumerRecord[Event], execution_context: ExecutionContext
|
|
92
|
+
) -> None:
|
|
81
93
|
self.__consume_middleware_chain_resolver.resolve(
|
|
82
|
-
event=message.value,
|
|
94
|
+
event=message.value,
|
|
95
|
+
subscriber=subscriber,
|
|
96
|
+
execution_context=execution_context,
|
|
97
|
+
consume=self.__perform_consume,
|
|
83
98
|
)
|
|
84
99
|
|
|
85
|
-
def __perform_consume(self, event: Event, subscriber: Subscriber) -> None:
|
|
100
|
+
def __perform_consume(self, event: Event, subscriber: Subscriber, execution_context: ExecutionContext) -> None:
|
|
86
101
|
number_of_executions = 0
|
|
87
102
|
should_retry = True
|
|
88
103
|
|
|
@@ -2,6 +2,8 @@ import asyncio
|
|
|
2
2
|
from logging import Logger
|
|
3
3
|
from typing import Optional, Callable, cast
|
|
4
4
|
|
|
5
|
+
from buz.event.infrastructure.kombu.models.kombu_delivery_context import KombuDeliveryContext
|
|
6
|
+
from buz.event.infrastructure.models.execution_context import ExecutionContext
|
|
5
7
|
from kombu import Connection, Queue, Consumer as MessageConsumer, Message
|
|
6
8
|
from kombu.mixins import ConsumerMixin
|
|
7
9
|
from kombu.transport.pyamqp import Channel
|
|
@@ -110,12 +112,18 @@ class KombuConsumer(ConsumerMixin, Consumer):
|
|
|
110
112
|
# The problem here is that the chain resolver works with syncsubscribers, an asyncsubscriber would require of a async function,
|
|
111
113
|
# but we are using run-until-complete to run the async function, so we are not really using the async function, we are just running it as a sync function, so we can cast the asyncsubscriber to a subscriber
|
|
112
114
|
subscriber = cast(Subscriber, meta_subscriber)
|
|
113
|
-
|
|
115
|
+
execution_context = ExecutionContext(delivery_context=KombuDeliveryContext())
|
|
116
|
+
self.__consume_middleware_chain_resolver.resolve(
|
|
117
|
+
event=event,
|
|
118
|
+
subscriber=subscriber,
|
|
119
|
+
execution_context=execution_context,
|
|
120
|
+
consume=self.__perform_consume,
|
|
121
|
+
)
|
|
114
122
|
message.ack()
|
|
115
123
|
except Exception as exc:
|
|
116
124
|
self.__on_consume_exception(message, event, meta_subscribers, exc)
|
|
117
125
|
|
|
118
|
-
def __perform_consume(self, event: Event, subscriber: MetaSubscriber) -> None:
|
|
126
|
+
def __perform_consume(self, event: Event, subscriber: MetaSubscriber, execution_context: ExecutionContext) -> None:
|
|
119
127
|
if isinstance(subscriber, AsyncSubscriber):
|
|
120
128
|
self.__get_or_create_event_loop().run_until_complete(subscriber.consume(event))
|
|
121
129
|
return
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
2
|
+
from typing import Awaitable, Callable
|
|
3
|
+
|
|
4
|
+
from buz.event import Event
|
|
5
|
+
from buz.event.async_subscriber import AsyncSubscriber
|
|
6
|
+
from buz.event.infrastructure.models.execution_context import ExecutionContext
|
|
7
|
+
from buz.middleware import Middleware
|
|
8
|
+
|
|
9
|
+
AsyncConsumeCallable = Callable[[Event, AsyncSubscriber, ExecutionContext], Awaitable[None]]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class AsyncConsumeMiddleware(Middleware):
|
|
13
|
+
@abstractmethod
|
|
14
|
+
async def on_consume(
|
|
15
|
+
self,
|
|
16
|
+
event: Event,
|
|
17
|
+
subscriber: AsyncSubscriber,
|
|
18
|
+
consume: AsyncConsumeCallable,
|
|
19
|
+
execution_context: ExecutionContext,
|
|
20
|
+
) -> None:
|
|
21
|
+
pass
|
{buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/async_consume_middleware_chain_resolver.py
RENAMED
|
@@ -2,6 +2,7 @@ from typing import Sequence
|
|
|
2
2
|
from buz.event import Event
|
|
3
3
|
from buz.event.async_subscriber import AsyncSubscriber
|
|
4
4
|
|
|
5
|
+
from buz.event.infrastructure.models.execution_context import ExecutionContext
|
|
5
6
|
from buz.event.middleware.async_consume_middleware import AsyncConsumeCallable, AsyncConsumeMiddleware
|
|
6
7
|
from buz.middleware import MiddlewareChainBuilder
|
|
7
8
|
|
|
@@ -14,16 +15,26 @@ class AsyncConsumeMiddlewareChainResolver:
|
|
|
14
15
|
self.__middlewares = middlewares
|
|
15
16
|
self.__middleware_chain_builder: MiddlewareChainBuilder[
|
|
16
17
|
AsyncConsumeCallable, AsyncConsumeMiddleware
|
|
17
|
-
] = MiddlewareChainBuilder(
|
|
18
|
+
] = MiddlewareChainBuilder(self.__middlewares)
|
|
18
19
|
|
|
19
|
-
async def resolve(
|
|
20
|
+
async def resolve(
|
|
21
|
+
self,
|
|
22
|
+
event: Event,
|
|
23
|
+
subscriber: AsyncSubscriber,
|
|
24
|
+
consume: AsyncConsumeCallable,
|
|
25
|
+
execution_context: ExecutionContext,
|
|
26
|
+
) -> None:
|
|
20
27
|
chain_callable: AsyncConsumeCallable = self.__middleware_chain_builder.get_chain_callable(
|
|
21
28
|
consume, self.__get_middleware_callable
|
|
22
29
|
)
|
|
23
30
|
|
|
24
|
-
await chain_callable(event, subscriber)
|
|
31
|
+
await chain_callable(event, subscriber, execution_context)
|
|
25
32
|
|
|
26
33
|
def __get_middleware_callable(
|
|
27
|
-
self,
|
|
34
|
+
self,
|
|
35
|
+
middleware: AsyncConsumeMiddleware,
|
|
36
|
+
consume_callable: AsyncConsumeCallable,
|
|
28
37
|
) -> AsyncConsumeCallable:
|
|
29
|
-
return lambda event, subscriber: middleware.on_consume(
|
|
38
|
+
return lambda event, subscriber, execution_context: middleware.on_consume(
|
|
39
|
+
event, subscriber, consume_callable, execution_context
|
|
40
|
+
)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
2
|
+
|
|
3
|
+
from buz.event import Event
|
|
4
|
+
from buz.event.async_subscriber import AsyncSubscriber
|
|
5
|
+
from buz.event.infrastructure.models.execution_context import ExecutionContext
|
|
6
|
+
from buz.event.middleware.async_consume_middleware import AsyncConsumeMiddleware, AsyncConsumeCallable
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class BaseAsyncConsumeMiddleware(AsyncConsumeMiddleware):
|
|
10
|
+
async def on_consume(
|
|
11
|
+
self,
|
|
12
|
+
event: Event,
|
|
13
|
+
subscriber: AsyncSubscriber,
|
|
14
|
+
consume: AsyncConsumeCallable,
|
|
15
|
+
execution_context: ExecutionContext,
|
|
16
|
+
) -> None:
|
|
17
|
+
await self._before_on_consume(event, subscriber, execution_context)
|
|
18
|
+
await consume(event, subscriber, execution_context)
|
|
19
|
+
await self._after_on_consume(event, subscriber, execution_context)
|
|
20
|
+
|
|
21
|
+
@abstractmethod
|
|
22
|
+
async def _before_on_consume(
|
|
23
|
+
self,
|
|
24
|
+
event: Event,
|
|
25
|
+
subscriber: AsyncSubscriber,
|
|
26
|
+
execution_context: ExecutionContext,
|
|
27
|
+
) -> None:
|
|
28
|
+
pass
|
|
29
|
+
|
|
30
|
+
@abstractmethod
|
|
31
|
+
async def _after_on_consume(
|
|
32
|
+
self,
|
|
33
|
+
event: Event,
|
|
34
|
+
subscriber: AsyncSubscriber,
|
|
35
|
+
execution_context: ExecutionContext,
|
|
36
|
+
) -> None:
|
|
37
|
+
pass
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
2
|
+
|
|
3
|
+
from buz.event import Event, Subscriber
|
|
4
|
+
from buz.event.infrastructure.models.execution_context import ExecutionContext
|
|
5
|
+
from buz.event.middleware import ConsumeMiddleware, ConsumeCallable
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class BaseConsumeMiddleware(ConsumeMiddleware):
|
|
9
|
+
def on_consume(
|
|
10
|
+
self, event: Event, subscriber: Subscriber, consume: ConsumeCallable, execution_context: ExecutionContext
|
|
11
|
+
) -> None:
|
|
12
|
+
self._before_on_consume(event, subscriber, execution_context)
|
|
13
|
+
consume(event, subscriber, execution_context)
|
|
14
|
+
self._after_on_consume(event, subscriber, execution_context)
|
|
15
|
+
|
|
16
|
+
@abstractmethod
|
|
17
|
+
def _before_on_consume(self, event: Event, subscriber: Subscriber, execution_context: ExecutionContext) -> None:
|
|
18
|
+
pass
|
|
19
|
+
|
|
20
|
+
@abstractmethod
|
|
21
|
+
def _after_on_consume(self, event: Event, subscriber: Subscriber, execution_context: ExecutionContext) -> None:
|
|
22
|
+
pass
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
2
|
+
from typing import Callable
|
|
3
|
+
|
|
4
|
+
from buz.event import Event, Subscriber
|
|
5
|
+
from buz.event.infrastructure.models.execution_context import ExecutionContext
|
|
6
|
+
from buz.middleware import Middleware
|
|
7
|
+
|
|
8
|
+
ConsumeCallable = Callable[[Event, Subscriber, ExecutionContext], None]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ConsumeMiddleware(Middleware):
|
|
12
|
+
@abstractmethod
|
|
13
|
+
def on_consume(
|
|
14
|
+
self, event: Event, subscriber: Subscriber, consume: ConsumeCallable, execution_context: ExecutionContext
|
|
15
|
+
) -> None:
|
|
16
|
+
pass
|
{buz-2.15.10rc5 → buz-2.15.11}/src/buz/event/middleware/consume_middleware_chain_resolver.py
RENAMED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from typing import Sequence
|
|
2
2
|
from buz.event import Event, Subscriber
|
|
3
|
+
from buz.event.infrastructure.models.execution_context import ExecutionContext
|
|
3
4
|
from buz.event.middleware import ConsumeMiddleware, ConsumeCallable
|
|
4
5
|
from buz.middleware import MiddlewareChainBuilder
|
|
5
6
|
|
|
@@ -9,15 +10,23 @@ class ConsumeMiddlewareChainResolver:
|
|
|
9
10
|
self.__middlewares = middlewares
|
|
10
11
|
self.__middleware_chain_builder: MiddlewareChainBuilder[
|
|
11
12
|
ConsumeCallable, ConsumeMiddleware
|
|
12
|
-
] = MiddlewareChainBuilder(
|
|
13
|
+
] = MiddlewareChainBuilder(self.__middlewares)
|
|
13
14
|
|
|
14
|
-
def resolve(
|
|
15
|
+
def resolve(
|
|
16
|
+
self,
|
|
17
|
+
event: Event,
|
|
18
|
+
subscriber: Subscriber,
|
|
19
|
+
consume: ConsumeCallable,
|
|
20
|
+
execution_context: ExecutionContext,
|
|
21
|
+
) -> None:
|
|
15
22
|
chain_callable: ConsumeCallable = self.__middleware_chain_builder.get_chain_callable(
|
|
16
23
|
consume, self.__get_middleware_callable
|
|
17
24
|
)
|
|
18
|
-
chain_callable(event, subscriber)
|
|
25
|
+
chain_callable(event, subscriber, execution_context)
|
|
19
26
|
|
|
20
27
|
def __get_middleware_callable(
|
|
21
28
|
self, middleware: ConsumeMiddleware, consume_callable: ConsumeCallable
|
|
22
29
|
) -> ConsumeCallable:
|
|
23
|
-
return lambda event, subscriber: middleware.on_consume(
|
|
30
|
+
return lambda event, subscriber, execution_context: middleware.on_consume(
|
|
31
|
+
event, subscriber, consume_callable, execution_context
|
|
32
|
+
)
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
from typing import Optional, Iterable
|
|
2
2
|
|
|
3
3
|
from buz.event import Event, EventBus, Subscriber
|
|
4
|
+
from buz.event.infrastructure.models.execution_context import ExecutionContext
|
|
4
5
|
from buz.event.middleware import (
|
|
5
6
|
PublishMiddleware,
|
|
6
7
|
ConsumeMiddleware,
|
|
7
8
|
PublishMiddlewareChainResolver,
|
|
8
9
|
ConsumeMiddlewareChainResolver,
|
|
9
10
|
)
|
|
11
|
+
from buz.event.sync.models.sync_delivery_context import SyncDeliveryContext
|
|
10
12
|
from buz.locator import Locator
|
|
11
13
|
|
|
12
14
|
|
|
@@ -26,10 +28,16 @@ class SyncEventBus(EventBus):
|
|
|
26
28
|
|
|
27
29
|
def __perform_publish(self, event: Event) -> None:
|
|
28
30
|
subscribers = self.__locator.get(event)
|
|
31
|
+
execution_context = ExecutionContext(delivery_context=SyncDeliveryContext())
|
|
29
32
|
for subscriber in subscribers:
|
|
30
|
-
self.__consume_middleware_chain_resolver.resolve(
|
|
33
|
+
self.__consume_middleware_chain_resolver.resolve(
|
|
34
|
+
event=event,
|
|
35
|
+
subscriber=subscriber,
|
|
36
|
+
execution_context=execution_context,
|
|
37
|
+
consume=self.__perform_consume,
|
|
38
|
+
)
|
|
31
39
|
|
|
32
|
-
def __perform_consume(self, event: Event, subscriber: Subscriber) -> None:
|
|
40
|
+
def __perform_consume(self, event: Event, subscriber: Subscriber, execution_context: ExecutionContext) -> None:
|
|
33
41
|
subscriber.consume(event)
|
|
34
42
|
|
|
35
43
|
def bulk_publish(self, events: Iterable[Event]) -> None:
|
|
@@ -47,4 +47,6 @@ class KafkaCallbackRebalancer(ConsumerRebalanceListener):
|
|
|
47
47
|
|
|
48
48
|
if self.__rebalancing_start_time is not None:
|
|
49
49
|
elapsed_time_ms = int((datetime.now() - self.__rebalancing_start_time).total_seconds() * 1000)
|
|
50
|
-
self.__logger.info(
|
|
50
|
+
self.__logger.info(
|
|
51
|
+
f"Rebalancing for topic {set(v.topic for v in assigned)} ended, elapsed time: {elapsed_time_ms} ms"
|
|
52
|
+
)
|
|
File without changes
|
|
File without changes
|
|
@@ -12,18 +12,22 @@ class InMemoryMultiqueueRepository(MultiqueueRepository[K, R]):
|
|
|
12
12
|
self.__queues = cast(dict[K, Queue[R]], {})
|
|
13
13
|
self.__last_key_index = 0
|
|
14
14
|
|
|
15
|
-
def
|
|
16
|
-
self.__queues
|
|
15
|
+
def create_key(self, key: K) -> None:
|
|
16
|
+
self.__queues[key] = Queue[R]()
|
|
17
|
+
|
|
18
|
+
def remove_key(self, key: K) -> None:
|
|
19
|
+
if key not in self.__queues:
|
|
20
|
+
return
|
|
21
|
+
|
|
22
|
+
self.__queues.pop(key)
|
|
17
23
|
|
|
18
24
|
def push(self, key: K, record: R) -> None:
|
|
19
25
|
if key not in self.__queues:
|
|
20
|
-
|
|
26
|
+
return
|
|
27
|
+
|
|
21
28
|
queue = self.__queues[key]
|
|
22
29
|
queue.put(record)
|
|
23
30
|
|
|
24
|
-
def __add_key(self, key: K) -> None:
|
|
25
|
-
self.__queues[key] = Queue[R]()
|
|
26
|
-
|
|
27
31
|
def pop(self) -> Optional[R]:
|
|
28
32
|
if not self.__queues:
|
|
29
33
|
return None
|
|
@@ -7,7 +7,11 @@ R = TypeVar("R")
|
|
|
7
7
|
|
|
8
8
|
class MultiqueueRepository(ABC, Generic[K, R]):
|
|
9
9
|
@abstractmethod
|
|
10
|
-
def
|
|
10
|
+
def create_key(self, key: K) -> None:
|
|
11
|
+
pass
|
|
12
|
+
|
|
13
|
+
@abstractmethod
|
|
14
|
+
def remove_key(self, key: K) -> None:
|
|
11
15
|
pass
|
|
12
16
|
|
|
13
17
|
@abstractmethod
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
|
-
from typing import Awaitable, Callable
|
|
3
|
-
|
|
4
|
-
from buz.event import Event
|
|
5
|
-
from buz.event.async_subscriber import AsyncSubscriber
|
|
6
|
-
from buz.middleware import Middleware
|
|
7
|
-
|
|
8
|
-
AsyncConsumeCallable = Callable[[Event, AsyncSubscriber], Awaitable[None]]
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class AsyncConsumeMiddleware(Middleware):
|
|
12
|
-
@abstractmethod
|
|
13
|
-
async def on_consume(self, event: Event, subscriber: AsyncSubscriber, consume: AsyncConsumeCallable) -> None:
|
|
14
|
-
pass
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
|
-
|
|
3
|
-
from buz.event import Event
|
|
4
|
-
from buz.event.async_subscriber import AsyncSubscriber
|
|
5
|
-
from buz.event.middleware.async_consume_middleware import AsyncConsumeMiddleware, AsyncConsumeCallable
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class BaseAsyncConsumeMiddleware(AsyncConsumeMiddleware):
|
|
9
|
-
async def on_consume(self, event: Event, subscriber: AsyncSubscriber, consume: AsyncConsumeCallable) -> None:
|
|
10
|
-
await self._before_on_consume(event, subscriber)
|
|
11
|
-
await consume(event, subscriber)
|
|
12
|
-
await self._after_on_consume(event, subscriber)
|
|
13
|
-
|
|
14
|
-
@abstractmethod
|
|
15
|
-
async def _before_on_consume(self, event: Event, subscriber: AsyncSubscriber) -> None:
|
|
16
|
-
pass
|
|
17
|
-
|
|
18
|
-
@abstractmethod
|
|
19
|
-
async def _after_on_consume(self, event: Event, subscriber: AsyncSubscriber) -> None:
|
|
20
|
-
pass
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
|
-
|
|
3
|
-
from buz.event import Event, Subscriber
|
|
4
|
-
from buz.event.middleware import ConsumeMiddleware, ConsumeCallable
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class BaseConsumeMiddleware(ConsumeMiddleware):
|
|
8
|
-
def on_consume(self, event: Event, subscriber: Subscriber, consume: ConsumeCallable) -> None:
|
|
9
|
-
self._before_on_consume(event, subscriber)
|
|
10
|
-
consume(event, subscriber)
|
|
11
|
-
self._after_on_consume(event, subscriber)
|
|
12
|
-
|
|
13
|
-
@abstractmethod
|
|
14
|
-
def _before_on_consume(self, event: Event, subscriber: Subscriber) -> None:
|
|
15
|
-
pass
|
|
16
|
-
|
|
17
|
-
@abstractmethod
|
|
18
|
-
def _after_on_consume(self, event: Event, subscriber: Subscriber) -> None:
|
|
19
|
-
pass
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
from abc import abstractmethod
|
|
2
|
-
from typing import Callable
|
|
3
|
-
|
|
4
|
-
from buz.event import Event, Subscriber
|
|
5
|
-
from buz.middleware import Middleware
|
|
6
|
-
|
|
7
|
-
ConsumeCallable = Callable[[Event, Subscriber], None]
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class ConsumeMiddleware(Middleware):
|
|
11
|
-
@abstractmethod
|
|
12
|
-
def on_consume(self, event: Event, subscriber: Subscriber, consume: ConsumeCallable) -> None:
|
|
13
|
-
pass
|
|
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
|
{buz-2.15.10rc5 → buz-2.15.11}/src/buz/command/asynchronous/middleware/base_handle_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|