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
omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocol for Registration Persistence Operations.
|
|
4
|
+
|
|
5
|
+
This module defines ProtocolRegistrationPersistence, the interface for
|
|
6
|
+
pluggable storage backends in the registration storage effect node.
|
|
7
|
+
|
|
8
|
+
Architecture:
|
|
9
|
+
The protocol defines a capability-oriented interface for storage operations:
|
|
10
|
+
- store_registration: Idempotent upsert operation
|
|
11
|
+
- query_registrations: Flexible query with filtering and pagination
|
|
12
|
+
- update_registration: Partial update of specific fields
|
|
13
|
+
- delete_registration: Delete by node ID
|
|
14
|
+
- health_check: Backend health and connectivity check
|
|
15
|
+
|
|
16
|
+
Implementations include:
|
|
17
|
+
- PostgresRegistrationStorageHandler: PostgreSQL backend
|
|
18
|
+
|
|
19
|
+
The handler_type property identifies the backend for routing.
|
|
20
|
+
|
|
21
|
+
Protocol Duplication Note:
|
|
22
|
+
This protocol is intentionally separate from the handler-level protocol
|
|
23
|
+
at ``handlers/registration_storage/protocol_registration_persistence.py``:
|
|
24
|
+
|
|
25
|
+
- **This protocol (nodes/*/protocols/)**: Node-level contract used for
|
|
26
|
+
container-based dependency injection and registry binding.
|
|
27
|
+
|
|
28
|
+
- **Handler protocol (handlers/*/protocol_*.py)**: Handler implementation
|
|
29
|
+
contract used by tests for compliance verification.
|
|
30
|
+
|
|
31
|
+
The separation allows:
|
|
32
|
+
1. Node-level protocols to evolve independently of handler contracts
|
|
33
|
+
2. Clear ownership boundaries (nodes own their protocols)
|
|
34
|
+
3. Different import paths for different use cases (DI vs testing)
|
|
35
|
+
|
|
36
|
+
Both protocols share the same name for discoverability, but serve
|
|
37
|
+
different architectural layers.
|
|
38
|
+
|
|
39
|
+
Protocol Verification:
|
|
40
|
+
Per ONEX conventions, protocol compliance is verified via duck typing
|
|
41
|
+
rather than isinstance checks. The @runtime_checkable decorator enables
|
|
42
|
+
structural subtyping checks.
|
|
43
|
+
|
|
44
|
+
However, registries use isinstance() for fail-fast validation at
|
|
45
|
+
registration time. See registry_infra_registration_storage.py for rationale.
|
|
46
|
+
|
|
47
|
+
Thread Safety:
|
|
48
|
+
Handler implementations may be invoked concurrently. Implementations
|
|
49
|
+
should be stateless or use appropriate synchronization.
|
|
50
|
+
|
|
51
|
+
Related:
|
|
52
|
+
- NodeRegistrationStorageEffect: Effect node that uses this protocol
|
|
53
|
+
- ModelRegistrationRecord: Record type for storage operations
|
|
54
|
+
- ModelRegistrationUpdate: Update parameters for partial updates
|
|
55
|
+
- ModelStorageQuery: Query parameters for retrieval
|
|
56
|
+
- ModelStorageResult: Query result container
|
|
57
|
+
- ModelDeleteResult: Delete operation result
|
|
58
|
+
- ModelStorageHealthCheckResult: Health check result for handlers
|
|
59
|
+
- ModelStorageHealthCheckDetails: Backend-specific health check diagnostics
|
|
60
|
+
- ModelUpsertResult: Insert/update result
|
|
61
|
+
- handlers/registration_storage/protocol_registration_persistence.py: Handler protocol
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
from __future__ import annotations
|
|
65
|
+
|
|
66
|
+
__all__ = ["ProtocolRegistrationPersistence"]
|
|
67
|
+
|
|
68
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
69
|
+
from uuid import UUID
|
|
70
|
+
|
|
71
|
+
if TYPE_CHECKING:
|
|
72
|
+
from omnibase_infra.handlers.registration_storage.models import (
|
|
73
|
+
ModelDeleteRegistrationRequest,
|
|
74
|
+
ModelUpdateRegistrationRequest,
|
|
75
|
+
)
|
|
76
|
+
from omnibase_infra.nodes.node_registration_storage_effect.models import (
|
|
77
|
+
ModelDeleteResult,
|
|
78
|
+
ModelRegistrationRecord,
|
|
79
|
+
ModelStorageHealthCheckResult,
|
|
80
|
+
ModelStorageQuery,
|
|
81
|
+
ModelStorageResult,
|
|
82
|
+
ModelUpsertResult,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@runtime_checkable
|
|
87
|
+
class ProtocolRegistrationPersistence(Protocol):
|
|
88
|
+
"""Protocol for registration storage backend handlers.
|
|
89
|
+
|
|
90
|
+
Defines the interface for pluggable storage backends. Each implementation
|
|
91
|
+
provides the same operations but uses different storage technology.
|
|
92
|
+
|
|
93
|
+
Core Principle:
|
|
94
|
+
"I'm interested in what you do, not what you are"
|
|
95
|
+
|
|
96
|
+
The protocol is named by capability (registration storage), not by
|
|
97
|
+
implementation. Consumers interact with the protocol interface
|
|
98
|
+
without knowing the underlying storage technology.
|
|
99
|
+
|
|
100
|
+
Protocol Verification:
|
|
101
|
+
Per ONEX conventions, protocol compliance is verified via duck typing
|
|
102
|
+
rather than isinstance checks. Verify required methods exist:
|
|
103
|
+
|
|
104
|
+
.. code-block:: python
|
|
105
|
+
|
|
106
|
+
# Duck typing check
|
|
107
|
+
if (hasattr(handler, 'handler_type') and
|
|
108
|
+
hasattr(handler, 'store_registration') and
|
|
109
|
+
callable(handler.store_registration)):
|
|
110
|
+
registry.register_handler(handler)
|
|
111
|
+
|
|
112
|
+
Implementations:
|
|
113
|
+
- PostgresRegistrationStorageHandler: PostgreSQL backend
|
|
114
|
+
|
|
115
|
+
Example:
|
|
116
|
+
.. code-block:: python
|
|
117
|
+
|
|
118
|
+
class PostgresRegistrationStorageHandler:
|
|
119
|
+
'''PostgreSQL implementation of registration storage.'''
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def handler_type(self) -> str:
|
|
123
|
+
return "postgresql"
|
|
124
|
+
|
|
125
|
+
async def store_registration(
|
|
126
|
+
self,
|
|
127
|
+
record: ModelRegistrationRecord,
|
|
128
|
+
correlation_id: UUID | None = None,
|
|
129
|
+
) -> ModelUpsertResult:
|
|
130
|
+
# PostgreSQL-specific implementation
|
|
131
|
+
# Generate correlation_id if not provided
|
|
132
|
+
cid = correlation_id or uuid4()
|
|
133
|
+
...
|
|
134
|
+
|
|
135
|
+
# Usage
|
|
136
|
+
handler = PostgresRegistrationStorageHandler(pool, config)
|
|
137
|
+
result = await handler.store_registration(record) # correlation_id optional
|
|
138
|
+
result = await handler.store_registration(record, correlation_id) # or explicit
|
|
139
|
+
|
|
140
|
+
Attributes:
|
|
141
|
+
handler_type: Identifier for the storage backend (e.g., "postgresql").
|
|
142
|
+
|
|
143
|
+
Note:
|
|
144
|
+
Method bodies in this Protocol use ``...`` (Ellipsis) rather than
|
|
145
|
+
``raise NotImplementedError()``. This is the standard Python convention
|
|
146
|
+
for ``typing.Protocol`` classes per PEP 544.
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
@property
|
|
150
|
+
def handler_type(self) -> str:
|
|
151
|
+
"""Return the storage backend type identifier.
|
|
152
|
+
|
|
153
|
+
Used for handler routing and observability. Common values:
|
|
154
|
+
- "postgresql": PostgreSQL relational database
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
str: Handler type identifier (e.g., "postgresql")
|
|
158
|
+
"""
|
|
159
|
+
...
|
|
160
|
+
|
|
161
|
+
async def store_registration(
|
|
162
|
+
self,
|
|
163
|
+
record: ModelRegistrationRecord,
|
|
164
|
+
correlation_id: UUID | None = None,
|
|
165
|
+
) -> ModelUpsertResult:
|
|
166
|
+
"""Store a registration record (idempotent upsert).
|
|
167
|
+
|
|
168
|
+
If a record with the same node_id exists, it is updated.
|
|
169
|
+
Otherwise, a new record is inserted. This operation is idempotent.
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
record: The registration record to store.
|
|
173
|
+
correlation_id: Optional correlation ID for distributed tracing.
|
|
174
|
+
If not provided, implementations should generate one.
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
ModelUpsertResult: Result indicating success/failure and operation type.
|
|
178
|
+
|
|
179
|
+
Raises:
|
|
180
|
+
InfraConnectionError: If unable to connect to storage backend.
|
|
181
|
+
InfraTimeoutError: If operation times out.
|
|
182
|
+
InfraUnavailableError: If circuit breaker is open.
|
|
183
|
+
"""
|
|
184
|
+
...
|
|
185
|
+
|
|
186
|
+
async def query_registrations(
|
|
187
|
+
self,
|
|
188
|
+
query: ModelStorageQuery,
|
|
189
|
+
correlation_id: UUID | None = None,
|
|
190
|
+
) -> ModelStorageResult:
|
|
191
|
+
"""Query registration records with optional filters.
|
|
192
|
+
|
|
193
|
+
Supports filtering by node_id, node_type, and capabilities.
|
|
194
|
+
Supports pagination via limit and offset.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
query: Query parameters including filters and pagination.
|
|
198
|
+
correlation_id: Optional correlation ID for distributed tracing.
|
|
199
|
+
If not provided, implementations should generate one.
|
|
200
|
+
|
|
201
|
+
Returns:
|
|
202
|
+
ModelStorageResult: Result containing matching records and total count.
|
|
203
|
+
|
|
204
|
+
Raises:
|
|
205
|
+
InfraConnectionError: If unable to connect to storage backend.
|
|
206
|
+
InfraTimeoutError: If operation times out.
|
|
207
|
+
InfraUnavailableError: If circuit breaker is open.
|
|
208
|
+
"""
|
|
209
|
+
...
|
|
210
|
+
|
|
211
|
+
async def update_registration(
|
|
212
|
+
self,
|
|
213
|
+
request: ModelUpdateRegistrationRequest,
|
|
214
|
+
) -> ModelUpsertResult:
|
|
215
|
+
"""Update specific fields of a registration record.
|
|
216
|
+
|
|
217
|
+
Performs a partial update, modifying only the specified fields.
|
|
218
|
+
The node_id identifies the record to update.
|
|
219
|
+
|
|
220
|
+
Args:
|
|
221
|
+
request: ModelUpdateRegistrationRequest containing:
|
|
222
|
+
- node_id: UUID of the registration record to update
|
|
223
|
+
- updates: ModelRegistrationUpdate containing fields to update.
|
|
224
|
+
Only non-None fields will be applied. The model provides
|
|
225
|
+
type-safe partial updates for endpoints, metadata,
|
|
226
|
+
capabilities, and node_version fields.
|
|
227
|
+
- correlation_id: Optional correlation ID for distributed tracing.
|
|
228
|
+
If not provided, implementations should generate one.
|
|
229
|
+
|
|
230
|
+
Returns:
|
|
231
|
+
ModelUpsertResult: Result indicating success/failure.
|
|
232
|
+
|
|
233
|
+
Raises:
|
|
234
|
+
InfraConnectionError: If unable to connect to storage backend.
|
|
235
|
+
InfraTimeoutError: If operation times out.
|
|
236
|
+
InfraUnavailableError: If circuit breaker is open.
|
|
237
|
+
|
|
238
|
+
Example:
|
|
239
|
+
>>> from omnibase_infra.handlers.registration_storage.models import (
|
|
240
|
+
... ModelUpdateRegistrationRequest,
|
|
241
|
+
... )
|
|
242
|
+
>>> from omnibase_infra.nodes.node_registration_storage_effect.models import (
|
|
243
|
+
... ModelRegistrationUpdate,
|
|
244
|
+
... )
|
|
245
|
+
>>> request = ModelUpdateRegistrationRequest(
|
|
246
|
+
... node_id=node_id,
|
|
247
|
+
... updates=ModelRegistrationUpdate(
|
|
248
|
+
... endpoints={"health": "http://new-host:8080/health"},
|
|
249
|
+
... metadata={"env": "production"},
|
|
250
|
+
... ),
|
|
251
|
+
... )
|
|
252
|
+
>>> result = await handler.update_registration(request)
|
|
253
|
+
"""
|
|
254
|
+
...
|
|
255
|
+
|
|
256
|
+
async def delete_registration(
|
|
257
|
+
self,
|
|
258
|
+
request: ModelDeleteRegistrationRequest,
|
|
259
|
+
) -> ModelDeleteResult:
|
|
260
|
+
"""Delete a registration record by node ID.
|
|
261
|
+
|
|
262
|
+
Removes the registration record if it exists. The result indicates
|
|
263
|
+
whether the operation succeeded and whether a record was deleted.
|
|
264
|
+
|
|
265
|
+
Args:
|
|
266
|
+
request: ModelDeleteRegistrationRequest containing:
|
|
267
|
+
- node_id: UUID of the registration record to delete
|
|
268
|
+
- correlation_id: Optional correlation ID for distributed tracing.
|
|
269
|
+
If not provided, implementations should generate one.
|
|
270
|
+
|
|
271
|
+
Returns:
|
|
272
|
+
ModelDeleteResult: Result indicating success/failure and whether
|
|
273
|
+
a record was actually deleted (deleted=False if not found).
|
|
274
|
+
|
|
275
|
+
Raises:
|
|
276
|
+
InfraConnectionError: If unable to connect to storage backend.
|
|
277
|
+
InfraTimeoutError: If operation times out.
|
|
278
|
+
InfraUnavailableError: If circuit breaker is open.
|
|
279
|
+
|
|
280
|
+
Example:
|
|
281
|
+
>>> from omnibase_infra.handlers.registration_storage.models import (
|
|
282
|
+
... ModelDeleteRegistrationRequest,
|
|
283
|
+
... )
|
|
284
|
+
>>> request = ModelDeleteRegistrationRequest(node_id=node_id)
|
|
285
|
+
>>> result = await handler.delete_registration(request)
|
|
286
|
+
>>> if result.was_deleted():
|
|
287
|
+
... print("Record deleted successfully")
|
|
288
|
+
>>> elif result.success and not result.deleted:
|
|
289
|
+
... print("Record not found")
|
|
290
|
+
"""
|
|
291
|
+
...
|
|
292
|
+
|
|
293
|
+
async def health_check(
|
|
294
|
+
self,
|
|
295
|
+
correlation_id: UUID | None = None,
|
|
296
|
+
) -> ModelStorageHealthCheckResult:
|
|
297
|
+
"""Check storage backend health and connectivity.
|
|
298
|
+
|
|
299
|
+
Performs a lightweight connectivity check to verify the storage
|
|
300
|
+
backend is reachable and responsive.
|
|
301
|
+
|
|
302
|
+
Args:
|
|
303
|
+
correlation_id: Optional correlation ID for distributed tracing.
|
|
304
|
+
If not provided, implementations should generate one.
|
|
305
|
+
|
|
306
|
+
Returns:
|
|
307
|
+
ModelStorageHealthCheckResult: Health status including:
|
|
308
|
+
- healthy: bool indicating overall health
|
|
309
|
+
- backend_type: str identifying the backend
|
|
310
|
+
- latency_ms: float connection latency
|
|
311
|
+
- reason: str explaining the health status
|
|
312
|
+
- error_type: str | None exception type if failed
|
|
313
|
+
- details: ModelStorageHealthCheckDetails with typed diagnostics
|
|
314
|
+
- correlation_id: UUID | None for tracing
|
|
315
|
+
|
|
316
|
+
Example:
|
|
317
|
+
>>> from omnibase_infra.nodes.node_registration_storage_effect.models import (
|
|
318
|
+
... ModelStorageHealthCheckDetails,
|
|
319
|
+
... )
|
|
320
|
+
>>> health = await handler.health_check()
|
|
321
|
+
>>> health
|
|
322
|
+
ModelStorageHealthCheckResult(
|
|
323
|
+
healthy=True,
|
|
324
|
+
backend_type="postgresql",
|
|
325
|
+
latency_ms=2.5,
|
|
326
|
+
reason="ok",
|
|
327
|
+
details=ModelStorageHealthCheckDetails(
|
|
328
|
+
pool_size=10,
|
|
329
|
+
active_connections=3,
|
|
330
|
+
),
|
|
331
|
+
)
|
|
332
|
+
"""
|
|
333
|
+
...
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registry for Registration Storage Effect Node.
|
|
4
|
+
|
|
5
|
+
This module exports the dependency injection registry for
|
|
6
|
+
NodeRegistrationStorageEffect.
|
|
7
|
+
|
|
8
|
+
Available Exports:
|
|
9
|
+
- RegistryInfraRegistrationStorage: Registry for node dependencies
|
|
10
|
+
|
|
11
|
+
Usage:
|
|
12
|
+
>>> from omnibase_core.models.container import ModelONEXContainer
|
|
13
|
+
>>> from omnibase_infra.nodes.node_registration_storage_effect.registry import (
|
|
14
|
+
... RegistryInfraRegistrationStorage,
|
|
15
|
+
... )
|
|
16
|
+
>>>
|
|
17
|
+
>>> container = ModelONEXContainer()
|
|
18
|
+
>>> RegistryInfraRegistrationStorage.register(container)
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from .registry_infra_registration_storage import RegistryInfraRegistrationStorage
|
|
22
|
+
|
|
23
|
+
__all__ = ["RegistryInfraRegistrationStorage"]
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registry for Registration Storage Node Dependencies.
|
|
4
|
+
|
|
5
|
+
This module provides RegistryInfraRegistrationStorage, which registers
|
|
6
|
+
dependencies for the NodeRegistrationStorageEffect node.
|
|
7
|
+
|
|
8
|
+
Architecture:
|
|
9
|
+
The registry follows ONEX container-based dependency injection:
|
|
10
|
+
- Registers protocol implementations with ModelONEXContainer
|
|
11
|
+
- Supports pluggable handler backends (PostgreSQL, mock for testing)
|
|
12
|
+
- Enables runtime handler selection based on configuration
|
|
13
|
+
|
|
14
|
+
Registration is typically called during application bootstrap.
|
|
15
|
+
|
|
16
|
+
Related:
|
|
17
|
+
- NodeRegistrationStorageEffect: Effect node that uses these dependencies
|
|
18
|
+
- ProtocolRegistrationPersistence: Protocol for storage backends
|
|
19
|
+
- ModelONEXContainer: ONEX dependency injection container
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
from typing import TYPE_CHECKING, cast
|
|
25
|
+
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from omnibase_core.models.container.model_onex_container import ModelONEXContainer
|
|
28
|
+
from omnibase_infra.nodes.node_registration_storage_effect.protocols import (
|
|
29
|
+
ProtocolRegistrationPersistence,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
__all__ = ["RegistryInfraRegistrationStorage"]
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class RegistryInfraRegistrationStorage:
|
|
36
|
+
"""Registry for registration storage node dependencies.
|
|
37
|
+
|
|
38
|
+
Registers handler protocols and implementations with the ONEX container.
|
|
39
|
+
Supports pluggable backends through handler registration.
|
|
40
|
+
|
|
41
|
+
Usage:
|
|
42
|
+
.. code-block:: python
|
|
43
|
+
|
|
44
|
+
from omnibase_core.models.container import ModelONEXContainer
|
|
45
|
+
from omnibase_infra.nodes.node_registration_storage_effect.registry import (
|
|
46
|
+
RegistryInfraRegistrationStorage,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
# Create container
|
|
50
|
+
container = ModelONEXContainer()
|
|
51
|
+
|
|
52
|
+
# Register dependencies
|
|
53
|
+
RegistryInfraRegistrationStorage.register(container)
|
|
54
|
+
|
|
55
|
+
# Optionally register a specific handler
|
|
56
|
+
RegistryInfraRegistrationStorage.register_handler(
|
|
57
|
+
container,
|
|
58
|
+
handler=postgres_handler,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
Note:
|
|
62
|
+
This registry does NOT instantiate handlers. Handlers must be
|
|
63
|
+
created externally with their specific dependencies (connection
|
|
64
|
+
pools, configs) and then registered via register_handler().
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
# Protocol key for container registration
|
|
68
|
+
# Aligned with protocol name: ProtocolRegistrationPersistence
|
|
69
|
+
PROTOCOL_KEY = "protocol_registration_persistence"
|
|
70
|
+
|
|
71
|
+
# Default handler type when multiple are registered
|
|
72
|
+
DEFAULT_HANDLER_TYPE = "postgresql"
|
|
73
|
+
|
|
74
|
+
@staticmethod
|
|
75
|
+
def register(container: ModelONEXContainer) -> None:
|
|
76
|
+
"""Register registration storage dependencies with the container.
|
|
77
|
+
|
|
78
|
+
Registers the protocol key for later handler binding. This method
|
|
79
|
+
sets up the infrastructure but does not bind a specific handler.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
container: ONEX dependency injection container.
|
|
83
|
+
|
|
84
|
+
Example:
|
|
85
|
+
>>> from omnibase_core.models.container import ModelONEXContainer
|
|
86
|
+
>>> container = ModelONEXContainer()
|
|
87
|
+
>>> RegistryInfraRegistrationStorage.register(container)
|
|
88
|
+
"""
|
|
89
|
+
# Register protocol metadata for discovery
|
|
90
|
+
# Actual handler binding happens via register_handler()
|
|
91
|
+
if container.service_registry is not None:
|
|
92
|
+
container.service_registry[
|
|
93
|
+
RegistryInfraRegistrationStorage.PROTOCOL_KEY
|
|
94
|
+
] = {
|
|
95
|
+
"protocol": "ProtocolRegistrationPersistence",
|
|
96
|
+
"module": "omnibase_infra.nodes.node_registration_storage_effect.protocols",
|
|
97
|
+
"description": "Protocol for registration storage backends",
|
|
98
|
+
"pluggable": True,
|
|
99
|
+
"implementations": ["postgresql", "mock"],
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
@staticmethod
|
|
103
|
+
def register_handler(
|
|
104
|
+
container: ModelONEXContainer,
|
|
105
|
+
handler: ProtocolRegistrationPersistence,
|
|
106
|
+
) -> None:
|
|
107
|
+
"""Register a specific storage handler with the container.
|
|
108
|
+
|
|
109
|
+
Binds a concrete handler implementation to the protocol key.
|
|
110
|
+
The handler must implement ProtocolRegistrationPersistence.
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
container: ONEX dependency injection container.
|
|
114
|
+
handler: Handler implementation to register.
|
|
115
|
+
|
|
116
|
+
Raises:
|
|
117
|
+
TypeError: If handler does not implement ProtocolRegistrationPersistence.
|
|
118
|
+
|
|
119
|
+
Example:
|
|
120
|
+
>>> from omnibase_infra.handlers.registration_storage import (
|
|
121
|
+
... HandlerRegistrationStoragePostgres,
|
|
122
|
+
... )
|
|
123
|
+
>>> handler = HandlerRegistrationStoragePostgres(pool, config)
|
|
124
|
+
>>> RegistryInfraRegistrationStorage.register_handler(container, handler)
|
|
125
|
+
"""
|
|
126
|
+
# Import at runtime for isinstance check (protocol is @runtime_checkable)
|
|
127
|
+
from omnibase_infra.nodes.node_registration_storage_effect.protocols import (
|
|
128
|
+
ProtocolRegistrationPersistence,
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
# NOTE: isinstance() is intentionally used here instead of duck typing for:
|
|
132
|
+
# 1. Fail-fast validation: Immediately reject invalid handlers at registration
|
|
133
|
+
# time rather than discovering missing methods at runtime during operations
|
|
134
|
+
# 2. Type safety: The @runtime_checkable decorator enables structural subtyping
|
|
135
|
+
# checks that verify all required Protocol methods exist
|
|
136
|
+
# 3. Clear error messages: TypeError with specific protocol name aids debugging
|
|
137
|
+
# Duck typing (hasattr checks) would defer validation to method call time,
|
|
138
|
+
# making it harder to diagnose misconfigured handlers.
|
|
139
|
+
# See: conftest.py "Protocol Compliance Strategy" for when to use each approach.
|
|
140
|
+
if not isinstance(handler, ProtocolRegistrationPersistence):
|
|
141
|
+
raise TypeError(
|
|
142
|
+
f"Handler must implement ProtocolRegistrationPersistence, "
|
|
143
|
+
f"got {type(handler).__name__}"
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
if container.service_registry is None:
|
|
147
|
+
return
|
|
148
|
+
|
|
149
|
+
handler_key = (
|
|
150
|
+
f"{RegistryInfraRegistrationStorage.PROTOCOL_KEY}.{handler.handler_type}"
|
|
151
|
+
)
|
|
152
|
+
container.service_registry[handler_key] = handler
|
|
153
|
+
|
|
154
|
+
# Also register as default if it matches the default type
|
|
155
|
+
if (
|
|
156
|
+
handler.handler_type
|
|
157
|
+
== RegistryInfraRegistrationStorage.DEFAULT_HANDLER_TYPE
|
|
158
|
+
):
|
|
159
|
+
container.service_registry[
|
|
160
|
+
RegistryInfraRegistrationStorage.PROTOCOL_KEY + ".default"
|
|
161
|
+
] = handler
|
|
162
|
+
|
|
163
|
+
@staticmethod
|
|
164
|
+
def get_handler(
|
|
165
|
+
container: ModelONEXContainer,
|
|
166
|
+
handler_type: str | None = None,
|
|
167
|
+
) -> ProtocolRegistrationPersistence | None:
|
|
168
|
+
"""Retrieve a registered storage handler from the container.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
container: ONEX dependency injection container.
|
|
172
|
+
handler_type: Specific handler type to retrieve. If None, returns default.
|
|
173
|
+
|
|
174
|
+
Returns:
|
|
175
|
+
The registered handler, or None if not found.
|
|
176
|
+
|
|
177
|
+
Example:
|
|
178
|
+
>>> handler = RegistryInfraRegistrationStorage.get_handler(
|
|
179
|
+
... container,
|
|
180
|
+
... handler_type="postgresql",
|
|
181
|
+
... )
|
|
182
|
+
"""
|
|
183
|
+
if container.service_registry is None:
|
|
184
|
+
return None
|
|
185
|
+
|
|
186
|
+
if handler_type is not None:
|
|
187
|
+
handler_key = (
|
|
188
|
+
f"{RegistryInfraRegistrationStorage.PROTOCOL_KEY}.{handler_type}"
|
|
189
|
+
)
|
|
190
|
+
else:
|
|
191
|
+
handler_key = RegistryInfraRegistrationStorage.PROTOCOL_KEY + ".default"
|
|
192
|
+
|
|
193
|
+
result = container.service_registry.get(handler_key)
|
|
194
|
+
return cast("ProtocolRegistrationPersistence | None", result)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Node Registry Effect package - Declarative effect node for dual-backend registration.
|
|
4
|
+
|
|
5
|
+
This package provides NodeRegistryEffect, a declarative effect node that coordinates
|
|
6
|
+
node registration against both Consul (service discovery) and PostgreSQL (persistence).
|
|
7
|
+
|
|
8
|
+
Architecture (OMN-1103 Refactoring):
|
|
9
|
+
This package follows the ONEX declarative node pattern:
|
|
10
|
+
- node.py: Declarative node shell extending NodeEffect
|
|
11
|
+
- models/: Node-specific Pydantic models
|
|
12
|
+
- handlers/: Operation-specific handlers (PostgreSQL, Consul)
|
|
13
|
+
- registry/: Infrastructure registry for dependency injection
|
|
14
|
+
- contract.yaml: Operation routing and I/O definitions
|
|
15
|
+
|
|
16
|
+
The node is 100% contract-driven with zero custom business logic in node.py.
|
|
17
|
+
All operation routing is defined in contract.yaml and handlers are resolved
|
|
18
|
+
via container dependency injection.
|
|
19
|
+
|
|
20
|
+
Node Type: EFFECT_GENERIC
|
|
21
|
+
Purpose: Execute infrastructure I/O operations (Consul registration, PostgreSQL upsert)
|
|
22
|
+
based on requests from the registration orchestrator.
|
|
23
|
+
|
|
24
|
+
Implementation Details:
|
|
25
|
+
- Dual-backend registration (Consul + PostgreSQL)
|
|
26
|
+
- Partial failure handling with per-backend results
|
|
27
|
+
- Idempotency tracking for retry safety
|
|
28
|
+
- Error sanitization for security
|
|
29
|
+
|
|
30
|
+
Handlers:
|
|
31
|
+
- HandlerConsulRegister: Consul service registration
|
|
32
|
+
- HandlerConsulDeregister: Consul service deregistration
|
|
33
|
+
- HandlerPostgresUpsert: PostgreSQL registration record upsert
|
|
34
|
+
- HandlerPostgresDeactivate: PostgreSQL registration deactivation
|
|
35
|
+
- HandlerPartialRetry: Targeted retry for partial failures
|
|
36
|
+
|
|
37
|
+
Usage:
|
|
38
|
+
```python
|
|
39
|
+
from omnibase_core.models.container import ModelONEXContainer
|
|
40
|
+
from omnibase_infra.nodes.node_registry_effect import NodeRegistryEffect
|
|
41
|
+
|
|
42
|
+
# Create via container injection
|
|
43
|
+
container = ModelONEXContainer()
|
|
44
|
+
effect = NodeRegistryEffect(container)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Related:
|
|
48
|
+
- contract.yaml: Operation routing definition
|
|
49
|
+
- node.py: Declarative node implementation
|
|
50
|
+
- models/: Node-specific models
|
|
51
|
+
- handlers/: Operation handlers
|
|
52
|
+
- registry/: Infrastructure registry
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
from __future__ import annotations
|
|
56
|
+
|
|
57
|
+
# Export handlers
|
|
58
|
+
from omnibase_infra.nodes.node_registry_effect.handlers import (
|
|
59
|
+
HandlerConsulDeregister,
|
|
60
|
+
HandlerConsulRegister,
|
|
61
|
+
HandlerPartialRetry,
|
|
62
|
+
HandlerPostgresDeactivate,
|
|
63
|
+
HandlerPostgresUpsert,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# Export the declarative node
|
|
67
|
+
from omnibase_infra.nodes.node_registry_effect.node import NodeRegistryEffect
|
|
68
|
+
|
|
69
|
+
# Export registry
|
|
70
|
+
from omnibase_infra.nodes.node_registry_effect.registry import (
|
|
71
|
+
RegistryInfraRegistryEffect,
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
__all__: list[str] = [
|
|
75
|
+
# Node
|
|
76
|
+
"NodeRegistryEffect",
|
|
77
|
+
# Registry
|
|
78
|
+
"RegistryInfraRegistryEffect",
|
|
79
|
+
# Handlers
|
|
80
|
+
"HandlerConsulDeregister",
|
|
81
|
+
"HandlerConsulRegister",
|
|
82
|
+
"HandlerPartialRetry",
|
|
83
|
+
"HandlerPostgresDeactivate",
|
|
84
|
+
"HandlerPostgresUpsert",
|
|
85
|
+
]
|