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,277 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Consul Service registration operations mixin.
|
|
4
|
+
|
|
5
|
+
This mixin provides service registration and deregistration operations
|
|
6
|
+
for HandlerConsul, extracted to reduce class complexity.
|
|
7
|
+
|
|
8
|
+
Operations:
|
|
9
|
+
- consul.register: Register service with Consul agent
|
|
10
|
+
- consul.deregister: Deregister service from Consul agent
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from collections.abc import Callable
|
|
16
|
+
from typing import TYPE_CHECKING, Protocol, TypeVar
|
|
17
|
+
from uuid import UUID
|
|
18
|
+
|
|
19
|
+
T = TypeVar("T")
|
|
20
|
+
|
|
21
|
+
from omnibase_core.models.dispatch import ModelHandlerOutput
|
|
22
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
23
|
+
from omnibase_infra.errors import (
|
|
24
|
+
InfraConsulError,
|
|
25
|
+
ModelInfraErrorContext,
|
|
26
|
+
RuntimeHostError,
|
|
27
|
+
)
|
|
28
|
+
from omnibase_infra.handlers.models.consul import (
|
|
29
|
+
ConsulPayload,
|
|
30
|
+
ModelConsulDeregisterPayload,
|
|
31
|
+
ModelConsulRegisterPayload,
|
|
32
|
+
)
|
|
33
|
+
from omnibase_infra.handlers.models.model_consul_handler_response import (
|
|
34
|
+
ModelConsulHandlerResponse,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
if TYPE_CHECKING:
|
|
38
|
+
import consul as consul_lib
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ProtocolConsulServiceDependencies(Protocol):
|
|
42
|
+
"""Protocol defining required dependencies for service operations.
|
|
43
|
+
|
|
44
|
+
HandlerConsul must provide these attributes/methods for the mixin to work.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
_client: consul_lib.Consul | None
|
|
48
|
+
_config: object | None
|
|
49
|
+
|
|
50
|
+
async def _execute_with_retry(
|
|
51
|
+
self,
|
|
52
|
+
operation: str,
|
|
53
|
+
func: Callable[[], T],
|
|
54
|
+
correlation_id: UUID,
|
|
55
|
+
) -> T:
|
|
56
|
+
"""Execute operation with retry logic."""
|
|
57
|
+
...
|
|
58
|
+
|
|
59
|
+
def _build_response(
|
|
60
|
+
self,
|
|
61
|
+
typed_payload: ConsulPayload,
|
|
62
|
+
correlation_id: UUID,
|
|
63
|
+
input_envelope_id: UUID,
|
|
64
|
+
) -> ModelHandlerOutput[ModelConsulHandlerResponse]:
|
|
65
|
+
"""Build standardized response."""
|
|
66
|
+
...
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class MixinConsulService:
|
|
70
|
+
"""Mixin providing Consul service registration operations.
|
|
71
|
+
|
|
72
|
+
This mixin extracts service operations from HandlerConsul to reduce
|
|
73
|
+
class complexity while maintaining full functionality.
|
|
74
|
+
|
|
75
|
+
Required Dependencies (from host class):
|
|
76
|
+
- _client: consul.Consul client instance
|
|
77
|
+
- _config: Handler configuration
|
|
78
|
+
- _execute_with_retry: Retry execution method
|
|
79
|
+
- _build_response: Response builder method
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
# Instance attribute declarations for type checking
|
|
83
|
+
_client: consul_lib.Consul | None
|
|
84
|
+
_config: object | None
|
|
85
|
+
|
|
86
|
+
# Methods from host class (abstract stubs for type checking)
|
|
87
|
+
async def _execute_with_retry(
|
|
88
|
+
self,
|
|
89
|
+
operation: str,
|
|
90
|
+
func: Callable[[], T],
|
|
91
|
+
correlation_id: UUID,
|
|
92
|
+
) -> T:
|
|
93
|
+
"""Execute operation with retry logic - provided by host class."""
|
|
94
|
+
raise NotImplementedError("Must be provided by implementing class")
|
|
95
|
+
|
|
96
|
+
def _build_response(
|
|
97
|
+
self,
|
|
98
|
+
typed_payload: ConsulPayload,
|
|
99
|
+
correlation_id: UUID,
|
|
100
|
+
input_envelope_id: UUID,
|
|
101
|
+
) -> ModelHandlerOutput[ModelConsulHandlerResponse]:
|
|
102
|
+
"""Build standardized response - provided by host class."""
|
|
103
|
+
|
|
104
|
+
async def _register_service(
|
|
105
|
+
self,
|
|
106
|
+
payload: dict[str, object],
|
|
107
|
+
correlation_id: UUID,
|
|
108
|
+
input_envelope_id: UUID,
|
|
109
|
+
) -> ModelHandlerOutput[ModelConsulHandlerResponse]:
|
|
110
|
+
"""Register service with Consul agent.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
payload: dict containing:
|
|
114
|
+
- name: Service name (required)
|
|
115
|
+
- service_id: Optional unique service ID (defaults to name)
|
|
116
|
+
- address: Optional service address
|
|
117
|
+
- port: Optional service port
|
|
118
|
+
- tags: Optional list of tags
|
|
119
|
+
- check: Optional health check configuration dict
|
|
120
|
+
correlation_id: Correlation ID for tracing
|
|
121
|
+
input_envelope_id: Input envelope ID for causality tracking
|
|
122
|
+
|
|
123
|
+
Returns:
|
|
124
|
+
ModelHandlerOutput wrapping the registration result with correlation tracking
|
|
125
|
+
"""
|
|
126
|
+
name = payload.get("name")
|
|
127
|
+
if not isinstance(name, str) or not name:
|
|
128
|
+
ctx = ModelInfraErrorContext(
|
|
129
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
130
|
+
operation="consul.register",
|
|
131
|
+
target_name="consul_handler",
|
|
132
|
+
correlation_id=correlation_id,
|
|
133
|
+
)
|
|
134
|
+
raise RuntimeHostError(
|
|
135
|
+
"Missing or invalid 'name' in payload",
|
|
136
|
+
context=ctx,
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
service_id = payload.get("service_id")
|
|
140
|
+
service_id_str: str | None = service_id if isinstance(service_id, str) else None
|
|
141
|
+
|
|
142
|
+
address = payload.get("address")
|
|
143
|
+
address_str: str | None = address if isinstance(address, str) else None
|
|
144
|
+
|
|
145
|
+
port = payload.get("port")
|
|
146
|
+
port_int: int | None = port if isinstance(port, int) else None
|
|
147
|
+
|
|
148
|
+
tags = payload.get("tags")
|
|
149
|
+
tags_list: list[str] | None = None
|
|
150
|
+
if isinstance(tags, list):
|
|
151
|
+
tags_list = [str(t) for t in tags]
|
|
152
|
+
|
|
153
|
+
check = payload.get("check")
|
|
154
|
+
check_dict: dict[str, object] | None = (
|
|
155
|
+
check if isinstance(check, dict) else None
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
if self._client is None:
|
|
159
|
+
context = ModelInfraErrorContext(
|
|
160
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
161
|
+
operation="consul.register",
|
|
162
|
+
target_name="consul_handler",
|
|
163
|
+
correlation_id=correlation_id,
|
|
164
|
+
)
|
|
165
|
+
raise InfraConsulError(
|
|
166
|
+
"Consul client not initialized",
|
|
167
|
+
context=context,
|
|
168
|
+
service_name=name,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
def register_func() -> bool:
|
|
172
|
+
if self._client is None:
|
|
173
|
+
ctx = ModelInfraErrorContext(
|
|
174
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
175
|
+
operation="consul.register",
|
|
176
|
+
target_name="consul_handler",
|
|
177
|
+
correlation_id=correlation_id,
|
|
178
|
+
)
|
|
179
|
+
raise InfraConsulError(
|
|
180
|
+
"Consul client not initialized",
|
|
181
|
+
context=ctx,
|
|
182
|
+
service_name=name,
|
|
183
|
+
)
|
|
184
|
+
self._client.agent.service.register(
|
|
185
|
+
name=name,
|
|
186
|
+
service_id=service_id_str,
|
|
187
|
+
address=address_str,
|
|
188
|
+
port=port_int,
|
|
189
|
+
tags=tags_list,
|
|
190
|
+
check=check_dict,
|
|
191
|
+
)
|
|
192
|
+
return True
|
|
193
|
+
|
|
194
|
+
await self._execute_with_retry(
|
|
195
|
+
"consul.register",
|
|
196
|
+
register_func,
|
|
197
|
+
correlation_id,
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
typed_payload = ModelConsulRegisterPayload(
|
|
201
|
+
registered=True,
|
|
202
|
+
name=name,
|
|
203
|
+
consul_service_id=service_id_str or name,
|
|
204
|
+
)
|
|
205
|
+
return self._build_response(typed_payload, correlation_id, input_envelope_id)
|
|
206
|
+
|
|
207
|
+
async def _deregister_service(
|
|
208
|
+
self,
|
|
209
|
+
payload: dict[str, object],
|
|
210
|
+
correlation_id: UUID,
|
|
211
|
+
input_envelope_id: UUID,
|
|
212
|
+
) -> ModelHandlerOutput[ModelConsulHandlerResponse]:
|
|
213
|
+
"""Deregister service from Consul agent.
|
|
214
|
+
|
|
215
|
+
Args:
|
|
216
|
+
payload: dict containing:
|
|
217
|
+
- service_id: Service ID to deregister (required)
|
|
218
|
+
correlation_id: Correlation ID for tracing
|
|
219
|
+
input_envelope_id: Input envelope ID for causality tracking
|
|
220
|
+
|
|
221
|
+
Returns:
|
|
222
|
+
ModelHandlerOutput wrapping the deregistration result with correlation tracking
|
|
223
|
+
"""
|
|
224
|
+
service_id = payload.get("service_id")
|
|
225
|
+
if not isinstance(service_id, str) or not service_id:
|
|
226
|
+
ctx = ModelInfraErrorContext(
|
|
227
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
228
|
+
operation="consul.deregister",
|
|
229
|
+
target_name="consul_handler",
|
|
230
|
+
correlation_id=correlation_id,
|
|
231
|
+
)
|
|
232
|
+
raise RuntimeHostError(
|
|
233
|
+
"Missing or invalid 'service_id' in payload",
|
|
234
|
+
context=ctx,
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
if self._client is None:
|
|
238
|
+
context = ModelInfraErrorContext(
|
|
239
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
240
|
+
operation="consul.deregister",
|
|
241
|
+
target_name="consul_handler",
|
|
242
|
+
correlation_id=correlation_id,
|
|
243
|
+
)
|
|
244
|
+
raise InfraConsulError(
|
|
245
|
+
"Consul client not initialized",
|
|
246
|
+
context=context,
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
def deregister_func() -> bool:
|
|
250
|
+
if self._client is None:
|
|
251
|
+
ctx = ModelInfraErrorContext(
|
|
252
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
253
|
+
operation="consul.deregister",
|
|
254
|
+
target_name="consul_handler",
|
|
255
|
+
correlation_id=correlation_id,
|
|
256
|
+
)
|
|
257
|
+
raise InfraConsulError(
|
|
258
|
+
"Consul client not initialized",
|
|
259
|
+
context=ctx,
|
|
260
|
+
)
|
|
261
|
+
self._client.agent.service.deregister(service_id)
|
|
262
|
+
return True
|
|
263
|
+
|
|
264
|
+
await self._execute_with_retry(
|
|
265
|
+
"consul.deregister",
|
|
266
|
+
deregister_func,
|
|
267
|
+
correlation_id,
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
typed_payload = ModelConsulDeregisterPayload(
|
|
271
|
+
deregistered=True,
|
|
272
|
+
consul_service_id=service_id,
|
|
273
|
+
)
|
|
274
|
+
return self._build_response(typed_payload, correlation_id, input_envelope_id)
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
__all__: list[str] = ["MixinConsulService"]
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Vault initialization mixin for HandlerVault.
|
|
4
|
+
|
|
5
|
+
Provides initialization-related helper methods for parsing configuration,
|
|
6
|
+
creating the hvac client, and setting up infrastructure components.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import logging
|
|
12
|
+
import time
|
|
13
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
14
|
+
from uuid import UUID
|
|
15
|
+
|
|
16
|
+
import hvac
|
|
17
|
+
from pydantic import SecretStr, ValidationError
|
|
18
|
+
|
|
19
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
20
|
+
from omnibase_infra.errors import (
|
|
21
|
+
InfraAuthenticationError,
|
|
22
|
+
InfraConnectionError,
|
|
23
|
+
ModelInfraErrorContext,
|
|
24
|
+
ProtocolConfigurationError,
|
|
25
|
+
RuntimeHostError,
|
|
26
|
+
)
|
|
27
|
+
from omnibase_infra.handlers.models.vault import ModelVaultHandlerConfig
|
|
28
|
+
|
|
29
|
+
logger = logging.getLogger(__name__)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class MixinVaultInitialization:
|
|
33
|
+
"""Mixin providing initialization helpers for HandlerVault.
|
|
34
|
+
|
|
35
|
+
Contains methods for:
|
|
36
|
+
- Configuration parsing and validation
|
|
37
|
+
- hvac client creation
|
|
38
|
+
- Authentication verification
|
|
39
|
+
- Token TTL initialization
|
|
40
|
+
- Thread pool and circuit breaker setup
|
|
41
|
+
- Error handling during initialization
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
# Instance attributes (declared for type checking)
|
|
45
|
+
_client: hvac.Client | None
|
|
46
|
+
_config: ModelVaultHandlerConfig | None
|
|
47
|
+
_token_expires_at: float
|
|
48
|
+
_executor: ThreadPoolExecutor | None
|
|
49
|
+
_max_workers: int
|
|
50
|
+
_max_queue_size: int
|
|
51
|
+
_circuit_breaker_initialized: bool
|
|
52
|
+
|
|
53
|
+
# Methods from MixinAsyncCircuitBreaker that will be available at runtime
|
|
54
|
+
def _init_circuit_breaker(
|
|
55
|
+
self,
|
|
56
|
+
threshold: int,
|
|
57
|
+
reset_timeout: float,
|
|
58
|
+
service_name: str,
|
|
59
|
+
transport_type: EnumInfraTransportType,
|
|
60
|
+
) -> None:
|
|
61
|
+
"""Initialize circuit breaker - provided by MixinAsyncCircuitBreaker."""
|
|
62
|
+
|
|
63
|
+
def _create_init_error_context(
|
|
64
|
+
self, correlation_id: UUID, namespace: str | None = None
|
|
65
|
+
) -> ModelInfraErrorContext:
|
|
66
|
+
"""Create error context for initialization operations.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
correlation_id: Correlation ID for tracing
|
|
70
|
+
namespace: Optional namespace (may not be set during early init)
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
ModelInfraErrorContext configured for initialization
|
|
74
|
+
"""
|
|
75
|
+
return ModelInfraErrorContext(
|
|
76
|
+
transport_type=EnumInfraTransportType.VAULT,
|
|
77
|
+
operation="initialize",
|
|
78
|
+
target_name="vault_handler",
|
|
79
|
+
correlation_id=correlation_id,
|
|
80
|
+
namespace=namespace,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
def _parse_vault_config(
|
|
84
|
+
self, config: dict[str, object], correlation_id: UUID
|
|
85
|
+
) -> ModelVaultHandlerConfig:
|
|
86
|
+
"""Parse and validate vault configuration.
|
|
87
|
+
|
|
88
|
+
Performs both Pydantic validation and defensive checks for required fields.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
config: Raw configuration dict
|
|
92
|
+
correlation_id: Correlation ID for tracing
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
Validated ModelVaultHandlerConfig
|
|
96
|
+
|
|
97
|
+
Raises:
|
|
98
|
+
ProtocolConfigurationError: If Pydantic validation fails or required
|
|
99
|
+
fields are missing/empty
|
|
100
|
+
RuntimeHostError: If unexpected error during parsing
|
|
101
|
+
"""
|
|
102
|
+
try:
|
|
103
|
+
# Handle SecretStr token conversion
|
|
104
|
+
token_raw = config.get("token")
|
|
105
|
+
if isinstance(token_raw, str):
|
|
106
|
+
config = dict(config) # Make mutable copy
|
|
107
|
+
config["token"] = SecretStr(token_raw)
|
|
108
|
+
|
|
109
|
+
# Use model_validate for type-safe dict parsing (Pydantic v2 pattern)
|
|
110
|
+
parsed_config = ModelVaultHandlerConfig.model_validate(config)
|
|
111
|
+
|
|
112
|
+
# Defensive validation: ensure required fields are present
|
|
113
|
+
# These checks are defensive programming since Pydantic validation
|
|
114
|
+
# should catch missing/empty URL and missing token. However, we keep
|
|
115
|
+
# them to ensure consistent error handling if the Pydantic model changes.
|
|
116
|
+
if not parsed_config.url:
|
|
117
|
+
ctx = self._create_init_error_context(
|
|
118
|
+
correlation_id, parsed_config.namespace
|
|
119
|
+
)
|
|
120
|
+
raise ProtocolConfigurationError(
|
|
121
|
+
"Missing 'url' in config - Vault server URL required",
|
|
122
|
+
context=ctx,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
if parsed_config.token is None:
|
|
126
|
+
ctx = self._create_init_error_context(
|
|
127
|
+
correlation_id, parsed_config.namespace
|
|
128
|
+
)
|
|
129
|
+
raise ProtocolConfigurationError(
|
|
130
|
+
"Missing 'token' in config - Vault authentication token required",
|
|
131
|
+
context=ctx,
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
return parsed_config
|
|
135
|
+
except ProtocolConfigurationError:
|
|
136
|
+
# Re-raise our own configuration errors without wrapping
|
|
137
|
+
raise
|
|
138
|
+
except ValidationError as e:
|
|
139
|
+
ctx = self._create_init_error_context(correlation_id, namespace=None)
|
|
140
|
+
raise ProtocolConfigurationError(
|
|
141
|
+
f"Invalid Vault configuration: {e}",
|
|
142
|
+
context=ctx,
|
|
143
|
+
) from e
|
|
144
|
+
except Exception as e:
|
|
145
|
+
ctx = self._create_init_error_context(correlation_id, namespace=None)
|
|
146
|
+
raise RuntimeHostError(
|
|
147
|
+
f"Configuration parsing failed: {type(e).__name__}",
|
|
148
|
+
context=ctx,
|
|
149
|
+
) from e
|
|
150
|
+
|
|
151
|
+
def _create_hvac_client(self, config: ModelVaultHandlerConfig) -> hvac.Client:
|
|
152
|
+
"""Create and return hvac client instance.
|
|
153
|
+
|
|
154
|
+
Args:
|
|
155
|
+
config: Validated config model
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
Configured hvac.Client instance
|
|
159
|
+
"""
|
|
160
|
+
return hvac.Client(
|
|
161
|
+
url=config.url,
|
|
162
|
+
token=config.token.get_secret_value() if config.token else "",
|
|
163
|
+
namespace=config.namespace,
|
|
164
|
+
verify=config.verify_ssl,
|
|
165
|
+
timeout=config.timeout_seconds,
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
def _verify_vault_auth(
|
|
169
|
+
self, client: hvac.Client, correlation_id: UUID, namespace: str | None
|
|
170
|
+
) -> None:
|
|
171
|
+
"""Verify vault authentication.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
client: hvac client instance
|
|
175
|
+
correlation_id: Correlation ID for tracing
|
|
176
|
+
namespace: Vault namespace
|
|
177
|
+
|
|
178
|
+
Raises:
|
|
179
|
+
InfraAuthenticationError: If authentication fails
|
|
180
|
+
"""
|
|
181
|
+
if not client.is_authenticated():
|
|
182
|
+
ctx = self._create_init_error_context(correlation_id, namespace)
|
|
183
|
+
raise InfraAuthenticationError(
|
|
184
|
+
"Vault authentication failed - check token validity",
|
|
185
|
+
context=ctx,
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
def _initialize_token_ttl(
|
|
189
|
+
self,
|
|
190
|
+
client: hvac.Client,
|
|
191
|
+
config: ModelVaultHandlerConfig,
|
|
192
|
+
correlation_id: UUID,
|
|
193
|
+
) -> None:
|
|
194
|
+
"""Initialize token expiration tracking.
|
|
195
|
+
|
|
196
|
+
Queries actual TTL from Vault via token lookup, falls back to config
|
|
197
|
+
default on failure. Sets self._token_expires_at for token renewal tracking.
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
client: hvac client instance
|
|
201
|
+
config: Validated config model
|
|
202
|
+
correlation_id: Correlation ID for tracing
|
|
203
|
+
"""
|
|
204
|
+
default_ttl = config.default_token_ttl
|
|
205
|
+
token_ttl = default_ttl
|
|
206
|
+
|
|
207
|
+
try:
|
|
208
|
+
# Query token info from Vault
|
|
209
|
+
token_info = client.auth.token.lookup_self()
|
|
210
|
+
token_data = token_info.get("data", {})
|
|
211
|
+
|
|
212
|
+
# Extract TTL from response
|
|
213
|
+
if isinstance(token_data, dict):
|
|
214
|
+
ttl_seconds = token_data.get("ttl")
|
|
215
|
+
if isinstance(ttl_seconds, int) and ttl_seconds > 0:
|
|
216
|
+
token_ttl = ttl_seconds
|
|
217
|
+
self._token_expires_at = time.time() + token_ttl
|
|
218
|
+
logger.info(
|
|
219
|
+
"Token TTL initialized",
|
|
220
|
+
extra={
|
|
221
|
+
"ttl_seconds": token_ttl,
|
|
222
|
+
"correlation_id": str(correlation_id),
|
|
223
|
+
},
|
|
224
|
+
)
|
|
225
|
+
return
|
|
226
|
+
|
|
227
|
+
# TTL not in response - use fallback
|
|
228
|
+
logger.warning(
|
|
229
|
+
"Token TTL not in Vault response, using fallback",
|
|
230
|
+
extra={
|
|
231
|
+
"ttl": default_ttl,
|
|
232
|
+
"correlation_id": str(correlation_id),
|
|
233
|
+
},
|
|
234
|
+
)
|
|
235
|
+
self._token_expires_at = time.time() + default_ttl
|
|
236
|
+
|
|
237
|
+
except Exception as e:
|
|
238
|
+
# Fallback to config default TTL if lookup fails
|
|
239
|
+
logger.warning(
|
|
240
|
+
"Failed to query token TTL, using fallback",
|
|
241
|
+
extra={
|
|
242
|
+
"error_type": type(e).__name__,
|
|
243
|
+
"default_ttl_seconds": default_ttl,
|
|
244
|
+
"correlation_id": str(correlation_id),
|
|
245
|
+
},
|
|
246
|
+
)
|
|
247
|
+
self._token_expires_at = time.time() + default_ttl
|
|
248
|
+
|
|
249
|
+
def _setup_thread_pool(self, config: ModelVaultHandlerConfig) -> None:
|
|
250
|
+
"""Setup bounded thread pool for vault operations.
|
|
251
|
+
|
|
252
|
+
Args:
|
|
253
|
+
config: Validated config model
|
|
254
|
+
"""
|
|
255
|
+
self._max_workers = config.max_concurrent_operations
|
|
256
|
+
self._executor = ThreadPoolExecutor(
|
|
257
|
+
max_workers=self._max_workers,
|
|
258
|
+
thread_name_prefix="vault_handler_",
|
|
259
|
+
)
|
|
260
|
+
self._max_queue_size = self._max_workers * config.max_queue_size_multiplier
|
|
261
|
+
|
|
262
|
+
def _setup_circuit_breaker(self, config: ModelVaultHandlerConfig) -> None:
|
|
263
|
+
"""Setup circuit breaker if enabled.
|
|
264
|
+
|
|
265
|
+
Args:
|
|
266
|
+
config: Validated config model
|
|
267
|
+
"""
|
|
268
|
+
if config.circuit_breaker_enabled:
|
|
269
|
+
self._init_circuit_breaker(
|
|
270
|
+
threshold=config.circuit_breaker_failure_threshold,
|
|
271
|
+
reset_timeout=config.circuit_breaker_reset_timeout_seconds,
|
|
272
|
+
service_name=f"vault.{config.namespace or 'default'}",
|
|
273
|
+
transport_type=EnumInfraTransportType.VAULT,
|
|
274
|
+
)
|
|
275
|
+
self._circuit_breaker_initialized = True
|
|
276
|
+
|
|
277
|
+
def _log_init_success(
|
|
278
|
+
self, config: ModelVaultHandlerConfig, correlation_id: UUID
|
|
279
|
+
) -> None:
|
|
280
|
+
"""Log successful initialization.
|
|
281
|
+
|
|
282
|
+
Args:
|
|
283
|
+
config: Validated config model
|
|
284
|
+
correlation_id: Correlation ID for tracing
|
|
285
|
+
"""
|
|
286
|
+
logger.info(
|
|
287
|
+
"%s initialized successfully",
|
|
288
|
+
self.__class__.__name__,
|
|
289
|
+
extra={
|
|
290
|
+
"handler": self.__class__.__name__,
|
|
291
|
+
"url": config.url,
|
|
292
|
+
"namespace": config.namespace,
|
|
293
|
+
"timeout_seconds": config.timeout_seconds,
|
|
294
|
+
"verify_ssl": config.verify_ssl,
|
|
295
|
+
"thread_pool_max_workers": self._max_workers,
|
|
296
|
+
"thread_pool_max_queue_size": self._max_queue_size,
|
|
297
|
+
"circuit_breaker_enabled": config.circuit_breaker_enabled,
|
|
298
|
+
"correlation_id": str(correlation_id),
|
|
299
|
+
},
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
def _handle_init_hvac_error(
|
|
303
|
+
self,
|
|
304
|
+
error: Exception,
|
|
305
|
+
correlation_id: UUID,
|
|
306
|
+
namespace: str | None,
|
|
307
|
+
) -> None:
|
|
308
|
+
"""Handle hvac-related errors during initialization.
|
|
309
|
+
|
|
310
|
+
Args:
|
|
311
|
+
error: The exception that occurred
|
|
312
|
+
correlation_id: Correlation ID for tracing
|
|
313
|
+
namespace: Vault namespace
|
|
314
|
+
|
|
315
|
+
Raises:
|
|
316
|
+
InfraAuthenticationError: For InvalidRequest errors
|
|
317
|
+
InfraConnectionError: For VaultError errors
|
|
318
|
+
RuntimeHostError: For other errors
|
|
319
|
+
"""
|
|
320
|
+
ctx = self._create_init_error_context(correlation_id, namespace)
|
|
321
|
+
|
|
322
|
+
if isinstance(error, hvac.exceptions.InvalidRequest):
|
|
323
|
+
raise InfraAuthenticationError(
|
|
324
|
+
"Vault authentication failed - invalid token or permissions",
|
|
325
|
+
context=ctx,
|
|
326
|
+
) from error
|
|
327
|
+
if isinstance(error, hvac.exceptions.VaultError):
|
|
328
|
+
raise InfraConnectionError(
|
|
329
|
+
f"Failed to connect to Vault: {type(error).__name__}",
|
|
330
|
+
context=ctx,
|
|
331
|
+
) from error
|
|
332
|
+
raise RuntimeHostError(
|
|
333
|
+
f"Failed to initialize Vault client: {type(error).__name__}",
|
|
334
|
+
context=ctx,
|
|
335
|
+
) from error
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
__all__: list[str] = ["MixinVaultInitialization"]
|