omnibase_infra 0.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +261 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +138 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +123 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +101 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +156 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +92 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +102 -0
- omnibase_infra/errors/error_infra.py +608 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +112 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +86 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +743 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1658 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +184 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +765 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +725 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +75 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +787 -0
- omnibase_infra/handlers/handler_db.py +1039 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +1154 -0
- omnibase_infra/handlers/handler_http.py +920 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +748 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +422 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +42 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +337 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +277 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +915 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +747 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +99 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +655 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2465 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +136 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +311 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +147 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +37 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +80 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +185 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +590 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +59 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +179 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +175 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +40 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +280 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +120 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +48 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +208 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +99 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +172 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +475 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +609 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +525 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +392 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +742 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +225 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +109 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +194 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +682 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +416 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +214 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +32 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +76 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1137 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +435 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +99 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +296 -0
- omnibase_infra/runtime/binding_config_resolver.py +2706 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/contract_handler_discovery.py +582 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +42 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/handler_contract_source.py +669 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2029 -0
- omnibase_infra/runtime/handler_registry.py +321 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +378 -0
- omnibase_infra/runtime/mixins/__init__.py +17 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +757 -0
- omnibase_infra/runtime/models/__init__.py +192 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +228 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +624 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1102 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +27 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +444 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1502 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2110 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1573 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +1805 -0
- omnibase_infra/runtime/service_runtime_host_process.py +2260 -0
- omnibase_infra/runtime/util_container_wiring.py +1123 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +566 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/services/__init__.py +68 -0
- omnibase_infra/services/corpus_capture.py +678 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +897 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +682 -0
- omnibase_infra/services/service_timeout_scanner.py +390 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +21 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +89 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1486 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +1710 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +410 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.1.dist-info/METADATA +197 -0
- omnibase_infra-0.2.1.dist-info/RECORD +675 -0
- omnibase_infra-0.2.1.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.1.dist-info/entry_points.txt +4 -0
- omnibase_infra-0.2.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler Wiring Module - Registers concrete handlers with the handler registry.
|
|
4
|
+
|
|
5
|
+
This module provides functions to wire up concrete handler implementations
|
|
6
|
+
with the RegistryProtocolBinding and RegistryEventBusBinding. It serves as
|
|
7
|
+
the bridge between handler implementations and the registry system.
|
|
8
|
+
|
|
9
|
+
The wiring module is responsible for:
|
|
10
|
+
- Registering default handlers for standard protocol types
|
|
11
|
+
- Registering handlers based on contract configuration
|
|
12
|
+
- Validating that requested handler types are known and supported
|
|
13
|
+
- Providing a summary of registered handlers for debugging
|
|
14
|
+
|
|
15
|
+
Event Bus Support:
|
|
16
|
+
This module registers EventBusInmemory as the default event bus. For production
|
|
17
|
+
deployments requiring EventBusKafka, the event bus is selected at kernel bootstrap
|
|
18
|
+
time based on:
|
|
19
|
+
- KAFKA_BOOTSTRAP_SERVERS environment variable (if set, uses EventBusKafka)
|
|
20
|
+
- config.event_bus.type field in runtime_config.yaml
|
|
21
|
+
|
|
22
|
+
See kernel.py for event bus selection logic during runtime bootstrap.
|
|
23
|
+
|
|
24
|
+
Design Principles:
|
|
25
|
+
- Explicit wiring: All handler registrations are explicit, not auto-discovered
|
|
26
|
+
- Contract-driven: Supports wiring from contract configuration dicts
|
|
27
|
+
- Validation: Unknown handler types raise clear errors
|
|
28
|
+
- Idempotent: Re-wiring the same handler is safe (overwrites previous)
|
|
29
|
+
|
|
30
|
+
Adding New Handlers:
|
|
31
|
+
To add a new handler to the system, follow these steps:
|
|
32
|
+
|
|
33
|
+
1. Create a handler class implementing the ProtocolHandler protocol:
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
from omnibase_spi.protocols.handlers.protocol_handler import ProtocolHandler
|
|
37
|
+
|
|
38
|
+
class MyCustomHandler:
|
|
39
|
+
'''Handler for custom protocol operations.'''
|
|
40
|
+
|
|
41
|
+
async def initialize(self, config: dict[str, object]) -> None:
|
|
42
|
+
'''Initialize handler with configuration.'''
|
|
43
|
+
self._config = config
|
|
44
|
+
|
|
45
|
+
async def execute(self, envelope: dict[str, object]) -> dict[str, object]:
|
|
46
|
+
'''Execute operation from envelope and return response.'''
|
|
47
|
+
# Handle the envelope and return response dict
|
|
48
|
+
return {"success": True, "data": ...}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
2. Add the handler to _KNOWN_HANDLERS dict with a type constant:
|
|
52
|
+
|
|
53
|
+
In handler_registry.py, add a constant:
|
|
54
|
+
HANDLER_TYPE_CUSTOM = "custom"
|
|
55
|
+
|
|
56
|
+
In this module, add to _KNOWN_HANDLERS:
|
|
57
|
+
HANDLER_TYPE_CUSTOM: (MyCustomHandler, "Custom protocol handler"),
|
|
58
|
+
|
|
59
|
+
3. For runtime registration without modifying _KNOWN_HANDLERS, use
|
|
60
|
+
wire_custom_handler():
|
|
61
|
+
|
|
62
|
+
```python
|
|
63
|
+
from omnibase_infra.runtime.util_wiring import wire_custom_handler
|
|
64
|
+
|
|
65
|
+
wire_custom_handler("custom", MyCustomHandler)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Integration with RuntimeHostProcess:
|
|
69
|
+
The wiring module and RuntimeHostProcess work together in a two-phase
|
|
70
|
+
registration and instantiation flow:
|
|
71
|
+
|
|
72
|
+
Phase 1 - Class Registration (wiring module):
|
|
73
|
+
When wire_default_handlers() is called, handler CLASSES are registered
|
|
74
|
+
with the singleton RegistryProtocolBinding. At this point, no handler
|
|
75
|
+
instances exist - only the class types are stored in the registry.
|
|
76
|
+
|
|
77
|
+
Phase 2 - Instance Creation (RuntimeHostProcess):
|
|
78
|
+
After wiring, RuntimeHostProcess._populate_handlers_from_registry():
|
|
79
|
+
1. Gets each handler CLASS from the singleton registry
|
|
80
|
+
2. Instantiates the handler class: handler_instance = handler_cls()
|
|
81
|
+
3. Calls initialize(config) on the instance with runtime configuration
|
|
82
|
+
4. Stores the instance in self._handlers for envelope routing
|
|
83
|
+
|
|
84
|
+
This two-phase approach allows:
|
|
85
|
+
- Centralized handler class registration via wiring
|
|
86
|
+
- Lazy instantiation controlled by RuntimeHostProcess
|
|
87
|
+
- Per-process configuration passed to handler.initialize()
|
|
88
|
+
- Test injection of mock handlers before start() is called
|
|
89
|
+
|
|
90
|
+
Example Usage:
|
|
91
|
+
```python
|
|
92
|
+
from omnibase_infra.runtime.util_wiring import (
|
|
93
|
+
wire_default_handlers,
|
|
94
|
+
wire_handlers_from_contract,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# Wire all default handlers
|
|
98
|
+
summary = wire_default_handlers()
|
|
99
|
+
print(f"Registered handlers: {summary['handlers']}")
|
|
100
|
+
print(f"Registered event buses: {summary['event_buses']}")
|
|
101
|
+
|
|
102
|
+
# Wire handlers from contract config
|
|
103
|
+
contract_config = {
|
|
104
|
+
"handlers": [
|
|
105
|
+
{"type": "http", "enabled": True},
|
|
106
|
+
{"type": "db", "enabled": True},
|
|
107
|
+
],
|
|
108
|
+
"event_bus": {"kind": "inmemory"},
|
|
109
|
+
}
|
|
110
|
+
wire_handlers_from_contract(contract_config)
|
|
111
|
+
```
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
from __future__ import annotations
|
|
115
|
+
|
|
116
|
+
import logging
|
|
117
|
+
from typing import TYPE_CHECKING
|
|
118
|
+
|
|
119
|
+
from omnibase_core.types import JsonType
|
|
120
|
+
from omnibase_infra.errors import ModelInfraErrorContext, ProtocolConfigurationError
|
|
121
|
+
from omnibase_infra.event_bus.event_bus_inmemory import EventBusInmemory
|
|
122
|
+
from omnibase_infra.handlers.handler_consul import HandlerConsul
|
|
123
|
+
from omnibase_infra.handlers.handler_db import HandlerDb
|
|
124
|
+
from omnibase_infra.handlers.handler_http import HandlerHttpRest
|
|
125
|
+
from omnibase_infra.handlers.handler_vault import HandlerVault
|
|
126
|
+
from omnibase_infra.runtime.handler_registry import (
|
|
127
|
+
EVENT_BUS_INMEMORY,
|
|
128
|
+
HANDLER_TYPE_CONSUL,
|
|
129
|
+
HANDLER_TYPE_DATABASE,
|
|
130
|
+
HANDLER_TYPE_HTTP,
|
|
131
|
+
HANDLER_TYPE_VAULT,
|
|
132
|
+
RegistryEventBusBinding,
|
|
133
|
+
RegistryProtocolBinding,
|
|
134
|
+
get_event_bus_registry,
|
|
135
|
+
get_handler_registry,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
if TYPE_CHECKING:
|
|
139
|
+
from omnibase_core.protocol.protocol_event_bus import ProtocolEventBus
|
|
140
|
+
from omnibase_spi.protocols.handlers.protocol_handler import ProtocolHandler
|
|
141
|
+
|
|
142
|
+
logger = logging.getLogger(__name__)
|
|
143
|
+
|
|
144
|
+
# Known handler types that can be wired.
|
|
145
|
+
#
|
|
146
|
+
# Pattern: handler_type_constant -> (handler_class, description)
|
|
147
|
+
#
|
|
148
|
+
# - handler_type_constant: String constant defined in handler_registry.py
|
|
149
|
+
# (e.g., HANDLER_TYPE_HTTP = "http"). This is the key used to look up
|
|
150
|
+
# and route envelopes to the correct handler.
|
|
151
|
+
#
|
|
152
|
+
# - handler_class: The class implementing ProtocolHandler protocol.
|
|
153
|
+
# Must have async initialize(config) and async execute(envelope) methods.
|
|
154
|
+
# The wiring module registers the CLASS; RuntimeHostProcess instantiates it.
|
|
155
|
+
#
|
|
156
|
+
# - description: Human-readable description for logging and debugging.
|
|
157
|
+
# Appears in log messages when handlers are registered.
|
|
158
|
+
#
|
|
159
|
+
# To add a new handler:
|
|
160
|
+
# 1. Define HANDLER_TYPE_XXX constant in handler_registry.py
|
|
161
|
+
# 2. Import the handler class at the top of this module
|
|
162
|
+
# 3. Add entry below: HANDLER_TYPE_XXX: (XxxHandler, "Description"),
|
|
163
|
+
#
|
|
164
|
+
# NOTE: HandlerHttpRest and HandlerDb use legacy execute(envelope: dict) signature.
|
|
165
|
+
# They will be migrated to ProtocolHandler.execute(request, operation_config) in future.
|
|
166
|
+
# Type ignore comments suppress MyPy errors during MVP phase.
|
|
167
|
+
_KNOWN_HANDLERS: dict[str, tuple[type[ProtocolHandler], str]] = {
|
|
168
|
+
# NOTE: Handlers implement ProtocolHandler structurally but concrete types differ from protocol.
|
|
169
|
+
HANDLER_TYPE_CONSUL: (HandlerConsul, "HashiCorp Consul service discovery handler"), # type: ignore[dict-item] # NOTE: structural subtyping
|
|
170
|
+
HANDLER_TYPE_DATABASE: (HandlerDb, "PostgreSQL database handler"), # type: ignore[dict-item] # NOTE: structural subtyping
|
|
171
|
+
HANDLER_TYPE_HTTP: (HandlerHttpRest, "HTTP REST protocol handler"), # type: ignore[dict-item] # NOTE: structural subtyping
|
|
172
|
+
HANDLER_TYPE_VAULT: (HandlerVault, "HashiCorp Vault secret management handler"), # type: ignore[dict-item] # NOTE: structural subtyping
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
# Known event bus kinds that can be wired via this module.
|
|
176
|
+
# Maps bus kind constant to (bus_class, description)
|
|
177
|
+
#
|
|
178
|
+
# Note: EventBusKafka is NOT in this registry. It is selected at kernel bootstrap
|
|
179
|
+
# time via environment variable (KAFKA_BOOTSTRAP_SERVERS) or runtime config
|
|
180
|
+
# (event_bus.type = "kafka"). This registry handles only contract-based wiring
|
|
181
|
+
# while production event bus selection is handled by kernel.py.
|
|
182
|
+
_KNOWN_EVENT_BUSES: dict[str, tuple[type[ProtocolEventBus], str]] = {
|
|
183
|
+
EVENT_BUS_INMEMORY: (EventBusInmemory, "In-memory event bus for local/testing"),
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def wire_default_handlers() -> dict[str, list[str]]:
|
|
188
|
+
"""Register all default handlers and event buses with singleton registries.
|
|
189
|
+
|
|
190
|
+
This function registers the standard set of handlers and event buses
|
|
191
|
+
that are available for use by the RuntimeHostProcess. It is the primary
|
|
192
|
+
way to initialize the handler ecosystem.
|
|
193
|
+
|
|
194
|
+
Registered Handlers:
|
|
195
|
+
- CONSUL: HandlerConsul for HashiCorp Consul service discovery
|
|
196
|
+
- DB: HandlerDb for PostgreSQL database operations
|
|
197
|
+
- HTTP: HandlerHttpRest for HTTP/REST protocol operations
|
|
198
|
+
- VAULT: HandlerVault for HashiCorp Vault secret management
|
|
199
|
+
|
|
200
|
+
Registered Event Buses:
|
|
201
|
+
- INMEMORY: EventBusInmemory for local/testing deployments
|
|
202
|
+
|
|
203
|
+
Event Bus Selection Note:
|
|
204
|
+
This function only registers EventBusInmemory in the event bus registry.
|
|
205
|
+
For production deployments with EventBusKafka:
|
|
206
|
+
- Set KAFKA_BOOTSTRAP_SERVERS environment variable, OR
|
|
207
|
+
- Configure event_bus.type = "kafka" in runtime_config.yaml
|
|
208
|
+
|
|
209
|
+
EventBusKafka selection happens at kernel bootstrap time (see kernel.py),
|
|
210
|
+
not through this registry-based wiring mechanism.
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
Summary dict with keys:
|
|
214
|
+
- handlers: List of registered handler type names
|
|
215
|
+
- event_buses: List of registered event bus kind names
|
|
216
|
+
|
|
217
|
+
Example:
|
|
218
|
+
>>> summary = wire_default_handlers()
|
|
219
|
+
>>> print(summary)
|
|
220
|
+
{'handlers': ['consul', 'db', 'http', 'vault'], 'event_buses': ['inmemory']}
|
|
221
|
+
|
|
222
|
+
Note:
|
|
223
|
+
This function uses the singleton registries returned by
|
|
224
|
+
get_handler_registry() and get_event_bus_registry().
|
|
225
|
+
Multiple calls are safe (handlers are overwritten).
|
|
226
|
+
"""
|
|
227
|
+
handler_registry = get_handler_registry()
|
|
228
|
+
event_bus_registry = get_event_bus_registry()
|
|
229
|
+
|
|
230
|
+
# Register all known handlers
|
|
231
|
+
for handler_type, (handler_cls, description) in _KNOWN_HANDLERS.items():
|
|
232
|
+
# NOTE: Handlers implement ProtocolHandler structurally but don't inherit from it.
|
|
233
|
+
# Mypy cannot verify structural subtyping for registration argument.
|
|
234
|
+
handler_registry.register(handler_type, handler_cls) # type: ignore[arg-type] # NOTE: structural subtyping
|
|
235
|
+
logger.debug(
|
|
236
|
+
"Registered handler",
|
|
237
|
+
extra={
|
|
238
|
+
"handler_type": handler_type,
|
|
239
|
+
"handler_class": handler_cls.__name__,
|
|
240
|
+
"description": description,
|
|
241
|
+
},
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
# Register all known event buses
|
|
245
|
+
# Note: RegistryEventBusBinding raises if already registered,
|
|
246
|
+
# so we check first to make this idempotent
|
|
247
|
+
for bus_kind, (bus_cls, description) in _KNOWN_EVENT_BUSES.items():
|
|
248
|
+
if not event_bus_registry.is_registered(bus_kind):
|
|
249
|
+
event_bus_registry.register(bus_kind, bus_cls)
|
|
250
|
+
logger.debug(
|
|
251
|
+
"Registered event bus",
|
|
252
|
+
extra={
|
|
253
|
+
"bus_kind": bus_kind,
|
|
254
|
+
"bus_class": bus_cls.__name__,
|
|
255
|
+
"description": description,
|
|
256
|
+
},
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
registered_handlers = handler_registry.list_protocols()
|
|
260
|
+
registered_buses = event_bus_registry.list_bus_kinds()
|
|
261
|
+
|
|
262
|
+
logger.info(
|
|
263
|
+
"Default handlers wired",
|
|
264
|
+
extra={
|
|
265
|
+
"handler_count": len(registered_handlers),
|
|
266
|
+
"handlers": registered_handlers,
|
|
267
|
+
"event_bus_count": len(registered_buses),
|
|
268
|
+
"event_buses": registered_buses,
|
|
269
|
+
},
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
return {
|
|
273
|
+
"handlers": registered_handlers,
|
|
274
|
+
"event_buses": registered_buses,
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def wire_handlers_from_contract(
|
|
279
|
+
contract_config: dict[str, JsonType],
|
|
280
|
+
) -> dict[str, list[str]]:
|
|
281
|
+
"""Register handlers and event buses based on contract configuration.
|
|
282
|
+
|
|
283
|
+
This function selectively registers handlers based on the configuration
|
|
284
|
+
provided in a contract. It validates that all requested handler types
|
|
285
|
+
are known and supported.
|
|
286
|
+
|
|
287
|
+
Args:
|
|
288
|
+
contract_config: Contract configuration dict containing:
|
|
289
|
+
- handlers: Optional list of handler configs, each with:
|
|
290
|
+
- type: Handler type string (e.g., "http", "db")
|
|
291
|
+
- enabled: Optional bool, defaults to True
|
|
292
|
+
- event_bus: Optional event bus config with:
|
|
293
|
+
- kind: Event bus kind string (e.g., "inmemory")
|
|
294
|
+
- enabled: Optional bool, defaults to True
|
|
295
|
+
|
|
296
|
+
Returns:
|
|
297
|
+
Summary dict with keys:
|
|
298
|
+
- handlers: List of registered handler type names
|
|
299
|
+
- event_buses: List of registered event bus kind names
|
|
300
|
+
|
|
301
|
+
Raises:
|
|
302
|
+
ProtocolConfigurationError: If an unknown handler type or event bus
|
|
303
|
+
kind is specified in the configuration.
|
|
304
|
+
|
|
305
|
+
Example:
|
|
306
|
+
>>> config = {
|
|
307
|
+
... "handlers": [
|
|
308
|
+
... {"type": "http", "enabled": True},
|
|
309
|
+
... {"type": "db", "enabled": False}, # Skipped
|
|
310
|
+
... ],
|
|
311
|
+
... "event_bus": {"kind": "inmemory"},
|
|
312
|
+
... }
|
|
313
|
+
>>> summary = wire_handlers_from_contract(config)
|
|
314
|
+
>>> print(summary)
|
|
315
|
+
{'handlers': ['http'], 'event_buses': ['inmemory']}
|
|
316
|
+
|
|
317
|
+
Note:
|
|
318
|
+
Disabled handlers (enabled=False) are skipped during registration.
|
|
319
|
+
Unknown handler types raise ProtocolConfigurationError immediately.
|
|
320
|
+
"""
|
|
321
|
+
handler_registry = get_handler_registry()
|
|
322
|
+
event_bus_registry = get_event_bus_registry()
|
|
323
|
+
|
|
324
|
+
registered_handlers: list[str] = []
|
|
325
|
+
registered_buses: list[str] = []
|
|
326
|
+
|
|
327
|
+
# Create error context for configuration errors
|
|
328
|
+
def _make_error_context(
|
|
329
|
+
operation: str, target_name: str = "wiring"
|
|
330
|
+
) -> ModelInfraErrorContext:
|
|
331
|
+
"""Create standardized error context for configuration errors."""
|
|
332
|
+
return ModelInfraErrorContext.with_correlation(
|
|
333
|
+
operation=operation,
|
|
334
|
+
target_name=target_name,
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
# Process handler configurations
|
|
338
|
+
handlers_config = contract_config.get("handlers")
|
|
339
|
+
if handlers_config is not None:
|
|
340
|
+
if not isinstance(handlers_config, list):
|
|
341
|
+
raise ProtocolConfigurationError(
|
|
342
|
+
"Contract 'handlers' must be a list of handler configurations",
|
|
343
|
+
context=_make_error_context("validate_handlers_config"),
|
|
344
|
+
)
|
|
345
|
+
|
|
346
|
+
for handler_config in handlers_config:
|
|
347
|
+
if not isinstance(handler_config, dict):
|
|
348
|
+
raise ProtocolConfigurationError(
|
|
349
|
+
"Each handler configuration must be a dict",
|
|
350
|
+
context=_make_error_context("validate_handler_entry"),
|
|
351
|
+
)
|
|
352
|
+
|
|
353
|
+
handler_type = handler_config.get("type")
|
|
354
|
+
if not isinstance(handler_type, str):
|
|
355
|
+
raise ProtocolConfigurationError(
|
|
356
|
+
"Handler configuration missing required 'type' field",
|
|
357
|
+
context=_make_error_context("validate_handler_type"),
|
|
358
|
+
)
|
|
359
|
+
|
|
360
|
+
# Check if handler is enabled (default True)
|
|
361
|
+
enabled = handler_config.get("enabled", True)
|
|
362
|
+
if not enabled:
|
|
363
|
+
logger.debug(
|
|
364
|
+
"Skipping disabled handler",
|
|
365
|
+
extra={"handler_type": handler_type},
|
|
366
|
+
)
|
|
367
|
+
continue
|
|
368
|
+
|
|
369
|
+
# Validate handler type is known
|
|
370
|
+
if handler_type not in _KNOWN_HANDLERS:
|
|
371
|
+
known_types = sorted(_KNOWN_HANDLERS.keys())
|
|
372
|
+
raise ProtocolConfigurationError(
|
|
373
|
+
f"Unknown handler type: {handler_type!r}. "
|
|
374
|
+
f"Known types: {known_types}",
|
|
375
|
+
context=_make_error_context("validate_handler_type", handler_type),
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
# Register the handler
|
|
379
|
+
handler_cls, description = _KNOWN_HANDLERS[handler_type]
|
|
380
|
+
# NOTE: Handlers implement ProtocolHandler structurally but don't inherit from it.
|
|
381
|
+
# Mypy cannot verify structural subtyping for registration argument.
|
|
382
|
+
handler_registry.register(handler_type, handler_cls) # type: ignore[arg-type] # NOTE: structural subtyping
|
|
383
|
+
registered_handlers.append(handler_type)
|
|
384
|
+
|
|
385
|
+
logger.debug(
|
|
386
|
+
"Registered handler from contract",
|
|
387
|
+
extra={
|
|
388
|
+
"handler_type": handler_type,
|
|
389
|
+
"handler_class": handler_cls.__name__,
|
|
390
|
+
"description": description,
|
|
391
|
+
},
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
# Process event bus configuration
|
|
395
|
+
event_bus_config = contract_config.get("event_bus")
|
|
396
|
+
if event_bus_config is not None:
|
|
397
|
+
if not isinstance(event_bus_config, dict):
|
|
398
|
+
raise ProtocolConfigurationError(
|
|
399
|
+
"Contract 'event_bus' must be a configuration dict",
|
|
400
|
+
context=_make_error_context("validate_event_bus_config"),
|
|
401
|
+
)
|
|
402
|
+
|
|
403
|
+
bus_kind = event_bus_config.get("kind")
|
|
404
|
+
if not isinstance(bus_kind, str):
|
|
405
|
+
raise ProtocolConfigurationError(
|
|
406
|
+
"Event bus configuration missing required 'kind' field",
|
|
407
|
+
context=_make_error_context("validate_event_bus_kind"),
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
# Check if event bus is enabled (default True)
|
|
411
|
+
enabled = event_bus_config.get("enabled", True)
|
|
412
|
+
if not enabled:
|
|
413
|
+
logger.debug(
|
|
414
|
+
"Skipping disabled event bus",
|
|
415
|
+
extra={"bus_kind": bus_kind},
|
|
416
|
+
)
|
|
417
|
+
else:
|
|
418
|
+
# Validate bus kind is known
|
|
419
|
+
if bus_kind not in _KNOWN_EVENT_BUSES:
|
|
420
|
+
known_kinds = sorted(_KNOWN_EVENT_BUSES.keys())
|
|
421
|
+
raise ProtocolConfigurationError(
|
|
422
|
+
f"Unknown event bus kind: {bus_kind!r}. Known kinds: {known_kinds}",
|
|
423
|
+
context=_make_error_context("validate_event_bus_kind", bus_kind),
|
|
424
|
+
)
|
|
425
|
+
|
|
426
|
+
# Register the event bus (check if already registered first)
|
|
427
|
+
bus_cls, description = _KNOWN_EVENT_BUSES[bus_kind]
|
|
428
|
+
if not event_bus_registry.is_registered(bus_kind):
|
|
429
|
+
event_bus_registry.register(bus_kind, bus_cls)
|
|
430
|
+
|
|
431
|
+
registered_buses.append(bus_kind)
|
|
432
|
+
|
|
433
|
+
logger.debug(
|
|
434
|
+
"Registered event bus from contract",
|
|
435
|
+
extra={
|
|
436
|
+
"bus_kind": bus_kind,
|
|
437
|
+
"bus_class": bus_cls.__name__,
|
|
438
|
+
"description": description,
|
|
439
|
+
},
|
|
440
|
+
)
|
|
441
|
+
|
|
442
|
+
logger.info(
|
|
443
|
+
"Handlers wired from contract",
|
|
444
|
+
extra={
|
|
445
|
+
"handler_count": len(registered_handlers),
|
|
446
|
+
"handlers": sorted(registered_handlers),
|
|
447
|
+
"event_bus_count": len(registered_buses),
|
|
448
|
+
"event_buses": sorted(registered_buses),
|
|
449
|
+
},
|
|
450
|
+
)
|
|
451
|
+
|
|
452
|
+
return {
|
|
453
|
+
"handlers": sorted(registered_handlers),
|
|
454
|
+
"event_buses": sorted(registered_buses),
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
def get_known_handler_types() -> list[str]:
|
|
459
|
+
"""Get list of known handler types that can be wired.
|
|
460
|
+
|
|
461
|
+
Returns:
|
|
462
|
+
Sorted list of handler type strings.
|
|
463
|
+
|
|
464
|
+
Example:
|
|
465
|
+
>>> get_known_handler_types()
|
|
466
|
+
['db', 'http']
|
|
467
|
+
"""
|
|
468
|
+
return sorted(_KNOWN_HANDLERS.keys())
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
def get_known_event_bus_kinds() -> list[str]:
|
|
472
|
+
"""Get list of known event bus kinds that can be wired.
|
|
473
|
+
|
|
474
|
+
Returns:
|
|
475
|
+
Sorted list of event bus kind strings.
|
|
476
|
+
|
|
477
|
+
Example:
|
|
478
|
+
>>> get_known_event_bus_kinds()
|
|
479
|
+
['inmemory']
|
|
480
|
+
"""
|
|
481
|
+
return sorted(_KNOWN_EVENT_BUSES.keys())
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
def wire_custom_handler(
|
|
485
|
+
handler_type: str,
|
|
486
|
+
handler_cls: type[ProtocolHandler],
|
|
487
|
+
registry: RegistryProtocolBinding | None = None,
|
|
488
|
+
) -> None:
|
|
489
|
+
"""Register a custom handler class with the registry.
|
|
490
|
+
|
|
491
|
+
This function allows registration of custom handler implementations
|
|
492
|
+
that are not part of the default handler set. Useful for testing
|
|
493
|
+
and extending the handler ecosystem.
|
|
494
|
+
|
|
495
|
+
Args:
|
|
496
|
+
handler_type: Protocol type identifier for the handler.
|
|
497
|
+
handler_cls: Handler class implementing ProtocolHandler protocol.
|
|
498
|
+
registry: Optional registry to use. Defaults to singleton registry.
|
|
499
|
+
|
|
500
|
+
Example:
|
|
501
|
+
>>> class CustomHandler:
|
|
502
|
+
... async def initialize(self, config): pass
|
|
503
|
+
... async def execute(self, envelope): pass
|
|
504
|
+
...
|
|
505
|
+
>>> wire_custom_handler("custom", CustomHandler)
|
|
506
|
+
"""
|
|
507
|
+
target_registry = registry if registry is not None else get_handler_registry()
|
|
508
|
+
target_registry.register(handler_type, handler_cls)
|
|
509
|
+
logger.debug(
|
|
510
|
+
"Registered custom handler",
|
|
511
|
+
extra={
|
|
512
|
+
"handler_type": handler_type,
|
|
513
|
+
"handler_class": handler_cls.__name__,
|
|
514
|
+
},
|
|
515
|
+
)
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
def wire_custom_event_bus(
|
|
519
|
+
bus_kind: str,
|
|
520
|
+
bus_cls: type[ProtocolEventBus],
|
|
521
|
+
registry: RegistryEventBusBinding | None = None,
|
|
522
|
+
) -> None:
|
|
523
|
+
"""Register a custom event bus class with the registry.
|
|
524
|
+
|
|
525
|
+
This function allows registration of custom event bus implementations
|
|
526
|
+
that are not part of the default set. Useful for testing and
|
|
527
|
+
extending the event bus ecosystem.
|
|
528
|
+
|
|
529
|
+
Args:
|
|
530
|
+
bus_kind: Unique identifier for the bus type.
|
|
531
|
+
bus_cls: Event bus class implementing ProtocolEventBus protocol.
|
|
532
|
+
registry: Optional registry to use. Defaults to singleton registry.
|
|
533
|
+
|
|
534
|
+
Raises:
|
|
535
|
+
RuntimeHostError: If bus_kind is already registered in the registry.
|
|
536
|
+
|
|
537
|
+
Example:
|
|
538
|
+
>>> class CustomEventBus:
|
|
539
|
+
... async def start(self): pass
|
|
540
|
+
... async def publish(self, topic, key, value): pass
|
|
541
|
+
...
|
|
542
|
+
>>> wire_custom_event_bus("custom", CustomEventBus)
|
|
543
|
+
"""
|
|
544
|
+
target_registry = registry if registry is not None else get_event_bus_registry()
|
|
545
|
+
# Note: RegistryEventBusBinding.register() raises if already registered
|
|
546
|
+
target_registry.register(bus_kind, bus_cls)
|
|
547
|
+
logger.debug(
|
|
548
|
+
"Registered custom event bus",
|
|
549
|
+
extra={
|
|
550
|
+
"bus_kind": bus_kind,
|
|
551
|
+
"bus_class": bus_cls.__name__,
|
|
552
|
+
},
|
|
553
|
+
)
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
__all__: list[str] = [
|
|
557
|
+
"get_known_event_bus_kinds",
|
|
558
|
+
# Introspection functions
|
|
559
|
+
"get_known_handler_types",
|
|
560
|
+
"wire_custom_event_bus",
|
|
561
|
+
# Custom registration functions
|
|
562
|
+
"wire_custom_handler",
|
|
563
|
+
# Primary wiring functions
|
|
564
|
+
"wire_default_handlers",
|
|
565
|
+
"wire_handlers_from_contract",
|
|
566
|
+
]
|