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,162 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Discovery Result Model for Handler Discovery Operations.
|
|
4
|
+
|
|
5
|
+
This module provides the ModelDiscoveryResult model for aggregating the results
|
|
6
|
+
of handler discovery operations, including counts and any errors or warnings.
|
|
7
|
+
|
|
8
|
+
See Also:
|
|
9
|
+
- ModelDiscoveryError: Individual discovery errors
|
|
10
|
+
- ModelDiscoveryWarning: Non-fatal warnings
|
|
11
|
+
|
|
12
|
+
.. versionadded:: 0.7.0
|
|
13
|
+
Created as part of OMN-1133 contract-based handler discovery.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from datetime import UTC, datetime
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
21
|
+
|
|
22
|
+
from omnibase_infra.models.runtime.model_discovery_error import ModelDiscoveryError
|
|
23
|
+
from omnibase_infra.models.runtime.model_discovery_warning import ModelDiscoveryWarning
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ModelDiscoveryResult(BaseModel):
|
|
27
|
+
"""Result of a handler discovery operation.
|
|
28
|
+
|
|
29
|
+
Aggregates the results of a discovery operation including counts of
|
|
30
|
+
discovered and registered handlers, any errors or warnings encountered,
|
|
31
|
+
and the timestamp of completion.
|
|
32
|
+
|
|
33
|
+
Attributes:
|
|
34
|
+
handlers_discovered: Number of handlers found during discovery.
|
|
35
|
+
handlers_registered: Number of handlers successfully registered.
|
|
36
|
+
errors: List of errors encountered during discovery.
|
|
37
|
+
warnings: List of non-fatal warnings encountered during discovery.
|
|
38
|
+
discovered_at: Timestamp when discovery completed.
|
|
39
|
+
|
|
40
|
+
Example:
|
|
41
|
+
>>> result = ModelDiscoveryResult(
|
|
42
|
+
... handlers_discovered=5,
|
|
43
|
+
... handlers_registered=4,
|
|
44
|
+
... errors=[ModelDiscoveryError(
|
|
45
|
+
... error_code="MODULE_NOT_FOUND",
|
|
46
|
+
... message="Module not found",
|
|
47
|
+
... )],
|
|
48
|
+
... )
|
|
49
|
+
>>> result.has_errors
|
|
50
|
+
True
|
|
51
|
+
>>> bool(result) # False because there are errors
|
|
52
|
+
False
|
|
53
|
+
|
|
54
|
+
.. versionadded:: 0.7.0
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
model_config = ConfigDict(
|
|
58
|
+
extra="forbid",
|
|
59
|
+
strict=True,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
handlers_discovered: int = Field(
|
|
63
|
+
default=0,
|
|
64
|
+
ge=0,
|
|
65
|
+
description="Number of handlers found during discovery",
|
|
66
|
+
)
|
|
67
|
+
handlers_registered: int = Field(
|
|
68
|
+
default=0,
|
|
69
|
+
ge=0,
|
|
70
|
+
description="Number of handlers successfully registered",
|
|
71
|
+
)
|
|
72
|
+
errors: list[ModelDiscoveryError] = Field(
|
|
73
|
+
default_factory=list,
|
|
74
|
+
description="List of errors encountered during discovery",
|
|
75
|
+
)
|
|
76
|
+
warnings: list[ModelDiscoveryWarning] = Field(
|
|
77
|
+
default_factory=list,
|
|
78
|
+
description="List of non-fatal warnings encountered during discovery",
|
|
79
|
+
)
|
|
80
|
+
discovered_at: datetime = Field(
|
|
81
|
+
default_factory=lambda: datetime.now(UTC),
|
|
82
|
+
description="Timestamp when discovery completed",
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def has_errors(self) -> bool:
|
|
87
|
+
"""Check if any errors occurred during discovery.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
True if errors list is non-empty, False otherwise.
|
|
91
|
+
|
|
92
|
+
Example:
|
|
93
|
+
>>> ModelDiscoveryResult().has_errors
|
|
94
|
+
False
|
|
95
|
+
|
|
96
|
+
.. versionadded:: 0.7.0
|
|
97
|
+
"""
|
|
98
|
+
return len(self.errors) > 0
|
|
99
|
+
|
|
100
|
+
@property
|
|
101
|
+
def has_warnings(self) -> bool:
|
|
102
|
+
"""Check if any warnings occurred during discovery.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
True if warnings list is non-empty, False otherwise.
|
|
106
|
+
|
|
107
|
+
Example:
|
|
108
|
+
>>> ModelDiscoveryResult().has_warnings
|
|
109
|
+
False
|
|
110
|
+
|
|
111
|
+
.. versionadded:: 0.7.0
|
|
112
|
+
"""
|
|
113
|
+
return len(self.warnings) > 0
|
|
114
|
+
|
|
115
|
+
def __bool__(self) -> bool:
|
|
116
|
+
"""Allow using result in boolean context for success checking.
|
|
117
|
+
|
|
118
|
+
Warning:
|
|
119
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
120
|
+
return ``True`` only when no errors occurred during discovery. This differs
|
|
121
|
+
from typical Pydantic model behavior where ``bool(model)`` always returns
|
|
122
|
+
``True`` for any valid model instance.
|
|
123
|
+
|
|
124
|
+
This design enables idiomatic conditional checks for discovery results::
|
|
125
|
+
|
|
126
|
+
result = loader.discover_handlers(path)
|
|
127
|
+
if result:
|
|
128
|
+
# Discovery succeeded - use handlers
|
|
129
|
+
process_handlers(result.handlers_registered)
|
|
130
|
+
else:
|
|
131
|
+
# Discovery had errors - handle failures
|
|
132
|
+
for error in result.errors:
|
|
133
|
+
log_error(error)
|
|
134
|
+
|
|
135
|
+
If you need to check model validity instead, use explicit attribute access::
|
|
136
|
+
|
|
137
|
+
# Check for discovery success (uses __bool__)
|
|
138
|
+
if result:
|
|
139
|
+
...
|
|
140
|
+
|
|
141
|
+
# Check model exists (always True for constructed instance)
|
|
142
|
+
if result is not None:
|
|
143
|
+
...
|
|
144
|
+
|
|
145
|
+
# Explicit error check (preferred for clarity)
|
|
146
|
+
if not result.has_errors:
|
|
147
|
+
...
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
True if discovery was successful (no errors), False otherwise.
|
|
151
|
+
|
|
152
|
+
Example:
|
|
153
|
+
>>> if ModelDiscoveryResult(handlers_discovered=5, handlers_registered=5):
|
|
154
|
+
... print("Success!")
|
|
155
|
+
Success!
|
|
156
|
+
|
|
157
|
+
.. versionadded:: 0.7.0
|
|
158
|
+
"""
|
|
159
|
+
return len(self.errors) == 0
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
__all__ = ["ModelDiscoveryResult"]
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Discovery Warning Model for Handler Discovery Operations.
|
|
4
|
+
|
|
5
|
+
This module provides the ModelDiscoveryWarning model for tracking non-fatal
|
|
6
|
+
warnings encountered during handler discovery operations.
|
|
7
|
+
|
|
8
|
+
See Also:
|
|
9
|
+
- ModelDiscoveryResult: Aggregate discovery results
|
|
10
|
+
- ModelDiscoveryError: Fatal discovery errors
|
|
11
|
+
|
|
12
|
+
.. versionadded:: 0.7.0
|
|
13
|
+
Created as part of OMN-1133 contract-based handler discovery.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ModelDiscoveryWarning(BaseModel):
|
|
24
|
+
"""Represents a non-fatal warning during handler discovery.
|
|
25
|
+
|
|
26
|
+
Captures warnings that don't prevent discovery from completing but
|
|
27
|
+
indicate potential issues that should be addressed.
|
|
28
|
+
|
|
29
|
+
Attributes:
|
|
30
|
+
warning_code: Structured warning code for categorization.
|
|
31
|
+
message: Human-readable warning description.
|
|
32
|
+
contract_path: Path to the contract file that triggered the warning.
|
|
33
|
+
handler_name: Name of the handler related to the warning.
|
|
34
|
+
|
|
35
|
+
Example:
|
|
36
|
+
>>> from pathlib import Path
|
|
37
|
+
>>> warning = ModelDiscoveryWarning(
|
|
38
|
+
... warning_code="DEPRECATED_FIELD",
|
|
39
|
+
... message="Contract uses deprecated 'handler_class' field",
|
|
40
|
+
... contract_path=Path("/app/handlers/legacy/contract.yaml"),
|
|
41
|
+
... )
|
|
42
|
+
>>> warning.warning_code
|
|
43
|
+
'DEPRECATED_FIELD'
|
|
44
|
+
|
|
45
|
+
.. versionadded:: 0.7.0
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
model_config = ConfigDict(
|
|
49
|
+
frozen=True,
|
|
50
|
+
extra="forbid",
|
|
51
|
+
strict=True,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
warning_code: str = Field(
|
|
55
|
+
...,
|
|
56
|
+
min_length=1,
|
|
57
|
+
description="Structured warning code for categorization",
|
|
58
|
+
)
|
|
59
|
+
message: str = Field(
|
|
60
|
+
...,
|
|
61
|
+
min_length=1,
|
|
62
|
+
description="Human-readable warning description",
|
|
63
|
+
)
|
|
64
|
+
contract_path: Path | None = Field(
|
|
65
|
+
default=None,
|
|
66
|
+
description="Path to the contract file that triggered the warning",
|
|
67
|
+
)
|
|
68
|
+
handler_name: str | None = Field(
|
|
69
|
+
default=None,
|
|
70
|
+
description="Name of the handler related to the warning",
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
__all__ = ["ModelDiscoveryWarning"]
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Failed Plugin Load Model for Observability Logging.
|
|
4
|
+
|
|
5
|
+
This module provides ModelFailedPluginLoad which tracks plugin loading failures
|
|
6
|
+
for observability purposes.
|
|
7
|
+
|
|
8
|
+
See Also:
|
|
9
|
+
- PluginLoader: Uses this model for failure tracking
|
|
10
|
+
- ModelPluginLoadSummary: Summary model that includes failed loads
|
|
11
|
+
|
|
12
|
+
.. versionadded:: 0.7.0
|
|
13
|
+
Created as part of OMN-1132 Plugin Loader observability logging.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ModelFailedPluginLoad(BaseModel):
|
|
24
|
+
"""Represents a plugin that failed to load.
|
|
25
|
+
|
|
26
|
+
Captures the contract path and error details for plugins that could not
|
|
27
|
+
be loaded during a batch operation. Used for diagnostics and debugging.
|
|
28
|
+
|
|
29
|
+
Attributes:
|
|
30
|
+
contract_path: Path to the contract file that failed to load.
|
|
31
|
+
error_message: Human-readable error description.
|
|
32
|
+
error_code: Structured error code (e.g., HANDLER_LOADER_002).
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
>>> failed = ModelFailedPluginLoad(
|
|
36
|
+
... contract_path=Path("/app/plugins/auth/contract.yaml"),
|
|
37
|
+
... error_message="Invalid YAML syntax",
|
|
38
|
+
... error_code="HANDLER_LOADER_002",
|
|
39
|
+
... )
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
model_config = ConfigDict(
|
|
43
|
+
frozen=True,
|
|
44
|
+
extra="forbid",
|
|
45
|
+
strict=True,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
contract_path: Path = Field(
|
|
49
|
+
...,
|
|
50
|
+
description="Path to the contract file that failed to load",
|
|
51
|
+
)
|
|
52
|
+
error_message: str = Field(
|
|
53
|
+
...,
|
|
54
|
+
min_length=1,
|
|
55
|
+
description="Human-readable error description",
|
|
56
|
+
)
|
|
57
|
+
error_code: str | None = Field(
|
|
58
|
+
default=None,
|
|
59
|
+
description="Structured error code (e.g., HANDLER_LOADER_002)",
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
__all__ = ["ModelFailedPluginLoad"]
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler Contract Model for Contract-Driven Discovery.
|
|
4
|
+
|
|
5
|
+
This module provides ModelHandlerContract, a Pydantic model that represents the
|
|
6
|
+
schema for handler contract YAML files. It replaces manual field extraction in
|
|
7
|
+
HandlerPluginLoader with automatic validation and type coercion.
|
|
8
|
+
|
|
9
|
+
The model supports dual field names for flexibility:
|
|
10
|
+
- handler_name / name
|
|
11
|
+
- capability_tags / tags
|
|
12
|
+
|
|
13
|
+
See Also:
|
|
14
|
+
- HandlerPluginLoader: Uses this model to validate contracts
|
|
15
|
+
- ModelLoadedHandler: Output model after successful loading
|
|
16
|
+
- EnumHandlerTypeCategory: Handler behavioral classification
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.7.0
|
|
19
|
+
Created as part of OMN-1132 Handler Plugin Loader implementation.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
import logging
|
|
25
|
+
|
|
26
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
27
|
+
|
|
28
|
+
logger = logging.getLogger(__name__)
|
|
29
|
+
|
|
30
|
+
from omnibase_infra.enums.enum_handler_type_category import EnumHandlerTypeCategory
|
|
31
|
+
from omnibase_infra.errors import ProtocolConfigurationError
|
|
32
|
+
from omnibase_infra.models.runtime.model_contract_security_config import (
|
|
33
|
+
ModelContractSecurityConfig,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# Handler type category mapping from contract strings to enum
|
|
37
|
+
_HANDLER_TYPE_CATEGORY_MAP: dict[str, EnumHandlerTypeCategory] = {
|
|
38
|
+
"compute": EnumHandlerTypeCategory.COMPUTE,
|
|
39
|
+
"effect": EnumHandlerTypeCategory.EFFECT,
|
|
40
|
+
"nondeterministic_compute": EnumHandlerTypeCategory.NONDETERMINISTIC_COMPUTE,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class ModelHandlerContract(BaseModel):
|
|
45
|
+
"""Pydantic model for handler contract YAML schema.
|
|
46
|
+
|
|
47
|
+
Validates and parses handler contract YAML files with automatic type
|
|
48
|
+
coercion and field aliasing. Supports dual field names for flexibility
|
|
49
|
+
in contract authoring.
|
|
50
|
+
|
|
51
|
+
Field Aliases:
|
|
52
|
+
- handler_name: Also accepts 'name'
|
|
53
|
+
- capability_tags: Also accepts 'tags'
|
|
54
|
+
|
|
55
|
+
Handler Type Conversion:
|
|
56
|
+
The handler_type field accepts string values (e.g., 'compute', 'effect',
|
|
57
|
+
'nondeterministic_compute') and converts them to EnumHandlerTypeCategory
|
|
58
|
+
enum values. Case-insensitive matching is supported.
|
|
59
|
+
|
|
60
|
+
Attributes:
|
|
61
|
+
handler_name: Unique identifier for the handler. Required field
|
|
62
|
+
that accepts both 'handler_name' and 'name' keys in YAML.
|
|
63
|
+
handler_class: Fully qualified class path for the handler
|
|
64
|
+
(e.g., 'myapp.handlers.AuthHandler'). Required field.
|
|
65
|
+
handler_type: Behavioral classification of the handler. Required field
|
|
66
|
+
that accepts string values and converts to EnumHandlerTypeCategory.
|
|
67
|
+
capability_tags: List of tags for handler discovery and filtering.
|
|
68
|
+
Optional field that accepts both 'capability_tags' and 'tags' keys.
|
|
69
|
+
|
|
70
|
+
Example:
|
|
71
|
+
>>> from omnibase_infra.models.runtime import ModelHandlerContract
|
|
72
|
+
>>> # Parse from YAML dict with 'name' alias
|
|
73
|
+
>>> contract = ModelHandlerContract.model_validate({
|
|
74
|
+
... "name": "auth.handler",
|
|
75
|
+
... "handler_class": "myapp.handlers.AuthHandler",
|
|
76
|
+
... "handler_type": "compute",
|
|
77
|
+
... "tags": ["auth", "validation"],
|
|
78
|
+
... })
|
|
79
|
+
>>> contract.handler_name
|
|
80
|
+
'auth.handler'
|
|
81
|
+
>>> contract.handler_type
|
|
82
|
+
<EnumHandlerTypeCategory.COMPUTE: 'compute'>
|
|
83
|
+
|
|
84
|
+
>>> # Parse with canonical field names
|
|
85
|
+
>>> contract = ModelHandlerContract.model_validate({
|
|
86
|
+
... "handler_name": "db.handler",
|
|
87
|
+
... "handler_class": "myapp.handlers.DbHandler",
|
|
88
|
+
... "handler_type": "effect",
|
|
89
|
+
... "capability_tags": ["database", "postgres"],
|
|
90
|
+
... })
|
|
91
|
+
|
|
92
|
+
See Also:
|
|
93
|
+
- :class:`HandlerPluginLoader`: Uses this model for contract validation.
|
|
94
|
+
- :class:`ModelLoadedHandler`: Output model after successful loading.
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
model_config = ConfigDict(
|
|
98
|
+
extra="forbid",
|
|
99
|
+
populate_by_name=True,
|
|
100
|
+
str_strip_whitespace=True,
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
handler_name: str = Field(
|
|
104
|
+
...,
|
|
105
|
+
min_length=1,
|
|
106
|
+
validation_alias="name",
|
|
107
|
+
description="Unique identifier for the handler (also accepts 'name')",
|
|
108
|
+
)
|
|
109
|
+
handler_class: str = Field(
|
|
110
|
+
...,
|
|
111
|
+
min_length=1,
|
|
112
|
+
description="Fully qualified handler class path (e.g., 'myapp.handlers.AuthHandler')",
|
|
113
|
+
)
|
|
114
|
+
handler_type: EnumHandlerTypeCategory = Field(
|
|
115
|
+
...,
|
|
116
|
+
description="Behavioral classification (compute, effect, nondeterministic_compute)",
|
|
117
|
+
)
|
|
118
|
+
capability_tags: list[str] = Field(
|
|
119
|
+
default_factory=list,
|
|
120
|
+
validation_alias="tags",
|
|
121
|
+
description="Tags for handler discovery and filtering (also accepts 'tags')",
|
|
122
|
+
)
|
|
123
|
+
protocol_type: str | None = Field(
|
|
124
|
+
default=None,
|
|
125
|
+
description=(
|
|
126
|
+
"Protocol type identifier for registry (e.g., 'db', 'http', 'consul'). "
|
|
127
|
+
"If not provided, defaults to handler_name with 'handler-' prefix stripped."
|
|
128
|
+
),
|
|
129
|
+
)
|
|
130
|
+
security: ModelContractSecurityConfig | None = Field(
|
|
131
|
+
default=None,
|
|
132
|
+
description="Optional security configuration for the handler",
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
@field_validator("handler_type", mode="before")
|
|
136
|
+
@classmethod
|
|
137
|
+
def convert_handler_type(cls, value: object) -> EnumHandlerTypeCategory:
|
|
138
|
+
"""Convert string handler_type to EnumHandlerTypeCategory.
|
|
139
|
+
|
|
140
|
+
Accepts case-insensitive string values and converts them to the
|
|
141
|
+
appropriate enum value. Also accepts EnumHandlerTypeCategory directly.
|
|
142
|
+
|
|
143
|
+
Args:
|
|
144
|
+
value: String handler type name or EnumHandlerTypeCategory.
|
|
145
|
+
|
|
146
|
+
Returns:
|
|
147
|
+
EnumHandlerTypeCategory enum value.
|
|
148
|
+
|
|
149
|
+
Raises:
|
|
150
|
+
ValueError: If the value is not a valid handler type.
|
|
151
|
+
"""
|
|
152
|
+
# Already an enum
|
|
153
|
+
if isinstance(value, EnumHandlerTypeCategory):
|
|
154
|
+
return value
|
|
155
|
+
|
|
156
|
+
# Convert string to enum
|
|
157
|
+
if isinstance(value, str):
|
|
158
|
+
normalized = value.lower().strip()
|
|
159
|
+
if normalized in _HANDLER_TYPE_CATEGORY_MAP:
|
|
160
|
+
return _HANDLER_TYPE_CATEGORY_MAP[normalized]
|
|
161
|
+
|
|
162
|
+
valid_types = ", ".join(_HANDLER_TYPE_CATEGORY_MAP.keys())
|
|
163
|
+
raise ValueError(
|
|
164
|
+
f"Invalid handler_type '{value}'. Valid types: {valid_types}"
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
raise ValueError(
|
|
168
|
+
f"handler_type must be a string or EnumHandlerTypeCategory, got {type(value).__name__}"
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
@field_validator("capability_tags", mode="before")
|
|
172
|
+
@classmethod
|
|
173
|
+
def normalize_capability_tags(cls, value: object) -> list[str]:
|
|
174
|
+
"""Normalize capability_tags to a list of strings.
|
|
175
|
+
|
|
176
|
+
Handles various input formats:
|
|
177
|
+
- None -> empty list
|
|
178
|
+
- Single string -> list with one element
|
|
179
|
+
- List with mixed types -> filter to strings only
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
value: Raw value from YAML (None, str, or list).
|
|
183
|
+
|
|
184
|
+
Returns:
|
|
185
|
+
List of string capability tags.
|
|
186
|
+
"""
|
|
187
|
+
if value is None:
|
|
188
|
+
return []
|
|
189
|
+
|
|
190
|
+
if isinstance(value, str):
|
|
191
|
+
return [value]
|
|
192
|
+
|
|
193
|
+
if isinstance(value, list):
|
|
194
|
+
# Filter to only string tags, warn about invalid types
|
|
195
|
+
valid_tags: list[str] = []
|
|
196
|
+
for tag in value:
|
|
197
|
+
if isinstance(tag, str):
|
|
198
|
+
valid_tags.append(tag)
|
|
199
|
+
else:
|
|
200
|
+
logger.warning(
|
|
201
|
+
"Non-string capability tag filtered out: value=%r, type=%s",
|
|
202
|
+
tag,
|
|
203
|
+
type(tag).__name__,
|
|
204
|
+
)
|
|
205
|
+
return valid_tags
|
|
206
|
+
|
|
207
|
+
return []
|
|
208
|
+
|
|
209
|
+
@model_validator(mode="after")
|
|
210
|
+
def set_default_protocol_type(self) -> ModelHandlerContract:
|
|
211
|
+
"""Set protocol_type from handler_name if not explicitly provided.
|
|
212
|
+
|
|
213
|
+
If protocol_type is None, derives it from handler_name by stripping
|
|
214
|
+
the 'handler-' prefix. If handler_name doesn't have that prefix,
|
|
215
|
+
uses the full handler_name as protocol_type.
|
|
216
|
+
|
|
217
|
+
Guards against empty derived protocol_type which would produce
|
|
218
|
+
invalid registry keys.
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
Self with protocol_type populated.
|
|
222
|
+
|
|
223
|
+
Raises:
|
|
224
|
+
ValueError: If derived protocol_type would be empty (e.g., handler_name
|
|
225
|
+
is exactly "handler-" with nothing after the prefix).
|
|
226
|
+
|
|
227
|
+
Example:
|
|
228
|
+
>>> contract = ModelHandlerContract(
|
|
229
|
+
... handler_name="handler-db",
|
|
230
|
+
... handler_class="myapp.handlers.DbHandler",
|
|
231
|
+
... handler_type="effect",
|
|
232
|
+
... )
|
|
233
|
+
>>> contract.protocol_type
|
|
234
|
+
'db'
|
|
235
|
+
|
|
236
|
+
>>> contract = ModelHandlerContract(
|
|
237
|
+
... handler_name="custom-handler",
|
|
238
|
+
... handler_class="myapp.handlers.Custom",
|
|
239
|
+
... handler_type="compute",
|
|
240
|
+
... )
|
|
241
|
+
>>> contract.protocol_type
|
|
242
|
+
'custom-handler'
|
|
243
|
+
"""
|
|
244
|
+
if self.protocol_type is None:
|
|
245
|
+
prefix = "handler-"
|
|
246
|
+
if self.handler_name.startswith(prefix):
|
|
247
|
+
derived = self.handler_name[len(prefix) :]
|
|
248
|
+
if not derived:
|
|
249
|
+
raise ProtocolConfigurationError(
|
|
250
|
+
f"Cannot derive protocol_type from handler_name '{self.handler_name}': "
|
|
251
|
+
f"result would be empty. Either provide an explicit protocol_type "
|
|
252
|
+
f"or use a handler_name with content after the 'handler-' prefix."
|
|
253
|
+
)
|
|
254
|
+
self.protocol_type = derived
|
|
255
|
+
else:
|
|
256
|
+
self.protocol_type = self.handler_name
|
|
257
|
+
|
|
258
|
+
# Final guard: ensure protocol_type is never empty
|
|
259
|
+
if not self.protocol_type:
|
|
260
|
+
raise ProtocolConfigurationError(
|
|
261
|
+
f"protocol_type cannot be empty. handler_name='{self.handler_name}', "
|
|
262
|
+
f"derived protocol_type='{self.protocol_type}'. "
|
|
263
|
+
f"Provide a non-empty protocol_type or handler_name."
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
# Log successful protocol_type derivation for debugging
|
|
267
|
+
logger.debug(
|
|
268
|
+
"Handler contract validated successfully",
|
|
269
|
+
extra={
|
|
270
|
+
"handler_name": self.handler_name,
|
|
271
|
+
"handler_class": self.handler_class,
|
|
272
|
+
"protocol_type": self.protocol_type,
|
|
273
|
+
"handler_type": self.handler_type.value,
|
|
274
|
+
},
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
return self
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
__all__ = ["ModelHandlerContract"]
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Loaded Handler Model for Handler Plugin Loader.
|
|
4
|
+
|
|
5
|
+
This module provides ModelLoadedHandler, which represents a handler that has been
|
|
6
|
+
successfully discovered, validated, and registered by the HandlerPluginLoader.
|
|
7
|
+
|
|
8
|
+
The model captures essential metadata about loaded handlers for runtime tracking,
|
|
9
|
+
discovery filtering, and diagnostic purposes.
|
|
10
|
+
|
|
11
|
+
See Also:
|
|
12
|
+
- HandlerPluginLoader: Loader that creates these descriptors
|
|
13
|
+
- ModelHandlerDescriptor: Contract-level handler descriptor
|
|
14
|
+
- EnumHandlerTypeCategory: Handler behavioral classification
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.7.0
|
|
17
|
+
Created as part of OMN-1132 Handler Plugin Loader implementation.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
from datetime import datetime
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
26
|
+
|
|
27
|
+
from omnibase_infra.enums.enum_handler_type_category import EnumHandlerTypeCategory
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ModelLoadedHandler(BaseModel):
|
|
31
|
+
"""Represents a handler loaded from a contract.
|
|
32
|
+
|
|
33
|
+
Tracks metadata about handlers that have been successfully discovered,
|
|
34
|
+
validated, and registered by the HandlerPluginLoader.
|
|
35
|
+
|
|
36
|
+
This model is used for:
|
|
37
|
+
- Runtime handler registry tracking
|
|
38
|
+
- Handler discovery and filtering by capability tags
|
|
39
|
+
- Diagnostics and introspection of loaded handlers
|
|
40
|
+
- Audit logging of handler loading events
|
|
41
|
+
|
|
42
|
+
Attributes:
|
|
43
|
+
handler_name: Unique identifier for the handler. Used as the primary
|
|
44
|
+
key for handler registry lookups.
|
|
45
|
+
handler_type: Behavioral classification of the handler (COMPUTE, EFFECT,
|
|
46
|
+
or NONDETERMINISTIC_COMPUTE). Determines policy envelope and runtime
|
|
47
|
+
behavior.
|
|
48
|
+
handler_class: Fully qualified class name of the handler implementation
|
|
49
|
+
(e.g., 'myapp.handlers.AuthHandler'). Used for dynamic instantiation.
|
|
50
|
+
contract_path: Absolute path to the contract YAML file from which this
|
|
51
|
+
handler was loaded. Used for reloading and validation.
|
|
52
|
+
capability_tags: List of tags for handler discovery and filtering.
|
|
53
|
+
Examples: ['auth', 'validation', 'http-client'].
|
|
54
|
+
loaded_at: Timestamp when the handler was successfully loaded.
|
|
55
|
+
Used for diagnostics and cache invalidation.
|
|
56
|
+
|
|
57
|
+
Example:
|
|
58
|
+
>>> from datetime import datetime, UTC
|
|
59
|
+
>>> from pathlib import Path
|
|
60
|
+
>>> from omnibase_infra.enums import EnumHandlerTypeCategory
|
|
61
|
+
>>> handler = ModelLoadedHandler(
|
|
62
|
+
... handler_name="auth.validate_token",
|
|
63
|
+
... handler_type=EnumHandlerTypeCategory.COMPUTE,
|
|
64
|
+
... handler_class="myapp.handlers.TokenValidator",
|
|
65
|
+
... contract_path=Path("/app/handlers/auth/handler_contract.yaml"),
|
|
66
|
+
... capability_tags=["auth", "validation", "jwt"],
|
|
67
|
+
... loaded_at=datetime.now(UTC),
|
|
68
|
+
... )
|
|
69
|
+
>>> handler.handler_name
|
|
70
|
+
'auth.validate_token'
|
|
71
|
+
|
|
72
|
+
See Also:
|
|
73
|
+
- :class:`ModelHandlerDescriptor`: Contract-level handler metadata.
|
|
74
|
+
- :class:`EnumHandlerTypeCategory`: Handler behavioral classification.
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
model_config = ConfigDict(
|
|
78
|
+
frozen=True,
|
|
79
|
+
extra="forbid",
|
|
80
|
+
strict=True,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
handler_name: str = Field(
|
|
84
|
+
...,
|
|
85
|
+
min_length=1,
|
|
86
|
+
description="Unique identifier for the handler",
|
|
87
|
+
)
|
|
88
|
+
protocol_type: str = Field(
|
|
89
|
+
...,
|
|
90
|
+
min_length=1,
|
|
91
|
+
description=(
|
|
92
|
+
"Protocol type identifier for registry lookup (e.g., 'db', 'http'). "
|
|
93
|
+
"Used as the key for handler registry registration."
|
|
94
|
+
),
|
|
95
|
+
)
|
|
96
|
+
handler_type: EnumHandlerTypeCategory = Field(
|
|
97
|
+
...,
|
|
98
|
+
description="Behavioral classification (COMPUTE, EFFECT, NONDETERMINISTIC_COMPUTE)",
|
|
99
|
+
)
|
|
100
|
+
handler_class: str = Field(
|
|
101
|
+
...,
|
|
102
|
+
min_length=3,
|
|
103
|
+
pattern=r"^[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)+$",
|
|
104
|
+
description="Fully qualified handler class name (e.g., 'myapp.handlers.AuthHandler')",
|
|
105
|
+
)
|
|
106
|
+
contract_path: Path = Field(
|
|
107
|
+
...,
|
|
108
|
+
description="Absolute path to the source contract YAML file",
|
|
109
|
+
)
|
|
110
|
+
capability_tags: list[str] = Field(
|
|
111
|
+
default_factory=list,
|
|
112
|
+
description="Tags for handler discovery and filtering",
|
|
113
|
+
)
|
|
114
|
+
loaded_at: datetime = Field(
|
|
115
|
+
...,
|
|
116
|
+
description="Timestamp when the handler was successfully loaded",
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
__all__ = ["ModelLoadedHandler"]
|