omnibase_infra 0.2.6__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/adapters/adapter_onex_tool_execution.py +451 -0
- omnibase_infra/capabilities/__init__.py +15 -0
- omnibase_infra/capabilities/capability_inference_rules.py +211 -0
- omnibase_infra/capabilities/contract_capability_extractor.py +221 -0
- omnibase_infra/capabilities/intent_type_extractor.py +160 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/configs/widget_mapping.yaml +176 -0
- omnibase_infra/constants_topic_patterns.py +26 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +264 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +141 -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 +132 -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_consumer_group_purpose.py +92 -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 +111 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_mode.py +86 -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_kafka_acks.py +99 -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 +160 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_binding_resolution.py +128 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +95 -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 +105 -0
- omnibase_infra/errors/error_infra.py +610 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +115 -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 +84 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +797 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1716 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +180 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +771 -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 +693 -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/testing/__init__.py +26 -0
- omnibase_infra/event_bus/testing/adapter_protocol_event_publisher_inmemory.py +418 -0
- omnibase_infra/event_bus/testing/model_publisher_metrics.py +64 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +82 -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 +795 -0
- omnibase_infra/handlers/handler_db.py +1046 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +2015 -0
- omnibase_infra/handlers/handler_http.py +926 -0
- omnibase_infra/handlers/handler_intent.py +387 -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 +1430 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +428 -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 +47 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +338 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +542 -0
- omnibase_infra/handlers/mixins/mixin_consul_topic_index.py +585 -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 +922 -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 +1051 -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 +109 -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/migrations/001_create_event_ledger.sql +166 -0
- omnibase_infra/migrations/001_drop_event_ledger.sql +18 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +656 -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 +2670 -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 +144 -0
- omnibase_infra/models/bindings/__init__.py +59 -0
- omnibase_infra/models/bindings/constants.py +144 -0
- omnibase_infra/models/bindings/model_binding_resolution_result.py +103 -0
- omnibase_infra/models/bindings/model_operation_binding.py +44 -0
- omnibase_infra/models/bindings/model_operation_bindings_subcontract.py +152 -0
- omnibase_infra/models/bindings/model_parsed_binding.py +52 -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 +330 -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 +155 -0
- omnibase_infra/models/dispatch/model_debug_trace_snapshot.py +114 -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_materialized_dispatch.py +141 -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 +80 -0
- omnibase_infra/models/handlers/model_bootstrap_handler_descriptor.py +162 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +82 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +200 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/handlers/model_handler_source_config.py +220 -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/mcp/__init__.py +15 -0
- omnibase_infra/models/mcp/model_mcp_contract_config.py +80 -0
- omnibase_infra/models/mcp/model_mcp_server_config.py +67 -0
- omnibase_infra/models/mcp/model_mcp_tool_definition.py +73 -0
- omnibase_infra/models/mcp/model_mcp_tool_parameter.py +35 -0
- omnibase_infra/models/model_node_identity.py +126 -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 +591 -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 +68 -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_event_bus_topic_entry.py +59 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +190 -0
- omnibase_infra/models/registration/model_node_event_bus_config.py +99 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +195 -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 +49 -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 +296 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +129 -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 +57 -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 +203 -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 +106 -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/contract_registry_reducer/__init__.py +29 -0
- omnibase_infra/nodes/contract_registry_reducer/contract.yaml +255 -0
- omnibase_infra/nodes/contract_registry_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_contract_registry_state.py +266 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_cleanup_topic_references.py +55 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_deactivate_contract.py +58 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_mark_stale.py +49 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_heartbeat.py +71 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_topic.py +66 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_upsert_contract.py +92 -0
- omnibase_infra/nodes/contract_registry_reducer/node.py +121 -0
- omnibase_infra/nodes/contract_registry_reducer/reducer.py +784 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/registry_infra_contract_registry_reducer.py +101 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +167 -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/handlers/consul/contract.yaml +85 -0
- omnibase_infra/nodes/handlers/db/contract.yaml +72 -0
- omnibase_infra/nodes/handlers/graph/contract.yaml +127 -0
- omnibase_infra/nodes/handlers/http/contract.yaml +74 -0
- omnibase_infra/nodes/handlers/intent/contract.yaml +66 -0
- omnibase_infra/nodes/handlers/mcp/contract.yaml +69 -0
- omnibase_infra/nodes/handlers/vault/contract.yaml +91 -0
- omnibase_infra/nodes/node_intent_storage_effect/__init__.py +50 -0
- omnibase_infra/nodes/node_intent_storage_effect/contract.yaml +194 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/__init__.py +24 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_input.py +141 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_output.py +130 -0
- omnibase_infra/nodes/node_intent_storage_effect/node.py +94 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/__init__.py +35 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/registry_infra_intent_storage.py +294 -0
- omnibase_infra/nodes/node_ledger_projection_compute/__init__.py +50 -0
- omnibase_infra/nodes/node_ledger_projection_compute/contract.yaml +104 -0
- omnibase_infra/nodes/node_ledger_projection_compute/node.py +284 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/__init__.py +29 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/registry_infra_ledger_projection.py +118 -0
- omnibase_infra/nodes/node_ledger_write_effect/__init__.py +82 -0
- omnibase_infra/nodes/node_ledger_write_effect/contract.yaml +200 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/__init__.py +22 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_append.py +372 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_query.py +597 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/__init__.py +31 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_append_result.py +54 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_entry.py +92 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query.py +53 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query_result.py +41 -0
- omnibase_infra/nodes/node_ledger_write_effect/node.py +89 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/__init__.py +13 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/protocol_ledger_persistence.py +127 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/registry_infra_ledger_write.py +121 -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 +482 -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 +694 -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 +528 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +393 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +743 -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 +220 -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 +112 -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 +215 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +677 -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 +417 -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 +222 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +37 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +87 -0
- omnibase_infra/nodes/reducers/models/model_payload_ledger_append.py +133 -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 +1138 -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 +449 -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 +104 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_container_aware.py +200 -0
- omnibase_infra/protocols/protocol_dispatch_engine.py +152 -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 +445 -0
- omnibase_infra/runtime/binding_config_resolver.py +2771 -0
- omnibase_infra/runtime/binding_resolver.py +753 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/constants_notification.py +75 -0
- omnibase_infra/runtime/constants_security.py +70 -0
- omnibase_infra/runtime/contract_handler_discovery.py +587 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +51 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/contract_loaders/operation_bindings_loader.py +789 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/emit_daemon/__init__.py +97 -0
- omnibase_infra/runtime/emit_daemon/cli.py +844 -0
- omnibase_infra/runtime/emit_daemon/client.py +811 -0
- omnibase_infra/runtime/emit_daemon/config.py +535 -0
- omnibase_infra/runtime/emit_daemon/daemon.py +812 -0
- omnibase_infra/runtime/emit_daemon/event_registry.py +477 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_request.py +139 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_response.py +191 -0
- omnibase_infra/runtime/emit_daemon/queue.py +618 -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/event_bus_subcontract_wiring.py +466 -0
- omnibase_infra/runtime/handler_bootstrap_source.py +507 -0
- omnibase_infra/runtime/handler_contract_config_loader.py +603 -0
- omnibase_infra/runtime/handler_contract_source.py +750 -0
- omnibase_infra/runtime/handler_identity.py +81 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2046 -0
- omnibase_infra/runtime/handler_registry.py +329 -0
- omnibase_infra/runtime/handler_source_resolver.py +367 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kafka_contract_source.py +984 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +402 -0
- omnibase_infra/runtime/mixins/__init__.py +24 -0
- omnibase_infra/runtime/mixins/mixin_projector_notification_publishing.py +566 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +778 -0
- omnibase_infra/runtime/models/__init__.py +229 -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_contract_load_result.py +224 -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 +229 -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_notification_config.py +171 -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_contract_config.py +268 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +625 -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_security_config.py +109 -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/models/model_transition_notification_outbox_config.py +112 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_metrics.py +140 -0
- omnibase_infra/runtime/models/model_transition_notification_publisher_metrics.py +357 -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 +1330 -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 +37 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/publisher_topic_scoped.py +294 -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 +445 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_contract_source.py +693 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1185 -0
- omnibase_infra/runtime/runtime_contract_config_loader.py +406 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2112 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1651 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +2350 -0
- omnibase_infra/runtime/service_runtime_host_process.py +3493 -0
- omnibase_infra/runtime/transition_notification_outbox.py +1190 -0
- omnibase_infra/runtime/transition_notification_publisher.py +765 -0
- omnibase_infra/runtime/util_container_wiring.py +1124 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +723 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/schemas/schema_transition_notification_outbox.sql +245 -0
- omnibase_infra/services/__init__.py +89 -0
- omnibase_infra/services/corpus_capture.py +684 -0
- omnibase_infra/services/mcp/__init__.py +31 -0
- omnibase_infra/services/mcp/mcp_server_lifecycle.py +449 -0
- omnibase_infra/services/mcp/service_mcp_tool_discovery.py +411 -0
- omnibase_infra/services/mcp/service_mcp_tool_registry.py +329 -0
- omnibase_infra/services/mcp/service_mcp_tool_sync.py +565 -0
- omnibase_infra/services/registry_api/__init__.py +40 -0
- omnibase_infra/services/registry_api/main.py +261 -0
- omnibase_infra/services/registry_api/models/__init__.py +66 -0
- omnibase_infra/services/registry_api/models/model_capability_widget_mapping.py +38 -0
- omnibase_infra/services/registry_api/models/model_pagination_info.py +48 -0
- omnibase_infra/services/registry_api/models/model_registry_discovery_response.py +73 -0
- omnibase_infra/services/registry_api/models/model_registry_health_response.py +49 -0
- omnibase_infra/services/registry_api/models/model_registry_instance_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_node_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_summary.py +60 -0
- omnibase_infra/services/registry_api/models/model_response_list_instances.py +43 -0
- omnibase_infra/services/registry_api/models/model_response_list_nodes.py +51 -0
- omnibase_infra/services/registry_api/models/model_warning.py +49 -0
- omnibase_infra/services/registry_api/models/model_widget_defaults.py +28 -0
- omnibase_infra/services/registry_api/models/model_widget_mapping.py +51 -0
- omnibase_infra/services/registry_api/routes.py +371 -0
- omnibase_infra/services/registry_api/service.py +837 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +898 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +699 -0
- omnibase_infra/services/service_timeout_scanner.py +394 -0
- omnibase_infra/services/session/__init__.py +56 -0
- omnibase_infra/services/session/config_consumer.py +137 -0
- omnibase_infra/services/session/config_store.py +139 -0
- omnibase_infra/services/session/consumer.py +1007 -0
- omnibase_infra/services/session/protocol_session_aggregator.py +117 -0
- omnibase_infra/services/session/store.py +997 -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/topics/__init__.py +45 -0
- omnibase_infra/topics/platform_topic_suffixes.py +140 -0
- omnibase_infra/topics/util_topic_composition.py +95 -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 +29 -0
- omnibase_infra/types/typed_dict/typed_dict_envelope_build_params.py +115 -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 +117 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_atomic_file.py +261 -0
- omnibase_infra/utils/util_consumer_group.py +232 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_db_transaction.py +239 -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_retry_optimistic.py +281 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/contracts/security.validation.yaml +114 -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 +1514 -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 +2033 -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 +513 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.6.dist-info/METADATA +197 -0
- omnibase_infra-0.2.6.dist-info/RECORD +833 -0
- omnibase_infra-0.2.6.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.6.dist-info/entry_points.txt +5 -0
- omnibase_infra-0.2.6.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler for partial failure retry operations.
|
|
4
|
+
|
|
5
|
+
This handler routes retry operations to the appropriate backend (Consul or PostgreSQL)
|
|
6
|
+
based on the target_backend field in the request. It is used to recover from partial
|
|
7
|
+
registration failures where one backend succeeded but another failed.
|
|
8
|
+
|
|
9
|
+
Architecture:
|
|
10
|
+
This handler follows the ONEX handler pattern:
|
|
11
|
+
- Receives typed input with target_backend specification
|
|
12
|
+
- Routes to the appropriate backend based on target_backend field
|
|
13
|
+
- Executes a single responsibility (targeted retry)
|
|
14
|
+
- Returns typed output (ModelBackendResult)
|
|
15
|
+
- Uses error sanitization for security
|
|
16
|
+
|
|
17
|
+
Handler Responsibilities:
|
|
18
|
+
- Accept both Consul and PostgreSQL clients for routing flexibility
|
|
19
|
+
- Route to correct backend based on target_backend field
|
|
20
|
+
- Execute retry operation against targeted backend
|
|
21
|
+
- Track operation timing
|
|
22
|
+
- Sanitize errors to prevent credential exposure
|
|
23
|
+
|
|
24
|
+
Idempotency:
|
|
25
|
+
This handler expects an idempotency_key in the request for safe retry semantics.
|
|
26
|
+
The actual idempotency enforcement is handled by the caller or middleware,
|
|
27
|
+
but the handler respects the key by delegating to idempotent backend operations.
|
|
28
|
+
|
|
29
|
+
Coroutine Safety:
|
|
30
|
+
This handler is stateless and coroutine-safe for concurrent calls
|
|
31
|
+
with different request instances.
|
|
32
|
+
|
|
33
|
+
Related Tickets:
|
|
34
|
+
- OMN-1103: NodeRegistryEffect refactoring to declarative pattern
|
|
35
|
+
- OMN-954: Partial failure scenario testing
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
from __future__ import annotations
|
|
39
|
+
|
|
40
|
+
import time
|
|
41
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
42
|
+
from uuid import UUID
|
|
43
|
+
|
|
44
|
+
from omnibase_core.models.primitives import ModelSemVer
|
|
45
|
+
from omnibase_infra.enums import EnumBackendType
|
|
46
|
+
from omnibase_infra.errors import (
|
|
47
|
+
InfraAuthenticationError,
|
|
48
|
+
InfraConnectionError,
|
|
49
|
+
InfraTimeoutError,
|
|
50
|
+
)
|
|
51
|
+
from omnibase_infra.nodes.node_registry_effect.models import ModelBackendResult
|
|
52
|
+
from omnibase_infra.utils import sanitize_backend_error, sanitize_error_message
|
|
53
|
+
|
|
54
|
+
if TYPE_CHECKING:
|
|
55
|
+
from omnibase_core.enums.enum_node_kind import EnumNodeKind
|
|
56
|
+
from omnibase_infra.nodes.effects.protocol_consul_client import ProtocolConsulClient
|
|
57
|
+
from omnibase_infra.nodes.effects.protocol_postgres_adapter import (
|
|
58
|
+
ProtocolPostgresAdapter,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@runtime_checkable
|
|
63
|
+
class ProtocolPartialRetryRequest(Protocol):
|
|
64
|
+
"""Protocol for partial retry request objects.
|
|
65
|
+
|
|
66
|
+
Defines the required attributes for a request to the HandlerPartialRetry handler.
|
|
67
|
+
This allows duck typing with any request object that provides these fields.
|
|
68
|
+
|
|
69
|
+
Attributes:
|
|
70
|
+
node_id: Unique identifier for the node being registered.
|
|
71
|
+
node_type: Type of ONEX node (effect, compute, reducer, orchestrator).
|
|
72
|
+
node_version: Semantic version of the node.
|
|
73
|
+
target_backend: Backend to retry (EnumBackendType.CONSUL or EnumBackendType.POSTGRES).
|
|
74
|
+
idempotency_key: Optional key for idempotent retry semantics.
|
|
75
|
+
service_name: Optional service name for Consul registration.
|
|
76
|
+
tags: Tags for Consul service discovery.
|
|
77
|
+
health_check_config: Optional Consul health check configuration.
|
|
78
|
+
endpoints: Dict of endpoint type to URL for PostgreSQL.
|
|
79
|
+
metadata: Additional metadata for PostgreSQL registration.
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
node_id: UUID
|
|
83
|
+
node_type: EnumNodeKind
|
|
84
|
+
node_version: ModelSemVer
|
|
85
|
+
target_backend: EnumBackendType
|
|
86
|
+
idempotency_key: str | None
|
|
87
|
+
service_name: str | None
|
|
88
|
+
tags: list[str]
|
|
89
|
+
health_check_config: dict[str, str] | None
|
|
90
|
+
endpoints: dict[str, str]
|
|
91
|
+
metadata: dict[str, str]
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class HandlerPartialRetry:
|
|
95
|
+
"""Handler for partial failure retry operations.
|
|
96
|
+
|
|
97
|
+
Routes retry operations to the appropriate backend (Consul or PostgreSQL)
|
|
98
|
+
based on the target_backend field in the request. This handler is used to
|
|
99
|
+
recover from partial registration failures where one backend succeeded
|
|
100
|
+
but another failed.
|
|
101
|
+
|
|
102
|
+
Backend Routing:
|
|
103
|
+
- target_backend=EnumBackendType.CONSUL: Routes to Consul registration
|
|
104
|
+
- target_backend=EnumBackendType.POSTGRES: Routes to PostgreSQL upsert
|
|
105
|
+
- Unknown values: Returns error result
|
|
106
|
+
|
|
107
|
+
Error Handling:
|
|
108
|
+
All errors are sanitized before inclusion in the result to prevent
|
|
109
|
+
credential exposure. The sanitization uses an allowlist approach,
|
|
110
|
+
only including known-safe error patterns.
|
|
111
|
+
|
|
112
|
+
Attributes:
|
|
113
|
+
_consul_client: Protocol-compliant Consul client for service registration.
|
|
114
|
+
_postgres_adapter: Protocol-compliant PostgreSQL adapter for persistence.
|
|
115
|
+
|
|
116
|
+
Example:
|
|
117
|
+
>>> from unittest.mock import AsyncMock
|
|
118
|
+
>>> consul_client = AsyncMock()
|
|
119
|
+
>>> postgres_adapter = AsyncMock()
|
|
120
|
+
>>> consul_client.register_service.return_value = ModelBackendResult(
|
|
121
|
+
... success=True, duration_ms=0.0, backend_id="consul"
|
|
122
|
+
... )
|
|
123
|
+
>>> handler = HandlerPartialRetry(consul_client, postgres_adapter)
|
|
124
|
+
>>> # Call handler.handle(request, correlation_id) in async context
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
def __init__(
|
|
128
|
+
self,
|
|
129
|
+
consul_client: ProtocolConsulClient,
|
|
130
|
+
postgres_adapter: ProtocolPostgresAdapter,
|
|
131
|
+
) -> None:
|
|
132
|
+
"""Initialize handler with both backend clients.
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
consul_client: Protocol-compliant Consul client for service registration.
|
|
136
|
+
Must implement ProtocolConsulClient with async register_service method.
|
|
137
|
+
postgres_adapter: Protocol-compliant PostgreSQL adapter for persistence.
|
|
138
|
+
Must implement ProtocolPostgresAdapter with async upsert method.
|
|
139
|
+
"""
|
|
140
|
+
self._consul_client = consul_client
|
|
141
|
+
self._postgres_adapter = postgres_adapter
|
|
142
|
+
|
|
143
|
+
async def handle(
|
|
144
|
+
self,
|
|
145
|
+
request: ProtocolPartialRetryRequest,
|
|
146
|
+
correlation_id: UUID,
|
|
147
|
+
) -> ModelBackendResult:
|
|
148
|
+
"""Execute partial failure retry operation.
|
|
149
|
+
|
|
150
|
+
Routes to the appropriate backend based on target_backend field and
|
|
151
|
+
executes the retry operation. Handles both success and failure cases
|
|
152
|
+
with appropriate timing and error sanitization.
|
|
153
|
+
|
|
154
|
+
Args:
|
|
155
|
+
request: Retry request with target backend specification including:
|
|
156
|
+
- node_id: UUID of the node to register
|
|
157
|
+
- node_type: ONEX node type (effect, compute, reducer, orchestrator)
|
|
158
|
+
- target_backend: EnumBackendType.CONSUL or EnumBackendType.POSTGRES
|
|
159
|
+
- idempotency_key: Optional key for safe retry semantics
|
|
160
|
+
- service_name: Optional custom service name (for Consul)
|
|
161
|
+
- tags: List of service discovery tags (for Consul)
|
|
162
|
+
- health_check_config: Optional health check configuration (for Consul)
|
|
163
|
+
- endpoints: Dict of endpoint URLs (for PostgreSQL)
|
|
164
|
+
- metadata: Additional metadata (for PostgreSQL)
|
|
165
|
+
|
|
166
|
+
correlation_id: Request correlation ID for distributed tracing.
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
ModelBackendResult with:
|
|
170
|
+
- success: True if retry operation succeeded
|
|
171
|
+
- duration_ms: Time taken for the operation
|
|
172
|
+
- backend_id: The target backend ("consul" or "postgres")
|
|
173
|
+
- correlation_id: The provided correlation ID
|
|
174
|
+
- error: Sanitized error message (only on failure)
|
|
175
|
+
- error_code: Error code for programmatic handling (only on failure)
|
|
176
|
+
|
|
177
|
+
Note:
|
|
178
|
+
This handler does not raise exceptions. All errors are captured
|
|
179
|
+
and returned in the ModelBackendResult to support partial failure
|
|
180
|
+
handling in dual-backend registration scenarios.
|
|
181
|
+
"""
|
|
182
|
+
start_time = time.perf_counter()
|
|
183
|
+
target_backend = request.target_backend
|
|
184
|
+
|
|
185
|
+
if target_backend == EnumBackendType.CONSUL:
|
|
186
|
+
return await self._retry_consul(request, correlation_id, start_time)
|
|
187
|
+
elif target_backend == EnumBackendType.POSTGRES:
|
|
188
|
+
return await self._retry_postgres(request, correlation_id, start_time)
|
|
189
|
+
else:
|
|
190
|
+
# Defensive: This branch handles unexpected enum values that may arise from
|
|
191
|
+
# duck-typed Protocol usage, where callers could pass objects with a
|
|
192
|
+
# target_backend attribute that isn't a valid EnumBackendType member.
|
|
193
|
+
# While static typing prevents this in normal usage, the Protocol pattern
|
|
194
|
+
# allows runtime duck typing that bypasses compile-time checks.
|
|
195
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
196
|
+
error_msg = (
|
|
197
|
+
f"Unknown target backend: {target_backend}. "
|
|
198
|
+
"Expected 'consul' or 'postgres'."
|
|
199
|
+
)
|
|
200
|
+
return ModelBackendResult(
|
|
201
|
+
success=False,
|
|
202
|
+
error=error_msg,
|
|
203
|
+
error_code="INVALID_TARGET_BACKEND",
|
|
204
|
+
duration_ms=duration_ms,
|
|
205
|
+
backend_id=target_backend.value
|
|
206
|
+
if isinstance(target_backend, EnumBackendType)
|
|
207
|
+
else str(target_backend),
|
|
208
|
+
correlation_id=correlation_id,
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
async def _retry_consul(
|
|
212
|
+
self,
|
|
213
|
+
request: ProtocolPartialRetryRequest,
|
|
214
|
+
correlation_id: UUID,
|
|
215
|
+
start_time: float,
|
|
216
|
+
) -> ModelBackendResult:
|
|
217
|
+
"""Execute Consul registration retry.
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
request: Retry request with Consul registration parameters.
|
|
221
|
+
correlation_id: Request correlation ID for distributed tracing.
|
|
222
|
+
start_time: Operation start time for duration tracking.
|
|
223
|
+
|
|
224
|
+
Returns:
|
|
225
|
+
ModelBackendResult with Consul operation outcome.
|
|
226
|
+
"""
|
|
227
|
+
# Generate service identifiers following ONEX naming convention
|
|
228
|
+
service_id = f"onex-{request.node_type.value}-{request.node_id}"
|
|
229
|
+
service_name = request.service_name or f"onex-{request.node_type.value}"
|
|
230
|
+
|
|
231
|
+
try:
|
|
232
|
+
result = await self._consul_client.register_service(
|
|
233
|
+
service_id=service_id,
|
|
234
|
+
service_name=service_name,
|
|
235
|
+
tags=request.tags,
|
|
236
|
+
health_check=request.health_check_config,
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
240
|
+
|
|
241
|
+
if result.success:
|
|
242
|
+
return ModelBackendResult(
|
|
243
|
+
success=True,
|
|
244
|
+
duration_ms=duration_ms,
|
|
245
|
+
backend_id="consul",
|
|
246
|
+
correlation_id=correlation_id,
|
|
247
|
+
)
|
|
248
|
+
else:
|
|
249
|
+
# Client returned failure - sanitize the error message
|
|
250
|
+
sanitized_error = sanitize_backend_error("consul", result.error)
|
|
251
|
+
return ModelBackendResult(
|
|
252
|
+
success=False,
|
|
253
|
+
error=sanitized_error,
|
|
254
|
+
error_code="CONSUL_REGISTRATION_ERROR",
|
|
255
|
+
duration_ms=duration_ms,
|
|
256
|
+
backend_id="consul",
|
|
257
|
+
correlation_id=correlation_id,
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
except (TimeoutError, InfraTimeoutError) as e:
|
|
261
|
+
# Timeout during registration - retriable error
|
|
262
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
263
|
+
sanitized_error = sanitize_error_message(e)
|
|
264
|
+
return ModelBackendResult(
|
|
265
|
+
success=False,
|
|
266
|
+
error=sanitized_error,
|
|
267
|
+
error_code="CONSUL_TIMEOUT_ERROR",
|
|
268
|
+
duration_ms=duration_ms,
|
|
269
|
+
backend_id="consul",
|
|
270
|
+
correlation_id=correlation_id,
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
except InfraAuthenticationError as e:
|
|
274
|
+
# Authentication failure - non-retriable error
|
|
275
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
276
|
+
sanitized_error = sanitize_error_message(e)
|
|
277
|
+
return ModelBackendResult(
|
|
278
|
+
success=False,
|
|
279
|
+
error=sanitized_error,
|
|
280
|
+
error_code="CONSUL_AUTH_ERROR",
|
|
281
|
+
duration_ms=duration_ms,
|
|
282
|
+
backend_id="consul",
|
|
283
|
+
correlation_id=correlation_id,
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
except InfraConnectionError as e:
|
|
287
|
+
# Connection failure - retriable error
|
|
288
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
289
|
+
sanitized_error = sanitize_error_message(e)
|
|
290
|
+
return ModelBackendResult(
|
|
291
|
+
success=False,
|
|
292
|
+
error=sanitized_error,
|
|
293
|
+
error_code="CONSUL_CONNECTION_ERROR",
|
|
294
|
+
duration_ms=duration_ms,
|
|
295
|
+
backend_id="consul",
|
|
296
|
+
correlation_id=correlation_id,
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
except (
|
|
300
|
+
Exception
|
|
301
|
+
) as e: # ONEX: catch-all - external service may raise unexpected exceptions
|
|
302
|
+
# beyond typed infrastructure errors (e.g., HTTP client errors, JSON decode errors,
|
|
303
|
+
# network stack errors). Required to sanitize errors and prevent credential exposure.
|
|
304
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
305
|
+
sanitized_error = sanitize_error_message(e)
|
|
306
|
+
return ModelBackendResult(
|
|
307
|
+
success=False,
|
|
308
|
+
error=sanitized_error,
|
|
309
|
+
error_code="CONSUL_UNKNOWN_ERROR",
|
|
310
|
+
duration_ms=duration_ms,
|
|
311
|
+
backend_id="consul",
|
|
312
|
+
correlation_id=correlation_id,
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
async def _retry_postgres(
|
|
316
|
+
self,
|
|
317
|
+
request: ProtocolPartialRetryRequest,
|
|
318
|
+
correlation_id: UUID,
|
|
319
|
+
start_time: float,
|
|
320
|
+
) -> ModelBackendResult:
|
|
321
|
+
"""Execute PostgreSQL upsert retry.
|
|
322
|
+
|
|
323
|
+
Args:
|
|
324
|
+
request: Retry request with PostgreSQL upsert parameters.
|
|
325
|
+
correlation_id: Request correlation ID for distributed tracing.
|
|
326
|
+
start_time: Operation start time for duration tracking.
|
|
327
|
+
|
|
328
|
+
Returns:
|
|
329
|
+
ModelBackendResult with PostgreSQL operation outcome.
|
|
330
|
+
"""
|
|
331
|
+
try:
|
|
332
|
+
result = await self._postgres_adapter.upsert(
|
|
333
|
+
node_id=request.node_id,
|
|
334
|
+
node_type=request.node_type,
|
|
335
|
+
node_version=request.node_version,
|
|
336
|
+
endpoints=request.endpoints,
|
|
337
|
+
metadata=request.metadata,
|
|
338
|
+
)
|
|
339
|
+
|
|
340
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
341
|
+
|
|
342
|
+
if result.success:
|
|
343
|
+
return ModelBackendResult(
|
|
344
|
+
success=True,
|
|
345
|
+
duration_ms=duration_ms,
|
|
346
|
+
backend_id="postgres",
|
|
347
|
+
correlation_id=correlation_id,
|
|
348
|
+
)
|
|
349
|
+
else:
|
|
350
|
+
# Sanitize backend error to avoid exposing secrets
|
|
351
|
+
sanitized_error = sanitize_backend_error("postgres", result.error)
|
|
352
|
+
return ModelBackendResult(
|
|
353
|
+
success=False,
|
|
354
|
+
error=sanitized_error,
|
|
355
|
+
error_code="POSTGRES_UPSERT_ERROR",
|
|
356
|
+
duration_ms=duration_ms,
|
|
357
|
+
backend_id="postgres",
|
|
358
|
+
correlation_id=correlation_id,
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
except (TimeoutError, InfraTimeoutError) as e:
|
|
362
|
+
# Timeout during upsert - retriable error
|
|
363
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
364
|
+
sanitized_error = sanitize_error_message(e)
|
|
365
|
+
return ModelBackendResult(
|
|
366
|
+
success=False,
|
|
367
|
+
error=sanitized_error,
|
|
368
|
+
error_code="POSTGRES_TIMEOUT_ERROR",
|
|
369
|
+
duration_ms=duration_ms,
|
|
370
|
+
backend_id="postgres",
|
|
371
|
+
correlation_id=correlation_id,
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
except InfraAuthenticationError as e:
|
|
375
|
+
# Authentication failure - non-retriable error
|
|
376
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
377
|
+
sanitized_error = sanitize_error_message(e)
|
|
378
|
+
return ModelBackendResult(
|
|
379
|
+
success=False,
|
|
380
|
+
error=sanitized_error,
|
|
381
|
+
error_code="POSTGRES_AUTH_ERROR",
|
|
382
|
+
duration_ms=duration_ms,
|
|
383
|
+
backend_id="postgres",
|
|
384
|
+
correlation_id=correlation_id,
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
except InfraConnectionError as e:
|
|
388
|
+
# Connection failure - retriable error
|
|
389
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
390
|
+
sanitized_error = sanitize_error_message(e)
|
|
391
|
+
return ModelBackendResult(
|
|
392
|
+
success=False,
|
|
393
|
+
error=sanitized_error,
|
|
394
|
+
error_code="POSTGRES_CONNECTION_ERROR",
|
|
395
|
+
duration_ms=duration_ms,
|
|
396
|
+
backend_id="postgres",
|
|
397
|
+
correlation_id=correlation_id,
|
|
398
|
+
)
|
|
399
|
+
|
|
400
|
+
except (
|
|
401
|
+
Exception
|
|
402
|
+
) as e: # ONEX: catch-all - database adapter may raise unexpected exceptions
|
|
403
|
+
# beyond typed infrastructure errors (e.g., driver errors, encoding errors,
|
|
404
|
+
# connection pool errors). Required to sanitize errors and prevent credential exposure.
|
|
405
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
406
|
+
sanitized_error = sanitize_error_message(e)
|
|
407
|
+
return ModelBackendResult(
|
|
408
|
+
success=False,
|
|
409
|
+
error=sanitized_error,
|
|
410
|
+
error_code="POSTGRES_UNKNOWN_ERROR",
|
|
411
|
+
duration_ms=duration_ms,
|
|
412
|
+
backend_id="postgres",
|
|
413
|
+
correlation_id=correlation_id,
|
|
414
|
+
)
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
__all__: list[str] = ["HandlerPartialRetry", "ProtocolPartialRetryRequest"]
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler for PostgreSQL registration record deactivation.
|
|
4
|
+
|
|
5
|
+
This handler encapsulates PostgreSQL-specific deactivation logic for the
|
|
6
|
+
NodeRegistryEffect node, following the declarative node pattern where handlers
|
|
7
|
+
are extracted for testability and separation of concerns.
|
|
8
|
+
|
|
9
|
+
Architecture:
|
|
10
|
+
HandlerPostgresDeactivate is responsible for:
|
|
11
|
+
- Executing deactivation operations against the PostgreSQL adapter
|
|
12
|
+
- Timing operation duration for observability
|
|
13
|
+
- Sanitizing error messages before inclusion in results
|
|
14
|
+
- Returning structured ModelBackendResult
|
|
15
|
+
|
|
16
|
+
The deactivation operation performs a soft delete by marking the registration
|
|
17
|
+
record as inactive, preserving historical data while removing the node from
|
|
18
|
+
active service discovery.
|
|
19
|
+
|
|
20
|
+
This extraction supports the declarative node pattern where NodeRegistryEffect
|
|
21
|
+
delegates backend-specific operations to dedicated handlers.
|
|
22
|
+
|
|
23
|
+
Coroutine Safety:
|
|
24
|
+
This handler is stateless and coroutine-safe for concurrent calls
|
|
25
|
+
with different request instances. Thread-safety depends on the
|
|
26
|
+
underlying ProtocolPostgresAdapter implementation.
|
|
27
|
+
|
|
28
|
+
Related:
|
|
29
|
+
- NodeRegistryEffect: Parent effect node that coordinates handlers
|
|
30
|
+
- ProtocolPostgresAdapter: Protocol defining the deactivate interface
|
|
31
|
+
- ModelBackendResult: Structured result model for backend operations
|
|
32
|
+
- ModelRegistryRequest: Input request model
|
|
33
|
+
- OMN-1103: Refactoring ticket for handler extraction
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
from __future__ import annotations
|
|
37
|
+
|
|
38
|
+
import time
|
|
39
|
+
from typing import TYPE_CHECKING
|
|
40
|
+
from uuid import UUID
|
|
41
|
+
|
|
42
|
+
from omnibase_infra.errors import (
|
|
43
|
+
InfraAuthenticationError,
|
|
44
|
+
InfraConnectionError,
|
|
45
|
+
InfraTimeoutError,
|
|
46
|
+
)
|
|
47
|
+
from omnibase_infra.nodes.node_registry_effect.models import ModelBackendResult
|
|
48
|
+
from omnibase_infra.utils import sanitize_backend_error, sanitize_error_message
|
|
49
|
+
|
|
50
|
+
if TYPE_CHECKING:
|
|
51
|
+
from omnibase_infra.nodes.effects.protocol_postgres_adapter import (
|
|
52
|
+
ProtocolPostgresAdapter,
|
|
53
|
+
)
|
|
54
|
+
from omnibase_infra.nodes.node_registry_effect.models import ModelRegistryRequest
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class HandlerPostgresDeactivate:
|
|
58
|
+
"""Handler for PostgreSQL registration record deactivation.
|
|
59
|
+
|
|
60
|
+
Encapsulates all PostgreSQL-specific deactivation logic extracted from
|
|
61
|
+
NodeRegistryEffect for declarative node compliance. The handler provides
|
|
62
|
+
a clean interface for executing deactivation operations with proper timing
|
|
63
|
+
and error sanitization.
|
|
64
|
+
|
|
65
|
+
The deactivation operation marks a node registration as inactive (soft delete)
|
|
66
|
+
rather than performing a hard delete, preserving audit trails and enabling
|
|
67
|
+
potential reactivation.
|
|
68
|
+
|
|
69
|
+
Attributes:
|
|
70
|
+
_postgres_adapter: Protocol-compliant PostgreSQL adapter.
|
|
71
|
+
|
|
72
|
+
Example:
|
|
73
|
+
>>> from unittest.mock import AsyncMock
|
|
74
|
+
>>> adapter = AsyncMock()
|
|
75
|
+
>>> adapter.deactivate.return_value = ModelBackendResult(success=True, backend_id="postgres")
|
|
76
|
+
>>> handler = HandlerPostgresDeactivate(adapter)
|
|
77
|
+
>>> result = await handler.handle(request, correlation_id)
|
|
78
|
+
>>> result.success
|
|
79
|
+
True
|
|
80
|
+
|
|
81
|
+
See Also:
|
|
82
|
+
- NodeRegistryEffect: Parent node that uses this handler
|
|
83
|
+
- ProtocolPostgresAdapter: Protocol for PostgreSQL operations
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
def __init__(self, postgres_adapter: ProtocolPostgresAdapter) -> None:
|
|
87
|
+
"""Initialize handler with PostgreSQL adapter.
|
|
88
|
+
|
|
89
|
+
Args:
|
|
90
|
+
postgres_adapter: Protocol-compliant PostgreSQL adapter for
|
|
91
|
+
executing registration record deactivation operations.
|
|
92
|
+
"""
|
|
93
|
+
self._postgres_adapter = postgres_adapter
|
|
94
|
+
|
|
95
|
+
async def handle(
|
|
96
|
+
self,
|
|
97
|
+
request: ModelRegistryRequest,
|
|
98
|
+
correlation_id: UUID,
|
|
99
|
+
) -> ModelBackendResult:
|
|
100
|
+
"""Execute PostgreSQL registration record deactivation.
|
|
101
|
+
|
|
102
|
+
Performs the deactivation operation against the PostgreSQL adapter with:
|
|
103
|
+
- Operation timing via time.perf_counter()
|
|
104
|
+
- Protocol call to adapter.deactivate()
|
|
105
|
+
- Error sanitization for security
|
|
106
|
+
- Structured result construction
|
|
107
|
+
|
|
108
|
+
The deactivation marks the registration record as inactive without
|
|
109
|
+
deleting the underlying data, supporting audit requirements and
|
|
110
|
+
potential reactivation scenarios.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
request: Registration request containing the node_id to deactivate.
|
|
114
|
+
correlation_id: Request correlation ID for distributed tracing.
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
ModelBackendResult with:
|
|
118
|
+
- success: True if deactivation completed successfully
|
|
119
|
+
- error: Sanitized error message if failed
|
|
120
|
+
- error_code: Error code for programmatic handling
|
|
121
|
+
- duration_ms: Operation duration in milliseconds
|
|
122
|
+
- backend_id: Set to "postgres"
|
|
123
|
+
- correlation_id: Passed through for tracing
|
|
124
|
+
|
|
125
|
+
Note:
|
|
126
|
+
Error messages are sanitized using sanitize_backend_error to
|
|
127
|
+
prevent exposure of connection strings, credentials, or other
|
|
128
|
+
sensitive information in logs and responses.
|
|
129
|
+
"""
|
|
130
|
+
start_time = time.perf_counter()
|
|
131
|
+
|
|
132
|
+
try:
|
|
133
|
+
result = await self._postgres_adapter.deactivate(
|
|
134
|
+
node_id=request.node_id,
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
138
|
+
|
|
139
|
+
if result.success:
|
|
140
|
+
return ModelBackendResult(
|
|
141
|
+
success=True,
|
|
142
|
+
duration_ms=duration_ms,
|
|
143
|
+
backend_id="postgres",
|
|
144
|
+
correlation_id=correlation_id,
|
|
145
|
+
)
|
|
146
|
+
else:
|
|
147
|
+
# Sanitize backend error to avoid exposing secrets
|
|
148
|
+
# (connection strings, credentials, internal hostnames)
|
|
149
|
+
sanitized_error = sanitize_backend_error("postgres", result.error)
|
|
150
|
+
return ModelBackendResult(
|
|
151
|
+
success=False,
|
|
152
|
+
error=sanitized_error,
|
|
153
|
+
error_code="POSTGRES_DEACTIVATION_ERROR",
|
|
154
|
+
duration_ms=duration_ms,
|
|
155
|
+
backend_id="postgres",
|
|
156
|
+
correlation_id=correlation_id,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
except (TimeoutError, InfraTimeoutError) as e:
|
|
160
|
+
# Timeout during deactivation - retriable error
|
|
161
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
162
|
+
sanitized_error = sanitize_error_message(e)
|
|
163
|
+
return ModelBackendResult(
|
|
164
|
+
success=False,
|
|
165
|
+
error=sanitized_error,
|
|
166
|
+
error_code="POSTGRES_TIMEOUT_ERROR",
|
|
167
|
+
duration_ms=duration_ms,
|
|
168
|
+
backend_id="postgres",
|
|
169
|
+
correlation_id=correlation_id,
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
except InfraAuthenticationError as e:
|
|
173
|
+
# Authentication failure - non-retriable error
|
|
174
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
175
|
+
sanitized_error = sanitize_error_message(e)
|
|
176
|
+
return ModelBackendResult(
|
|
177
|
+
success=False,
|
|
178
|
+
error=sanitized_error,
|
|
179
|
+
error_code="POSTGRES_AUTH_ERROR",
|
|
180
|
+
duration_ms=duration_ms,
|
|
181
|
+
backend_id="postgres",
|
|
182
|
+
correlation_id=correlation_id,
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
except InfraConnectionError as e:
|
|
186
|
+
# Connection failure - retriable error
|
|
187
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
188
|
+
sanitized_error = sanitize_error_message(e)
|
|
189
|
+
return ModelBackendResult(
|
|
190
|
+
success=False,
|
|
191
|
+
error=sanitized_error,
|
|
192
|
+
error_code="POSTGRES_CONNECTION_ERROR",
|
|
193
|
+
duration_ms=duration_ms,
|
|
194
|
+
backend_id="postgres",
|
|
195
|
+
correlation_id=correlation_id,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
except (
|
|
199
|
+
Exception
|
|
200
|
+
) as e: # ONEX: catch-all - database adapter may raise unexpected exceptions
|
|
201
|
+
# beyond typed infrastructure errors (e.g., driver errors, encoding errors,
|
|
202
|
+
# connection pool errors). Required to sanitize errors and prevent credential exposure.
|
|
203
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
204
|
+
sanitized_error = sanitize_error_message(e)
|
|
205
|
+
return ModelBackendResult(
|
|
206
|
+
success=False,
|
|
207
|
+
error=sanitized_error,
|
|
208
|
+
error_code="POSTGRES_UNKNOWN_ERROR",
|
|
209
|
+
duration_ms=duration_ms,
|
|
210
|
+
backend_id="postgres",
|
|
211
|
+
correlation_id=correlation_id,
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
__all__: list[str] = ["HandlerPostgresDeactivate"]
|