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,208 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler for PostgreSQL registration record upsert.
|
|
4
|
+
|
|
5
|
+
This handler encapsulates PostgreSQL-specific persistence 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
|
+
HandlerPostgresUpsert is responsible for:
|
|
11
|
+
- Executing upsert 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
|
+
This extraction supports the declarative node pattern where NodeRegistryEffect
|
|
17
|
+
delegates backend-specific operations to dedicated handlers.
|
|
18
|
+
|
|
19
|
+
Coroutine Safety:
|
|
20
|
+
This handler is stateless and coroutine-safe for concurrent calls
|
|
21
|
+
with different request instances. Thread-safety depends on the
|
|
22
|
+
underlying ProtocolPostgresAdapter implementation.
|
|
23
|
+
|
|
24
|
+
Related:
|
|
25
|
+
- NodeRegistryEffect: Parent effect node that coordinates handlers
|
|
26
|
+
- ProtocolPostgresAdapter: Protocol defining the upsert interface
|
|
27
|
+
- ModelBackendResult: Structured result model for backend operations
|
|
28
|
+
- ModelRegistryRequest: Input request model
|
|
29
|
+
- OMN-1103: Refactoring ticket for handler extraction
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
import time
|
|
35
|
+
from typing import TYPE_CHECKING
|
|
36
|
+
from uuid import UUID
|
|
37
|
+
|
|
38
|
+
from omnibase_infra.errors import (
|
|
39
|
+
InfraAuthenticationError,
|
|
40
|
+
InfraConnectionError,
|
|
41
|
+
InfraTimeoutError,
|
|
42
|
+
)
|
|
43
|
+
from omnibase_infra.nodes.node_registry_effect.models import ModelBackendResult
|
|
44
|
+
from omnibase_infra.utils import sanitize_backend_error, sanitize_error_message
|
|
45
|
+
|
|
46
|
+
if TYPE_CHECKING:
|
|
47
|
+
from omnibase_infra.nodes.effects.protocol_postgres_adapter import (
|
|
48
|
+
ProtocolPostgresAdapter,
|
|
49
|
+
)
|
|
50
|
+
from omnibase_infra.nodes.node_registry_effect.models import ModelRegistryRequest
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class HandlerPostgresUpsert:
|
|
54
|
+
"""Handler for PostgreSQL registration record upsert.
|
|
55
|
+
|
|
56
|
+
Encapsulates all PostgreSQL-specific persistence logic extracted from
|
|
57
|
+
NodeRegistryEffect for declarative node compliance. The handler provides
|
|
58
|
+
a clean interface for executing upsert operations with proper timing
|
|
59
|
+
and error sanitization.
|
|
60
|
+
|
|
61
|
+
Attributes:
|
|
62
|
+
_postgres_adapter: Protocol-compliant PostgreSQL adapter.
|
|
63
|
+
|
|
64
|
+
Example:
|
|
65
|
+
>>> from unittest.mock import AsyncMock
|
|
66
|
+
>>> adapter = AsyncMock()
|
|
67
|
+
>>> adapter.upsert.return_value = ModelBackendResult(success=True, backend_id="postgres")
|
|
68
|
+
>>> handler = HandlerPostgresUpsert(adapter)
|
|
69
|
+
>>> result = await handler.handle(request, correlation_id)
|
|
70
|
+
>>> result.success
|
|
71
|
+
True
|
|
72
|
+
|
|
73
|
+
See Also:
|
|
74
|
+
- NodeRegistryEffect: Parent node that uses this handler
|
|
75
|
+
- ProtocolPostgresAdapter: Protocol for PostgreSQL operations
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
def __init__(self, postgres_adapter: ProtocolPostgresAdapter) -> None:
|
|
79
|
+
"""Initialize handler with PostgreSQL adapter.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
postgres_adapter: Protocol-compliant PostgreSQL adapter for
|
|
83
|
+
executing registration record upsert operations.
|
|
84
|
+
"""
|
|
85
|
+
self._postgres_adapter = postgres_adapter
|
|
86
|
+
|
|
87
|
+
async def handle(
|
|
88
|
+
self,
|
|
89
|
+
request: ModelRegistryRequest,
|
|
90
|
+
correlation_id: UUID,
|
|
91
|
+
) -> ModelBackendResult:
|
|
92
|
+
"""Execute PostgreSQL registration record upsert.
|
|
93
|
+
|
|
94
|
+
Performs the upsert operation against the PostgreSQL adapter with:
|
|
95
|
+
- Operation timing via time.perf_counter()
|
|
96
|
+
- Protocol call to adapter.upsert()
|
|
97
|
+
- Error sanitization for security
|
|
98
|
+
- Structured result construction
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
request: Registration request with node details including
|
|
102
|
+
node_id, node_type, node_version, endpoints, and metadata.
|
|
103
|
+
correlation_id: Request correlation ID for distributed tracing.
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
ModelBackendResult with:
|
|
107
|
+
- success: True if upsert completed successfully
|
|
108
|
+
- error: Sanitized error message if failed
|
|
109
|
+
- error_code: Error code for programmatic handling
|
|
110
|
+
- duration_ms: Operation duration in milliseconds
|
|
111
|
+
- backend_id: Set to "postgres"
|
|
112
|
+
- correlation_id: Passed through for tracing
|
|
113
|
+
|
|
114
|
+
Note:
|
|
115
|
+
Error messages are sanitized using sanitize_backend_error to
|
|
116
|
+
prevent exposure of connection strings, credentials, or other
|
|
117
|
+
sensitive information in logs and responses.
|
|
118
|
+
"""
|
|
119
|
+
start_time = time.perf_counter()
|
|
120
|
+
|
|
121
|
+
try:
|
|
122
|
+
result = await self._postgres_adapter.upsert(
|
|
123
|
+
node_id=request.node_id,
|
|
124
|
+
node_type=request.node_type,
|
|
125
|
+
node_version=request.node_version,
|
|
126
|
+
endpoints=request.endpoints,
|
|
127
|
+
metadata=request.metadata,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
131
|
+
|
|
132
|
+
if result.success:
|
|
133
|
+
return ModelBackendResult(
|
|
134
|
+
success=True,
|
|
135
|
+
duration_ms=duration_ms,
|
|
136
|
+
backend_id="postgres",
|
|
137
|
+
correlation_id=correlation_id,
|
|
138
|
+
)
|
|
139
|
+
else:
|
|
140
|
+
# Sanitize backend error to avoid exposing secrets
|
|
141
|
+
# (connection strings, credentials, internal hostnames)
|
|
142
|
+
sanitized_error = sanitize_backend_error("postgres", result.error)
|
|
143
|
+
return ModelBackendResult(
|
|
144
|
+
success=False,
|
|
145
|
+
error=sanitized_error,
|
|
146
|
+
error_code="POSTGRES_UPSERT_ERROR",
|
|
147
|
+
duration_ms=duration_ms,
|
|
148
|
+
backend_id="postgres",
|
|
149
|
+
correlation_id=correlation_id,
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
except (TimeoutError, InfraTimeoutError) as e:
|
|
153
|
+
# Timeout during upsert - retriable error
|
|
154
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
155
|
+
sanitized_error = sanitize_error_message(e)
|
|
156
|
+
return ModelBackendResult(
|
|
157
|
+
success=False,
|
|
158
|
+
error=sanitized_error,
|
|
159
|
+
error_code="POSTGRES_TIMEOUT_ERROR",
|
|
160
|
+
duration_ms=duration_ms,
|
|
161
|
+
backend_id="postgres",
|
|
162
|
+
correlation_id=correlation_id,
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
except InfraAuthenticationError as e:
|
|
166
|
+
# Authentication failure - non-retriable error
|
|
167
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
168
|
+
sanitized_error = sanitize_error_message(e)
|
|
169
|
+
return ModelBackendResult(
|
|
170
|
+
success=False,
|
|
171
|
+
error=sanitized_error,
|
|
172
|
+
error_code="POSTGRES_AUTH_ERROR",
|
|
173
|
+
duration_ms=duration_ms,
|
|
174
|
+
backend_id="postgres",
|
|
175
|
+
correlation_id=correlation_id,
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
except InfraConnectionError as e:
|
|
179
|
+
# Connection failure - retriable error
|
|
180
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
181
|
+
sanitized_error = sanitize_error_message(e)
|
|
182
|
+
return ModelBackendResult(
|
|
183
|
+
success=False,
|
|
184
|
+
error=sanitized_error,
|
|
185
|
+
error_code="POSTGRES_CONNECTION_ERROR",
|
|
186
|
+
duration_ms=duration_ms,
|
|
187
|
+
backend_id="postgres",
|
|
188
|
+
correlation_id=correlation_id,
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
except (
|
|
192
|
+
Exception
|
|
193
|
+
) as e: # ONEX: catch-all - database adapter may raise unexpected exceptions
|
|
194
|
+
# beyond typed infrastructure errors (e.g., driver errors, encoding errors,
|
|
195
|
+
# connection pool errors). Required to sanitize errors and prevent credential exposure.
|
|
196
|
+
duration_ms = (time.perf_counter() - start_time) * 1000
|
|
197
|
+
sanitized_error = sanitize_error_message(e)
|
|
198
|
+
return ModelBackendResult(
|
|
199
|
+
success=False,
|
|
200
|
+
error=sanitized_error,
|
|
201
|
+
error_code="POSTGRES_UNKNOWN_ERROR",
|
|
202
|
+
duration_ms=duration_ms,
|
|
203
|
+
backend_id="postgres",
|
|
204
|
+
correlation_id=correlation_id,
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
__all__: list[str] = ["HandlerPostgresUpsert"]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Models for NodeRegistryEffect.
|
|
4
|
+
|
|
5
|
+
This package contains node-specific Pydantic models for the registry effect node.
|
|
6
|
+
Models follow ONEX naming conventions: Model<Name>.
|
|
7
|
+
|
|
8
|
+
Shared models are re-exported from the effects package for convenience.
|
|
9
|
+
Node-specific models are defined here.
|
|
10
|
+
|
|
11
|
+
Model Categories:
|
|
12
|
+
- Input Models: Request payloads for effect operations
|
|
13
|
+
- Output Models: Response structures from effect operations
|
|
14
|
+
- Result Models: Per-backend operation outcomes
|
|
15
|
+
- Config Models: Node configuration schemas
|
|
16
|
+
|
|
17
|
+
Related:
|
|
18
|
+
- omnibase_infra.nodes.effects.models: Shared effect models
|
|
19
|
+
- contract.yaml: Model references in input_model/output_model
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
# Re-export shared effect models for convenience
|
|
25
|
+
from omnibase_infra.nodes.effects.models import (
|
|
26
|
+
ModelBackendResult,
|
|
27
|
+
ModelEffectIdempotencyConfig,
|
|
28
|
+
ModelRegistryRequest,
|
|
29
|
+
ModelRegistryResponse,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
# Node-specific models
|
|
33
|
+
from omnibase_infra.nodes.node_registry_effect.models.model_partial_retry_request import (
|
|
34
|
+
ModelPartialRetryRequest,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
__all__ = [
|
|
38
|
+
"ModelBackendResult",
|
|
39
|
+
"ModelEffectIdempotencyConfig",
|
|
40
|
+
"ModelPartialRetryRequest",
|
|
41
|
+
"ModelRegistryRequest",
|
|
42
|
+
"ModelRegistryResponse",
|
|
43
|
+
]
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Partial Retry Request Model for targeted backend retries.
|
|
4
|
+
|
|
5
|
+
This module provides ModelPartialRetryRequest, a Pydantic model that implements
|
|
6
|
+
the ProtocolPartialRetryRequest protocol for use with HandlerPartialRetry.
|
|
7
|
+
|
|
8
|
+
Architecture:
|
|
9
|
+
ModelPartialRetryRequest provides a concrete implementation of the
|
|
10
|
+
ProtocolPartialRetryRequest protocol, allowing the NodeRegistryEffect to
|
|
11
|
+
create properly typed requests for partial failure retries.
|
|
12
|
+
|
|
13
|
+
Related:
|
|
14
|
+
- HandlerPartialRetry: Handler that consumes this request
|
|
15
|
+
- ProtocolPartialRetryRequest: Protocol this model implements
|
|
16
|
+
- NodeRegistryEffect: Node that creates these requests
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from uuid import UUID
|
|
22
|
+
|
|
23
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
24
|
+
|
|
25
|
+
from omnibase_core.enums.enum_node_kind import EnumNodeKind
|
|
26
|
+
from omnibase_infra.enums import EnumBackendType
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ModelPartialRetryRequest(BaseModel):
|
|
30
|
+
"""Request model for partial failure retry operations.
|
|
31
|
+
|
|
32
|
+
Provides a Pydantic model implementation of the ProtocolPartialRetryRequest
|
|
33
|
+
protocol for HandlerPartialRetry.
|
|
34
|
+
|
|
35
|
+
Attributes:
|
|
36
|
+
node_id: Unique identifier for the node being registered.
|
|
37
|
+
node_type: Type of ONEX node (effect, compute, reducer, orchestrator).
|
|
38
|
+
node_version: Semantic version of the node.
|
|
39
|
+
target_backend: Backend to retry ("consul" or "postgres").
|
|
40
|
+
idempotency_key: Optional key for idempotent retry semantics.
|
|
41
|
+
service_name: Optional service name for Consul registration.
|
|
42
|
+
tags: Tags for Consul service discovery.
|
|
43
|
+
health_check_config: Optional Consul health check configuration.
|
|
44
|
+
endpoints: Dict of endpoint type to URL for PostgreSQL.
|
|
45
|
+
metadata: Additional metadata for PostgreSQL registration.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
model_config = ConfigDict(extra="forbid")
|
|
49
|
+
|
|
50
|
+
node_id: UUID = Field(
|
|
51
|
+
...,
|
|
52
|
+
description="Unique identifier for the node being registered",
|
|
53
|
+
)
|
|
54
|
+
node_type: EnumNodeKind = Field(
|
|
55
|
+
...,
|
|
56
|
+
description="Type of ONEX node (effect, compute, reducer, orchestrator)",
|
|
57
|
+
)
|
|
58
|
+
node_version: str = Field(
|
|
59
|
+
...,
|
|
60
|
+
description="Semantic version of the node",
|
|
61
|
+
)
|
|
62
|
+
target_backend: EnumBackendType = Field(
|
|
63
|
+
...,
|
|
64
|
+
description="Backend to retry: 'consul' or 'postgres'",
|
|
65
|
+
)
|
|
66
|
+
idempotency_key: str | None = Field(
|
|
67
|
+
default=None,
|
|
68
|
+
description="Optional key for idempotent retry semantics",
|
|
69
|
+
)
|
|
70
|
+
service_name: str | None = Field(
|
|
71
|
+
default=None,
|
|
72
|
+
description="Name for service discovery registration (Consul)",
|
|
73
|
+
)
|
|
74
|
+
tags: list[str] = Field(
|
|
75
|
+
default_factory=list,
|
|
76
|
+
description="List of tags for service discovery (Consul)",
|
|
77
|
+
)
|
|
78
|
+
health_check_config: dict[str, str] | None = Field(
|
|
79
|
+
default=None,
|
|
80
|
+
description="Optional health check configuration (Consul)",
|
|
81
|
+
)
|
|
82
|
+
endpoints: dict[str, str] = Field(
|
|
83
|
+
default_factory=dict,
|
|
84
|
+
description="Dict of endpoint type to URL (PostgreSQL)",
|
|
85
|
+
)
|
|
86
|
+
metadata: dict[str, str] = Field(
|
|
87
|
+
default_factory=dict,
|
|
88
|
+
description="Additional metadata for the registration record (PostgreSQL)",
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
__all__ = ["ModelPartialRetryRequest"]
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Node Registry Effect - Declarative effect node for dual-backend registration.
|
|
4
|
+
|
|
5
|
+
This node follows the ONEX declarative pattern:
|
|
6
|
+
- DECLARATIVE effect driven by contract.yaml
|
|
7
|
+
- Zero custom routing logic - all behavior from handler_routing
|
|
8
|
+
- Lightweight shell that delegates to handlers via container resolution
|
|
9
|
+
- Used for ONEX-compliant runtime execution via RuntimeHostProcess
|
|
10
|
+
- Pattern: "Contract-driven, handlers wired externally"
|
|
11
|
+
|
|
12
|
+
Extends NodeEffect from omnibase_core for infrastructure I/O operations.
|
|
13
|
+
All handler routing is 100% driven by contract.yaml, not Python code.
|
|
14
|
+
|
|
15
|
+
Handler Routing Pattern:
|
|
16
|
+
1. Receive registration request (input_model in contract)
|
|
17
|
+
2. Route to appropriate handler based on payload type (handler_routing)
|
|
18
|
+
3. Execute infrastructure I/O via handler (Consul, PostgreSQL)
|
|
19
|
+
4. Return structured response (output_model in contract)
|
|
20
|
+
|
|
21
|
+
Design Decisions:
|
|
22
|
+
- 100% Contract-Driven: All routing logic in YAML, not Python
|
|
23
|
+
- Zero Custom Routing: Base class handles handler dispatch via contract
|
|
24
|
+
- Declarative Handlers: handler_routing section defines dispatch rules
|
|
25
|
+
- External Wiring: Handlers resolved via container dependency injection
|
|
26
|
+
|
|
27
|
+
Node Responsibilities:
|
|
28
|
+
- Define I/O model contract (ModelRegistryRequest -> ModelRegistryResponse)
|
|
29
|
+
- Provide dependency injection points for backend clients
|
|
30
|
+
- Delegate all execution to handlers via base class
|
|
31
|
+
|
|
32
|
+
The actual handler execution and routing is performed by:
|
|
33
|
+
- NodeOrchestrator (for workflow coordination)
|
|
34
|
+
- Or direct handler invocation by callers
|
|
35
|
+
|
|
36
|
+
Coroutine Safety:
|
|
37
|
+
This node is async-safe. Handler coordination is performed by the
|
|
38
|
+
orchestrator layer, not by this effect node.
|
|
39
|
+
|
|
40
|
+
Related Modules:
|
|
41
|
+
- contract.yaml: Handler routing and I/O model definitions
|
|
42
|
+
- handlers/: Backend-specific handlers (Consul, PostgreSQL)
|
|
43
|
+
- models/: Node-specific input/output models
|
|
44
|
+
- NodeRegistrationOrchestrator: Coordinates handler execution
|
|
45
|
+
|
|
46
|
+
Migration Notes (OMN-1103):
|
|
47
|
+
This declarative node replaces the imperative implementation.
|
|
48
|
+
All routing logic has been moved to contract.yaml handler_routing.
|
|
49
|
+
Callers should use handlers directly or via the orchestrator.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
from __future__ import annotations
|
|
53
|
+
|
|
54
|
+
from typing import TYPE_CHECKING
|
|
55
|
+
|
|
56
|
+
from omnibase_core.nodes.node_effect import NodeEffect
|
|
57
|
+
|
|
58
|
+
if TYPE_CHECKING:
|
|
59
|
+
from omnibase_core.models.container.model_onex_container import ModelONEXContainer
|
|
60
|
+
from omnibase_infra.nodes.effects.protocol_consul_client import ProtocolConsulClient
|
|
61
|
+
from omnibase_infra.nodes.effects.protocol_postgres_adapter import (
|
|
62
|
+
ProtocolPostgresAdapter,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class NodeRegistryEffect(NodeEffect):
|
|
67
|
+
"""Declarative effect node for dual-backend node registration.
|
|
68
|
+
|
|
69
|
+
This effect node is a lightweight shell that defines the I/O contract
|
|
70
|
+
for registration operations. All routing and execution logic is driven
|
|
71
|
+
by contract.yaml - this class contains no custom routing code.
|
|
72
|
+
|
|
73
|
+
Handler coordination is performed by:
|
|
74
|
+
- NodeRegistrationOrchestrator for workflow-based execution
|
|
75
|
+
- Direct handler invocation for simple use cases
|
|
76
|
+
|
|
77
|
+
Supported Operations (defined in contract.yaml handler_routing):
|
|
78
|
+
- register_node: Register to both Consul and PostgreSQL
|
|
79
|
+
- deregister_node: Deregister from both backends
|
|
80
|
+
- retry_partial_failure: Retry a specific backend after partial failure
|
|
81
|
+
|
|
82
|
+
Dependency Injection:
|
|
83
|
+
Backend clients are injected via setter methods. The orchestrator
|
|
84
|
+
or caller is responsible for wiring these dependencies.
|
|
85
|
+
|
|
86
|
+
Example:
|
|
87
|
+
```python
|
|
88
|
+
from omnibase_core.models.container import ModelONEXContainer
|
|
89
|
+
from omnibase_infra.nodes.node_registry_effect import NodeRegistryEffect
|
|
90
|
+
from omnibase_infra.nodes.node_registry_effect.handlers import (
|
|
91
|
+
HandlerConsulRegister,
|
|
92
|
+
HandlerPostgresUpsert,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
# Create effect node
|
|
96
|
+
container = ModelONEXContainer()
|
|
97
|
+
effect = NodeRegistryEffect(container)
|
|
98
|
+
|
|
99
|
+
# Wire backend clients
|
|
100
|
+
effect.set_consul_client(consul_client)
|
|
101
|
+
effect.set_postgres_adapter(postgres_adapter)
|
|
102
|
+
|
|
103
|
+
# Execute via handlers directly
|
|
104
|
+
consul_handler = HandlerConsulRegister(consul_client)
|
|
105
|
+
postgres_handler = HandlerPostgresUpsert(postgres_adapter)
|
|
106
|
+
|
|
107
|
+
# Or use orchestrator for coordinated execution
|
|
108
|
+
orchestrator = NodeRegistrationOrchestrator(container)
|
|
109
|
+
result = await orchestrator.execute_registration(request)
|
|
110
|
+
```
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
def __init__(self, container: ModelONEXContainer) -> None:
|
|
114
|
+
"""Initialize the effect node.
|
|
115
|
+
|
|
116
|
+
Args:
|
|
117
|
+
container: ONEX dependency injection container providing:
|
|
118
|
+
- Backend adapters (Consul client, PostgreSQL adapter)
|
|
119
|
+
- Handler instances
|
|
120
|
+
- Configuration
|
|
121
|
+
"""
|
|
122
|
+
super().__init__(container)
|
|
123
|
+
|
|
124
|
+
# Backend adapters (injected via setter methods)
|
|
125
|
+
self._consul_client: ProtocolConsulClient | None = None
|
|
126
|
+
self._postgres_adapter: ProtocolPostgresAdapter | None = None
|
|
127
|
+
|
|
128
|
+
def set_consul_client(self, client: ProtocolConsulClient) -> None:
|
|
129
|
+
"""Set the Consul client for service registration.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
client: Protocol-compliant Consul client implementation.
|
|
133
|
+
"""
|
|
134
|
+
self._consul_client = client
|
|
135
|
+
|
|
136
|
+
def set_postgres_adapter(self, adapter: ProtocolPostgresAdapter) -> None:
|
|
137
|
+
"""Set the PostgreSQL adapter for registration persistence.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
adapter: Protocol-compliant PostgreSQL adapter implementation.
|
|
141
|
+
"""
|
|
142
|
+
self._postgres_adapter = adapter
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def consul_client(self) -> ProtocolConsulClient | None:
|
|
146
|
+
"""Get the Consul client if configured."""
|
|
147
|
+
return self._consul_client
|
|
148
|
+
|
|
149
|
+
@property
|
|
150
|
+
def postgres_adapter(self) -> ProtocolPostgresAdapter | None:
|
|
151
|
+
"""Get the PostgreSQL adapter if configured."""
|
|
152
|
+
return self._postgres_adapter
|
|
153
|
+
|
|
154
|
+
@property
|
|
155
|
+
def has_consul_client(self) -> bool:
|
|
156
|
+
"""Check if Consul client is configured."""
|
|
157
|
+
return self._consul_client is not None
|
|
158
|
+
|
|
159
|
+
@property
|
|
160
|
+
def has_postgres_adapter(self) -> bool:
|
|
161
|
+
"""Check if PostgreSQL adapter is configured."""
|
|
162
|
+
return self._postgres_adapter is not None
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
__all__ = ["NodeRegistryEffect"]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registry package for NodeRegistryEffect.
|
|
4
|
+
|
|
5
|
+
This package provides infrastructure registry components for the
|
|
6
|
+
NodeRegistryEffect node, following ONEX naming conventions.
|
|
7
|
+
|
|
8
|
+
Exports:
|
|
9
|
+
RegistryInfraRegistryEffect: Factory and metadata registry for
|
|
10
|
+
creating NodeRegistryEffect instances with dependency injection.
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
>>> from omnibase_infra.nodes.node_registry_effect.registry import (
|
|
14
|
+
... RegistryInfraRegistryEffect,
|
|
15
|
+
... )
|
|
16
|
+
>>> effect = RegistryInfraRegistryEffect.create(container)
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.5.0
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
from omnibase_infra.nodes.node_registry_effect.registry.registry_infra_registry_effect import (
|
|
24
|
+
RegistryInfraRegistryEffect,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
__all__ = ["RegistryInfraRegistryEffect"]
|