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,147 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Dispatch Engine Models.
|
|
5
|
+
|
|
6
|
+
Core models for the ONEX runtime dispatch engine that routes messages
|
|
7
|
+
based on topic category and message type, and publishes dispatcher outputs.
|
|
8
|
+
|
|
9
|
+
This module provides:
|
|
10
|
+
- **ModelDispatchContext**: Dispatch context with time injection control
|
|
11
|
+
- **ModelDispatchRoute**: Routing rules that map topic patterns to dispatchers
|
|
12
|
+
- **ModelDispatchResult**: Results of dispatch operations with metrics
|
|
13
|
+
- **ModelDispatcherRegistration**: Dispatcher registration metadata
|
|
14
|
+
- **ModelDispatcherMetrics**: Per-dispatcher metrics
|
|
15
|
+
- **ModelDispatchMetrics**: Aggregate dispatch metrics
|
|
16
|
+
- **EnumDispatchStatus**: Status values for dispatch outcomes
|
|
17
|
+
|
|
18
|
+
Design Principles:
|
|
19
|
+
- **Pure Domain Models**: No I/O dependencies, no infrastructure concerns
|
|
20
|
+
- **Immutable**: All models are frozen (thread-safe after creation)
|
|
21
|
+
- **Typed**: Strong typing with validation constraints
|
|
22
|
+
- **Serializable**: Full JSON serialization support
|
|
23
|
+
|
|
24
|
+
Data Flow:
|
|
25
|
+
```
|
|
26
|
+
+------------------------------------------------------------------+
|
|
27
|
+
| Dispatch Engine Flow |
|
|
28
|
+
+------------------------------------------------------------------+
|
|
29
|
+
| |
|
|
30
|
+
| Incoming Message Route Matching Dispatcher Execution |
|
|
31
|
+
| | | | |
|
|
32
|
+
| | (topic, category) | | |
|
|
33
|
+
| |-------------------->| | |
|
|
34
|
+
| | | ModelDispatchRoute | |
|
|
35
|
+
| | |--------------------->| |
|
|
36
|
+
| | | | |
|
|
37
|
+
| | | | execute |
|
|
38
|
+
| | | |--------> |
|
|
39
|
+
| | | | |
|
|
40
|
+
| | | ModelDispatchResult | |
|
|
41
|
+
| |<--------------------|<---------------------| |
|
|
42
|
+
| |
|
|
43
|
+
+------------------------------------------------------------------+
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Usage:
|
|
47
|
+
>>> from omnibase_infra.models.dispatch import (
|
|
48
|
+
... ModelDispatchRoute,
|
|
49
|
+
... ModelDispatchResult,
|
|
50
|
+
... ModelDispatcherRegistration,
|
|
51
|
+
... EnumDispatchStatus,
|
|
52
|
+
... )
|
|
53
|
+
>>> from omnibase_infra.enums import EnumMessageCategory
|
|
54
|
+
>>> from omnibase_core.enums.enum_node_kind import EnumNodeKind
|
|
55
|
+
>>> from uuid import uuid4
|
|
56
|
+
>>> from datetime import datetime, UTC
|
|
57
|
+
>>>
|
|
58
|
+
>>> # Register a dispatcher
|
|
59
|
+
>>> dispatcher = ModelDispatcherRegistration(
|
|
60
|
+
... dispatcher_id="user-dispatcher",
|
|
61
|
+
... dispatcher_name="User Event Dispatcher",
|
|
62
|
+
... node_kind=EnumNodeKind.REDUCER,
|
|
63
|
+
... supported_categories=[EnumMessageCategory.EVENT],
|
|
64
|
+
... registered_at=datetime.now(UTC),
|
|
65
|
+
... )
|
|
66
|
+
>>>
|
|
67
|
+
>>> # Create a route
|
|
68
|
+
>>> route = ModelDispatchRoute(
|
|
69
|
+
... route_id="user-route",
|
|
70
|
+
... topic_pattern="*.user.events.*",
|
|
71
|
+
... message_category=EnumMessageCategory.EVENT,
|
|
72
|
+
... dispatcher_id="user-dispatcher",
|
|
73
|
+
... )
|
|
74
|
+
>>>
|
|
75
|
+
>>> # Check if route matches
|
|
76
|
+
>>> route.matches_topic("dev.user.events.v1")
|
|
77
|
+
True
|
|
78
|
+
>>>
|
|
79
|
+
>>> # Create a dispatch result
|
|
80
|
+
>>> # NOTE: Per ONEX guidelines, always include correlation_id (generate with uuid4() if not propagated)
|
|
81
|
+
>>> result = ModelDispatchResult(
|
|
82
|
+
... dispatch_id=uuid4(),
|
|
83
|
+
... status=EnumDispatchStatus.SUCCESS,
|
|
84
|
+
... topic="dev.user.events.v1",
|
|
85
|
+
... route_id="user-route",
|
|
86
|
+
... dispatcher_id="user-dispatcher",
|
|
87
|
+
... started_at=datetime.now(UTC),
|
|
88
|
+
... correlation_id=uuid4(), # Always generate if not propagating from incoming message
|
|
89
|
+
... )
|
|
90
|
+
|
|
91
|
+
See Also:
|
|
92
|
+
omnibase_infra.enums.EnumMessageCategory: Message category classification
|
|
93
|
+
omnibase_core.enums.EnumExecutionShape: Valid execution patterns
|
|
94
|
+
omnibase_core.models.events.ModelEventEnvelope: Event wrapper with routing info
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
from omnibase_infra.enums import EnumDispatchStatus, EnumTopicStandard
|
|
98
|
+
from omnibase_infra.models.dispatch.model_dispatch_context import ModelDispatchContext
|
|
99
|
+
from omnibase_infra.models.dispatch.model_dispatch_error import ModelDispatchError
|
|
100
|
+
from omnibase_infra.models.dispatch.model_dispatch_log_context import (
|
|
101
|
+
ModelDispatchLogContext,
|
|
102
|
+
)
|
|
103
|
+
from omnibase_infra.models.dispatch.model_dispatch_metadata import ModelDispatchMetadata
|
|
104
|
+
from omnibase_infra.models.dispatch.model_dispatch_metrics import ModelDispatchMetrics
|
|
105
|
+
from omnibase_infra.models.dispatch.model_dispatch_outcome import ModelDispatchOutcome
|
|
106
|
+
from omnibase_infra.models.dispatch.model_dispatch_outputs import ModelDispatchOutputs
|
|
107
|
+
from omnibase_infra.models.dispatch.model_dispatch_result import ModelDispatchResult
|
|
108
|
+
from omnibase_infra.models.dispatch.model_dispatch_route import ModelDispatchRoute
|
|
109
|
+
from omnibase_infra.models.dispatch.model_dispatcher_metrics import (
|
|
110
|
+
ModelDispatcherMetrics,
|
|
111
|
+
)
|
|
112
|
+
from omnibase_infra.models.dispatch.model_dispatcher_registration import (
|
|
113
|
+
ModelDispatcherRegistration,
|
|
114
|
+
)
|
|
115
|
+
from omnibase_infra.models.dispatch.model_parsed_topic import ModelParsedTopic
|
|
116
|
+
from omnibase_infra.models.dispatch.model_topic_parser import (
|
|
117
|
+
ModelTopicParser,
|
|
118
|
+
TypeCacheInfo,
|
|
119
|
+
clear_topic_parse_cache,
|
|
120
|
+
get_topic_parse_cache_info,
|
|
121
|
+
)
|
|
122
|
+
from omnibase_infra.models.dispatch.model_tracing_context import ModelTracingContext
|
|
123
|
+
|
|
124
|
+
__all__ = [
|
|
125
|
+
# Cache utilities
|
|
126
|
+
"TypeCacheInfo",
|
|
127
|
+
# Enums
|
|
128
|
+
"EnumDispatchStatus",
|
|
129
|
+
"EnumTopicStandard",
|
|
130
|
+
# Models
|
|
131
|
+
"ModelDispatchContext",
|
|
132
|
+
"ModelDispatchError",
|
|
133
|
+
"ModelDispatchLogContext",
|
|
134
|
+
"ModelDispatchMetadata",
|
|
135
|
+
"ModelDispatchMetrics",
|
|
136
|
+
"ModelDispatchOutcome",
|
|
137
|
+
"ModelDispatchOutputs",
|
|
138
|
+
"ModelDispatchResult",
|
|
139
|
+
"ModelDispatchRoute",
|
|
140
|
+
"ModelDispatcherMetrics",
|
|
141
|
+
"ModelDispatcherRegistration",
|
|
142
|
+
"ModelParsedTopic",
|
|
143
|
+
"ModelTopicParser",
|
|
144
|
+
"ModelTracingContext",
|
|
145
|
+
"clear_topic_parse_cache",
|
|
146
|
+
"get_topic_parse_cache_info",
|
|
147
|
+
]
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Dispatch Context Model for Time Injection Control.
|
|
5
|
+
|
|
6
|
+
This module provides the dispatch context model that enforces ONEX architecture
|
|
7
|
+
rules for time injection. In ONEX:
|
|
8
|
+
|
|
9
|
+
- **Reducers** and **Compute** nodes (pure/deterministic) must NEVER receive `now`
|
|
10
|
+
- **Orchestrators**, **Effects**, and **Runtime Hosts** CAN receive `now`
|
|
11
|
+
|
|
12
|
+
The ModelDispatchContext provides factory methods that enforce these rules at
|
|
13
|
+
dispatch time, preventing accidental time injection into reducers.
|
|
14
|
+
|
|
15
|
+
Design Pattern:
|
|
16
|
+
ModelDispatchContext is an immutable data model that carries dispatch metadata
|
|
17
|
+
through the runtime. It includes:
|
|
18
|
+
- Correlation tracking (correlation_id, trace_id)
|
|
19
|
+
- Time injection (now) - only for non-reducer node types
|
|
20
|
+
- Node kind classification (REDUCER, ORCHESTRATOR, EFFECT, COMPUTE)
|
|
21
|
+
- Optional metadata for extensibility
|
|
22
|
+
|
|
23
|
+
Factory methods enforce time injection rules at construction time:
|
|
24
|
+
- for_reducer() - Creates context WITHOUT time injection
|
|
25
|
+
- for_compute() - Creates context WITHOUT time injection
|
|
26
|
+
- for_orchestrator() - Creates context WITH time injection
|
|
27
|
+
- for_effect() - Creates context WITH time injection
|
|
28
|
+
- for_runtime_host() - Creates context WITH time injection
|
|
29
|
+
|
|
30
|
+
Thread Safety:
|
|
31
|
+
ModelDispatchContext is immutable (frozen=True) after creation,
|
|
32
|
+
making it thread-safe for concurrent read access.
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
>>> from datetime import datetime, UTC
|
|
36
|
+
>>> from uuid import uuid4
|
|
37
|
+
>>> from omnibase_infra.models.dispatch import ModelDispatchContext
|
|
38
|
+
>>>
|
|
39
|
+
>>> # Create context for a reducer (no time injection allowed)
|
|
40
|
+
>>> reducer_ctx = ModelDispatchContext.for_reducer(
|
|
41
|
+
... correlation_id=uuid4(),
|
|
42
|
+
... trace_id=uuid4(),
|
|
43
|
+
... )
|
|
44
|
+
>>> assert reducer_ctx.now is None
|
|
45
|
+
>>> assert not reducer_ctx.has_time_injection
|
|
46
|
+
>>>
|
|
47
|
+
>>> # Create context for an orchestrator (time injection allowed)
|
|
48
|
+
>>> orchestrator_ctx = ModelDispatchContext.for_orchestrator(
|
|
49
|
+
... correlation_id=uuid4(),
|
|
50
|
+
... now=datetime.now(UTC),
|
|
51
|
+
... )
|
|
52
|
+
>>> assert orchestrator_ctx.now is not None
|
|
53
|
+
>>> assert orchestrator_ctx.has_time_injection
|
|
54
|
+
|
|
55
|
+
Time Capture Semantics:
|
|
56
|
+
The ``now`` field represents the time when the dispatch context was created
|
|
57
|
+
(dispatch time), NOT when the handler begins execution. This is important
|
|
58
|
+
for understanding the timing model:
|
|
59
|
+
|
|
60
|
+
1. MessageDispatchEngine creates ModelDispatchContext with ``now=datetime.now(UTC)``
|
|
61
|
+
2. Context is passed to the dispatcher function
|
|
62
|
+
3. Dispatcher function begins execution (microseconds to milliseconds later)
|
|
63
|
+
|
|
64
|
+
For most applications, this timing difference is negligible. If your handler
|
|
65
|
+
requires sub-millisecond timing precision, capture ``datetime.now(UTC)`` at
|
|
66
|
+
the start of your handler function rather than relying on ``context.now``.
|
|
67
|
+
|
|
68
|
+
See Also:
|
|
69
|
+
omnibase_core.enums.EnumNodeKind: Node type classification
|
|
70
|
+
omnibase_infra.models.dispatch.ModelDispatcherRegistration: Dispatcher metadata
|
|
71
|
+
omnibase_infra.runtime.service_message_dispatch_engine: Uses this context for dispatch
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
from datetime import datetime
|
|
75
|
+
from typing import Literal
|
|
76
|
+
from uuid import UUID
|
|
77
|
+
|
|
78
|
+
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
79
|
+
|
|
80
|
+
from omnibase_core.enums import EnumNodeKind
|
|
81
|
+
from omnibase_infra.models.dispatch.model_dispatch_metadata import ModelDispatchMetadata
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class ModelDispatchContext(BaseModel):
|
|
85
|
+
"""
|
|
86
|
+
Dispatch context carrying correlation and time injection metadata.
|
|
87
|
+
|
|
88
|
+
Enforces ONEX architecture rules for time injection:
|
|
89
|
+
- Reducers must NEVER receive `now` (deterministic execution)
|
|
90
|
+
- Orchestrators and Effects CAN receive `now` (time-dependent decisions)
|
|
91
|
+
|
|
92
|
+
Use factory methods (for_reducer, for_compute, for_orchestrator, for_effect,
|
|
93
|
+
for_runtime_host) to ensure proper time injection rules are enforced at
|
|
94
|
+
construction time.
|
|
95
|
+
|
|
96
|
+
Attributes:
|
|
97
|
+
correlation_id: Unique identifier for request tracing across services.
|
|
98
|
+
trace_id: Optional trace identifier for distributed tracing systems.
|
|
99
|
+
now: Injected current time (None for reducers, required validation).
|
|
100
|
+
node_kind: The ONEX node type this context is for.
|
|
101
|
+
metadata: Optional additional metadata for extensibility.
|
|
102
|
+
|
|
103
|
+
Example:
|
|
104
|
+
>>> # Use factory methods for proper enforcement
|
|
105
|
+
>>> ctx = ModelDispatchContext.for_reducer(correlation_id=uuid4())
|
|
106
|
+
>>> ctx.validate_for_node_kind() # Returns True
|
|
107
|
+
>>>
|
|
108
|
+
>>> # Direct construction is allowed but requires careful use
|
|
109
|
+
>>> ctx = ModelDispatchContext(
|
|
110
|
+
... correlation_id=uuid4(),
|
|
111
|
+
... node_kind=EnumNodeKind.REDUCER,
|
|
112
|
+
... now=None, # Must be None for reducers
|
|
113
|
+
... )
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
model_config = ConfigDict(
|
|
117
|
+
frozen=True,
|
|
118
|
+
extra="forbid",
|
|
119
|
+
from_attributes=True,
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
# ---- Correlation Tracking ----
|
|
123
|
+
correlation_id: UUID = Field(
|
|
124
|
+
...,
|
|
125
|
+
description="Unique identifier for request tracing across services.",
|
|
126
|
+
)
|
|
127
|
+
trace_id: UUID | None = Field(
|
|
128
|
+
default=None,
|
|
129
|
+
description="Optional trace identifier for distributed tracing systems.",
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# ---- Time Injection ----
|
|
133
|
+
now: datetime | None = Field(
|
|
134
|
+
default=None,
|
|
135
|
+
description=(
|
|
136
|
+
"Injected current time for time-dependent operations. Represents dispatch "
|
|
137
|
+
"time (when context was created), NOT handler execution time. "
|
|
138
|
+
"Must be None for REDUCER and COMPUTE nodes to ensure deterministic execution."
|
|
139
|
+
),
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
# ---- Node Classification ----
|
|
143
|
+
node_kind: EnumNodeKind = Field(
|
|
144
|
+
...,
|
|
145
|
+
description="The ONEX node type this context is for.",
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
# ---- Optional Metadata ----
|
|
149
|
+
metadata: ModelDispatchMetadata | None = Field(
|
|
150
|
+
default=None,
|
|
151
|
+
description="Optional additional metadata for extensibility.",
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
def _is_invalid_time_injection(self) -> bool:
|
|
155
|
+
"""Check if this context has invalid time injection for deterministic nodes.
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
True if this is a deterministic node (REDUCER/COMPUTE) with time injection.
|
|
159
|
+
"""
|
|
160
|
+
return (
|
|
161
|
+
self.node_kind in (EnumNodeKind.REDUCER, EnumNodeKind.COMPUTE)
|
|
162
|
+
and self.now is not None
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
@model_validator(mode="after")
|
|
166
|
+
def _validate_deterministic_node_no_time(self) -> "ModelDispatchContext":
|
|
167
|
+
"""Validate that deterministic nodes do not receive time injection.
|
|
168
|
+
|
|
169
|
+
This validator enforces the ONEX architecture rule that REDUCER and
|
|
170
|
+
COMPUTE nodes must be deterministic and therefore cannot receive `now`.
|
|
171
|
+
|
|
172
|
+
Raises:
|
|
173
|
+
ValueError: If node_kind is REDUCER or COMPUTE and now is not None.
|
|
174
|
+
|
|
175
|
+
Returns:
|
|
176
|
+
Self if validation passes.
|
|
177
|
+
"""
|
|
178
|
+
if self._is_invalid_time_injection():
|
|
179
|
+
msg = (
|
|
180
|
+
f"{self.node_kind.value.upper()} nodes cannot receive time injection. "
|
|
181
|
+
f"{self.node_kind.value.capitalize()} nodes must be deterministic - "
|
|
182
|
+
f"use for_{self.node_kind.value.lower()}() factory method."
|
|
183
|
+
)
|
|
184
|
+
raise ValueError(msg)
|
|
185
|
+
return self
|
|
186
|
+
|
|
187
|
+
@property
|
|
188
|
+
def has_time_injection(self) -> bool:
|
|
189
|
+
"""Check if this context has time injection enabled.
|
|
190
|
+
|
|
191
|
+
Returns:
|
|
192
|
+
True if `now` is not None, False otherwise.
|
|
193
|
+
|
|
194
|
+
Example:
|
|
195
|
+
>>> ctx = ModelDispatchContext.for_reducer(correlation_id=uuid4())
|
|
196
|
+
>>> ctx.has_time_injection
|
|
197
|
+
False
|
|
198
|
+
>>> ctx = ModelDispatchContext.for_effect(
|
|
199
|
+
... correlation_id=uuid4(),
|
|
200
|
+
... now=datetime.now(UTC),
|
|
201
|
+
... )
|
|
202
|
+
>>> ctx.has_time_injection
|
|
203
|
+
True
|
|
204
|
+
"""
|
|
205
|
+
return self.now is not None
|
|
206
|
+
|
|
207
|
+
def validate_for_node_kind(self) -> Literal[True]:
|
|
208
|
+
"""Validate that the context is appropriate for its node kind.
|
|
209
|
+
|
|
210
|
+
This method provides explicit validation that can be called
|
|
211
|
+
at dispatch time to ensure time injection rules are enforced.
|
|
212
|
+
|
|
213
|
+
For REDUCER and COMPUTE nodes, this validates that `now` is None.
|
|
214
|
+
For other node types, this always returns True.
|
|
215
|
+
|
|
216
|
+
The return type `Literal[True]` signals that this method either
|
|
217
|
+
returns True or raises an exception - it never returns False.
|
|
218
|
+
|
|
219
|
+
Returns:
|
|
220
|
+
Literal[True]: Always returns True if validation passes.
|
|
221
|
+
|
|
222
|
+
Raises:
|
|
223
|
+
ValueError: If node_kind is REDUCER or COMPUTE and now is not None.
|
|
224
|
+
|
|
225
|
+
Example:
|
|
226
|
+
>>> ctx = ModelDispatchContext.for_reducer(correlation_id=uuid4())
|
|
227
|
+
>>> ctx.validate_for_node_kind()
|
|
228
|
+
True
|
|
229
|
+
>>> # Invalid context would raise ValueError
|
|
230
|
+
"""
|
|
231
|
+
if self._is_invalid_time_injection():
|
|
232
|
+
msg = (
|
|
233
|
+
f"Dispatch context validation failed: "
|
|
234
|
+
f"{self.node_kind.value.upper()} nodes cannot receive time injection "
|
|
235
|
+
f"(now={self.now}). {self.node_kind.value.capitalize()} nodes must be deterministic."
|
|
236
|
+
)
|
|
237
|
+
raise ValueError(msg)
|
|
238
|
+
return True
|
|
239
|
+
|
|
240
|
+
# ---- Factory Methods ----
|
|
241
|
+
|
|
242
|
+
@classmethod
|
|
243
|
+
def for_reducer(
|
|
244
|
+
cls,
|
|
245
|
+
correlation_id: UUID,
|
|
246
|
+
trace_id: UUID | None = None,
|
|
247
|
+
metadata: ModelDispatchMetadata | None = None,
|
|
248
|
+
) -> "ModelDispatchContext":
|
|
249
|
+
"""Create dispatch context for a REDUCER node.
|
|
250
|
+
|
|
251
|
+
Reducers are pure state aggregators that must be deterministic.
|
|
252
|
+
This factory method enforces that NO time injection is provided.
|
|
253
|
+
|
|
254
|
+
Args:
|
|
255
|
+
correlation_id: Unique identifier for request tracing.
|
|
256
|
+
trace_id: Optional trace identifier for distributed tracing.
|
|
257
|
+
metadata: Optional additional metadata for extensibility.
|
|
258
|
+
|
|
259
|
+
Returns:
|
|
260
|
+
ModelDispatchContext configured for REDUCER execution.
|
|
261
|
+
|
|
262
|
+
Example:
|
|
263
|
+
>>> ctx = ModelDispatchContext.for_reducer(
|
|
264
|
+
... correlation_id=uuid4(),
|
|
265
|
+
... trace_id=uuid4(),
|
|
266
|
+
... metadata=ModelDispatchMetadata(source_node="kafka"),
|
|
267
|
+
... )
|
|
268
|
+
>>> assert ctx.now is None
|
|
269
|
+
>>> assert ctx.node_kind == EnumNodeKind.REDUCER
|
|
270
|
+
"""
|
|
271
|
+
return cls(
|
|
272
|
+
correlation_id=correlation_id,
|
|
273
|
+
trace_id=trace_id,
|
|
274
|
+
now=None,
|
|
275
|
+
node_kind=EnumNodeKind.REDUCER,
|
|
276
|
+
metadata=metadata,
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
@classmethod
|
|
280
|
+
def for_orchestrator(
|
|
281
|
+
cls,
|
|
282
|
+
correlation_id: UUID,
|
|
283
|
+
now: datetime,
|
|
284
|
+
trace_id: UUID | None = None,
|
|
285
|
+
metadata: ModelDispatchMetadata | None = None,
|
|
286
|
+
) -> "ModelDispatchContext":
|
|
287
|
+
"""Create dispatch context for an ORCHESTRATOR node.
|
|
288
|
+
|
|
289
|
+
Orchestrators coordinate workflows and can make time-dependent
|
|
290
|
+
decisions. This factory method includes time injection.
|
|
291
|
+
|
|
292
|
+
Args:
|
|
293
|
+
correlation_id: Unique identifier for request tracing.
|
|
294
|
+
now: Current time for time-dependent decisions.
|
|
295
|
+
trace_id: Optional trace identifier for distributed tracing.
|
|
296
|
+
metadata: Optional additional metadata for extensibility.
|
|
297
|
+
|
|
298
|
+
Returns:
|
|
299
|
+
ModelDispatchContext configured for ORCHESTRATOR execution.
|
|
300
|
+
|
|
301
|
+
Example:
|
|
302
|
+
>>> from datetime import datetime, UTC
|
|
303
|
+
>>> ctx = ModelDispatchContext.for_orchestrator(
|
|
304
|
+
... correlation_id=uuid4(),
|
|
305
|
+
... now=datetime.now(UTC),
|
|
306
|
+
... )
|
|
307
|
+
>>> assert ctx.now is not None
|
|
308
|
+
>>> assert ctx.node_kind == EnumNodeKind.ORCHESTRATOR
|
|
309
|
+
"""
|
|
310
|
+
return cls(
|
|
311
|
+
correlation_id=correlation_id,
|
|
312
|
+
trace_id=trace_id,
|
|
313
|
+
now=now,
|
|
314
|
+
node_kind=EnumNodeKind.ORCHESTRATOR,
|
|
315
|
+
metadata=metadata,
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
@classmethod
|
|
319
|
+
def for_effect(
|
|
320
|
+
cls,
|
|
321
|
+
correlation_id: UUID,
|
|
322
|
+
now: datetime,
|
|
323
|
+
trace_id: UUID | None = None,
|
|
324
|
+
metadata: ModelDispatchMetadata | None = None,
|
|
325
|
+
) -> "ModelDispatchContext":
|
|
326
|
+
"""Create dispatch context for an EFFECT node.
|
|
327
|
+
|
|
328
|
+
Effects handle external I/O operations and can make time-dependent
|
|
329
|
+
decisions (e.g., TTL calculations, timeout handling).
|
|
330
|
+
This factory method includes time injection.
|
|
331
|
+
|
|
332
|
+
Args:
|
|
333
|
+
correlation_id: Unique identifier for request tracing.
|
|
334
|
+
now: Current time for time-dependent decisions.
|
|
335
|
+
trace_id: Optional trace identifier for distributed tracing.
|
|
336
|
+
metadata: Optional additional metadata for extensibility.
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
ModelDispatchContext configured for EFFECT execution.
|
|
340
|
+
|
|
341
|
+
Example:
|
|
342
|
+
>>> from datetime import datetime, UTC
|
|
343
|
+
>>> ctx = ModelDispatchContext.for_effect(
|
|
344
|
+
... correlation_id=uuid4(),
|
|
345
|
+
... now=datetime.now(UTC),
|
|
346
|
+
... metadata=ModelDispatchMetadata(target_node="database"),
|
|
347
|
+
... )
|
|
348
|
+
>>> assert ctx.now is not None
|
|
349
|
+
>>> assert ctx.node_kind == EnumNodeKind.EFFECT
|
|
350
|
+
"""
|
|
351
|
+
return cls(
|
|
352
|
+
correlation_id=correlation_id,
|
|
353
|
+
trace_id=trace_id,
|
|
354
|
+
now=now,
|
|
355
|
+
node_kind=EnumNodeKind.EFFECT,
|
|
356
|
+
metadata=metadata,
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
@classmethod
|
|
360
|
+
def for_compute(
|
|
361
|
+
cls,
|
|
362
|
+
correlation_id: UUID,
|
|
363
|
+
trace_id: UUID | None = None,
|
|
364
|
+
metadata: ModelDispatchMetadata | None = None,
|
|
365
|
+
) -> "ModelDispatchContext":
|
|
366
|
+
"""Create dispatch context for a COMPUTE node.
|
|
367
|
+
|
|
368
|
+
Compute nodes are pure transformations that must be deterministic.
|
|
369
|
+
Like reducers, this factory method enforces that NO time injection
|
|
370
|
+
is provided.
|
|
371
|
+
|
|
372
|
+
Args:
|
|
373
|
+
correlation_id: Unique identifier for request tracing.
|
|
374
|
+
trace_id: Optional trace identifier for distributed tracing.
|
|
375
|
+
metadata: Optional additional metadata for extensibility.
|
|
376
|
+
|
|
377
|
+
Returns:
|
|
378
|
+
ModelDispatchContext configured for COMPUTE execution.
|
|
379
|
+
|
|
380
|
+
Example:
|
|
381
|
+
>>> ctx = ModelDispatchContext.for_compute(
|
|
382
|
+
... correlation_id=uuid4(),
|
|
383
|
+
... trace_id=uuid4(),
|
|
384
|
+
... metadata=ModelDispatchMetadata(routing_decision="sha256"),
|
|
385
|
+
... )
|
|
386
|
+
>>> assert ctx.now is None
|
|
387
|
+
>>> assert ctx.node_kind == EnumNodeKind.COMPUTE
|
|
388
|
+
"""
|
|
389
|
+
return cls(
|
|
390
|
+
correlation_id=correlation_id,
|
|
391
|
+
trace_id=trace_id,
|
|
392
|
+
now=None,
|
|
393
|
+
node_kind=EnumNodeKind.COMPUTE,
|
|
394
|
+
metadata=metadata,
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
@classmethod
|
|
398
|
+
def for_runtime_host(
|
|
399
|
+
cls,
|
|
400
|
+
correlation_id: UUID,
|
|
401
|
+
now: datetime,
|
|
402
|
+
trace_id: UUID | None = None,
|
|
403
|
+
metadata: ModelDispatchMetadata | None = None,
|
|
404
|
+
) -> "ModelDispatchContext":
|
|
405
|
+
"""Create dispatch context for a RUNTIME_HOST node.
|
|
406
|
+
|
|
407
|
+
Runtime hosts are infrastructure components that require time injection
|
|
408
|
+
for operational decisions (e.g., health checks, monitoring, scheduling).
|
|
409
|
+
This factory method includes time injection.
|
|
410
|
+
|
|
411
|
+
Args:
|
|
412
|
+
correlation_id: Unique identifier for request tracing.
|
|
413
|
+
now: Current time for infrastructure operations.
|
|
414
|
+
trace_id: Optional trace identifier for distributed tracing.
|
|
415
|
+
metadata: Optional additional metadata for extensibility.
|
|
416
|
+
|
|
417
|
+
Returns:
|
|
418
|
+
ModelDispatchContext configured for RUNTIME_HOST execution.
|
|
419
|
+
|
|
420
|
+
Example:
|
|
421
|
+
>>> from datetime import datetime, UTC
|
|
422
|
+
>>> ctx = ModelDispatchContext.for_runtime_host(
|
|
423
|
+
... correlation_id=uuid4(),
|
|
424
|
+
... now=datetime.now(UTC),
|
|
425
|
+
... metadata=ModelDispatchMetadata(source_node="infra-hub-1"),
|
|
426
|
+
... )
|
|
427
|
+
>>> assert ctx.now is not None
|
|
428
|
+
>>> assert ctx.node_kind == EnumNodeKind.RUNTIME_HOST
|
|
429
|
+
"""
|
|
430
|
+
return cls(
|
|
431
|
+
correlation_id=correlation_id,
|
|
432
|
+
trace_id=trace_id,
|
|
433
|
+
now=now,
|
|
434
|
+
node_kind=EnumNodeKind.RUNTIME_HOST,
|
|
435
|
+
metadata=metadata,
|
|
436
|
+
)
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
__all__ = ["ModelDispatchContext"]
|