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,199 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registration Record Model for Storage Operations.
|
|
4
|
+
|
|
5
|
+
This module provides ModelRegistrationRecord, representing a complete node
|
|
6
|
+
registration record for storage in backend systems (e.g., PostgreSQL).
|
|
7
|
+
|
|
8
|
+
Architecture:
|
|
9
|
+
ModelRegistrationRecord captures all information about a registered node:
|
|
10
|
+
- Identity: node_id, node_type, node_version
|
|
11
|
+
- Capabilities: Tuple of capabilities the node provides (immutable)
|
|
12
|
+
- Endpoints: Service discovery endpoints
|
|
13
|
+
- Metadata: Additional key-value metadata
|
|
14
|
+
- Timestamps: created_at, updated_at for tracking
|
|
15
|
+
|
|
16
|
+
This model is backend-agnostic and can be serialized to any storage format.
|
|
17
|
+
|
|
18
|
+
Security:
|
|
19
|
+
The metadata field should NOT contain sensitive information.
|
|
20
|
+
Secrets should be stored in Vault, not in registration records.
|
|
21
|
+
|
|
22
|
+
Related:
|
|
23
|
+
- NodeRegistrationStorageEffect: Effect node that stores these records
|
|
24
|
+
- ProtocolRegistrationStorageHandler: Protocol for storage backends
|
|
25
|
+
- ModelStorageQuery: Query model for retrieving records
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from __future__ import annotations
|
|
29
|
+
|
|
30
|
+
from collections.abc import Sequence
|
|
31
|
+
from datetime import datetime
|
|
32
|
+
from uuid import UUID
|
|
33
|
+
|
|
34
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
35
|
+
|
|
36
|
+
from omnibase_core.enums.enum_node_kind import EnumNodeKind
|
|
37
|
+
from omnibase_core.models.primitives.model_semver import ModelSemVer
|
|
38
|
+
from omnibase_infra.utils import validate_timezone_aware_datetime_optional
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ModelRegistrationRecord(BaseModel):
|
|
42
|
+
"""Registration record for node storage operations.
|
|
43
|
+
|
|
44
|
+
Represents a complete node registration record that can be stored in
|
|
45
|
+
any backend (PostgreSQL, etc.). This model is capability-oriented,
|
|
46
|
+
focusing on what the node does rather than implementation details.
|
|
47
|
+
|
|
48
|
+
Immutability:
|
|
49
|
+
This model uses frozen=True to ensure records are immutable
|
|
50
|
+
once created, supporting safe concurrent access and comparison.
|
|
51
|
+
|
|
52
|
+
Note on correlation_id:
|
|
53
|
+
The correlation_id field is optional and is used for distributed
|
|
54
|
+
tracing. When not provided, handlers should auto-generate one
|
|
55
|
+
for observability. This design choice allows callers to either:
|
|
56
|
+
1. Pass an existing correlation_id for trace continuity
|
|
57
|
+
2. Omit it and let the handler generate one
|
|
58
|
+
|
|
59
|
+
The auto-generation approach ensures every operation has traceability
|
|
60
|
+
even when callers don't provide explicit IDs.
|
|
61
|
+
|
|
62
|
+
Attributes:
|
|
63
|
+
node_id: Unique identifier for the registered node.
|
|
64
|
+
node_type: Type of ONEX node (EnumNodeKind).
|
|
65
|
+
node_version: Semantic version of the node.
|
|
66
|
+
capabilities: Tuple of capability names the node provides (immutable).
|
|
67
|
+
endpoints: Dict mapping endpoint type to URL.
|
|
68
|
+
metadata: Additional key-value metadata (no secrets).
|
|
69
|
+
created_at: Timestamp when the record was created (optional, backend may set).
|
|
70
|
+
updated_at: Timestamp when the record was last updated (optional, backend may set).
|
|
71
|
+
correlation_id: Optional correlation ID for distributed tracing.
|
|
72
|
+
|
|
73
|
+
Example:
|
|
74
|
+
>>> from datetime import UTC, datetime
|
|
75
|
+
>>> from uuid import uuid4
|
|
76
|
+
>>> from omnibase_core.enums.enum_node_kind import EnumNodeKind
|
|
77
|
+
>>> from omnibase_core.models.primitives.model_semver import ModelSemVer
|
|
78
|
+
>>> record = ModelRegistrationRecord(
|
|
79
|
+
... node_id=uuid4(),
|
|
80
|
+
... node_type=EnumNodeKind.EFFECT,
|
|
81
|
+
... node_version=ModelSemVer(major=1, minor=0, patch=0),
|
|
82
|
+
... capabilities=("registration.storage", "registration.storage.query"),
|
|
83
|
+
... endpoints={"health": "http://localhost:8080/health"},
|
|
84
|
+
... metadata={"team": "platform"},
|
|
85
|
+
... created_at=datetime.now(UTC),
|
|
86
|
+
... updated_at=datetime.now(UTC),
|
|
87
|
+
... correlation_id=uuid4(),
|
|
88
|
+
... )
|
|
89
|
+
>>> record.node_type
|
|
90
|
+
<EnumNodeKind.EFFECT: 'effect'>
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
model_config = ConfigDict(frozen=True, extra="forbid", from_attributes=True)
|
|
94
|
+
|
|
95
|
+
node_id: UUID = Field(
|
|
96
|
+
...,
|
|
97
|
+
description="Unique identifier for the registered node",
|
|
98
|
+
)
|
|
99
|
+
node_type: EnumNodeKind = Field(
|
|
100
|
+
...,
|
|
101
|
+
description="Type of ONEX node",
|
|
102
|
+
)
|
|
103
|
+
node_version: ModelSemVer = Field(
|
|
104
|
+
...,
|
|
105
|
+
description="Semantic version of the node",
|
|
106
|
+
)
|
|
107
|
+
capabilities: tuple[str, ...] = Field(
|
|
108
|
+
default_factory=tuple,
|
|
109
|
+
description="Tuple of capability names the node provides (immutable)",
|
|
110
|
+
)
|
|
111
|
+
endpoints: dict[str, str] = Field(
|
|
112
|
+
default_factory=dict,
|
|
113
|
+
description="Dict mapping endpoint type to URL (e.g., {'health': 'http://...'})",
|
|
114
|
+
)
|
|
115
|
+
metadata: dict[str, str] = Field(
|
|
116
|
+
default_factory=dict,
|
|
117
|
+
description="Additional key-value metadata (no secrets)",
|
|
118
|
+
)
|
|
119
|
+
created_at: datetime | None = Field(
|
|
120
|
+
default=None,
|
|
121
|
+
description="Timestamp when the record was created (timezone-aware if provided, backend may auto-set)",
|
|
122
|
+
)
|
|
123
|
+
updated_at: datetime | None = Field(
|
|
124
|
+
default=None,
|
|
125
|
+
description="Timestamp when the record was last updated (timezone-aware if provided, backend may auto-set)",
|
|
126
|
+
)
|
|
127
|
+
correlation_id: UUID | None = Field(
|
|
128
|
+
default=None,
|
|
129
|
+
description="Correlation ID for distributed tracing (auto-generated if not provided)",
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
@field_validator("capabilities", mode="before")
|
|
133
|
+
@classmethod
|
|
134
|
+
def _coerce_capabilities_to_tuple(cls, v: object) -> tuple[str, ...]:
|
|
135
|
+
"""Convert list/sequence to tuple for immutability.
|
|
136
|
+
|
|
137
|
+
This validator ensures explicit handling of all input types rather than
|
|
138
|
+
silent fallback, which could mask invalid input. In strict mode, all
|
|
139
|
+
items must already be strings - no silent type coercion.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
v: The input value to coerce.
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
tuple[str, ...]: The coerced tuple of capability strings.
|
|
146
|
+
|
|
147
|
+
Raises:
|
|
148
|
+
ValueError: If input is not a valid sequence type or contains non-strings.
|
|
149
|
+
|
|
150
|
+
Type coercion rules:
|
|
151
|
+
- tuple: Validates contents are strings, returns as-is
|
|
152
|
+
- list/set/frozenset: Validates contents are strings, converts to tuple
|
|
153
|
+
- Non-string items: Raises ValueError (strict mode)
|
|
154
|
+
- None: Raises ValueError (use default_factory=tuple instead)
|
|
155
|
+
- Other types: Raises ValueError
|
|
156
|
+
"""
|
|
157
|
+
if isinstance(v, tuple):
|
|
158
|
+
# Validate tuple contents in strict mode
|
|
159
|
+
for i, item in enumerate(v):
|
|
160
|
+
if not isinstance(item, str):
|
|
161
|
+
raise ValueError(
|
|
162
|
+
f"capabilities[{i}] must be a string, got {type(item).__name__}"
|
|
163
|
+
)
|
|
164
|
+
return v
|
|
165
|
+
if isinstance(v, list | set | frozenset):
|
|
166
|
+
# Convert sequence to tuple, validating contents
|
|
167
|
+
result: list[str] = []
|
|
168
|
+
for i, item in enumerate(v):
|
|
169
|
+
if not isinstance(item, str):
|
|
170
|
+
raise ValueError(
|
|
171
|
+
f"capabilities[{i}] must be a string, got {type(item).__name__}"
|
|
172
|
+
)
|
|
173
|
+
result.append(item)
|
|
174
|
+
return tuple(result)
|
|
175
|
+
if isinstance(v, Sequence) and not isinstance(v, str):
|
|
176
|
+
# Handle other sequence types
|
|
177
|
+
result_seq: list[str] = []
|
|
178
|
+
for i, item in enumerate(v):
|
|
179
|
+
if not isinstance(item, str):
|
|
180
|
+
raise ValueError(
|
|
181
|
+
f"capabilities[{i}] must be a string, got {type(item).__name__}"
|
|
182
|
+
)
|
|
183
|
+
result_seq.append(item)
|
|
184
|
+
return tuple(result_seq)
|
|
185
|
+
raise ValueError(
|
|
186
|
+
f"capabilities must be a tuple, list, set, or frozenset, got {type(v).__name__}"
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
@field_validator("created_at", "updated_at")
|
|
190
|
+
@classmethod
|
|
191
|
+
def validate_timestamp_timezone_aware(cls, v: datetime | None) -> datetime | None:
|
|
192
|
+
"""Validate that timestamps are timezone-aware when provided.
|
|
193
|
+
|
|
194
|
+
Delegates to shared utility for consistent validation across all models.
|
|
195
|
+
"""
|
|
196
|
+
return validate_timezone_aware_datetime_optional(v)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
__all__ = ["ModelRegistrationRecord"]
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registration Update Model for Storage Operations.
|
|
4
|
+
|
|
5
|
+
This module provides ModelRegistrationUpdate, representing a partial update
|
|
6
|
+
to a registration record. Only fields that are set (not None) will be updated.
|
|
7
|
+
|
|
8
|
+
Architecture:
|
|
9
|
+
ModelRegistrationUpdate allows selective field updates:
|
|
10
|
+
- endpoints: Optional new endpoints dict
|
|
11
|
+
- metadata: Optional new metadata dict
|
|
12
|
+
- capabilities: Optional new capabilities list
|
|
13
|
+
- node_version: Optional new semantic version (ModelSemVer)
|
|
14
|
+
|
|
15
|
+
This model enables type-safe partial updates rather than untyped dict[str, object].
|
|
16
|
+
|
|
17
|
+
Related:
|
|
18
|
+
- ModelRegistrationRecord: Full record type being updated
|
|
19
|
+
- ProtocolRegistrationStorageHandler: Protocol that uses this for updates
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
25
|
+
|
|
26
|
+
from omnibase_core.models.primitives.model_semver import ModelSemVer
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ModelRegistrationUpdate(BaseModel):
|
|
30
|
+
"""Update model for registration storage operations.
|
|
31
|
+
|
|
32
|
+
Defines the fields that can be updated in a registration record.
|
|
33
|
+
All fields are optional - only non-None fields will be applied.
|
|
34
|
+
|
|
35
|
+
Immutability:
|
|
36
|
+
This model uses frozen=True to ensure updates are immutable
|
|
37
|
+
once created, enabling safe reuse and logging.
|
|
38
|
+
|
|
39
|
+
Attributes:
|
|
40
|
+
endpoints: Optional new endpoints dict (replaces existing).
|
|
41
|
+
metadata: Optional new metadata dict (replaces existing).
|
|
42
|
+
capabilities: Optional new capabilities list (replaces existing).
|
|
43
|
+
node_version: Optional new semantic version (replaces existing).
|
|
44
|
+
|
|
45
|
+
Example:
|
|
46
|
+
>>> # Update only endpoints
|
|
47
|
+
>>> update = ModelRegistrationUpdate(
|
|
48
|
+
... endpoints={"health": "http://new-host:8080/health"},
|
|
49
|
+
... )
|
|
50
|
+
|
|
51
|
+
>>> # Update multiple fields
|
|
52
|
+
>>> update = ModelRegistrationUpdate(
|
|
53
|
+
... endpoints={"health": "http://new-host:8080/health"},
|
|
54
|
+
... metadata={"team": "platform", "env": "production"},
|
|
55
|
+
... )
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
model_config = ConfigDict(frozen=True, extra="forbid", from_attributes=True)
|
|
59
|
+
|
|
60
|
+
endpoints: dict[str, str] | None = Field(
|
|
61
|
+
default=None,
|
|
62
|
+
description="Optional new endpoints dict (replaces existing if set)",
|
|
63
|
+
)
|
|
64
|
+
metadata: dict[str, str] | None = Field(
|
|
65
|
+
default=None,
|
|
66
|
+
description="Optional new metadata dict (replaces existing if set)",
|
|
67
|
+
)
|
|
68
|
+
capabilities: list[str] | None = Field(
|
|
69
|
+
default=None,
|
|
70
|
+
description="Optional new capabilities list (replaces existing if set)",
|
|
71
|
+
)
|
|
72
|
+
node_version: ModelSemVer | None = Field(
|
|
73
|
+
default=None,
|
|
74
|
+
description="Optional new semantic version",
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
@field_validator("node_version", mode="before")
|
|
78
|
+
@classmethod
|
|
79
|
+
def parse_node_version(cls, v: ModelSemVer | str | None) -> ModelSemVer | None:
|
|
80
|
+
"""Parse node_version from string or ModelSemVer.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
v: Either a ModelSemVer instance, a semver string, or None.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
Validated ModelSemVer instance or None.
|
|
87
|
+
|
|
88
|
+
Raises:
|
|
89
|
+
ValueError: If the string is not a valid semantic version.
|
|
90
|
+
"""
|
|
91
|
+
if v is None:
|
|
92
|
+
return None
|
|
93
|
+
if isinstance(v, str):
|
|
94
|
+
try:
|
|
95
|
+
return ModelSemVer.parse(v)
|
|
96
|
+
except Exception as e:
|
|
97
|
+
raise ValueError(f"node_version: {e!s}") from e
|
|
98
|
+
return v
|
|
99
|
+
|
|
100
|
+
@model_validator(mode="after")
|
|
101
|
+
def validate_at_least_one_field(self) -> ModelRegistrationUpdate:
|
|
102
|
+
"""Validate that at least one field is set for update.
|
|
103
|
+
|
|
104
|
+
An empty update (all None fields) is a no-op and likely a bug.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
The validated update model.
|
|
108
|
+
|
|
109
|
+
Raises:
|
|
110
|
+
ValueError: If no fields are set.
|
|
111
|
+
"""
|
|
112
|
+
if (
|
|
113
|
+
self.endpoints is None
|
|
114
|
+
and self.metadata is None
|
|
115
|
+
and self.capabilities is None
|
|
116
|
+
and self.node_version is None
|
|
117
|
+
):
|
|
118
|
+
raise ValueError(
|
|
119
|
+
"At least one field must be set for update. "
|
|
120
|
+
"All fields are currently None."
|
|
121
|
+
)
|
|
122
|
+
return self
|
|
123
|
+
|
|
124
|
+
def has_updates(self) -> bool:
|
|
125
|
+
"""Check if any fields are set for update.
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
True if at least one field is non-None.
|
|
129
|
+
"""
|
|
130
|
+
return (
|
|
131
|
+
self.endpoints is not None
|
|
132
|
+
or self.metadata is not None
|
|
133
|
+
or self.capabilities is not None
|
|
134
|
+
or self.node_version is not None
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
def to_dict(self) -> dict[str, object]:
|
|
138
|
+
"""Convert to dict with only non-None fields.
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
Dict of field names to values, excluding None fields.
|
|
142
|
+
"""
|
|
143
|
+
result: dict[str, object] = {}
|
|
144
|
+
if self.endpoints is not None:
|
|
145
|
+
result["endpoints"] = self.endpoints
|
|
146
|
+
if self.metadata is not None:
|
|
147
|
+
result["metadata"] = self.metadata
|
|
148
|
+
if self.capabilities is not None:
|
|
149
|
+
result["capabilities"] = self.capabilities
|
|
150
|
+
if self.node_version is not None:
|
|
151
|
+
result["node_version"] = self.node_version
|
|
152
|
+
return result
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
__all__ = ["ModelRegistrationUpdate"]
|
omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Storage Health Check Details Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for backend-specific diagnostic
|
|
6
|
+
information in health check results, replacing untyped dict[str, object]
|
|
7
|
+
with strongly-typed fields.
|
|
8
|
+
|
|
9
|
+
Architecture:
|
|
10
|
+
ModelStorageHealthCheckDetails captures backend-specific diagnostics:
|
|
11
|
+
- Connection pool statistics (pool_size, active_connections)
|
|
12
|
+
- Server version information
|
|
13
|
+
- Replication status
|
|
14
|
+
- Custom backend-specific extensions
|
|
15
|
+
|
|
16
|
+
The model uses optional fields to accommodate different backends
|
|
17
|
+
that may provide varying levels of diagnostic information.
|
|
18
|
+
|
|
19
|
+
Related:
|
|
20
|
+
- ModelStorageHealthCheckResult: Parent model that contains details
|
|
21
|
+
- ProtocolRegistrationStorageHandler: Protocol for storage backends
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ModelStorageHealthCheckDetails(BaseModel):
|
|
30
|
+
"""Backend-specific diagnostic information for health checks.
|
|
31
|
+
|
|
32
|
+
This model captures diagnostic details from storage backends.
|
|
33
|
+
All fields are optional as different backends provide varying
|
|
34
|
+
levels of information.
|
|
35
|
+
|
|
36
|
+
Immutability:
|
|
37
|
+
This model uses frozen=True to ensure details are immutable
|
|
38
|
+
once created, enabling safe sharing and logging.
|
|
39
|
+
|
|
40
|
+
Attributes:
|
|
41
|
+
pool_size: Maximum size of the connection pool (if applicable).
|
|
42
|
+
active_connections: Current number of active connections.
|
|
43
|
+
idle_connections: Current number of idle connections.
|
|
44
|
+
waiting_connections: Number of requests waiting for connections.
|
|
45
|
+
server_version: Database server version string.
|
|
46
|
+
is_primary: Whether this is the primary/leader node.
|
|
47
|
+
replication_lag_ms: Replication lag in milliseconds (for replicas).
|
|
48
|
+
database_name: Name of the database being used.
|
|
49
|
+
schema_name: Schema name within the database.
|
|
50
|
+
extensions: List of enabled database extensions.
|
|
51
|
+
|
|
52
|
+
Example (PostgreSQL):
|
|
53
|
+
>>> details = ModelStorageHealthCheckDetails(
|
|
54
|
+
... pool_size=10,
|
|
55
|
+
... active_connections=3,
|
|
56
|
+
... idle_connections=7,
|
|
57
|
+
... waiting_connections=0,
|
|
58
|
+
... server_version="PostgreSQL 16.1",
|
|
59
|
+
... is_primary=True,
|
|
60
|
+
... database_name="omninode_bridge",
|
|
61
|
+
... schema_name="public",
|
|
62
|
+
... )
|
|
63
|
+
>>> details.pool_size
|
|
64
|
+
10
|
|
65
|
+
|
|
66
|
+
Example (minimal details from mock backend):
|
|
67
|
+
>>> details = ModelStorageHealthCheckDetails(
|
|
68
|
+
... server_version="mock-1.0.0",
|
|
69
|
+
... )
|
|
70
|
+
>>> details.pool_size is None
|
|
71
|
+
True
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
model_config = ConfigDict(frozen=True, extra="forbid", from_attributes=True)
|
|
75
|
+
|
|
76
|
+
pool_size: int | None = Field(
|
|
77
|
+
default=None,
|
|
78
|
+
description="Maximum size of the connection pool (if applicable)",
|
|
79
|
+
ge=0,
|
|
80
|
+
)
|
|
81
|
+
active_connections: int | None = Field(
|
|
82
|
+
default=None,
|
|
83
|
+
description="Current number of active connections",
|
|
84
|
+
ge=0,
|
|
85
|
+
)
|
|
86
|
+
idle_connections: int | None = Field(
|
|
87
|
+
default=None,
|
|
88
|
+
description="Current number of idle connections",
|
|
89
|
+
ge=0,
|
|
90
|
+
)
|
|
91
|
+
waiting_connections: int | None = Field(
|
|
92
|
+
default=None,
|
|
93
|
+
description="Number of requests waiting for connections",
|
|
94
|
+
ge=0,
|
|
95
|
+
)
|
|
96
|
+
server_version: str | None = Field(
|
|
97
|
+
default=None,
|
|
98
|
+
description="Database server version string",
|
|
99
|
+
)
|
|
100
|
+
is_primary: bool | None = Field(
|
|
101
|
+
default=None,
|
|
102
|
+
description="Whether this is the primary/leader node",
|
|
103
|
+
)
|
|
104
|
+
replication_lag_ms: float | None = Field(
|
|
105
|
+
default=None,
|
|
106
|
+
description="Replication lag in milliseconds (for replicas)",
|
|
107
|
+
ge=0.0,
|
|
108
|
+
)
|
|
109
|
+
database_name: str | None = Field(
|
|
110
|
+
default=None,
|
|
111
|
+
description="Name of the database being used",
|
|
112
|
+
)
|
|
113
|
+
schema_name: str | None = Field(
|
|
114
|
+
default=None,
|
|
115
|
+
description="Schema name within the database",
|
|
116
|
+
)
|
|
117
|
+
extensions: list[str] | None = Field(
|
|
118
|
+
default=None,
|
|
119
|
+
description="List of enabled database extensions",
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
__all__ = ["ModelStorageHealthCheckDetails"]
|
omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Storage Health Check Result Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for health check results from
|
|
6
|
+
registration storage backends, using strongly-typed model instances
|
|
7
|
+
for all fields including backend-specific details.
|
|
8
|
+
|
|
9
|
+
Note:
|
|
10
|
+
This model is domain-specific to registration storage. For
|
|
11
|
+
general-purpose health checks, see
|
|
12
|
+
``omnibase_infra.models.health.ModelHealthCheckResult``.
|
|
13
|
+
|
|
14
|
+
Related:
|
|
15
|
+
- ModelStorageHealthCheckDetails: Backend-specific diagnostic details
|
|
16
|
+
- ProtocolRegistrationStorageHandler: Protocol for storage backends
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from uuid import UUID
|
|
22
|
+
|
|
23
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
24
|
+
|
|
25
|
+
from .model_storage_health_check_details import ModelStorageHealthCheckDetails
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ModelStorageHealthCheckResult(BaseModel):
|
|
29
|
+
"""Result of a storage backend health check.
|
|
30
|
+
|
|
31
|
+
This model represents the outcome of a health check operation on a
|
|
32
|
+
registration storage backend, providing structured diagnostics about
|
|
33
|
+
the storage backend's operational status.
|
|
34
|
+
|
|
35
|
+
Attributes:
|
|
36
|
+
healthy: Whether the storage backend is healthy and operational.
|
|
37
|
+
When True, the backend can accept operations normally.
|
|
38
|
+
When False, consult the reason field for diagnostics.
|
|
39
|
+
backend_type: Identifier for the storage backend (e.g., "postgresql", "mock").
|
|
40
|
+
latency_ms: Connection latency in milliseconds.
|
|
41
|
+
reason: Human-readable explanation of the health status.
|
|
42
|
+
error_type: Exception type name if health check failed.
|
|
43
|
+
Only populated when healthy is False.
|
|
44
|
+
details: Backend-specific diagnostic information as a typed model.
|
|
45
|
+
Contains pool_size, active_connections, server_version, etc.
|
|
46
|
+
correlation_id: Correlation ID for distributed tracing.
|
|
47
|
+
|
|
48
|
+
Example:
|
|
49
|
+
>>> from omnibase_infra.nodes.node_registration_storage_effect.models import (
|
|
50
|
+
... ModelStorageHealthCheckDetails,
|
|
51
|
+
... )
|
|
52
|
+
>>> # Healthy storage backend
|
|
53
|
+
>>> result = ModelStorageHealthCheckResult(
|
|
54
|
+
... healthy=True,
|
|
55
|
+
... backend_type="postgresql",
|
|
56
|
+
... latency_ms=2.5,
|
|
57
|
+
... reason="ok",
|
|
58
|
+
... details=ModelStorageHealthCheckDetails(
|
|
59
|
+
... pool_size=10,
|
|
60
|
+
... active_connections=3,
|
|
61
|
+
... ),
|
|
62
|
+
... )
|
|
63
|
+
>>> if result.healthy:
|
|
64
|
+
... print(f"{result.backend_type} is operational")
|
|
65
|
+
postgresql is operational
|
|
66
|
+
|
|
67
|
+
>>> # Failed health check
|
|
68
|
+
>>> result = ModelStorageHealthCheckResult(
|
|
69
|
+
... healthy=False,
|
|
70
|
+
... backend_type="postgresql",
|
|
71
|
+
... latency_ms=0.0,
|
|
72
|
+
... reason="Connection refused",
|
|
73
|
+
... error_type="ConnectionRefusedError",
|
|
74
|
+
... )
|
|
75
|
+
>>> if not result.healthy:
|
|
76
|
+
... print(f"Backend unhealthy: {result.reason}")
|
|
77
|
+
Backend unhealthy: Connection refused
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
model_config = ConfigDict(
|
|
81
|
+
frozen=True,
|
|
82
|
+
extra="forbid",
|
|
83
|
+
from_attributes=True,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
healthy: bool = Field(
|
|
87
|
+
description="Whether the storage backend is healthy and operational",
|
|
88
|
+
)
|
|
89
|
+
backend_type: str = Field(
|
|
90
|
+
description="Identifier for the storage backend (e.g., 'postgresql', 'mock')",
|
|
91
|
+
)
|
|
92
|
+
latency_ms: float = Field(
|
|
93
|
+
default=0.0,
|
|
94
|
+
ge=0.0,
|
|
95
|
+
description="Connection latency in milliseconds",
|
|
96
|
+
)
|
|
97
|
+
reason: str = Field(
|
|
98
|
+
default="ok",
|
|
99
|
+
description="Human-readable explanation of the health status",
|
|
100
|
+
)
|
|
101
|
+
error_type: str | None = Field(
|
|
102
|
+
default=None,
|
|
103
|
+
description="Exception type name if health check failed",
|
|
104
|
+
)
|
|
105
|
+
details: ModelStorageHealthCheckDetails = Field(
|
|
106
|
+
default_factory=ModelStorageHealthCheckDetails,
|
|
107
|
+
description="Backend-specific diagnostic information as a typed model",
|
|
108
|
+
)
|
|
109
|
+
correlation_id: UUID | None = Field(
|
|
110
|
+
default=None,
|
|
111
|
+
description="Correlation ID for distributed tracing",
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
__all__: list[str] = [
|
|
116
|
+
"ModelStorageHealthCheckResult",
|
|
117
|
+
]
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Storage Query Model for Registration Storage Operations.
|
|
4
|
+
|
|
5
|
+
This module provides ModelStorageQuery, representing a query for retrieving
|
|
6
|
+
registration records from storage backends.
|
|
7
|
+
|
|
8
|
+
Architecture:
|
|
9
|
+
ModelStorageQuery supports flexible querying:
|
|
10
|
+
- Filter by node_id for specific record lookup
|
|
11
|
+
- Filter by node_type for type-based queries
|
|
12
|
+
- Filter by capabilities for capability-based discovery
|
|
13
|
+
- Pagination via limit and offset
|
|
14
|
+
|
|
15
|
+
All filters are optional - an empty query returns all records.
|
|
16
|
+
|
|
17
|
+
Related:
|
|
18
|
+
- NodeRegistrationStorageEffect: Effect node that executes queries
|
|
19
|
+
- ModelStorageResult: Result model containing query results
|
|
20
|
+
- ProtocolRegistrationStorageHandler: Protocol that implements queries
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
from uuid import UUID
|
|
26
|
+
|
|
27
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
28
|
+
|
|
29
|
+
from omnibase_core.enums.enum_node_kind import EnumNodeKind
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class ModelStorageQuery(BaseModel):
|
|
33
|
+
"""Query model for registration storage operations.
|
|
34
|
+
|
|
35
|
+
Defines filters and pagination for querying registration records.
|
|
36
|
+
All filter fields are optional - omitting a filter means "match all".
|
|
37
|
+
|
|
38
|
+
Immutability:
|
|
39
|
+
This model uses frozen=True to ensure queries are immutable
|
|
40
|
+
once created, enabling safe reuse and caching.
|
|
41
|
+
|
|
42
|
+
Attributes:
|
|
43
|
+
node_id: Filter by specific node ID (exact match).
|
|
44
|
+
node_type: Filter by node type (EnumNodeKind).
|
|
45
|
+
capability_filter: Filter by capability name (contains match).
|
|
46
|
+
limit: Maximum number of records to return.
|
|
47
|
+
offset: Number of records to skip for pagination.
|
|
48
|
+
|
|
49
|
+
Example:
|
|
50
|
+
>>> # Query all EFFECT nodes
|
|
51
|
+
>>> from omnibase_core.enums.enum_node_kind import EnumNodeKind
|
|
52
|
+
>>> query = ModelStorageQuery(node_type=EnumNodeKind.EFFECT, limit=100)
|
|
53
|
+
|
|
54
|
+
>>> # Query specific node
|
|
55
|
+
>>> query = ModelStorageQuery(node_id=some_uuid)
|
|
56
|
+
|
|
57
|
+
>>> # Query by capability with pagination
|
|
58
|
+
>>> query = ModelStorageQuery(
|
|
59
|
+
... capability_filter="registration.storage",
|
|
60
|
+
... limit=50,
|
|
61
|
+
... offset=100,
|
|
62
|
+
... )
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
model_config = ConfigDict(frozen=True, extra="forbid", from_attributes=True)
|
|
66
|
+
|
|
67
|
+
node_id: UUID | None = Field(
|
|
68
|
+
default=None,
|
|
69
|
+
description="Filter by specific node ID (exact match)",
|
|
70
|
+
)
|
|
71
|
+
node_type: EnumNodeKind | None = Field(
|
|
72
|
+
default=None,
|
|
73
|
+
description="Filter by node type",
|
|
74
|
+
)
|
|
75
|
+
capability_filter: str | None = Field(
|
|
76
|
+
default=None,
|
|
77
|
+
description="Filter by capability name (nodes containing this capability)",
|
|
78
|
+
)
|
|
79
|
+
limit: int = Field(
|
|
80
|
+
default=100,
|
|
81
|
+
description="Maximum number of records to return",
|
|
82
|
+
ge=1,
|
|
83
|
+
le=1000,
|
|
84
|
+
)
|
|
85
|
+
offset: int = Field(
|
|
86
|
+
default=0,
|
|
87
|
+
description="Number of records to skip for pagination",
|
|
88
|
+
ge=0,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
def is_single_record_query(self) -> bool:
|
|
92
|
+
"""Check if this query targets a single record by node_id.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
True if node_id is specified, indicating a single-record lookup.
|
|
96
|
+
"""
|
|
97
|
+
return self.node_id is not None
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
__all__ = ["ModelStorageQuery"]
|