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,70 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handlers for NodeRegistryEffect operations.
|
|
4
|
+
|
|
5
|
+
This package contains the extracted handlers for the NodeRegistryEffect node,
|
|
6
|
+
following the declarative node pattern where backend-specific operations are
|
|
7
|
+
encapsulated in dedicated handler classes.
|
|
8
|
+
|
|
9
|
+
Available Handlers:
|
|
10
|
+
HandlerConsulRegister: Consul service registration handler.
|
|
11
|
+
HandlerConsulDeregister: Consul service deregistration handler.
|
|
12
|
+
HandlerPostgresUpsert: PostgreSQL registration record upsert handler.
|
|
13
|
+
HandlerPostgresDeactivate: PostgreSQL registration deactivation handler.
|
|
14
|
+
HandlerPartialRetry: Targeted retry handler for partial failures.
|
|
15
|
+
|
|
16
|
+
Architecture:
|
|
17
|
+
These handlers are used by NodeRegistryEffect to execute backend-specific
|
|
18
|
+
operations while maintaining clean separation of concerns. Each handler
|
|
19
|
+
is responsible for:
|
|
20
|
+
- Operation timing and observability
|
|
21
|
+
- Error sanitization for security
|
|
22
|
+
- Structured result construction
|
|
23
|
+
|
|
24
|
+
Shared Patterns:
|
|
25
|
+
All handlers share a common error handling pattern:
|
|
26
|
+
- TimeoutError/InfraTimeoutError: Returns *_TIMEOUT_ERROR code
|
|
27
|
+
- InfraAuthenticationError: Returns *_AUTH_ERROR code (non-retriable)
|
|
28
|
+
- InfraConnectionError: Returns *_CONNECTION_ERROR code (retriable)
|
|
29
|
+
- Exception: Returns *_UNKNOWN_ERROR code
|
|
30
|
+
|
|
31
|
+
Each handler sanitizes errors via sanitize_backend_error() or
|
|
32
|
+
sanitize_error_message() to prevent credential exposure.
|
|
33
|
+
|
|
34
|
+
NOTE: The exception handling blocks are intentionally duplicated across
|
|
35
|
+
handlers rather than extracted to a shared helper. This keeps each handler
|
|
36
|
+
self-contained and allows for handler-specific error codes (e.g.,
|
|
37
|
+
CONSUL_REGISTRATION_ERROR vs POSTGRES_UPSERT_ERROR). The ~50 lines of
|
|
38
|
+
duplication per handler was evaluated and deemed acceptable for clarity
|
|
39
|
+
over creating a parameterized helper that would reduce readability.
|
|
40
|
+
|
|
41
|
+
Related:
|
|
42
|
+
- NodeRegistryEffect: Parent effect node coordinating handlers
|
|
43
|
+
- OMN-1103: Refactoring ticket for handler extraction
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
from __future__ import annotations
|
|
47
|
+
|
|
48
|
+
from omnibase_infra.nodes.node_registry_effect.handlers.handler_consul_deregister import (
|
|
49
|
+
HandlerConsulDeregister,
|
|
50
|
+
)
|
|
51
|
+
from omnibase_infra.nodes.node_registry_effect.handlers.handler_consul_register import (
|
|
52
|
+
HandlerConsulRegister,
|
|
53
|
+
)
|
|
54
|
+
from omnibase_infra.nodes.node_registry_effect.handlers.handler_partial_retry import (
|
|
55
|
+
HandlerPartialRetry,
|
|
56
|
+
)
|
|
57
|
+
from omnibase_infra.nodes.node_registry_effect.handlers.handler_postgres_deactivate import (
|
|
58
|
+
HandlerPostgresDeactivate,
|
|
59
|
+
)
|
|
60
|
+
from omnibase_infra.nodes.node_registry_effect.handlers.handler_postgres_upsert import (
|
|
61
|
+
HandlerPostgresUpsert,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
__all__: list[str] = [
|
|
65
|
+
"HandlerConsulDeregister",
|
|
66
|
+
"HandlerConsulRegister",
|
|
67
|
+
"HandlerPartialRetry",
|
|
68
|
+
"HandlerPostgresDeactivate",
|
|
69
|
+
"HandlerPostgresUpsert",
|
|
70
|
+
]
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler for Consul service deregistration.
|
|
4
|
+
|
|
5
|
+
This handler encapsulates all Consul-specific deregistration logic extracted from
|
|
6
|
+
the legacy NodeRegistryEffect implementation as part of the OMN-1103 refactoring.
|
|
7
|
+
|
|
8
|
+
Architecture:
|
|
9
|
+
This handler follows the ONEX handler pattern:
|
|
10
|
+
- Receives typed input (ModelRegistryRequest)
|
|
11
|
+
- Executes a single responsibility (Consul deregistration)
|
|
12
|
+
- Returns typed output (ModelBackendResult)
|
|
13
|
+
- Uses error sanitization for security
|
|
14
|
+
|
|
15
|
+
Handler Responsibilities:
|
|
16
|
+
- Generate service identifier from request (service_id)
|
|
17
|
+
- Execute Consul deregistration via protocol client
|
|
18
|
+
- Track operation timing
|
|
19
|
+
- Sanitize errors to prevent credential exposure
|
|
20
|
+
|
|
21
|
+
Coroutine Safety:
|
|
22
|
+
This handler is stateless and coroutine-safe for concurrent calls
|
|
23
|
+
with different request instances.
|
|
24
|
+
|
|
25
|
+
Related Tickets:
|
|
26
|
+
- OMN-1103: NodeRegistryEffect refactoring to declarative pattern
|
|
27
|
+
- OMN-954: Partial failure scenario testing
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
from __future__ import annotations
|
|
31
|
+
|
|
32
|
+
import time
|
|
33
|
+
from typing import TYPE_CHECKING
|
|
34
|
+
from uuid import UUID
|
|
35
|
+
|
|
36
|
+
from omnibase_infra.errors import (
|
|
37
|
+
InfraAuthenticationError,
|
|
38
|
+
InfraConnectionError,
|
|
39
|
+
InfraTimeoutError,
|
|
40
|
+
)
|
|
41
|
+
from omnibase_infra.nodes.node_registry_effect.models import ModelBackendResult
|
|
42
|
+
from omnibase_infra.utils import sanitize_backend_error, sanitize_error_message
|
|
43
|
+
|
|
44
|
+
if TYPE_CHECKING:
|
|
45
|
+
from omnibase_infra.nodes.effects.protocol_consul_client import ProtocolConsulClient
|
|
46
|
+
from omnibase_infra.nodes.node_registry_effect.models import ModelRegistryRequest
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class HandlerConsulDeregister:
|
|
50
|
+
"""Handler for Consul service deregistration.
|
|
51
|
+
|
|
52
|
+
Encapsulates all Consul-specific deregistration logic extracted from
|
|
53
|
+
NodeRegistryEffect for declarative node compliance. The handler provides
|
|
54
|
+
a clean interface for removing services from Consul service discovery
|
|
55
|
+
with proper timing and error sanitization.
|
|
56
|
+
|
|
57
|
+
Service Naming Convention:
|
|
58
|
+
- service_id: `onex-{node_type}-{node_id}` (unique identifier)
|
|
59
|
+
|
|
60
|
+
Error Handling:
|
|
61
|
+
All errors are sanitized before inclusion in the result to prevent
|
|
62
|
+
credential exposure. The sanitization uses an allowlist approach,
|
|
63
|
+
only including known-safe error patterns.
|
|
64
|
+
|
|
65
|
+
Attributes:
|
|
66
|
+
_consul_client: Protocol-compliant Consul client for service deregistration.
|
|
67
|
+
|
|
68
|
+
Example:
|
|
69
|
+
>>> from unittest.mock import AsyncMock
|
|
70
|
+
>>> consul_client = AsyncMock()
|
|
71
|
+
>>> consul_client.deregister_service.return_value = ModelBackendResult(
|
|
72
|
+
... success=True, duration_ms=0.0, backend_id="consul"
|
|
73
|
+
... )
|
|
74
|
+
>>> handler = HandlerConsulDeregister(consul_client)
|
|
75
|
+
>>> # Call handler.handle(request, correlation_id) in async context
|
|
76
|
+
|
|
77
|
+
See Also:
|
|
78
|
+
- HandlerConsulRegister: Corresponding registration handler
|
|
79
|
+
- NodeRegistryEffect: Parent node that uses this handler
|
|
80
|
+
- ProtocolConsulClient: Protocol for Consul operations
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
def __init__(self, consul_client: ProtocolConsulClient) -> None:
|
|
84
|
+
"""Initialize handler with Consul client.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
consul_client: Protocol-compliant Consul client for deregistration.
|
|
88
|
+
Must implement ProtocolConsulClient with deregister_service.
|
|
89
|
+
"""
|
|
90
|
+
self._consul_client = consul_client
|
|
91
|
+
|
|
92
|
+
async def handle(
|
|
93
|
+
self,
|
|
94
|
+
request: ModelRegistryRequest,
|
|
95
|
+
correlation_id: UUID,
|
|
96
|
+
) -> ModelBackendResult:
|
|
97
|
+
"""Execute Consul service deregistration.
|
|
98
|
+
|
|
99
|
+
Generates the service identifier following ONEX naming conventions and
|
|
100
|
+
delegates deregistration to the Consul client. Handles both success
|
|
101
|
+
and failure cases with appropriate timing and error sanitization.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
request: Deregistration request with node details including:
|
|
105
|
+
- node_id: UUID of the node to deregister
|
|
106
|
+
- node_type: ONEX node type (effect, compute, reducer, orchestrator)
|
|
107
|
+
|
|
108
|
+
correlation_id: Request correlation ID for distributed tracing.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
ModelBackendResult with:
|
|
112
|
+
- success: True if deregistration succeeded
|
|
113
|
+
- duration_ms: Time taken for the operation
|
|
114
|
+
- backend_id: "consul" to identify the backend
|
|
115
|
+
- correlation_id: The provided correlation ID
|
|
116
|
+
- error: Sanitized error message (only on failure)
|
|
117
|
+
- error_code: Error code for programmatic handling (only on failure)
|
|
118
|
+
|
|
119
|
+
Note:
|
|
120
|
+
This handler does not raise exceptions. All errors are captured
|
|
121
|
+
and returned in the ModelBackendResult to support partial failure
|
|
122
|
+
handling in dual-backend deregistration scenarios.
|
|
123
|
+
"""
|
|
124
|
+
start_time = time.perf_counter()
|
|
125
|
+
|
|
126
|
+
# Generate service identifier following ONEX naming convention
|
|
127
|
+
service_id = f"onex-{request.node_type.value}-{request.node_id}"
|
|
128
|
+
|
|
129
|
+
try:
|
|
130
|
+
result = await self._consul_client.deregister_service(
|
|
131
|
+
service_id=service_id,
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
135
|
+
|
|
136
|
+
if result.success:
|
|
137
|
+
return ModelBackendResult(
|
|
138
|
+
success=True,
|
|
139
|
+
duration_ms=duration_ms,
|
|
140
|
+
backend_id="consul",
|
|
141
|
+
correlation_id=correlation_id,
|
|
142
|
+
)
|
|
143
|
+
else:
|
|
144
|
+
# Client returned failure - sanitize the error message
|
|
145
|
+
sanitized_error = sanitize_backend_error("consul", result.error)
|
|
146
|
+
return ModelBackendResult(
|
|
147
|
+
success=False,
|
|
148
|
+
error=sanitized_error,
|
|
149
|
+
error_code="CONSUL_DEREGISTRATION_ERROR",
|
|
150
|
+
duration_ms=duration_ms,
|
|
151
|
+
backend_id="consul",
|
|
152
|
+
correlation_id=correlation_id,
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
except (TimeoutError, InfraTimeoutError) as e:
|
|
156
|
+
# Timeout during deregistration - retriable error
|
|
157
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
158
|
+
sanitized_error = sanitize_error_message(e)
|
|
159
|
+
return ModelBackendResult(
|
|
160
|
+
success=False,
|
|
161
|
+
error=sanitized_error,
|
|
162
|
+
error_code="CONSUL_TIMEOUT_ERROR",
|
|
163
|
+
duration_ms=duration_ms,
|
|
164
|
+
backend_id="consul",
|
|
165
|
+
correlation_id=correlation_id,
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
except InfraAuthenticationError as e:
|
|
169
|
+
# Authentication failure - non-retriable error
|
|
170
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
171
|
+
sanitized_error = sanitize_error_message(e)
|
|
172
|
+
return ModelBackendResult(
|
|
173
|
+
success=False,
|
|
174
|
+
error=sanitized_error,
|
|
175
|
+
error_code="CONSUL_AUTH_ERROR",
|
|
176
|
+
duration_ms=duration_ms,
|
|
177
|
+
backend_id="consul",
|
|
178
|
+
correlation_id=correlation_id,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
except InfraConnectionError as e:
|
|
182
|
+
# Connection failure - retriable error
|
|
183
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
184
|
+
sanitized_error = sanitize_error_message(e)
|
|
185
|
+
return ModelBackendResult(
|
|
186
|
+
success=False,
|
|
187
|
+
error=sanitized_error,
|
|
188
|
+
error_code="CONSUL_CONNECTION_ERROR",
|
|
189
|
+
duration_ms=duration_ms,
|
|
190
|
+
backend_id="consul",
|
|
191
|
+
correlation_id=correlation_id,
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
except (
|
|
195
|
+
Exception
|
|
196
|
+
) as e: # ONEX: catch-all - external service may raise unexpected exceptions
|
|
197
|
+
# beyond typed infrastructure errors (e.g., HTTP client errors, JSON decode errors,
|
|
198
|
+
# network stack errors). Required to sanitize errors and prevent credential exposure.
|
|
199
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
200
|
+
sanitized_error = sanitize_error_message(e)
|
|
201
|
+
return ModelBackendResult(
|
|
202
|
+
success=False,
|
|
203
|
+
error=sanitized_error,
|
|
204
|
+
error_code="CONSUL_UNKNOWN_ERROR",
|
|
205
|
+
duration_ms=duration_ms,
|
|
206
|
+
backend_id="consul",
|
|
207
|
+
correlation_id=correlation_id,
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
__all__: list[str] = ["HandlerConsulDeregister"]
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler for Consul service registration.
|
|
4
|
+
|
|
5
|
+
This handler encapsulates all Consul-specific registration logic extracted from
|
|
6
|
+
the legacy NodeRegistryEffect implementation as part of the OMN-1103 refactoring.
|
|
7
|
+
|
|
8
|
+
Architecture:
|
|
9
|
+
This handler follows the ONEX handler pattern:
|
|
10
|
+
- Receives typed input (ModelRegistryRequest)
|
|
11
|
+
- Executes a single responsibility (Consul registration)
|
|
12
|
+
- Returns typed output (ModelBackendResult)
|
|
13
|
+
- Uses error sanitization for security
|
|
14
|
+
|
|
15
|
+
Handler Responsibilities:
|
|
16
|
+
- Generate service identifiers (service_id, service_name)
|
|
17
|
+
- Execute Consul registration via protocol client
|
|
18
|
+
- Track operation timing
|
|
19
|
+
- Sanitize errors to prevent credential exposure
|
|
20
|
+
|
|
21
|
+
Coroutine Safety:
|
|
22
|
+
This handler is stateless and coroutine-safe for concurrent calls
|
|
23
|
+
with different request instances.
|
|
24
|
+
|
|
25
|
+
Related Tickets:
|
|
26
|
+
- OMN-1103: NodeRegistryEffect refactoring to declarative pattern
|
|
27
|
+
- OMN-954: Partial failure scenario testing
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
from __future__ import annotations
|
|
31
|
+
|
|
32
|
+
import time
|
|
33
|
+
from typing import TYPE_CHECKING
|
|
34
|
+
from uuid import UUID
|
|
35
|
+
|
|
36
|
+
from omnibase_infra.errors import (
|
|
37
|
+
InfraAuthenticationError,
|
|
38
|
+
InfraConnectionError,
|
|
39
|
+
InfraTimeoutError,
|
|
40
|
+
)
|
|
41
|
+
from omnibase_infra.nodes.node_registry_effect.models import ModelBackendResult
|
|
42
|
+
from omnibase_infra.utils import sanitize_backend_error, sanitize_error_message
|
|
43
|
+
|
|
44
|
+
if TYPE_CHECKING:
|
|
45
|
+
from omnibase_infra.nodes.effects.protocol_consul_client import ProtocolConsulClient
|
|
46
|
+
from omnibase_infra.nodes.node_registry_effect.models import ModelRegistryRequest
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class HandlerConsulRegister:
|
|
50
|
+
"""Handler for Consul service registration.
|
|
51
|
+
|
|
52
|
+
Encapsulates all Consul-specific registration logic extracted from
|
|
53
|
+
NodeRegistryEffect for declarative node compliance.
|
|
54
|
+
|
|
55
|
+
Service Naming Convention:
|
|
56
|
+
- service_id: `onex-{node_type}-{node_id}` (unique identifier)
|
|
57
|
+
- service_name: `request.service_name` or `onex-{node_type}` (discovery name)
|
|
58
|
+
|
|
59
|
+
Error Handling:
|
|
60
|
+
All errors are sanitized before inclusion in the result to prevent
|
|
61
|
+
credential exposure. The sanitization uses an allowlist approach,
|
|
62
|
+
only including known-safe error patterns.
|
|
63
|
+
|
|
64
|
+
Attributes:
|
|
65
|
+
_consul_client: Protocol-compliant Consul client for service registration.
|
|
66
|
+
|
|
67
|
+
Example:
|
|
68
|
+
>>> from unittest.mock import AsyncMock
|
|
69
|
+
>>> consul_client = AsyncMock()
|
|
70
|
+
>>> consul_client.register_service.return_value = ModelBackendResult(
|
|
71
|
+
... success=True, duration_ms=0.0, backend_id="consul"
|
|
72
|
+
... )
|
|
73
|
+
>>> handler = HandlerConsulRegister(consul_client)
|
|
74
|
+
>>> # Call handler.handle(request, correlation_id) in async context
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
def __init__(self, consul_client: ProtocolConsulClient) -> None:
|
|
78
|
+
"""Initialize handler with Consul client.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
consul_client: Protocol-compliant Consul client for service registration.
|
|
82
|
+
Must implement ProtocolConsulClient with async register_service method.
|
|
83
|
+
"""
|
|
84
|
+
self._consul_client = consul_client
|
|
85
|
+
|
|
86
|
+
async def handle(
|
|
87
|
+
self,
|
|
88
|
+
request: ModelRegistryRequest,
|
|
89
|
+
correlation_id: UUID,
|
|
90
|
+
) -> ModelBackendResult:
|
|
91
|
+
"""Execute Consul service registration.
|
|
92
|
+
|
|
93
|
+
Generates service identifiers following ONEX naming conventions and
|
|
94
|
+
delegates registration to the Consul client. Handles both success
|
|
95
|
+
and failure cases with appropriate timing and error sanitization.
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
request: Registration request with node details including:
|
|
99
|
+
- node_id: UUID of the node to register
|
|
100
|
+
- node_type: ONEX node type (effect, compute, reducer, orchestrator)
|
|
101
|
+
- service_name: Optional custom service name
|
|
102
|
+
- tags: Optional list of service discovery tags
|
|
103
|
+
- health_check_config: Optional Consul health check configuration
|
|
104
|
+
|
|
105
|
+
correlation_id: Request correlation ID for distributed tracing.
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
ModelBackendResult with:
|
|
109
|
+
- success: True if registration succeeded
|
|
110
|
+
- duration_ms: Time taken for the operation
|
|
111
|
+
- backend_id: "consul" to identify the backend
|
|
112
|
+
- correlation_id: The provided correlation ID
|
|
113
|
+
- error: Sanitized error message (only on failure)
|
|
114
|
+
- error_code: Error code for programmatic handling (only on failure)
|
|
115
|
+
|
|
116
|
+
Note:
|
|
117
|
+
This handler does not raise exceptions. All errors are captured
|
|
118
|
+
and returned in the ModelBackendResult to support partial failure
|
|
119
|
+
handling in dual-backend registration scenarios.
|
|
120
|
+
"""
|
|
121
|
+
start_time = time.perf_counter()
|
|
122
|
+
|
|
123
|
+
# Generate service identifiers following ONEX naming convention
|
|
124
|
+
service_id = f"onex-{request.node_type.value}-{request.node_id}"
|
|
125
|
+
service_name = request.service_name or f"onex-{request.node_type.value}"
|
|
126
|
+
|
|
127
|
+
try:
|
|
128
|
+
result = await self._consul_client.register_service(
|
|
129
|
+
service_id=service_id,
|
|
130
|
+
service_name=service_name,
|
|
131
|
+
tags=request.tags,
|
|
132
|
+
health_check=request.health_check_config,
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
136
|
+
|
|
137
|
+
if result.success:
|
|
138
|
+
return ModelBackendResult(
|
|
139
|
+
success=True,
|
|
140
|
+
duration_ms=duration_ms,
|
|
141
|
+
backend_id="consul",
|
|
142
|
+
correlation_id=correlation_id,
|
|
143
|
+
)
|
|
144
|
+
else:
|
|
145
|
+
# Client returned failure - sanitize the error message
|
|
146
|
+
sanitized_error = sanitize_backend_error("consul", result.error)
|
|
147
|
+
return ModelBackendResult(
|
|
148
|
+
success=False,
|
|
149
|
+
error=sanitized_error,
|
|
150
|
+
error_code="CONSUL_REGISTRATION_ERROR",
|
|
151
|
+
duration_ms=duration_ms,
|
|
152
|
+
backend_id="consul",
|
|
153
|
+
correlation_id=correlation_id,
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
except (TimeoutError, InfraTimeoutError) as e:
|
|
157
|
+
# Timeout during registration - retriable error
|
|
158
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
159
|
+
sanitized_error = sanitize_error_message(e)
|
|
160
|
+
return ModelBackendResult(
|
|
161
|
+
success=False,
|
|
162
|
+
error=sanitized_error,
|
|
163
|
+
error_code="CONSUL_TIMEOUT_ERROR",
|
|
164
|
+
duration_ms=duration_ms,
|
|
165
|
+
backend_id="consul",
|
|
166
|
+
correlation_id=correlation_id,
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
except InfraAuthenticationError as e:
|
|
170
|
+
# Authentication failure - non-retriable error
|
|
171
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
172
|
+
sanitized_error = sanitize_error_message(e)
|
|
173
|
+
return ModelBackendResult(
|
|
174
|
+
success=False,
|
|
175
|
+
error=sanitized_error,
|
|
176
|
+
error_code="CONSUL_AUTH_ERROR",
|
|
177
|
+
duration_ms=duration_ms,
|
|
178
|
+
backend_id="consul",
|
|
179
|
+
correlation_id=correlation_id,
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
except InfraConnectionError as e:
|
|
183
|
+
# Connection failure - retriable error
|
|
184
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
185
|
+
sanitized_error = sanitize_error_message(e)
|
|
186
|
+
return ModelBackendResult(
|
|
187
|
+
success=False,
|
|
188
|
+
error=sanitized_error,
|
|
189
|
+
error_code="CONSUL_CONNECTION_ERROR",
|
|
190
|
+
duration_ms=duration_ms,
|
|
191
|
+
backend_id="consul",
|
|
192
|
+
correlation_id=correlation_id,
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
except (
|
|
196
|
+
Exception
|
|
197
|
+
) as e: # ONEX: catch-all - external service may raise unexpected exceptions
|
|
198
|
+
# beyond typed infrastructure errors (e.g., HTTP client errors, JSON decode errors,
|
|
199
|
+
# network stack errors). Required to sanitize errors and prevent credential exposure.
|
|
200
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
201
|
+
sanitized_error = sanitize_error_message(e)
|
|
202
|
+
return ModelBackendResult(
|
|
203
|
+
success=False,
|
|
204
|
+
error=sanitized_error,
|
|
205
|
+
error_code="CONSUL_UNKNOWN_ERROR",
|
|
206
|
+
duration_ms=duration_ms,
|
|
207
|
+
backend_id="consul",
|
|
208
|
+
correlation_id=correlation_id,
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
__all__: list[str] = ["HandlerConsulRegister"]
|