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,42 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Logging Configuration Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for logging configuration.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Literal
|
|
11
|
+
|
|
12
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ModelLoggingConfig(BaseModel):
|
|
16
|
+
"""Logging configuration model.
|
|
17
|
+
|
|
18
|
+
Defines logging level and format for the runtime.
|
|
19
|
+
|
|
20
|
+
Attributes:
|
|
21
|
+
level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
|
22
|
+
format: Log message format string
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
model_config = ConfigDict(
|
|
26
|
+
strict=True,
|
|
27
|
+
frozen=True,
|
|
28
|
+
extra="forbid",
|
|
29
|
+
from_attributes=True, # Support pytest-xdist compatibility
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] = Field(
|
|
33
|
+
default="INFO",
|
|
34
|
+
description="Logging level",
|
|
35
|
+
)
|
|
36
|
+
format: str = Field(
|
|
37
|
+
default="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
|
|
38
|
+
description="Log message format string",
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
__all__: list[str] = ["ModelLoggingConfig"]
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Model for optional correlation ID values in runtime module.
|
|
4
|
+
|
|
5
|
+
This module provides a strongly-typed Pydantic model for optional
|
|
6
|
+
correlation ID values (UUIDs), replacing `UUID | None` union types
|
|
7
|
+
to comply with ONEX standards.
|
|
8
|
+
|
|
9
|
+
Correlation IDs are used throughout the runtime for request tracing,
|
|
10
|
+
logging, and distributed system observability.
|
|
11
|
+
|
|
12
|
+
Design Decision (PR #47 Review):
|
|
13
|
+
This model intentionally duplicates patterns from ModelOptionalUUID rather than
|
|
14
|
+
using inheritance or generics. This design choice provides:
|
|
15
|
+
|
|
16
|
+
1. **Self-contained model**: No dependencies on base classes or mixins
|
|
17
|
+
2. **Correlation-specific methods**: `get_or_generate()` is specific to correlation IDs
|
|
18
|
+
3. **ONEX compliance**: Follows "composition over inheritance" principle
|
|
19
|
+
4. **Future-ready**: Available for strongly-typed correlation ID handling
|
|
20
|
+
in RuntimeHostProcess and event envelope processing
|
|
21
|
+
|
|
22
|
+
While currently not actively used, this model is pre-built for consistent
|
|
23
|
+
correlation ID handling as the codebase evolves. The trade-off of code
|
|
24
|
+
duplication vs. generic abstractions was intentionally chosen for clarity
|
|
25
|
+
and type safety.
|
|
26
|
+
|
|
27
|
+
See Also:
|
|
28
|
+
- ModelOptionalUUID: Similar pattern for generic optional UUIDs
|
|
29
|
+
- docs/patterns/correlation_id_tracking.md: Correlation ID best practices
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from uuid import UUID, uuid4
|
|
33
|
+
|
|
34
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class ModelOptionalCorrelationId(BaseModel):
|
|
38
|
+
"""Strongly-typed model for optional correlation ID values.
|
|
39
|
+
|
|
40
|
+
Replaces `UUID | None` for correlation IDs to comply with ONEX
|
|
41
|
+
standards requiring specific typed models instead of generic union types.
|
|
42
|
+
|
|
43
|
+
This specialized wrapper is designed for correlation ID use cases,
|
|
44
|
+
providing factory methods to generate new UUIDs when needed and
|
|
45
|
+
ensuring consistent handling across the runtime module.
|
|
46
|
+
|
|
47
|
+
Attributes:
|
|
48
|
+
value: The optional correlation ID (UUID), defaults to None.
|
|
49
|
+
|
|
50
|
+
Example:
|
|
51
|
+
>>> corr = ModelOptionalCorrelationId.generate()
|
|
52
|
+
>>> corr.has_value()
|
|
53
|
+
True
|
|
54
|
+
>>> empty = ModelOptionalCorrelationId()
|
|
55
|
+
>>> filled = empty.get_or_generate()
|
|
56
|
+
>>> filled.has_value()
|
|
57
|
+
True
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
model_config = ConfigDict(frozen=True, from_attributes=True, extra="forbid")
|
|
61
|
+
|
|
62
|
+
value: UUID | None = Field(
|
|
63
|
+
default=None, description="Optional correlation ID (UUID)"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
@classmethod
|
|
67
|
+
def generate(cls) -> "ModelOptionalCorrelationId":
|
|
68
|
+
"""Create a new correlation ID with a generated UUID.
|
|
69
|
+
|
|
70
|
+
Factory method that creates a ModelOptionalCorrelationId with
|
|
71
|
+
a newly generated UUID4 value.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
A new ModelOptionalCorrelationId with a generated UUID.
|
|
75
|
+
"""
|
|
76
|
+
return cls(value=uuid4())
|
|
77
|
+
|
|
78
|
+
@classmethod
|
|
79
|
+
def from_uuid(cls, value: UUID) -> "ModelOptionalCorrelationId":
|
|
80
|
+
"""Create a correlation ID from an existing UUID.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
value: An existing UUID to wrap.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
A new ModelOptionalCorrelationId with the given UUID.
|
|
87
|
+
"""
|
|
88
|
+
return cls(value=value)
|
|
89
|
+
|
|
90
|
+
@classmethod
|
|
91
|
+
def none(cls) -> "ModelOptionalCorrelationId":
|
|
92
|
+
"""Create an empty correlation ID.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
A new ModelOptionalCorrelationId with no value.
|
|
96
|
+
"""
|
|
97
|
+
return cls()
|
|
98
|
+
|
|
99
|
+
def get(self) -> UUID | None:
|
|
100
|
+
"""Get the optional correlation ID.
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
The UUID value if present, None otherwise.
|
|
104
|
+
"""
|
|
105
|
+
return self.value
|
|
106
|
+
|
|
107
|
+
def has_value(self) -> bool:
|
|
108
|
+
"""Check if correlation ID is present.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
True if value is not None, False otherwise.
|
|
112
|
+
"""
|
|
113
|
+
return self.value is not None
|
|
114
|
+
|
|
115
|
+
def get_or_default(self, default: UUID) -> UUID:
|
|
116
|
+
"""Get correlation ID or return default if None.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
default: The default UUID to return if None.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
The stored value if present, otherwise the default.
|
|
123
|
+
"""
|
|
124
|
+
return self.value if self.value is not None else default
|
|
125
|
+
|
|
126
|
+
def get_or_generate(self) -> "ModelOptionalCorrelationId":
|
|
127
|
+
"""Get this correlation ID or generate a new one if None.
|
|
128
|
+
|
|
129
|
+
Returns a new ModelOptionalCorrelationId with either:
|
|
130
|
+
- The existing UUID if present
|
|
131
|
+
- A newly generated UUID if None
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
A ModelOptionalCorrelationId that always has a value.
|
|
135
|
+
"""
|
|
136
|
+
if self.value is not None:
|
|
137
|
+
return self
|
|
138
|
+
return ModelOptionalCorrelationId.generate()
|
|
139
|
+
|
|
140
|
+
def __bool__(self) -> bool:
|
|
141
|
+
"""Boolean representation based on value presence.
|
|
142
|
+
|
|
143
|
+
Warning:
|
|
144
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
145
|
+
return ``True`` only when a correlation ID is present. This differs from
|
|
146
|
+
typical Pydantic model behavior where ``bool(model)`` always returns
|
|
147
|
+
``True`` for any valid model instance.
|
|
148
|
+
|
|
149
|
+
This design enables idiomatic presence checks::
|
|
150
|
+
|
|
151
|
+
if corr_id:
|
|
152
|
+
# Correlation ID is present - propagate it
|
|
153
|
+
context.set_correlation_id(corr_id.value)
|
|
154
|
+
else:
|
|
155
|
+
# No correlation ID - generate new one
|
|
156
|
+
corr_id = corr_id.get_or_generate()
|
|
157
|
+
|
|
158
|
+
Use ``corr_id.has_value()`` for explicit, self-documenting code.
|
|
159
|
+
Use ``corr_id is not None`` if you need to check model existence.
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
True if correlation ID is present, False otherwise.
|
|
163
|
+
"""
|
|
164
|
+
return self.has_value()
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
__all__ = ["ModelOptionalCorrelationId"]
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Model for optional string values in runtime module.
|
|
4
|
+
|
|
5
|
+
This module provides a strongly-typed Pydantic model for optional string
|
|
6
|
+
values, replacing `str | None` union types to comply with ONEX standards.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ModelOptionalString(BaseModel):
|
|
13
|
+
"""Strongly-typed model for optional string values.
|
|
14
|
+
|
|
15
|
+
Replaces `str | None` to comply with ONEX standards requiring specific
|
|
16
|
+
typed models instead of generic union types.
|
|
17
|
+
|
|
18
|
+
This wrapper provides a consistent API for working with optional strings,
|
|
19
|
+
including presence checking, default value handling, and functional
|
|
20
|
+
transformation methods.
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
value: The optional string value, defaults to None.
|
|
24
|
+
|
|
25
|
+
Example:
|
|
26
|
+
>>> opt = ModelOptionalString(value="hello")
|
|
27
|
+
>>> opt.has_value()
|
|
28
|
+
True
|
|
29
|
+
>>> opt.get_or_default("default")
|
|
30
|
+
'hello'
|
|
31
|
+
>>> empty = ModelOptionalString()
|
|
32
|
+
>>> empty.get_or_default("default")
|
|
33
|
+
'default'
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
model_config = ConfigDict(frozen=True, from_attributes=True, extra="forbid")
|
|
37
|
+
|
|
38
|
+
value: str | None = Field(default=None, description="Optional string value")
|
|
39
|
+
|
|
40
|
+
def get(self) -> str | None:
|
|
41
|
+
"""Get the optional value.
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
The string value if present, None otherwise.
|
|
45
|
+
"""
|
|
46
|
+
return self.value
|
|
47
|
+
|
|
48
|
+
def has_value(self) -> bool:
|
|
49
|
+
"""Check if value is present.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
True if value is not None, False otherwise.
|
|
53
|
+
"""
|
|
54
|
+
return self.value is not None
|
|
55
|
+
|
|
56
|
+
def get_or_default(self, default: str) -> str:
|
|
57
|
+
"""Get value or return default if None.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
default: The default value to return if None.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
The stored value if present, otherwise the default.
|
|
64
|
+
"""
|
|
65
|
+
return self.value if self.value is not None else default
|
|
66
|
+
|
|
67
|
+
def __bool__(self) -> bool:
|
|
68
|
+
"""Boolean representation based on value presence.
|
|
69
|
+
|
|
70
|
+
Warning:
|
|
71
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
72
|
+
return ``True`` only when a value is present. This differs from typical
|
|
73
|
+
Pydantic model behavior where ``bool(model)`` always returns ``True`` for
|
|
74
|
+
any valid model instance.
|
|
75
|
+
|
|
76
|
+
This design enables idiomatic presence checks::
|
|
77
|
+
|
|
78
|
+
if opt_string:
|
|
79
|
+
# Value is present - use it
|
|
80
|
+
process(opt_string.value)
|
|
81
|
+
else:
|
|
82
|
+
# No value - use fallback
|
|
83
|
+
use_default()
|
|
84
|
+
|
|
85
|
+
Use ``opt_string.has_value()`` for explicit, self-documenting code.
|
|
86
|
+
Use ``opt_string is not None`` if you need to check model existence.
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
True if value is present, False otherwise.
|
|
90
|
+
"""
|
|
91
|
+
return self.has_value()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
__all__ = ["ModelOptionalString"]
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Model for optional UUID values in runtime module.
|
|
4
|
+
|
|
5
|
+
This module provides a strongly-typed Pydantic model for optional UUID
|
|
6
|
+
values, replacing `UUID | None` union types to comply with ONEX standards.
|
|
7
|
+
|
|
8
|
+
Design Note - Code Duplication:
|
|
9
|
+
The optional wrapper models (ModelOptionalUUID, ModelOptionalString,
|
|
10
|
+
ModelOptionalCorrelationId) contain similar methods (get(), has_value(),
|
|
11
|
+
get_or_default(), __bool__()). This duplication is intentional to comply
|
|
12
|
+
with ONEX principles:
|
|
13
|
+
|
|
14
|
+
1. Each model is self-contained and independently testable
|
|
15
|
+
2. No inheritance or mixin dependencies (composition over inheritance)
|
|
16
|
+
3. Explicit behavior for each type without generic base classes
|
|
17
|
+
4. Each model can evolve independently without breaking others
|
|
18
|
+
5. Clear type signatures without generic type parameters
|
|
19
|
+
|
|
20
|
+
While this creates some duplication, it provides stronger type safety,
|
|
21
|
+
better testability, and clearer semantics for each optional type.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from uuid import UUID
|
|
25
|
+
|
|
26
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ModelOptionalUUID(BaseModel):
|
|
30
|
+
"""Strongly-typed model for optional UUID values.
|
|
31
|
+
|
|
32
|
+
Replaces `UUID | None` to comply with ONEX standards requiring specific
|
|
33
|
+
typed models instead of generic union types.
|
|
34
|
+
|
|
35
|
+
This wrapper provides a consistent API for working with optional UUIDs,
|
|
36
|
+
including presence checking, default value handling, and functional
|
|
37
|
+
transformation methods.
|
|
38
|
+
|
|
39
|
+
Attributes:
|
|
40
|
+
value: The optional UUID value, defaults to None.
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
>>> from uuid import UUID
|
|
44
|
+
>>> opt = ModelOptionalUUID(value=UUID("12345678-1234-5678-1234-567812345678"))
|
|
45
|
+
>>> opt.has_value()
|
|
46
|
+
True
|
|
47
|
+
>>> empty = ModelOptionalUUID()
|
|
48
|
+
>>> empty.has_value()
|
|
49
|
+
False
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
model_config = ConfigDict(frozen=True, from_attributes=True, extra="forbid")
|
|
53
|
+
|
|
54
|
+
value: UUID | None = Field(default=None, description="Optional UUID value")
|
|
55
|
+
|
|
56
|
+
def get(self) -> UUID | None:
|
|
57
|
+
"""Get the optional value.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
The UUID value if present, None otherwise.
|
|
61
|
+
"""
|
|
62
|
+
return self.value
|
|
63
|
+
|
|
64
|
+
def has_value(self) -> bool:
|
|
65
|
+
"""Check if value is present.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
True if value is not None, False otherwise.
|
|
69
|
+
"""
|
|
70
|
+
return self.value is not None
|
|
71
|
+
|
|
72
|
+
def get_or_default(self, default: UUID) -> UUID:
|
|
73
|
+
"""Get value or return default if None.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
default: The default UUID to return if None.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
The stored value if present, otherwise the default.
|
|
80
|
+
"""
|
|
81
|
+
return self.value if self.value is not None else default
|
|
82
|
+
|
|
83
|
+
def __bool__(self) -> bool:
|
|
84
|
+
"""Boolean representation based on value presence.
|
|
85
|
+
|
|
86
|
+
Warning:
|
|
87
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
88
|
+
return ``True`` only when a value is present. This differs from typical
|
|
89
|
+
Pydantic model behavior where ``bool(model)`` always returns ``True`` for
|
|
90
|
+
any valid model instance.
|
|
91
|
+
|
|
92
|
+
This design enables idiomatic presence checks::
|
|
93
|
+
|
|
94
|
+
if opt_uuid:
|
|
95
|
+
# Value is present - use it
|
|
96
|
+
process(opt_uuid.value)
|
|
97
|
+
else:
|
|
98
|
+
# No value - use fallback
|
|
99
|
+
use_default()
|
|
100
|
+
|
|
101
|
+
Use ``opt_uuid.has_value()`` for explicit, self-documenting code.
|
|
102
|
+
Use ``opt_uuid is not None`` if you need to check model existence.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
True if value is present, False otherwise.
|
|
106
|
+
"""
|
|
107
|
+
return self.has_value()
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
__all__ = ["ModelOptionalUUID"]
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Pydantic model for policy evaluation context.
|
|
4
|
+
|
|
5
|
+
This module provides the ModelPolicyContext Pydantic BaseModel for passing
|
|
6
|
+
structured context to 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 usage in ProtocolPolicy.evaluate()
|
|
15
|
+
and ProtocolPolicy.decide() method signatures, providing type safety while
|
|
16
|
+
maintaining flexibility for diverse policy contexts.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from uuid import UUID
|
|
22
|
+
|
|
23
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
24
|
+
|
|
25
|
+
from omnibase_infra.mixins import MixinDictLikeAccessors
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ModelPolicyContext(MixinDictLikeAccessors, BaseModel):
|
|
29
|
+
"""Base Pydantic model for policy evaluation context.
|
|
30
|
+
|
|
31
|
+
This model provides structured context for policy evaluation including
|
|
32
|
+
correlation IDs, attempt counts, and policy-specific parameters.
|
|
33
|
+
|
|
34
|
+
Common Fields:
|
|
35
|
+
correlation_id: UUID for distributed tracing
|
|
36
|
+
attempt: Current retry/evaluation attempt number
|
|
37
|
+
timestamp_ms: Evaluation timestamp in milliseconds
|
|
38
|
+
metadata: Additional metadata for observability
|
|
39
|
+
|
|
40
|
+
Configuration:
|
|
41
|
+
- extra="allow": Accepts arbitrary additional fields for policy-specific data
|
|
42
|
+
- frozen=False: Allows mutation (though policies should not mutate context)
|
|
43
|
+
- populate_by_name=True: Allows field access by alias
|
|
44
|
+
|
|
45
|
+
Example:
|
|
46
|
+
```python
|
|
47
|
+
from uuid import uuid4
|
|
48
|
+
|
|
49
|
+
# Create with known fields
|
|
50
|
+
context = ModelPolicyContext(
|
|
51
|
+
correlation_id=uuid4(),
|
|
52
|
+
attempt=3,
|
|
53
|
+
base_delay_seconds=1.0,
|
|
54
|
+
max_delay_seconds=60.0,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Access with get (dict-like API)
|
|
58
|
+
attempt = context.get("attempt", 0)
|
|
59
|
+
|
|
60
|
+
# Access as attribute
|
|
61
|
+
corr_id = context.correlation_id
|
|
62
|
+
|
|
63
|
+
# Create from dict
|
|
64
|
+
context = ModelPolicyContext.model_validate({"attempt": 3, "error_type": "timeout"})
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Policy-Specific Fields:
|
|
68
|
+
For orchestrator policies:
|
|
69
|
+
- attempt: Current retry attempt number
|
|
70
|
+
- error_type: Type of error that triggered evaluation
|
|
71
|
+
- elapsed_ms: Time elapsed since operation started
|
|
72
|
+
- base_delay_seconds: Base delay for backoff calculations
|
|
73
|
+
- max_delay_seconds: Maximum delay cap
|
|
74
|
+
|
|
75
|
+
For reducer policies:
|
|
76
|
+
- current_state: Current aggregated state
|
|
77
|
+
- event: Event to process
|
|
78
|
+
- timestamp: Event timestamp
|
|
79
|
+
- sequence_number: Event sequence for ordering
|
|
80
|
+
|
|
81
|
+
Note:
|
|
82
|
+
All fields are optional due to extra="allow". Specific policies should
|
|
83
|
+
document which context fields they require for proper evaluation.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
model_config = ConfigDict(
|
|
87
|
+
extra="allow",
|
|
88
|
+
frozen=False,
|
|
89
|
+
populate_by_name=True,
|
|
90
|
+
from_attributes=True,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
# Common context fields - all optional with defaults
|
|
94
|
+
correlation_id: UUID | None = None
|
|
95
|
+
attempt: int = 0
|
|
96
|
+
timestamp_ms: int = 0
|
|
97
|
+
metadata: dict[str, object] = Field(default_factory=dict)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
__all__: list[str] = ["ModelPolicyContext"]
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""ModelPolicyKey - Strongly-typed PolicyRegistry key.
|
|
4
|
+
|
|
5
|
+
Defines ModelPolicyKey for PolicyRegistry dict operations.
|
|
6
|
+
Replaces primitive tuple[str, str, str] pattern with named fields.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
12
|
+
|
|
13
|
+
from omnibase_infra.enums import EnumPolicyType
|
|
14
|
+
from omnibase_infra.runtime.util_version import normalize_version
|
|
15
|
+
from omnibase_infra.types import PolicyTypeInput
|
|
16
|
+
from omnibase_infra.utils import validate_policy_type_value
|
|
17
|
+
|
|
18
|
+
# NOTE: PolicyTypeInput is the INPUT type (str | EnumPolicyType) for API flexibility.
|
|
19
|
+
# The validator coerces strings to EnumPolicyType, so the actual stored value is
|
|
20
|
+
# always an enum. This ensures type-safe access after model instantiation.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ModelPolicyKey(BaseModel):
|
|
24
|
+
"""Strongly-typed policy registry key.
|
|
25
|
+
|
|
26
|
+
Replaces tuple[str, str, str] pattern with named fields,
|
|
27
|
+
validation, and self-documenting structure.
|
|
28
|
+
|
|
29
|
+
Attributes:
|
|
30
|
+
policy_id: Unique identifier for the policy (e.g., 'exponential_backoff')
|
|
31
|
+
policy_type: Policy category (EnumPolicyType or 'orchestrator'/'reducer' string)
|
|
32
|
+
version: Semantic version string (e.g., '1.0.0')
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
>>> from omnibase_infra.enums import EnumPolicyType
|
|
36
|
+
>>> key = ModelPolicyKey(
|
|
37
|
+
... policy_id="retry_backoff",
|
|
38
|
+
... policy_type=EnumPolicyType.ORCHESTRATOR,
|
|
39
|
+
... version="1.0.0"
|
|
40
|
+
... )
|
|
41
|
+
>>> print(key.policy_id)
|
|
42
|
+
retry_backoff
|
|
43
|
+
>>> # Also accepts string policy_type
|
|
44
|
+
>>> key2 = ModelPolicyKey(
|
|
45
|
+
... policy_id="state_merger",
|
|
46
|
+
... policy_type="reducer",
|
|
47
|
+
... version="1.0.0"
|
|
48
|
+
... )
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
policy_id: str = Field(..., description="Unique policy identifier")
|
|
52
|
+
# NOTE: Field accepts PolicyTypeInput (str | EnumPolicyType) via mode="before" coercion,
|
|
53
|
+
# but the validator always coerces to EnumPolicyType. We annotate with the coerced type.
|
|
54
|
+
policy_type: EnumPolicyType = Field(
|
|
55
|
+
...,
|
|
56
|
+
description="Policy type (accepts string or enum, always stored as EnumPolicyType)",
|
|
57
|
+
)
|
|
58
|
+
version: str = Field(default="1.0.0", description="Semantic version string")
|
|
59
|
+
|
|
60
|
+
model_config = ConfigDict(
|
|
61
|
+
frozen=True, # Make hashable for dict keys
|
|
62
|
+
from_attributes=True,
|
|
63
|
+
str_strip_whitespace=True,
|
|
64
|
+
extra="forbid",
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
@field_validator("version", mode="before")
|
|
68
|
+
@classmethod
|
|
69
|
+
def validate_and_normalize_version(cls, v: str) -> str:
|
|
70
|
+
"""Normalize version string for consistent lookups.
|
|
71
|
+
|
|
72
|
+
Delegates to the shared normalize_version utility which is the
|
|
73
|
+
SINGLE SOURCE OF TRUTH for version normalization in omnibase_infra.
|
|
74
|
+
|
|
75
|
+
Converts version strings to canonical x.y.z format. This ensures consistent
|
|
76
|
+
version handling across all ONEX components, preventing lookup mismatches
|
|
77
|
+
where "1.0.0" and "1.0" might be treated as different versions.
|
|
78
|
+
|
|
79
|
+
Normalization rules:
|
|
80
|
+
1. Strip leading/trailing whitespace
|
|
81
|
+
2. Strip leading 'v' or 'V' prefix
|
|
82
|
+
3. Expand partial versions (1 -> 1.0.0, 1.0 -> 1.0.0)
|
|
83
|
+
4. Parse with ModelSemVer.parse() for validation
|
|
84
|
+
5. Preserve prerelease suffix if present
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
v: The version string to normalize
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
Normalized version string in "x.y.z" or "x.y.z-prerelease" format
|
|
91
|
+
|
|
92
|
+
Raises:
|
|
93
|
+
ValueError: If the version string is invalid and cannot be parsed
|
|
94
|
+
|
|
95
|
+
Examples:
|
|
96
|
+
>>> ModelPolicyKey(policy_id="test", policy_type="orchestrator", version="1.0")
|
|
97
|
+
ModelPolicyKey(policy_id='test', policy_type='orchestrator', version='1.0.0')
|
|
98
|
+
>>> ModelPolicyKey(policy_id="test", policy_type="orchestrator", version="v2.1")
|
|
99
|
+
ModelPolicyKey(policy_id='test', policy_type='orchestrator', version='2.1.0')
|
|
100
|
+
"""
|
|
101
|
+
return normalize_version(v)
|
|
102
|
+
|
|
103
|
+
@field_validator("policy_type", mode="before")
|
|
104
|
+
@classmethod
|
|
105
|
+
def validate_policy_type(cls, v: PolicyTypeInput) -> EnumPolicyType:
|
|
106
|
+
"""Validate and coerce policy_type to EnumPolicyType.
|
|
107
|
+
|
|
108
|
+
Delegates to shared utility for consistent validation across all models.
|
|
109
|
+
String values are coerced to EnumPolicyType, ensuring type-safe access.
|
|
110
|
+
|
|
111
|
+
Note: mode="before" allows accepting str input before Pydantic validation.
|
|
112
|
+
"""
|
|
113
|
+
return validate_policy_type_value(v)
|
|
114
|
+
|
|
115
|
+
def to_tuple(self) -> tuple[str, str, str]:
|
|
116
|
+
"""Convert to tuple representation.
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
Tuple of (policy_id, policy_type, version)
|
|
120
|
+
"""
|
|
121
|
+
# policy_type is always EnumPolicyType after validation coercion
|
|
122
|
+
return (self.policy_id, self.policy_type.value, self.version)
|
|
123
|
+
|
|
124
|
+
@classmethod
|
|
125
|
+
def from_tuple(cls, key_tuple: tuple[str, str, str]) -> ModelPolicyKey:
|
|
126
|
+
"""Create from tuple representation.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
key_tuple: Tuple of (policy_id, policy_type, version)
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
ModelPolicyKey instance
|
|
133
|
+
"""
|
|
134
|
+
return cls(
|
|
135
|
+
policy_id=key_tuple[0],
|
|
136
|
+
policy_type=key_tuple[1],
|
|
137
|
+
version=key_tuple[2],
|
|
138
|
+
)
|