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,221 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocol interface for Handler Discovery Services in ONEX Infrastructure.
|
|
4
|
+
|
|
5
|
+
This module defines the ProtocolHandlerDiscovery interface for discovering
|
|
6
|
+
handlers from contract files and registering them with the runtime. Handler
|
|
7
|
+
discovery services scan filesystem paths for handler contracts, validate them,
|
|
8
|
+
load the handler classes, and register them for use.
|
|
9
|
+
|
|
10
|
+
Part of OMN-1133: Handler Discovery Service implementation.
|
|
11
|
+
|
|
12
|
+
Thread Safety:
|
|
13
|
+
Implementations may be invoked concurrently from multiple threads.
|
|
14
|
+
Implementations SHOULD be stateless or use appropriate synchronization
|
|
15
|
+
primitives for any shared mutable state.
|
|
16
|
+
|
|
17
|
+
Example Usage:
|
|
18
|
+
```python
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
from uuid import UUID
|
|
21
|
+
from omnibase_infra.runtime.protocol_handler_discovery import (
|
|
22
|
+
ProtocolHandlerDiscovery,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
class FileSystemHandlerDiscovery:
|
|
26
|
+
'''Discovers handlers from filesystem contract files.'''
|
|
27
|
+
|
|
28
|
+
async def discover_and_register(
|
|
29
|
+
self,
|
|
30
|
+
contract_paths: list[Path],
|
|
31
|
+
correlation_id: UUID | None = None,
|
|
32
|
+
) -> ModelDiscoveryResult:
|
|
33
|
+
# Scan paths for contracts, load handlers, register them
|
|
34
|
+
...
|
|
35
|
+
|
|
36
|
+
# Type checking works via Protocol
|
|
37
|
+
discovery: ProtocolHandlerDiscovery = FileSystemHandlerDiscovery()
|
|
38
|
+
result = await discovery.discover_and_register([Path("src/handlers")])
|
|
39
|
+
print(f"Discovered: {result.handlers_discovered}, Registered: {result.handlers_registered}")
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
See Also:
|
|
43
|
+
- ProtocolHandlerPluginLoader: Protocol for loading individual handlers
|
|
44
|
+
- ProtocolContractSource: Protocol for handler contract sources
|
|
45
|
+
- ModelDiscoveryResult: Model representing discovery operation results
|
|
46
|
+
|
|
47
|
+
.. versionadded:: 0.7.0
|
|
48
|
+
Created as part of OMN-1133 handler discovery service implementation.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
from __future__ import annotations
|
|
52
|
+
|
|
53
|
+
from pathlib import Path
|
|
54
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
55
|
+
from uuid import UUID
|
|
56
|
+
|
|
57
|
+
if TYPE_CHECKING:
|
|
58
|
+
from omnibase_infra.models.runtime.model_discovery_result import (
|
|
59
|
+
ModelDiscoveryResult,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@runtime_checkable
|
|
64
|
+
class ProtocolHandlerDiscovery(Protocol):
|
|
65
|
+
"""Protocol for handler discovery services.
|
|
66
|
+
|
|
67
|
+
Implementations discover handlers from contract files and register them
|
|
68
|
+
with the runtime. This enables contract-driven handler loading without
|
|
69
|
+
manual wiring.
|
|
70
|
+
|
|
71
|
+
Pattern: Duck typing - implementations don't need to inherit from this protocol,
|
|
72
|
+
they just need to implement the required methods.
|
|
73
|
+
|
|
74
|
+
This protocol enables:
|
|
75
|
+
- Dependency injection of handler discovery strategies
|
|
76
|
+
- Test isolation through mock discovery services
|
|
77
|
+
- Runtime swapping of discovery mechanisms
|
|
78
|
+
- Composition of multiple discovery implementations
|
|
79
|
+
|
|
80
|
+
Protocol Verification:
|
|
81
|
+
Per ONEX conventions, protocol compliance is verified via duck typing
|
|
82
|
+
rather than isinstance checks. Verify required methods exist:
|
|
83
|
+
|
|
84
|
+
.. code-block:: python
|
|
85
|
+
|
|
86
|
+
# Verify required methods exist
|
|
87
|
+
if (hasattr(discovery, 'discover_and_register') and
|
|
88
|
+
callable(discovery.discover_and_register)):
|
|
89
|
+
runtime.set_discovery_service(discovery)
|
|
90
|
+
else:
|
|
91
|
+
raise TypeError("Object does not implement ProtocolHandlerDiscovery")
|
|
92
|
+
|
|
93
|
+
Attributes:
|
|
94
|
+
None - this is a pure protocol with no required properties.
|
|
95
|
+
|
|
96
|
+
Note:
|
|
97
|
+
Method bodies in this Protocol use ``...`` (Ellipsis) rather than
|
|
98
|
+
``raise NotImplementedError()``. This is the standard Python convention
|
|
99
|
+
for ``typing.Protocol`` classes per PEP 544.
|
|
100
|
+
|
|
101
|
+
.. versionadded:: 0.7.0
|
|
102
|
+
"""
|
|
103
|
+
|
|
104
|
+
async def discover_and_register(
|
|
105
|
+
self,
|
|
106
|
+
contract_paths: list[Path],
|
|
107
|
+
correlation_id: UUID | None = None,
|
|
108
|
+
) -> ModelDiscoveryResult:
|
|
109
|
+
"""Discover handlers from contracts and register them.
|
|
110
|
+
|
|
111
|
+
Scans the provided paths for handler contract files, validates the
|
|
112
|
+
contracts against the handler schema, imports the handler classes,
|
|
113
|
+
and registers them with the runtime handler registry.
|
|
114
|
+
|
|
115
|
+
This is the primary entry point for contract-driven handler discovery.
|
|
116
|
+
It combines the functionality of:
|
|
117
|
+
- Path scanning (directories are scanned recursively)
|
|
118
|
+
- Contract file discovery (finds handler_contract.yaml or contract.yaml)
|
|
119
|
+
- Handler loading (imports handler classes from contracts)
|
|
120
|
+
- Handler registration (registers loaded handlers with runtime)
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
contract_paths: List of paths to scan for handler contracts.
|
|
124
|
+
Can be directories (recursive scan) or direct contract files.
|
|
125
|
+
|
|
126
|
+
**Directory paths**: Scanned recursively for contract files.
|
|
127
|
+
The scanner looks for ``handler_contract.yaml`` (preferred) or
|
|
128
|
+
``contract.yaml`` files.
|
|
129
|
+
|
|
130
|
+
**File paths**: Treated as direct contract files. Must be valid
|
|
131
|
+
YAML files with ``.yaml`` or ``.yml`` extension.
|
|
132
|
+
|
|
133
|
+
**Mixed paths**: Both directories and files can be provided
|
|
134
|
+
in the same call.
|
|
135
|
+
|
|
136
|
+
correlation_id: Optional correlation ID for tracing and error
|
|
137
|
+
context. If not provided, a UUID4 is auto-generated. This ID
|
|
138
|
+
is propagated to all sub-operations for distributed tracing.
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
ModelDiscoveryResult: Container with discovery operation results
|
|
142
|
+
including:
|
|
143
|
+
|
|
144
|
+
- ``handlers_discovered``: Number of handlers found during discovery
|
|
145
|
+
- ``handlers_registered``: Number of handlers successfully registered
|
|
146
|
+
- ``errors``: List of ModelDiscoveryError for failed handlers
|
|
147
|
+
- ``warnings``: List of ModelDiscoveryWarning for non-fatal issues
|
|
148
|
+
- ``discovered_at``: Timestamp when discovery completed
|
|
149
|
+
|
|
150
|
+
Raises:
|
|
151
|
+
ProtocolConfigurationError: If critical configuration issues prevent
|
|
152
|
+
discovery from proceeding. Error codes:
|
|
153
|
+
|
|
154
|
+
- DISCOVERY_001: Empty contract_paths list provided
|
|
155
|
+
- DISCOVERY_002: All provided paths are invalid (none exist)
|
|
156
|
+
- DISCOVERY_003: Configuration prevents any discovery
|
|
157
|
+
|
|
158
|
+
Note that individual path or contract failures do NOT raise
|
|
159
|
+
exceptions - they are captured in the result's ``errors`` list
|
|
160
|
+
to allow partial success.
|
|
161
|
+
|
|
162
|
+
Example:
|
|
163
|
+
.. code-block:: python
|
|
164
|
+
|
|
165
|
+
from pathlib import Path
|
|
166
|
+
from uuid import uuid4
|
|
167
|
+
|
|
168
|
+
discovery: ProtocolHandlerDiscovery = FileSystemHandlerDiscovery()
|
|
169
|
+
|
|
170
|
+
# Discover from multiple directories
|
|
171
|
+
result = await discovery.discover_and_register(
|
|
172
|
+
contract_paths=[
|
|
173
|
+
Path("src/omnibase_infra/handlers"),
|
|
174
|
+
Path("src/omnibase_infra/nodes"),
|
|
175
|
+
],
|
|
176
|
+
correlation_id=uuid4(),
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
print(f"Discovered: {result.handlers_discovered}")
|
|
180
|
+
print(f"Registered: {result.handlers_registered}")
|
|
181
|
+
|
|
182
|
+
# Check for errors
|
|
183
|
+
if result.errors:
|
|
184
|
+
for error in result.errors:
|
|
185
|
+
print(f"Error: {error.contract_path} - {error.message}")
|
|
186
|
+
|
|
187
|
+
# Check for warnings
|
|
188
|
+
if result.warnings:
|
|
189
|
+
for warning in result.warnings:
|
|
190
|
+
print(f"Warning: {warning}")
|
|
191
|
+
|
|
192
|
+
.. code-block:: python
|
|
193
|
+
|
|
194
|
+
# Mixed paths: directories and direct contract files
|
|
195
|
+
result = await discovery.discover_and_register(
|
|
196
|
+
contract_paths=[
|
|
197
|
+
Path("src/handlers"), # Directory - scanned recursively
|
|
198
|
+
Path("plugins/custom_handler/contract.yaml"), # Direct file
|
|
199
|
+
],
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
Thread Safety:
|
|
203
|
+
This method may be called concurrently from multiple threads or
|
|
204
|
+
coroutines. Implementations MUST ensure thread-safe access to
|
|
205
|
+
shared state (e.g., handler registries).
|
|
206
|
+
|
|
207
|
+
Performance:
|
|
208
|
+
Discovery operations may involve significant I/O (filesystem
|
|
209
|
+
scanning, YAML parsing) and CPU (handler class loading). For
|
|
210
|
+
large codebases, consider:
|
|
211
|
+
|
|
212
|
+
- Limiting scan depth via configuration
|
|
213
|
+
- Caching discovery results between restarts
|
|
214
|
+
- Running discovery during startup, not per-request
|
|
215
|
+
"""
|
|
216
|
+
...
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
__all__: list[str] = [
|
|
220
|
+
"ProtocolHandlerDiscovery",
|
|
221
|
+
]
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocol interface for Handler Plugin Loaders in ONEX Infrastructure.
|
|
4
|
+
|
|
5
|
+
This module defines the ProtocolHandlerPluginLoader interface for discovering
|
|
6
|
+
and loading handlers from contract files. Handler plugin loaders scan filesystem
|
|
7
|
+
paths for handler contracts, validate them, and register them with the handler
|
|
8
|
+
registry.
|
|
9
|
+
|
|
10
|
+
Part of OMN-1132: Handler Plugin Loader implementation.
|
|
11
|
+
|
|
12
|
+
Thread Safety:
|
|
13
|
+
Implementations may be invoked concurrently from multiple threads.
|
|
14
|
+
Implementations SHOULD be stateless or use appropriate synchronization
|
|
15
|
+
primitives for any shared mutable state.
|
|
16
|
+
|
|
17
|
+
Example Usage:
|
|
18
|
+
```python
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
from uuid import UUID
|
|
21
|
+
from omnibase_infra.runtime.protocol_handler_plugin_loader import (
|
|
22
|
+
ProtocolHandlerPluginLoader,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
class FileSystemHandlerPluginLoader:
|
|
26
|
+
'''Loads handlers from filesystem contract files.'''
|
|
27
|
+
|
|
28
|
+
def load_from_contract(
|
|
29
|
+
self,
|
|
30
|
+
contract_path: Path,
|
|
31
|
+
correlation_id: UUID | None = None,
|
|
32
|
+
) -> ModelLoadedHandler:
|
|
33
|
+
# Parse contract YAML and load handler class
|
|
34
|
+
...
|
|
35
|
+
|
|
36
|
+
def load_from_directory(
|
|
37
|
+
self,
|
|
38
|
+
directory: Path,
|
|
39
|
+
correlation_id: UUID | None = None,
|
|
40
|
+
max_handlers: int | None = None,
|
|
41
|
+
) -> list[ModelLoadedHandler]:
|
|
42
|
+
# Scan directory for contracts and load all handlers
|
|
43
|
+
...
|
|
44
|
+
|
|
45
|
+
def discover_and_load(
|
|
46
|
+
self,
|
|
47
|
+
patterns: list[str],
|
|
48
|
+
correlation_id: UUID | None = None,
|
|
49
|
+
base_path: Path | None = None,
|
|
50
|
+
max_handlers: int | None = None,
|
|
51
|
+
) -> list[ModelLoadedHandler]:
|
|
52
|
+
# Match glob patterns and load discovered handlers
|
|
53
|
+
...
|
|
54
|
+
|
|
55
|
+
# Type checking works via Protocol
|
|
56
|
+
loader: ProtocolHandlerPluginLoader = FileSystemHandlerPluginLoader()
|
|
57
|
+
handlers = loader.load_from_directory(Path("src/handlers"))
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
See Also:
|
|
61
|
+
- ProtocolContractSource: Protocol for handler contract sources
|
|
62
|
+
- ProtocolContractDescriptor: Protocol for handler descriptors
|
|
63
|
+
- ModelLoadedHandler: Model representing a successfully loaded handler
|
|
64
|
+
|
|
65
|
+
.. versionadded:: 0.6.4
|
|
66
|
+
Created as part of OMN-1132 handler plugin loader implementation.
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
from __future__ import annotations
|
|
70
|
+
|
|
71
|
+
from pathlib import Path
|
|
72
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
73
|
+
from uuid import UUID
|
|
74
|
+
|
|
75
|
+
if TYPE_CHECKING:
|
|
76
|
+
from omnibase_infra.models.runtime import ModelLoadedHandler
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@runtime_checkable
|
|
80
|
+
class ProtocolHandlerPluginLoader(Protocol):
|
|
81
|
+
"""Protocol for loading handlers as plugins from contract files.
|
|
82
|
+
|
|
83
|
+
Handler plugin loaders discover handler contracts from filesystem paths,
|
|
84
|
+
validate the contracts against the handler schema, import the handler
|
|
85
|
+
classes, and register them with the handler registry.
|
|
86
|
+
|
|
87
|
+
This protocol enables:
|
|
88
|
+
- Dependency injection of handler loading strategies
|
|
89
|
+
- Test isolation through mock loaders
|
|
90
|
+
- Runtime swapping of discovery mechanisms
|
|
91
|
+
- Composition of multiple loader implementations
|
|
92
|
+
|
|
93
|
+
Protocol Verification:
|
|
94
|
+
Per ONEX conventions, protocol compliance is verified via duck typing
|
|
95
|
+
rather than isinstance checks. Verify required methods exist:
|
|
96
|
+
|
|
97
|
+
.. code-block:: python
|
|
98
|
+
|
|
99
|
+
# Verify required methods exist
|
|
100
|
+
if (hasattr(loader, 'load_from_contract') and
|
|
101
|
+
hasattr(loader, 'load_from_directory') and
|
|
102
|
+
hasattr(loader, 'discover_and_load') and
|
|
103
|
+
callable(loader.load_from_contract)):
|
|
104
|
+
registry.set_loader(loader)
|
|
105
|
+
else:
|
|
106
|
+
raise TypeError("Object does not implement ProtocolHandlerPluginLoader")
|
|
107
|
+
|
|
108
|
+
Attributes:
|
|
109
|
+
None - this is a pure protocol with no required properties.
|
|
110
|
+
|
|
111
|
+
Note:
|
|
112
|
+
Method bodies in this Protocol use ``...`` (Ellipsis) rather than
|
|
113
|
+
``raise NotImplementedError()``. This is the standard Python convention
|
|
114
|
+
for ``typing.Protocol`` classes per PEP 544.
|
|
115
|
+
|
|
116
|
+
.. versionadded:: 0.6.4
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
def load_from_contract(
|
|
120
|
+
self,
|
|
121
|
+
contract_path: Path,
|
|
122
|
+
correlation_id: UUID | None = None,
|
|
123
|
+
) -> ModelLoadedHandler:
|
|
124
|
+
"""Load a single handler from a contract file.
|
|
125
|
+
|
|
126
|
+
Parses the contract YAML file at the given path, validates it against
|
|
127
|
+
the handler contract schema, imports the handler class, and returns a
|
|
128
|
+
ModelLoadedHandler containing the loaded handler metadata.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
contract_path: Path to the handler contract YAML file.
|
|
132
|
+
Must be an absolute or relative path to an existing file
|
|
133
|
+
with .yaml extension.
|
|
134
|
+
correlation_id: Optional correlation ID for tracing and
|
|
135
|
+
error context. If not provided, a UUID4 is auto-generated.
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
ModelLoadedHandler: Container with the loaded handler metadata
|
|
139
|
+
including handler class, version, and contract information.
|
|
140
|
+
|
|
141
|
+
Raises:
|
|
142
|
+
ProtocolConfigurationError: If the contract file is invalid, missing
|
|
143
|
+
required fields, or fails schema validation. Error codes:
|
|
144
|
+
- HANDLER_LOADER_001: Contract file not found (path doesn't exist)
|
|
145
|
+
- HANDLER_LOADER_002: Invalid YAML syntax
|
|
146
|
+
- HANDLER_LOADER_003: Schema validation failed
|
|
147
|
+
- HANDLER_LOADER_004: Missing required fields
|
|
148
|
+
- HANDLER_LOADER_005: Contract file exceeds size limit
|
|
149
|
+
- HANDLER_LOADER_006: Handler does not implement protocol
|
|
150
|
+
- HANDLER_LOADER_007: Path exists but is not a file (e.g., directory)
|
|
151
|
+
- HANDLER_LOADER_008: Failed to read contract file (I/O error)
|
|
152
|
+
- HANDLER_LOADER_009: Failed to stat contract file (I/O error)
|
|
153
|
+
- HANDLER_LOADER_013: Namespace not allowed (when allowed_namespaces
|
|
154
|
+
is configured)
|
|
155
|
+
InfraConnectionError: If the handler class cannot be imported due
|
|
156
|
+
to module resolution failures or import errors. Error codes:
|
|
157
|
+
- HANDLER_LOADER_010: Module not found
|
|
158
|
+
- HANDLER_LOADER_011: Class not found in module
|
|
159
|
+
- HANDLER_LOADER_012: Import error (syntax/dependency)
|
|
160
|
+
|
|
161
|
+
Example:
|
|
162
|
+
.. code-block:: python
|
|
163
|
+
|
|
164
|
+
from pathlib import Path
|
|
165
|
+
from uuid import uuid4
|
|
166
|
+
|
|
167
|
+
loader: ProtocolHandlerPluginLoader = FileSystemHandlerPluginLoader()
|
|
168
|
+
handler = loader.load_from_contract(
|
|
169
|
+
Path("src/handlers/user_handler/contract.yaml"),
|
|
170
|
+
correlation_id=uuid4(),
|
|
171
|
+
)
|
|
172
|
+
print(f"Loaded handler: {handler.handler_name}")
|
|
173
|
+
"""
|
|
174
|
+
...
|
|
175
|
+
|
|
176
|
+
def load_from_directory(
|
|
177
|
+
self,
|
|
178
|
+
directory: Path,
|
|
179
|
+
correlation_id: UUID | None = None,
|
|
180
|
+
max_handlers: int | None = None,
|
|
181
|
+
) -> list[ModelLoadedHandler]:
|
|
182
|
+
"""Load all handlers from contract files in a directory.
|
|
183
|
+
|
|
184
|
+
Recursively scans the directory for handler contract files
|
|
185
|
+
(``handler_contract.yaml`` preferred, or ``contract.yaml``),
|
|
186
|
+
loads each handler, and returns a list of successfully loaded handlers.
|
|
187
|
+
|
|
188
|
+
Failed loads are logged but do not stop processing of other handlers.
|
|
189
|
+
Use strict mode configuration to change this behavior.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
directory: Path to the directory to scan for contract files.
|
|
193
|
+
Must be an existing directory. Subdirectories are scanned
|
|
194
|
+
recursively.
|
|
195
|
+
correlation_id: Optional correlation ID for tracing and
|
|
196
|
+
error context. If not provided, a UUID4 is auto-generated.
|
|
197
|
+
max_handlers: Optional maximum number of handlers to discover
|
|
198
|
+
and load. If specified, discovery stops after finding this
|
|
199
|
+
many contract files. A warning is logged when the limit is
|
|
200
|
+
reached. Set to None (default) for unlimited discovery.
|
|
201
|
+
|
|
202
|
+
Returns:
|
|
203
|
+
list[ModelLoadedHandler]: List of successfully loaded handlers.
|
|
204
|
+
May be empty if no contracts are found or all fail validation.
|
|
205
|
+
Order is not guaranteed.
|
|
206
|
+
|
|
207
|
+
Raises:
|
|
208
|
+
ProtocolConfigurationError: If the directory does not exist or
|
|
209
|
+
is not accessible. Error codes:
|
|
210
|
+
- HANDLER_LOADER_020: Directory not found
|
|
211
|
+
- HANDLER_LOADER_021: Permission denied
|
|
212
|
+
- HANDLER_LOADER_022: Not a directory
|
|
213
|
+
|
|
214
|
+
Example:
|
|
215
|
+
.. code-block:: python
|
|
216
|
+
|
|
217
|
+
from pathlib import Path
|
|
218
|
+
|
|
219
|
+
loader: ProtocolHandlerPluginLoader = FileSystemHandlerPluginLoader()
|
|
220
|
+
handlers = loader.load_from_directory(
|
|
221
|
+
Path("src/omnibase_infra/handlers")
|
|
222
|
+
)
|
|
223
|
+
print(f"Loaded {len(handlers)} handlers")
|
|
224
|
+
for handler in handlers:
|
|
225
|
+
print(f" - {handler.handler_name}")
|
|
226
|
+
|
|
227
|
+
# Limit discovery to prevent runaway resource usage
|
|
228
|
+
handlers = loader.load_from_directory(
|
|
229
|
+
Path("src/handlers"),
|
|
230
|
+
max_handlers=100,
|
|
231
|
+
)
|
|
232
|
+
"""
|
|
233
|
+
...
|
|
234
|
+
|
|
235
|
+
def discover_and_load(
|
|
236
|
+
self,
|
|
237
|
+
patterns: list[str],
|
|
238
|
+
correlation_id: UUID | None = None,
|
|
239
|
+
base_path: Path | None = None,
|
|
240
|
+
max_handlers: int | None = None,
|
|
241
|
+
) -> list[ModelLoadedHandler]:
|
|
242
|
+
"""Discover contracts matching glob patterns and load handlers.
|
|
243
|
+
|
|
244
|
+
Searches for contract files matching the glob patterns,
|
|
245
|
+
deduplicates matches, loads each handler, and returns a list
|
|
246
|
+
of successfully loaded handlers.
|
|
247
|
+
|
|
248
|
+
Working Directory Dependency:
|
|
249
|
+
By default, glob patterns are resolved relative to the current
|
|
250
|
+
working directory (``Path.cwd()``). This means results may vary
|
|
251
|
+
if the working directory changes between calls. For deterministic
|
|
252
|
+
behavior in environments where cwd may change (e.g., tests,
|
|
253
|
+
multi-threaded applications), provide an explicit ``base_path``.
|
|
254
|
+
|
|
255
|
+
Args:
|
|
256
|
+
patterns: List of glob patterns to match contract files.
|
|
257
|
+
Supports standard glob syntax including:
|
|
258
|
+
- ``*`` - matches any characters except path separator
|
|
259
|
+
- ``**`` - matches any characters including path separator
|
|
260
|
+
- ``?`` - matches single character
|
|
261
|
+
- ``[seq]`` - matches any character in seq
|
|
262
|
+
|
|
263
|
+
Common patterns:
|
|
264
|
+
- ``src/**/contract.yaml`` - all contracts under src
|
|
265
|
+
- ``handlers/*/contract.yaml`` - direct subdirs only
|
|
266
|
+
- ``**/*.handler.yaml`` - alternative naming convention
|
|
267
|
+
|
|
268
|
+
correlation_id: Optional correlation ID for tracing and
|
|
269
|
+
error context. If not provided, a UUID4 is auto-generated.
|
|
270
|
+
base_path: Optional base path for resolving glob patterns.
|
|
271
|
+
If not provided, defaults to ``Path.cwd()``. Providing an
|
|
272
|
+
explicit base path ensures deterministic behavior regardless
|
|
273
|
+
of the current working directory.
|
|
274
|
+
max_handlers: Optional maximum number of handlers to discover
|
|
275
|
+
and load. If specified, discovery stops after finding this
|
|
276
|
+
many contract files. A warning is logged when the limit is
|
|
277
|
+
reached. Set to None (default) for unlimited discovery.
|
|
278
|
+
|
|
279
|
+
Returns:
|
|
280
|
+
list[ModelLoadedHandler]: List of successfully loaded handlers.
|
|
281
|
+
May be empty if no patterns match or all fail validation.
|
|
282
|
+
Duplicate matches (same file from multiple patterns) are
|
|
283
|
+
loaded only once.
|
|
284
|
+
|
|
285
|
+
Raises:
|
|
286
|
+
ProtocolConfigurationError: If patterns list is empty. Error codes:
|
|
287
|
+
- HANDLER_LOADER_030: Empty patterns list
|
|
288
|
+
|
|
289
|
+
Note:
|
|
290
|
+
Invalid glob patterns (HANDLER_LOADER_031) are logged as warnings but
|
|
291
|
+
do not raise exceptions - the pattern is skipped and discovery continues
|
|
292
|
+
with remaining patterns. This allows graceful handling of partial pattern
|
|
293
|
+
failures during discovery operations.
|
|
294
|
+
|
|
295
|
+
Example:
|
|
296
|
+
.. code-block:: python
|
|
297
|
+
|
|
298
|
+
from pathlib import Path
|
|
299
|
+
|
|
300
|
+
loader: ProtocolHandlerPluginLoader = FileSystemHandlerPluginLoader()
|
|
301
|
+
|
|
302
|
+
# Using default cwd-based resolution
|
|
303
|
+
handlers = loader.discover_and_load([
|
|
304
|
+
"src/omnibase_infra/handlers/**/contract.yaml",
|
|
305
|
+
"src/omnibase_infra/nodes/**/contract.yaml",
|
|
306
|
+
])
|
|
307
|
+
|
|
308
|
+
# Using explicit base path for deterministic behavior
|
|
309
|
+
handlers = loader.discover_and_load(
|
|
310
|
+
patterns=["src/**/contract.yaml"],
|
|
311
|
+
base_path=Path("/app/project"),
|
|
312
|
+
)
|
|
313
|
+
|
|
314
|
+
# Limit discovery to prevent runaway resource usage
|
|
315
|
+
handlers = loader.discover_and_load(
|
|
316
|
+
patterns=["**/*.yaml"],
|
|
317
|
+
max_handlers=50,
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
print(f"Discovered and loaded {len(handlers)} handlers")
|
|
321
|
+
"""
|
|
322
|
+
...
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
__all__: list[str] = [
|
|
326
|
+
"ProtocolHandlerPluginLoader",
|
|
327
|
+
]
|