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,55 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Failed Component Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for representing a component that
|
|
6
|
+
failed during shutdown operations.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ModelFailedComponent(BaseModel):
|
|
15
|
+
"""Represents a component that failed during shutdown.
|
|
16
|
+
|
|
17
|
+
Attributes:
|
|
18
|
+
component_name: Name or type identifier of the failed component.
|
|
19
|
+
error_message: Error message describing the failure reason.
|
|
20
|
+
|
|
21
|
+
Example:
|
|
22
|
+
>>> failed = ModelFailedComponent(
|
|
23
|
+
... component_name="EventBusKafka",
|
|
24
|
+
... error_message="Connection timeout during shutdown"
|
|
25
|
+
... )
|
|
26
|
+
>>> print(failed.component_name)
|
|
27
|
+
EventBusKafka
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
model_config = ConfigDict(
|
|
31
|
+
strict=True,
|
|
32
|
+
frozen=True,
|
|
33
|
+
extra="forbid",
|
|
34
|
+
from_attributes=True,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
component_name: str = Field(
|
|
38
|
+
min_length=1,
|
|
39
|
+
description="Name or type identifier of the failed component",
|
|
40
|
+
)
|
|
41
|
+
error_message: str = Field(
|
|
42
|
+
min_length=1,
|
|
43
|
+
description="Error message describing the failure reason",
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
def __str__(self) -> str:
|
|
47
|
+
"""Return a human-readable string representation.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
String format showing component name and error message.
|
|
51
|
+
"""
|
|
52
|
+
return f"{self.component_name}: {self.error_message}"
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
__all__: list[str] = ["ModelFailedComponent"]
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Health Check Response Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for HTTP health check endpoint responses.
|
|
6
|
+
The model serializes to JSON for Docker/Kubernetes health probes.
|
|
7
|
+
|
|
8
|
+
Design Pattern:
|
|
9
|
+
ModelHealthCheckResponse replaces dict[str, object] responses from the
|
|
10
|
+
health server with a strongly-typed model that provides:
|
|
11
|
+
- Typed status field with Literal values
|
|
12
|
+
- Version string for runtime identification
|
|
13
|
+
- Optional details for successful health checks
|
|
14
|
+
- Optional error fields for failure cases
|
|
15
|
+
|
|
16
|
+
Thread Safety:
|
|
17
|
+
ModelHealthCheckResponse is immutable (frozen=True) after creation,
|
|
18
|
+
making it thread-safe for concurrent read access.
|
|
19
|
+
|
|
20
|
+
Example:
|
|
21
|
+
>>> from omnibase_infra.runtime.models import ModelHealthCheckResponse
|
|
22
|
+
>>>
|
|
23
|
+
>>> # Create a healthy response
|
|
24
|
+
>>> response = ModelHealthCheckResponse(
|
|
25
|
+
... status="healthy",
|
|
26
|
+
... version="1.0.0",
|
|
27
|
+
... details={"healthy": True, "handlers": {}},
|
|
28
|
+
... )
|
|
29
|
+
>>> response.model_dump_json()
|
|
30
|
+
'{"status":"healthy","version":"1.0.0","details":{"healthy":true,...}}'
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
from __future__ import annotations
|
|
34
|
+
|
|
35
|
+
from typing import Literal
|
|
36
|
+
|
|
37
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
38
|
+
|
|
39
|
+
from omnibase_core.types import JsonType
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class ModelHealthCheckResponse(BaseModel):
|
|
43
|
+
"""HTTP response model for health check endpoints.
|
|
44
|
+
|
|
45
|
+
Encapsulates the JSON response returned by GET /health and GET /ready
|
|
46
|
+
endpoints, providing type-safe serialization for health probe responses.
|
|
47
|
+
|
|
48
|
+
For successful health checks:
|
|
49
|
+
- status indicates overall health state
|
|
50
|
+
- version identifies the runtime
|
|
51
|
+
- details contains full health check data
|
|
52
|
+
|
|
53
|
+
For failed health checks (exceptions during health check):
|
|
54
|
+
- status is always "unhealthy"
|
|
55
|
+
- error contains the exception message
|
|
56
|
+
- error_type contains the exception class name
|
|
57
|
+
- correlation_id enables distributed tracing
|
|
58
|
+
|
|
59
|
+
Attributes:
|
|
60
|
+
status: Overall health status of the runtime.
|
|
61
|
+
version: Runtime version string for identification.
|
|
62
|
+
details: Full health check data (present on success).
|
|
63
|
+
error: Exception message (present on failure).
|
|
64
|
+
error_type: Exception class name (present on failure).
|
|
65
|
+
correlation_id: Tracing ID for debugging (present on failure).
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
model_config = ConfigDict(
|
|
69
|
+
strict=True,
|
|
70
|
+
frozen=True,
|
|
71
|
+
extra="forbid",
|
|
72
|
+
from_attributes=True,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
status: Literal["healthy", "degraded", "unhealthy"] = Field(
|
|
76
|
+
...,
|
|
77
|
+
description="Overall health status of the runtime",
|
|
78
|
+
)
|
|
79
|
+
version: str = Field(
|
|
80
|
+
...,
|
|
81
|
+
description="Runtime version string",
|
|
82
|
+
)
|
|
83
|
+
details: dict[str, JsonType] | None = Field(
|
|
84
|
+
default=None,
|
|
85
|
+
description="Full health check data from RuntimeHostProcess",
|
|
86
|
+
)
|
|
87
|
+
error: str | None = Field(
|
|
88
|
+
default=None,
|
|
89
|
+
description="Exception message if health check failed",
|
|
90
|
+
)
|
|
91
|
+
error_type: str | None = Field(
|
|
92
|
+
default=None,
|
|
93
|
+
description="Exception class name if health check failed",
|
|
94
|
+
)
|
|
95
|
+
correlation_id: str | None = Field(
|
|
96
|
+
default=None,
|
|
97
|
+
description="Correlation ID for distributed tracing on failure",
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
@classmethod
|
|
101
|
+
def success(
|
|
102
|
+
cls,
|
|
103
|
+
status: Literal["healthy", "degraded", "unhealthy"],
|
|
104
|
+
version: str,
|
|
105
|
+
details: dict[str, JsonType],
|
|
106
|
+
) -> ModelHealthCheckResponse:
|
|
107
|
+
"""Create a successful health check response.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
status: The determined health status.
|
|
111
|
+
version: Runtime version string.
|
|
112
|
+
details: Full health check data from the runtime.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
ModelHealthCheckResponse for successful health check.
|
|
116
|
+
|
|
117
|
+
Example:
|
|
118
|
+
>>> response = ModelHealthCheckResponse.success(
|
|
119
|
+
... status="healthy",
|
|
120
|
+
... version="1.0.0",
|
|
121
|
+
... details={"healthy": True},
|
|
122
|
+
... )
|
|
123
|
+
"""
|
|
124
|
+
return cls(
|
|
125
|
+
status=status,
|
|
126
|
+
version=version,
|
|
127
|
+
details=details,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
@classmethod
|
|
131
|
+
def failure(
|
|
132
|
+
cls,
|
|
133
|
+
version: str,
|
|
134
|
+
error: str,
|
|
135
|
+
error_type: str,
|
|
136
|
+
correlation_id: str,
|
|
137
|
+
) -> ModelHealthCheckResponse:
|
|
138
|
+
"""Create a failure health check response.
|
|
139
|
+
|
|
140
|
+
Used when health_check() itself raises an exception.
|
|
141
|
+
|
|
142
|
+
Args:
|
|
143
|
+
version: Runtime version string.
|
|
144
|
+
error: The exception message.
|
|
145
|
+
error_type: The exception class name.
|
|
146
|
+
correlation_id: Tracing ID for debugging.
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
ModelHealthCheckResponse for failed health check.
|
|
150
|
+
|
|
151
|
+
Example:
|
|
152
|
+
>>> response = ModelHealthCheckResponse.failure(
|
|
153
|
+
... version="1.0.0",
|
|
154
|
+
... error="Connection refused",
|
|
155
|
+
... error_type="ConnectionError",
|
|
156
|
+
... correlation_id="abc-123",
|
|
157
|
+
... )
|
|
158
|
+
"""
|
|
159
|
+
return cls(
|
|
160
|
+
status="unhealthy",
|
|
161
|
+
version=version,
|
|
162
|
+
error=error,
|
|
163
|
+
error_type=error_type,
|
|
164
|
+
correlation_id=correlation_id,
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
__all__: list[str] = ["ModelHealthCheckResponse"]
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Health Check Result Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for component health check operation results.
|
|
6
|
+
|
|
7
|
+
Design Pattern:
|
|
8
|
+
ModelHealthCheckResult replaces tuple[str, Any] returns from
|
|
9
|
+
check_health() with a strongly-typed model that provides:
|
|
10
|
+
- Component type identification
|
|
11
|
+
- Typed health status with structured details
|
|
12
|
+
- Factory methods for common healthy/unhealthy patterns
|
|
13
|
+
|
|
14
|
+
Thread Safety:
|
|
15
|
+
ModelHealthCheckResult is immutable (frozen=True) after creation,
|
|
16
|
+
making it thread-safe for concurrent read access.
|
|
17
|
+
|
|
18
|
+
Example:
|
|
19
|
+
>>> from omnibase_infra.runtime.models import ModelHealthCheckResult
|
|
20
|
+
>>>
|
|
21
|
+
>>> # Create a healthy result
|
|
22
|
+
>>> healthy = ModelHealthCheckResult.healthy_result("kafka")
|
|
23
|
+
>>> healthy.healthy
|
|
24
|
+
True
|
|
25
|
+
>>>
|
|
26
|
+
>>> # Create an unhealthy result (timeout)
|
|
27
|
+
>>> unhealthy = ModelHealthCheckResult.timeout_result("db", 5.0)
|
|
28
|
+
>>> unhealthy.healthy
|
|
29
|
+
False
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
35
|
+
|
|
36
|
+
from omnibase_core.types import JsonType
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class ModelHealthCheckResult(BaseModel):
|
|
40
|
+
"""Result of a handler health check operation.
|
|
41
|
+
|
|
42
|
+
Encapsulates the result of checking a single handler's health,
|
|
43
|
+
providing the handler type, health status, and detailed health data.
|
|
44
|
+
|
|
45
|
+
Attributes:
|
|
46
|
+
handler_type: The handler type identifier (e.g., "http", "db").
|
|
47
|
+
healthy: Whether the handler is healthy and operational.
|
|
48
|
+
details: Detailed health check data returned by the handler.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
model_config = ConfigDict(
|
|
52
|
+
strict=True,
|
|
53
|
+
frozen=True,
|
|
54
|
+
extra="forbid",
|
|
55
|
+
from_attributes=True,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
handler_type: str = Field(
|
|
59
|
+
...,
|
|
60
|
+
description="Handler type identifier",
|
|
61
|
+
min_length=1,
|
|
62
|
+
)
|
|
63
|
+
healthy: bool = Field(
|
|
64
|
+
...,
|
|
65
|
+
description="Whether the handler is healthy",
|
|
66
|
+
)
|
|
67
|
+
details: dict[str, JsonType] = Field(
|
|
68
|
+
default_factory=dict,
|
|
69
|
+
description="Detailed health check data from the handler",
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
@classmethod
|
|
73
|
+
def healthy_result(
|
|
74
|
+
cls,
|
|
75
|
+
handler_type: str,
|
|
76
|
+
note: str = "",
|
|
77
|
+
) -> ModelHealthCheckResult:
|
|
78
|
+
"""Create a healthy result for a handler.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
handler_type: The handler type identifier.
|
|
82
|
+
note: Optional note about the healthy status. Empty string means no note.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
ModelHealthCheckResult indicating healthy status.
|
|
86
|
+
|
|
87
|
+
Example:
|
|
88
|
+
>>> result = ModelHealthCheckResult.healthy_result("kafka")
|
|
89
|
+
>>> result.healthy
|
|
90
|
+
True
|
|
91
|
+
"""
|
|
92
|
+
details: dict[str, JsonType] = {"healthy": True}
|
|
93
|
+
if note:
|
|
94
|
+
details["note"] = note
|
|
95
|
+
return cls(handler_type=handler_type, healthy=True, details=details)
|
|
96
|
+
|
|
97
|
+
@classmethod
|
|
98
|
+
def no_health_check_result(cls, handler_type: str) -> ModelHealthCheckResult:
|
|
99
|
+
"""Create a result for a handler without health_check method.
|
|
100
|
+
|
|
101
|
+
By convention, handlers without health_check are assumed healthy.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
handler_type: The handler type identifier.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
ModelHealthCheckResult indicating healthy (no health_check method).
|
|
108
|
+
|
|
109
|
+
Example:
|
|
110
|
+
>>> result = ModelHealthCheckResult.no_health_check_result("custom")
|
|
111
|
+
>>> result.healthy
|
|
112
|
+
True
|
|
113
|
+
"""
|
|
114
|
+
return cls(
|
|
115
|
+
handler_type=handler_type,
|
|
116
|
+
healthy=True,
|
|
117
|
+
details={"healthy": True, "note": "no health_check method"},
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
@classmethod
|
|
121
|
+
def timeout_result(
|
|
122
|
+
cls,
|
|
123
|
+
handler_type: str,
|
|
124
|
+
timeout_seconds: float,
|
|
125
|
+
) -> ModelHealthCheckResult:
|
|
126
|
+
"""Create an unhealthy result for a health check timeout.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
handler_type: The handler type identifier.
|
|
130
|
+
timeout_seconds: The timeout duration that was exceeded.
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
ModelHealthCheckResult indicating timeout failure.
|
|
134
|
+
|
|
135
|
+
Example:
|
|
136
|
+
>>> result = ModelHealthCheckResult.timeout_result("db", 5.0)
|
|
137
|
+
>>> result.healthy
|
|
138
|
+
False
|
|
139
|
+
"""
|
|
140
|
+
return cls(
|
|
141
|
+
handler_type=handler_type,
|
|
142
|
+
healthy=False,
|
|
143
|
+
details={
|
|
144
|
+
"healthy": False,
|
|
145
|
+
"error": f"health check timeout after {timeout_seconds}s",
|
|
146
|
+
},
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
@classmethod
|
|
150
|
+
def error_result(
|
|
151
|
+
cls,
|
|
152
|
+
handler_type: str,
|
|
153
|
+
error: str,
|
|
154
|
+
) -> ModelHealthCheckResult:
|
|
155
|
+
"""Create an unhealthy result for a health check exception.
|
|
156
|
+
|
|
157
|
+
Args:
|
|
158
|
+
handler_type: The handler type identifier.
|
|
159
|
+
error: The error message from the exception.
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
ModelHealthCheckResult indicating error failure.
|
|
163
|
+
|
|
164
|
+
Example:
|
|
165
|
+
>>> result = ModelHealthCheckResult.error_result(
|
|
166
|
+
... "vault",
|
|
167
|
+
... "Authentication token expired",
|
|
168
|
+
... )
|
|
169
|
+
>>> result.healthy
|
|
170
|
+
False
|
|
171
|
+
"""
|
|
172
|
+
return cls(
|
|
173
|
+
handler_type=handler_type,
|
|
174
|
+
healthy=False,
|
|
175
|
+
details={"healthy": False, "error": error},
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
@classmethod
|
|
179
|
+
def from_handler_response(
|
|
180
|
+
cls,
|
|
181
|
+
handler_type: str,
|
|
182
|
+
health_response: object,
|
|
183
|
+
) -> ModelHealthCheckResult:
|
|
184
|
+
"""Create a result from a raw handler health check response.
|
|
185
|
+
|
|
186
|
+
Parses the handler's health check response and extracts health status.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
handler_type: The handler type identifier.
|
|
190
|
+
health_response: The raw response from handler.health_check().
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
ModelHealthCheckResult from the response.
|
|
194
|
+
|
|
195
|
+
Example:
|
|
196
|
+
>>> response = {"healthy": True, "lag": 100}
|
|
197
|
+
>>> result = ModelHealthCheckResult.from_handler_response(
|
|
198
|
+
... "kafka",
|
|
199
|
+
... response,
|
|
200
|
+
... )
|
|
201
|
+
>>> result.healthy
|
|
202
|
+
True
|
|
203
|
+
"""
|
|
204
|
+
if isinstance(health_response, dict):
|
|
205
|
+
healthy = bool(health_response.get("healthy", False))
|
|
206
|
+
return cls(
|
|
207
|
+
handler_type=handler_type,
|
|
208
|
+
healthy=healthy,
|
|
209
|
+
details=health_response,
|
|
210
|
+
)
|
|
211
|
+
# Non-dict response - treat as details, assume healthy
|
|
212
|
+
return cls(
|
|
213
|
+
handler_type=handler_type,
|
|
214
|
+
healthy=True,
|
|
215
|
+
details={"raw_response": health_response},
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
def __str__(self) -> str:
|
|
219
|
+
"""Return a human-readable string representation for debugging.
|
|
220
|
+
|
|
221
|
+
Returns:
|
|
222
|
+
String format: "ModelHealthCheckResult(handler_type='...', healthy=...)"
|
|
223
|
+
"""
|
|
224
|
+
status = "healthy" if self.healthy else "unhealthy"
|
|
225
|
+
return f"ModelHealthCheckResult(handler_type='{self.handler_type}', {status})"
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
__all__: list[str] = ["ModelHealthCheckResult"]
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Lifecycle Result Model for handler shutdown operations.
|
|
4
|
+
|
|
5
|
+
This module provides the ModelLifecycleResult class for representing the outcome
|
|
6
|
+
of individual handler lifecycle operations (e.g., shutdown).
|
|
7
|
+
|
|
8
|
+
Design Pattern:
|
|
9
|
+
ModelLifecycleResult replaces tuple[str, bool, str | None] returns from
|
|
10
|
+
shutdown_handler() with a strongly-typed, self-documenting model that
|
|
11
|
+
provides factory methods for success/failure cases.
|
|
12
|
+
|
|
13
|
+
The model uses an empty string sentinel instead of None for error_message
|
|
14
|
+
to eliminate union types and reduce type complexity. Use the `has_error`
|
|
15
|
+
property to check if an error exists before accessing error_message.
|
|
16
|
+
|
|
17
|
+
Thread Safety:
|
|
18
|
+
ModelLifecycleResult is immutable (frozen=True) after creation,
|
|
19
|
+
making it thread-safe for concurrent read access.
|
|
20
|
+
|
|
21
|
+
Example:
|
|
22
|
+
>>> from omnibase_infra.runtime.models import ModelLifecycleResult
|
|
23
|
+
>>>
|
|
24
|
+
>>> # Create a successful shutdown result
|
|
25
|
+
>>> success = ModelLifecycleResult.succeeded("kafka")
|
|
26
|
+
>>> success.handler_type
|
|
27
|
+
'kafka'
|
|
28
|
+
>>> success.success
|
|
29
|
+
True
|
|
30
|
+
>>> success.has_error
|
|
31
|
+
False
|
|
32
|
+
>>>
|
|
33
|
+
>>> # Create a failed shutdown result
|
|
34
|
+
>>> failure = ModelLifecycleResult.failed("db", "Connection timeout")
|
|
35
|
+
>>> failure.success
|
|
36
|
+
False
|
|
37
|
+
>>> failure.error_message
|
|
38
|
+
'Connection timeout'
|
|
39
|
+
>>> failure.has_error
|
|
40
|
+
True
|
|
41
|
+
|
|
42
|
+
.. versionchanged:: 0.7.0
|
|
43
|
+
Changed error_message from str | None to str with empty string sentinel
|
|
44
|
+
to reduce union count (OMN-1003 consolidation).
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
48
|
+
|
|
49
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
50
|
+
from omnibase_infra.errors import ModelInfraErrorContext, ProtocolConfigurationError
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class ModelLifecycleResult(BaseModel):
|
|
54
|
+
"""Result of a single handler lifecycle operation (e.g., shutdown).
|
|
55
|
+
|
|
56
|
+
Provides a strongly-typed replacement for tuple[str, bool, str | None]
|
|
57
|
+
with factory methods for common success/failure patterns.
|
|
58
|
+
|
|
59
|
+
Note:
|
|
60
|
+
The ``error_message`` field uses an empty string sentinel instead
|
|
61
|
+
of None to eliminate union types. Use the ``has_error`` property
|
|
62
|
+
to check if an error message exists before accessing it.
|
|
63
|
+
|
|
64
|
+
Attributes:
|
|
65
|
+
handler_type: The handler type identifier (e.g., "kafka", "db", "http").
|
|
66
|
+
success: True if the lifecycle operation completed successfully.
|
|
67
|
+
error_message: Error description if the operation failed, empty string
|
|
68
|
+
otherwise. Use ``has_error`` to check if an error exists.
|
|
69
|
+
|
|
70
|
+
Example:
|
|
71
|
+
>>> result = ModelLifecycleResult.succeeded("consul")
|
|
72
|
+
>>> result.success
|
|
73
|
+
True
|
|
74
|
+
>>> result.has_error
|
|
75
|
+
False
|
|
76
|
+
|
|
77
|
+
>>> result = ModelLifecycleResult.failed("vault", "Auth expired")
|
|
78
|
+
>>> result.success
|
|
79
|
+
False
|
|
80
|
+
>>> result.error_message
|
|
81
|
+
'Auth expired'
|
|
82
|
+
>>> result.has_error
|
|
83
|
+
True
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
model_config = ConfigDict(
|
|
87
|
+
strict=True,
|
|
88
|
+
frozen=True,
|
|
89
|
+
extra="forbid",
|
|
90
|
+
from_attributes=True,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
handler_type: str = Field(
|
|
94
|
+
...,
|
|
95
|
+
description="The handler type identifier (e.g., 'kafka', 'db').",
|
|
96
|
+
min_length=1,
|
|
97
|
+
)
|
|
98
|
+
success: bool = Field(
|
|
99
|
+
...,
|
|
100
|
+
description="True if the lifecycle operation completed successfully.",
|
|
101
|
+
)
|
|
102
|
+
error_message: str = Field(
|
|
103
|
+
default="",
|
|
104
|
+
description="Error description if the operation failed, empty string otherwise. "
|
|
105
|
+
"Use has_error property to check if an error exists.",
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
@property
|
|
109
|
+
def has_error(self) -> bool:
|
|
110
|
+
"""Check if an error message exists.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
True if error_message is non-empty, False otherwise.
|
|
114
|
+
|
|
115
|
+
Example:
|
|
116
|
+
>>> ModelLifecycleResult.succeeded("kafka").has_error
|
|
117
|
+
False
|
|
118
|
+
>>> ModelLifecycleResult.failed("db", "Error").has_error
|
|
119
|
+
True
|
|
120
|
+
"""
|
|
121
|
+
return bool(self.error_message)
|
|
122
|
+
|
|
123
|
+
@classmethod
|
|
124
|
+
def succeeded(cls, handler_type: str) -> "ModelLifecycleResult":
|
|
125
|
+
"""Create a successful lifecycle result.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
handler_type: The handler type identifier.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
ModelLifecycleResult indicating success.
|
|
132
|
+
|
|
133
|
+
Example:
|
|
134
|
+
>>> result = ModelLifecycleResult.succeeded("kafka")
|
|
135
|
+
>>> result.success
|
|
136
|
+
True
|
|
137
|
+
>>> result.has_error
|
|
138
|
+
False
|
|
139
|
+
"""
|
|
140
|
+
return cls(handler_type=handler_type, success=True, error_message="")
|
|
141
|
+
|
|
142
|
+
@classmethod
|
|
143
|
+
def failed(cls, handler_type: str, error_message: str) -> "ModelLifecycleResult":
|
|
144
|
+
"""Create a failed lifecycle result.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
handler_type: The handler type identifier.
|
|
148
|
+
error_message: Description of the error that occurred. Must be non-empty.
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
ModelLifecycleResult indicating failure with error details.
|
|
152
|
+
|
|
153
|
+
Raises:
|
|
154
|
+
ValueError: If error_message is empty.
|
|
155
|
+
|
|
156
|
+
Example:
|
|
157
|
+
>>> result = ModelLifecycleResult.failed("db", "Connection refused")
|
|
158
|
+
>>> result.success
|
|
159
|
+
False
|
|
160
|
+
>>> result.error_message
|
|
161
|
+
'Connection refused'
|
|
162
|
+
"""
|
|
163
|
+
if not error_message:
|
|
164
|
+
context = ModelInfraErrorContext(
|
|
165
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
166
|
+
operation="lifecycle_failed",
|
|
167
|
+
)
|
|
168
|
+
raise ProtocolConfigurationError(
|
|
169
|
+
"error_message must be non-empty for failed results",
|
|
170
|
+
context=context,
|
|
171
|
+
)
|
|
172
|
+
return cls(
|
|
173
|
+
handler_type=handler_type, success=False, error_message=error_message
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
def is_success(self) -> bool:
|
|
177
|
+
"""Check if the lifecycle operation succeeded.
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
True if success is True, False otherwise.
|
|
181
|
+
"""
|
|
182
|
+
return self.success
|
|
183
|
+
|
|
184
|
+
def is_failure(self) -> bool:
|
|
185
|
+
"""Check if the lifecycle operation failed.
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
True if success is False, False otherwise.
|
|
189
|
+
"""
|
|
190
|
+
return not self.success
|
|
191
|
+
|
|
192
|
+
def __bool__(self) -> bool:
|
|
193
|
+
"""Allow using result in boolean context.
|
|
194
|
+
|
|
195
|
+
Warning:
|
|
196
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
197
|
+
return ``True`` only when ``success`` is True. This differs from typical
|
|
198
|
+
Pydantic model behavior where ``bool(model)`` always returns ``True`` for
|
|
199
|
+
any valid model instance.
|
|
200
|
+
|
|
201
|
+
This design enables idiomatic lifecycle operation checks::
|
|
202
|
+
|
|
203
|
+
if result:
|
|
204
|
+
# Operation succeeded - continue
|
|
205
|
+
continue_shutdown_sequence()
|
|
206
|
+
else:
|
|
207
|
+
# Operation failed - handle error
|
|
208
|
+
log_error(result.error_message)
|
|
209
|
+
raise LifecycleError(result.error_message)
|
|
210
|
+
|
|
211
|
+
If you need to check model validity instead, use explicit attribute access::
|
|
212
|
+
|
|
213
|
+
# Check for success (uses __bool__)
|
|
214
|
+
if result:
|
|
215
|
+
...
|
|
216
|
+
|
|
217
|
+
# Check model is valid (always True for constructed instance)
|
|
218
|
+
if result is not None:
|
|
219
|
+
...
|
|
220
|
+
|
|
221
|
+
# Explicit success check (preferred for clarity)
|
|
222
|
+
if result.success:
|
|
223
|
+
...
|
|
224
|
+
|
|
225
|
+
Returns:
|
|
226
|
+
True if operation succeeded, False otherwise.
|
|
227
|
+
|
|
228
|
+
Example:
|
|
229
|
+
>>> if ModelLifecycleResult.succeeded("kafka"):
|
|
230
|
+
... print("Shutdown complete!")
|
|
231
|
+
Shutdown complete!
|
|
232
|
+
"""
|
|
233
|
+
return self.success
|
|
234
|
+
|
|
235
|
+
def __str__(self) -> str:
|
|
236
|
+
"""Return a human-readable string representation for debugging.
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
String format: "ModelLifecycleResult(handler_type='...', success=...)"
|
|
240
|
+
"""
|
|
241
|
+
status = "succeeded" if self.success else f"failed: {self.error_message}"
|
|
242
|
+
return f"ModelLifecycleResult(handler_type='{self.handler_type}', {status})"
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
__all__ = ["ModelLifecycleResult"]
|