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,139 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Policy Registration Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for policy registration parameters,
|
|
6
|
+
used to register policy plugins with the RegistryPolicy.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import TYPE_CHECKING
|
|
12
|
+
|
|
13
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
14
|
+
|
|
15
|
+
from omnibase_infra.enums import EnumPolicyType
|
|
16
|
+
from omnibase_infra.runtime.util_version import normalize_version
|
|
17
|
+
from omnibase_infra.types import PolicyTypeInput
|
|
18
|
+
from omnibase_infra.utils import validate_policy_type_value
|
|
19
|
+
|
|
20
|
+
# NOTE: PolicyTypeInput is the INPUT type (str | EnumPolicyType) for API flexibility.
|
|
21
|
+
# The validator coerces strings to EnumPolicyType, so the actual stored value is
|
|
22
|
+
# always an enum. This ensures type-safe access after model instantiation.
|
|
23
|
+
|
|
24
|
+
if TYPE_CHECKING:
|
|
25
|
+
from omnibase_infra.runtime.protocol_policy import ProtocolPolicy
|
|
26
|
+
|
|
27
|
+
# Type alias for policy class - uses TYPE_CHECKING to avoid circular import
|
|
28
|
+
PolicyClass = type[ProtocolPolicy]
|
|
29
|
+
else:
|
|
30
|
+
# NOTE: At runtime we use generic type to avoid circular import.
|
|
31
|
+
# Type checkers see proper protocol type via TYPE_CHECKING block.
|
|
32
|
+
PolicyClass = type # type: ignore[assignment,misc]
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ModelPolicyRegistration(BaseModel):
|
|
36
|
+
"""Model for policy registration parameters.
|
|
37
|
+
|
|
38
|
+
Encapsulates all parameters needed to register a policy plugin with
|
|
39
|
+
the RegistryPolicy. This model reduces the number of parameters in
|
|
40
|
+
the register() method signature.
|
|
41
|
+
|
|
42
|
+
Attributes:
|
|
43
|
+
policy_id: Unique identifier for the policy (e.g., 'exponential_backoff')
|
|
44
|
+
policy_class: Policy implementation class that implements ProtocolPolicy
|
|
45
|
+
policy_type: Policy type - either orchestrator or reducer
|
|
46
|
+
version: Semantic version string (default: "1.0.0")
|
|
47
|
+
description: Human-readable description of the policy
|
|
48
|
+
allow_async: If True, allows async interface (must be explicit)
|
|
49
|
+
|
|
50
|
+
Example:
|
|
51
|
+
>>> from omnibase_infra.runtime.models import ModelPolicyRegistration
|
|
52
|
+
>>> from omnibase_infra.enums import EnumPolicyType
|
|
53
|
+
>>> registration = ModelPolicyRegistration(
|
|
54
|
+
... policy_id="exponential_backoff",
|
|
55
|
+
... policy_class=ExponentialBackoffPolicy,
|
|
56
|
+
... policy_type=EnumPolicyType.ORCHESTRATOR,
|
|
57
|
+
... version="1.0.0",
|
|
58
|
+
... description="Calculates exponential backoff delays for retries",
|
|
59
|
+
... )
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
model_config = ConfigDict(
|
|
63
|
+
strict=False, # Allow type coercion for policy_class
|
|
64
|
+
frozen=True,
|
|
65
|
+
extra="forbid",
|
|
66
|
+
arbitrary_types_allowed=True, # Required for type[ProtocolPolicy]
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
policy_id: str = Field(
|
|
70
|
+
...,
|
|
71
|
+
description="Unique policy identifier (e.g., 'exponential_backoff')",
|
|
72
|
+
)
|
|
73
|
+
policy_class: PolicyClass = Field(
|
|
74
|
+
...,
|
|
75
|
+
description="Policy implementation class that implements ProtocolPolicy",
|
|
76
|
+
)
|
|
77
|
+
# NOTE: Field accepts PolicyTypeInput (str | EnumPolicyType) via mode="before" coercion,
|
|
78
|
+
# but the validator always coerces to EnumPolicyType. We annotate with the coerced type.
|
|
79
|
+
policy_type: EnumPolicyType = Field(
|
|
80
|
+
...,
|
|
81
|
+
description="Policy type (accepts string or enum, always stored as EnumPolicyType)",
|
|
82
|
+
)
|
|
83
|
+
version: str = Field(
|
|
84
|
+
default="1.0.0",
|
|
85
|
+
description="Semantic version string",
|
|
86
|
+
)
|
|
87
|
+
description: str = Field(
|
|
88
|
+
default="",
|
|
89
|
+
description="Human-readable description of the policy",
|
|
90
|
+
)
|
|
91
|
+
allow_async: bool = Field(
|
|
92
|
+
default=False,
|
|
93
|
+
description="If True, allows async interface (must be explicit for async policies)",
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
@field_validator("version", mode="before")
|
|
97
|
+
@classmethod
|
|
98
|
+
def validate_and_normalize_version(cls, v: str) -> str:
|
|
99
|
+
"""Normalize version string for consistent storage.
|
|
100
|
+
|
|
101
|
+
Delegates to the shared normalize_version utility which is the
|
|
102
|
+
SINGLE SOURCE OF TRUTH for version normalization in omnibase_infra.
|
|
103
|
+
|
|
104
|
+
Converts version strings to canonical x.y.z format. This ensures version
|
|
105
|
+
strings are consistent across the registry, preventing storage/lookup
|
|
106
|
+
mismatches.
|
|
107
|
+
|
|
108
|
+
Normalization rules:
|
|
109
|
+
1. Strip leading/trailing whitespace
|
|
110
|
+
2. Strip leading 'v' or 'V' prefix
|
|
111
|
+
3. Expand partial versions (1 -> 1.0.0, 1.0 -> 1.0.0)
|
|
112
|
+
4. Parse with ModelSemVer.parse() for validation
|
|
113
|
+
5. Preserve prerelease suffix if present
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
v: The version string to normalize
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
Normalized version string in "x.y.z" or "x.y.z-prerelease" format
|
|
120
|
+
|
|
121
|
+
Raises:
|
|
122
|
+
ValueError: If the version string is invalid and cannot be parsed
|
|
123
|
+
"""
|
|
124
|
+
return normalize_version(v)
|
|
125
|
+
|
|
126
|
+
@field_validator("policy_type", mode="before")
|
|
127
|
+
@classmethod
|
|
128
|
+
def validate_policy_type(cls, v: PolicyTypeInput) -> EnumPolicyType:
|
|
129
|
+
"""Validate and coerce policy_type to EnumPolicyType.
|
|
130
|
+
|
|
131
|
+
Delegates to shared utility for consistent validation across all models.
|
|
132
|
+
String values are coerced to EnumPolicyType, ensuring type-safe access.
|
|
133
|
+
|
|
134
|
+
Note: mode="before" allows accepting str input before Pydantic validation.
|
|
135
|
+
"""
|
|
136
|
+
return validate_policy_type_value(v)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
__all__: list[str] = ["ModelPolicyRegistration"]
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Pydantic model for policy evaluation result.
|
|
4
|
+
|
|
5
|
+
This module provides the ModelPolicyResult Pydantic BaseModel for returning
|
|
6
|
+
structured results from policy evaluation methods.
|
|
7
|
+
|
|
8
|
+
Design Notes:
|
|
9
|
+
- Uses ConfigDict(extra="allow") to support arbitrary policy-specific fields
|
|
10
|
+
- Supports dict-like access via __getitem__ for flexible API usage
|
|
11
|
+
- Can be instantiated from dicts using model_validate()
|
|
12
|
+
- Follows ONEX naming convention: Model<Name>
|
|
13
|
+
|
|
14
|
+
This model replaces the former JsonType return type in ProtocolPolicy.evaluate()
|
|
15
|
+
and ProtocolPolicy.decide() method signatures, providing type safety while
|
|
16
|
+
maintaining flexibility for diverse policy results.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
22
|
+
|
|
23
|
+
from omnibase_infra.mixins import MixinDictLikeAccessors
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ModelPolicyResult(MixinDictLikeAccessors, BaseModel):
|
|
27
|
+
"""Base Pydantic model for policy evaluation results.
|
|
28
|
+
|
|
29
|
+
This model provides structured results from policy evaluation including
|
|
30
|
+
decisions, computed values, and metadata.
|
|
31
|
+
|
|
32
|
+
Common Fields:
|
|
33
|
+
success: Whether the policy evaluation succeeded
|
|
34
|
+
reason: Human-readable explanation of the decision
|
|
35
|
+
metadata: Additional metadata for observability
|
|
36
|
+
|
|
37
|
+
Configuration:
|
|
38
|
+
- extra="allow": Accepts arbitrary additional fields for policy-specific results
|
|
39
|
+
- frozen=False: Allows mutation
|
|
40
|
+
- populate_by_name=True: Allows field access by alias
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
```python
|
|
44
|
+
# Return from orchestrator policy (retry decision)
|
|
45
|
+
result = ModelPolicyResult(
|
|
46
|
+
should_retry=True,
|
|
47
|
+
delay_seconds=4.0,
|
|
48
|
+
reason="Attempt 2 of 10, exponential backoff",
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Return from reducer policy (merge decision)
|
|
52
|
+
result = ModelPolicyResult(
|
|
53
|
+
merged_state={"count": 5, "sum": 100},
|
|
54
|
+
conflicts=[],
|
|
55
|
+
success=True,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
# Access with get (dict-like, backwards compatible)
|
|
59
|
+
should_retry = result.get("should_retry", False)
|
|
60
|
+
|
|
61
|
+
# Access as attribute
|
|
62
|
+
delay = result.delay_seconds
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Policy-Specific Fields:
|
|
66
|
+
For orchestrator retry policies:
|
|
67
|
+
- should_retry: Whether to retry the operation
|
|
68
|
+
- delay_seconds: Delay before retry
|
|
69
|
+
- max_retries_reached: Whether max retries exceeded
|
|
70
|
+
|
|
71
|
+
For orchestrator routing policies:
|
|
72
|
+
- target_handler: Handler to route to
|
|
73
|
+
- priority: Routing priority
|
|
74
|
+
- fallback_handlers: Alternative handlers if primary fails
|
|
75
|
+
|
|
76
|
+
For reducer merge policies:
|
|
77
|
+
- merged_state: Result of state merge
|
|
78
|
+
- conflicts: List of detected conflicts
|
|
79
|
+
- resolution_strategy: How conflicts were resolved
|
|
80
|
+
|
|
81
|
+
For reducer projection policies:
|
|
82
|
+
- projection: Projected view of state
|
|
83
|
+
- projection_type: Type of projection applied
|
|
84
|
+
|
|
85
|
+
Note:
|
|
86
|
+
All fields are optional due to extra="allow". Specific policies should
|
|
87
|
+
document which result fields they return.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
model_config = ConfigDict(
|
|
91
|
+
extra="allow",
|
|
92
|
+
frozen=False,
|
|
93
|
+
populate_by_name=True,
|
|
94
|
+
from_attributes=True,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# Common result fields - all optional with defaults
|
|
98
|
+
success: bool = True
|
|
99
|
+
reason: str = ""
|
|
100
|
+
metadata: dict[str, object] = Field(default_factory=dict)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
__all__: list[str] = ["ModelPolicyResult"]
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Model for policy type filter values in runtime module.
|
|
4
|
+
|
|
5
|
+
This module provides a strongly-typed Pydantic model for policy type
|
|
6
|
+
filter values, replacing `str | EnumPolicyType | None` union types
|
|
7
|
+
to comply with ONEX standards.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from omnibase_infra.enums import EnumPolicyType
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ModelPolicyTypeFilter(BaseModel):
|
|
16
|
+
"""Strongly-typed model for policy type filter values.
|
|
17
|
+
|
|
18
|
+
Replaces `str | EnumPolicyType | None` to comply with ONEX standards
|
|
19
|
+
requiring specific typed models instead of generic union types.
|
|
20
|
+
|
|
21
|
+
This model is used in PolicyRegistry filtering operations where the
|
|
22
|
+
policy type can be specified as:
|
|
23
|
+
- A string literal (e.g., "orchestrator", "reducer")
|
|
24
|
+
- An EnumPolicyType enum value
|
|
25
|
+
- None (no filter, match all types)
|
|
26
|
+
|
|
27
|
+
The model provides normalization methods to convert any input format
|
|
28
|
+
to a consistent string representation for internal use.
|
|
29
|
+
|
|
30
|
+
Attributes:
|
|
31
|
+
string_value: The policy type as a string, if provided as string.
|
|
32
|
+
enum_value: The policy type as an enum, if provided as enum.
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
>>> filter1 = ModelPolicyTypeFilter(string_value="orchestrator")
|
|
36
|
+
>>> filter1.normalize()
|
|
37
|
+
'orchestrator'
|
|
38
|
+
>>> filter2 = ModelPolicyTypeFilter(enum_value=EnumPolicyType.REDUCER)
|
|
39
|
+
>>> filter2.normalize()
|
|
40
|
+
'reducer'
|
|
41
|
+
>>> filter3 = ModelPolicyTypeFilter()
|
|
42
|
+
>>> filter3.normalize() is None
|
|
43
|
+
True
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
string_value: str | None = Field(
|
|
47
|
+
default=None, description="Policy type as string literal"
|
|
48
|
+
)
|
|
49
|
+
enum_value: EnumPolicyType | None = Field(
|
|
50
|
+
default=None, description="Policy type as EnumPolicyType enum"
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
model_config = ConfigDict(
|
|
54
|
+
frozen=True, # Make immutable like ModelPolicyKey
|
|
55
|
+
extra="forbid",
|
|
56
|
+
from_attributes=True,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
@classmethod
|
|
60
|
+
def from_string(cls, value: str) -> "ModelPolicyTypeFilter":
|
|
61
|
+
"""Create filter from a string value.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
value: The policy type as a string.
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
A new ModelPolicyTypeFilter with string_value set.
|
|
68
|
+
"""
|
|
69
|
+
return cls(string_value=value)
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def from_enum(cls, value: EnumPolicyType) -> "ModelPolicyTypeFilter":
|
|
73
|
+
"""Create filter from an EnumPolicyType value.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
value: The policy type as an enum.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
A new ModelPolicyTypeFilter with enum_value set.
|
|
80
|
+
"""
|
|
81
|
+
return cls(enum_value=value)
|
|
82
|
+
|
|
83
|
+
@classmethod
|
|
84
|
+
def none(cls) -> "ModelPolicyTypeFilter":
|
|
85
|
+
"""Create an empty filter (matches all types).
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
A new ModelPolicyTypeFilter with no value set.
|
|
89
|
+
"""
|
|
90
|
+
return cls()
|
|
91
|
+
|
|
92
|
+
def normalize(self) -> str | None:
|
|
93
|
+
"""Normalize the filter value to a string or None.
|
|
94
|
+
|
|
95
|
+
Converts the internal representation to a consistent string
|
|
96
|
+
format for use in filtering operations.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
The policy type as a string if set, None otherwise.
|
|
100
|
+
Enum values are converted to their string representation.
|
|
101
|
+
"""
|
|
102
|
+
if self.enum_value is not None:
|
|
103
|
+
return self.enum_value.value
|
|
104
|
+
return self.string_value
|
|
105
|
+
|
|
106
|
+
def has_value(self) -> bool:
|
|
107
|
+
"""Check if a filter value is present.
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
True if either string_value or enum_value is set.
|
|
111
|
+
"""
|
|
112
|
+
return self.string_value is not None or self.enum_value is not None
|
|
113
|
+
|
|
114
|
+
def matches(self, policy_type: str) -> bool:
|
|
115
|
+
"""Check if this filter matches a given policy type.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
policy_type: The policy type string to check against.
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
True if:
|
|
122
|
+
- This filter has no value (matches all types)
|
|
123
|
+
- The normalized filter value equals the given policy type
|
|
124
|
+
"""
|
|
125
|
+
normalized = self.normalize()
|
|
126
|
+
if normalized is None:
|
|
127
|
+
return True
|
|
128
|
+
return normalized == policy_type
|
|
129
|
+
|
|
130
|
+
def __bool__(self) -> bool:
|
|
131
|
+
"""Boolean representation based on value presence.
|
|
132
|
+
|
|
133
|
+
Warning:
|
|
134
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
135
|
+
return ``True`` only when a filter value is set. This differs from typical
|
|
136
|
+
Pydantic model behavior where ``bool(model)`` always returns ``True`` for
|
|
137
|
+
any valid model instance.
|
|
138
|
+
|
|
139
|
+
This design enables idiomatic filter checks::
|
|
140
|
+
|
|
141
|
+
if policy_filter:
|
|
142
|
+
# Filter is active - apply it
|
|
143
|
+
filtered = [p for p in policies if policy_filter.matches(p.type)]
|
|
144
|
+
else:
|
|
145
|
+
# No filter - return all
|
|
146
|
+
filtered = policies
|
|
147
|
+
|
|
148
|
+
Use ``policy_filter.has_value()`` for explicit, self-documenting code.
|
|
149
|
+
Use ``policy_filter is not None`` if you need to check model existence.
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
True if a filter value is set, False otherwise.
|
|
153
|
+
"""
|
|
154
|
+
return self.has_value()
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
__all__ = ["ModelPolicyTypeFilter"]
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Projector Plugin Loader Configuration Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for projector plugin loader configuration.
|
|
6
|
+
All fields are strongly typed to eliminate Any usage and enable proper validation.
|
|
7
|
+
|
|
8
|
+
Example:
|
|
9
|
+
>>> config = ModelProjectorPluginLoaderConfig(
|
|
10
|
+
... graceful_mode=True,
|
|
11
|
+
... base_paths=[Path("/workspace/projectors")],
|
|
12
|
+
... )
|
|
13
|
+
>>> loader = ProjectorPluginLoader(config=config)
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ModelProjectorPluginLoaderConfig(BaseModel):
|
|
22
|
+
"""Configuration model for ProjectorPluginLoader.
|
|
23
|
+
|
|
24
|
+
This model encapsulates the configuration parameters for the projector
|
|
25
|
+
plugin loader, separating config from runtime dependencies (container,
|
|
26
|
+
schema_manager, pool).
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
graceful_mode: If True, collect errors and continue discovery.
|
|
30
|
+
If False (default), raise on first error.
|
|
31
|
+
base_paths: Optional list of base paths for security validation.
|
|
32
|
+
Symlinks are only allowed if they resolve within these paths.
|
|
33
|
+
If None, uses the paths provided to discovery methods.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
model_config = ConfigDict(frozen=True, extra="forbid", from_attributes=True)
|
|
37
|
+
|
|
38
|
+
graceful_mode: bool = Field(
|
|
39
|
+
default=False,
|
|
40
|
+
description="If True, collect errors and continue discovery. "
|
|
41
|
+
"If False (default), raise on first error.",
|
|
42
|
+
)
|
|
43
|
+
base_paths: list[Path] | None = Field(
|
|
44
|
+
default=None,
|
|
45
|
+
description="Optional list of base paths for security validation. "
|
|
46
|
+
"Symlinks are only allowed if they resolve within these paths.",
|
|
47
|
+
)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocol Registration Configuration Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for individual protocol registration
|
|
6
|
+
configuration within contract-driven runtime setup.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from omnibase_infra.runtime.models.model_enabled_protocols_config import ProtocolName
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ModelProtocolRegistrationConfig(BaseModel):
|
|
17
|
+
"""Protocol registration configuration model.
|
|
18
|
+
|
|
19
|
+
Defines configuration for a single protocol registration as specified
|
|
20
|
+
in runtime contracts.
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
type: Protocol type identifier (e.g., "http", "db", "kafka")
|
|
24
|
+
protocol_class: Fully qualified protocol class name for instantiation
|
|
25
|
+
enabled: Whether this protocol is enabled for registration
|
|
26
|
+
options: Additional protocol-specific configuration options
|
|
27
|
+
|
|
28
|
+
Example:
|
|
29
|
+
>>> config = ModelProtocolRegistrationConfig(
|
|
30
|
+
... type="http",
|
|
31
|
+
... protocol_class="omnibase_infra.handlers.handler_http.HttpHandler",
|
|
32
|
+
... enabled=True,
|
|
33
|
+
... options={"timeout": "30"},
|
|
34
|
+
... )
|
|
35
|
+
>>> print(config.type)
|
|
36
|
+
'http'
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
model_config = ConfigDict(
|
|
40
|
+
strict=True,
|
|
41
|
+
frozen=True,
|
|
42
|
+
extra="forbid",
|
|
43
|
+
populate_by_name=True, # Allow both alias and field name
|
|
44
|
+
from_attributes=True, # Support pytest-xdist compatibility
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
type: ProtocolName = Field(
|
|
48
|
+
description="Protocol type identifier (e.g., 'http', 'db', 'kafka')",
|
|
49
|
+
)
|
|
50
|
+
protocol_class: str | None = Field(
|
|
51
|
+
default=None,
|
|
52
|
+
alias="class",
|
|
53
|
+
description="Fully qualified protocol class name for instantiation",
|
|
54
|
+
)
|
|
55
|
+
enabled: bool = Field(
|
|
56
|
+
default=True,
|
|
57
|
+
description="Whether this protocol is enabled for registration",
|
|
58
|
+
)
|
|
59
|
+
options: dict[str, str] = Field(
|
|
60
|
+
default_factory=dict,
|
|
61
|
+
description="Additional protocol-specific configuration options",
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
__all__: list[str] = ["ModelProtocolRegistrationConfig"]
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Retry policy configuration model.
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 0.8.0
|
|
6
|
+
Initial implementation for OMN-765.
|
|
7
|
+
|
|
8
|
+
This module provides the retry policy model used by binding configurations.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from typing import Literal
|
|
14
|
+
|
|
15
|
+
from pydantic import BaseModel, ConfigDict, Field, ValidationInfo, field_validator
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ModelRetryPolicy(BaseModel):
|
|
19
|
+
"""Retry policy configuration for handler operations.
|
|
20
|
+
|
|
21
|
+
Defines how failed handler operations should be retried, including
|
|
22
|
+
the maximum number of attempts and the backoff strategy.
|
|
23
|
+
|
|
24
|
+
Attributes:
|
|
25
|
+
max_retries: Maximum number of retry attempts (0 means no retries).
|
|
26
|
+
backoff_strategy: Strategy for calculating delays between retries.
|
|
27
|
+
- "fixed": Same delay between each retry.
|
|
28
|
+
- "exponential": Delay doubles with each retry.
|
|
29
|
+
base_delay_ms: Initial delay in milliseconds before first retry.
|
|
30
|
+
max_delay_ms: Maximum delay in milliseconds (caps exponential growth).
|
|
31
|
+
|
|
32
|
+
Example:
|
|
33
|
+
>>> policy = ModelRetryPolicy(
|
|
34
|
+
... max_retries=5,
|
|
35
|
+
... backoff_strategy="exponential",
|
|
36
|
+
... base_delay_ms=100,
|
|
37
|
+
... max_delay_ms=10000,
|
|
38
|
+
... )
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
model_config = ConfigDict(
|
|
42
|
+
strict=True,
|
|
43
|
+
frozen=True,
|
|
44
|
+
extra="forbid",
|
|
45
|
+
from_attributes=True,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
max_retries: int = Field(
|
|
49
|
+
default=3,
|
|
50
|
+
ge=0,
|
|
51
|
+
le=10,
|
|
52
|
+
description="Maximum number of retry attempts (0-10). "
|
|
53
|
+
"0 means no retries; operation fails immediately on first error.",
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
backoff_strategy: Literal["fixed", "exponential"] = Field(
|
|
57
|
+
default="exponential",
|
|
58
|
+
description="Backoff strategy: 'fixed' uses constant delay, "
|
|
59
|
+
"'exponential' doubles delay on each retry.",
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
base_delay_ms: int = Field(
|
|
63
|
+
default=100,
|
|
64
|
+
ge=10,
|
|
65
|
+
le=60000,
|
|
66
|
+
description="Base delay in milliseconds before first retry (10-60000). "
|
|
67
|
+
"For exponential backoff, subsequent delays are base_delay * 2^attempt.",
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
max_delay_ms: int = Field(
|
|
71
|
+
default=5000,
|
|
72
|
+
ge=100,
|
|
73
|
+
le=300000,
|
|
74
|
+
description="Maximum delay in milliseconds between retries (100-300000). "
|
|
75
|
+
"Caps exponential backoff growth to prevent excessive waits.",
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
@field_validator("max_delay_ms")
|
|
79
|
+
@classmethod
|
|
80
|
+
def validate_max_delay_greater_than_base(cls, v: int, info: ValidationInfo) -> int:
|
|
81
|
+
"""Ensure max_delay_ms is at least as large as base_delay_ms.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
v: The max_delay_ms value to validate.
|
|
85
|
+
info: Pydantic validation info containing other field values.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
The validated max_delay_ms value.
|
|
89
|
+
|
|
90
|
+
Raises:
|
|
91
|
+
ValueError: If max_delay_ms is less than base_delay_ms.
|
|
92
|
+
"""
|
|
93
|
+
# Access data from validation info
|
|
94
|
+
data = info.data if info.data else {}
|
|
95
|
+
base_delay = data.get("base_delay_ms", 100)
|
|
96
|
+
if v < base_delay:
|
|
97
|
+
raise ValueError(
|
|
98
|
+
f"max_delay_ms ({v}) must be >= base_delay_ms ({base_delay})"
|
|
99
|
+
)
|
|
100
|
+
return v
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
__all__: list[str] = [
|
|
104
|
+
"ModelRetryPolicy",
|
|
105
|
+
]
|