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,352 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Dispatcher Registration Model.
|
|
5
|
+
|
|
6
|
+
Represents metadata about a registered dispatcher in the dispatch engine.
|
|
7
|
+
Dispatchers are the execution units that process messages after routing.
|
|
8
|
+
|
|
9
|
+
Design Pattern:
|
|
10
|
+
ModelDispatcherRegistration is a pure data model that captures dispatcher metadata:
|
|
11
|
+
- Dispatcher identity (unique ID, human-readable name)
|
|
12
|
+
- Dispatcher capabilities (what message categories/types it can handle)
|
|
13
|
+
- Dispatcher configuration (timeout, concurrency limits)
|
|
14
|
+
- Health and status information
|
|
15
|
+
|
|
16
|
+
This model is used by the dispatch engine to:
|
|
17
|
+
1. Register dispatchers during startup
|
|
18
|
+
2. Validate that routes reference valid dispatchers
|
|
19
|
+
3. Track dispatcher health and availability
|
|
20
|
+
4. Configure dispatcher execution parameters
|
|
21
|
+
|
|
22
|
+
Thread Safety:
|
|
23
|
+
ModelDispatcherRegistration is immutable (frozen=True) after creation,
|
|
24
|
+
making it thread-safe for concurrent read access.
|
|
25
|
+
|
|
26
|
+
Example:
|
|
27
|
+
>>> from omnibase_infra.models.dispatch import ModelDispatcherRegistration
|
|
28
|
+
>>> from omnibase_infra.enums import EnumMessageCategory
|
|
29
|
+
>>> from omnibase_core.enums.enum_node_kind import EnumNodeKind
|
|
30
|
+
>>> from datetime import datetime, timezone
|
|
31
|
+
>>>
|
|
32
|
+
>>> # Register a dispatcher for user events
|
|
33
|
+
>>> dispatcher = ModelDispatcherRegistration(
|
|
34
|
+
... dispatcher_id="user-event-dispatcher",
|
|
35
|
+
... dispatcher_name="User Event Dispatcher",
|
|
36
|
+
... node_kind=EnumNodeKind.REDUCER,
|
|
37
|
+
... supported_categories=[EnumMessageCategory.EVENT],
|
|
38
|
+
... timeout_seconds=30,
|
|
39
|
+
... max_concurrent=10,
|
|
40
|
+
... registered_at=datetime(2025, 1, 15, 12, 0, 0, tzinfo=timezone.utc),
|
|
41
|
+
... )
|
|
42
|
+
|
|
43
|
+
See Also:
|
|
44
|
+
omnibase_infra.models.dispatch.ModelDispatchRoute: Uses dispatcher_id to reference dispatchers
|
|
45
|
+
omnibase_infra.models.dispatch.ModelDispatchResult: Reports dispatcher execution results
|
|
46
|
+
omnibase_core.enums.EnumNodeKind: Node type classification
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
from datetime import UTC, datetime
|
|
50
|
+
from uuid import UUID
|
|
51
|
+
|
|
52
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
53
|
+
|
|
54
|
+
from omnibase_core.enums import EnumNodeKind
|
|
55
|
+
from omnibase_infra.enums import EnumMessageCategory
|
|
56
|
+
from omnibase_infra.models.dispatch.model_dispatch_metadata import ModelDispatchMetadata
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class ModelDispatcherRegistration(BaseModel):
|
|
60
|
+
"""
|
|
61
|
+
Metadata about a registered dispatcher in the dispatch engine.
|
|
62
|
+
|
|
63
|
+
Captures all information needed to configure and manage a dispatcher,
|
|
64
|
+
including its capabilities, configuration, and health status.
|
|
65
|
+
|
|
66
|
+
Attributes:
|
|
67
|
+
dispatcher_id: Unique identifier for this dispatcher (referenced by routes).
|
|
68
|
+
dispatcher_name: Human-readable name for the dispatcher.
|
|
69
|
+
node_kind: The ONEX node kind this dispatcher represents.
|
|
70
|
+
node_id: Optional UUID of the node instance implementing this dispatcher.
|
|
71
|
+
supported_categories: Message categories this dispatcher can process.
|
|
72
|
+
supported_message_types: Specific message types this dispatcher accepts.
|
|
73
|
+
When empty, accepts all message types in supported categories.
|
|
74
|
+
timeout_seconds: Maximum execution time before timeout.
|
|
75
|
+
max_concurrent: Maximum concurrent executions allowed.
|
|
76
|
+
max_retries: Maximum retry attempts for failed executions.
|
|
77
|
+
enabled: Whether this dispatcher is currently accepting messages.
|
|
78
|
+
healthy: Whether this dispatcher is currently healthy.
|
|
79
|
+
last_health_check: Timestamp of the last health check.
|
|
80
|
+
registered_at: Timestamp when this dispatcher was registered.
|
|
81
|
+
version: Dispatcher version string for compatibility tracking.
|
|
82
|
+
description: Human-readable description of the dispatcher's purpose.
|
|
83
|
+
tags: Optional tags for categorization and filtering.
|
|
84
|
+
metadata: Optional additional metadata about the dispatcher.
|
|
85
|
+
|
|
86
|
+
Example:
|
|
87
|
+
>>> from datetime import datetime, timezone
|
|
88
|
+
>>> dispatcher = ModelDispatcherRegistration(
|
|
89
|
+
... dispatcher_id="order-processor",
|
|
90
|
+
... dispatcher_name="Order Processing Dispatcher",
|
|
91
|
+
... node_kind=EnumNodeKind.ORCHESTRATOR,
|
|
92
|
+
... supported_categories=[EnumMessageCategory.COMMAND],
|
|
93
|
+
... supported_message_types=["CreateOrderCommand", "CancelOrderCommand"],
|
|
94
|
+
... timeout_seconds=60,
|
|
95
|
+
... max_concurrent=5,
|
|
96
|
+
... description="Processes order commands and coordinates fulfillment",
|
|
97
|
+
... registered_at=datetime(2025, 1, 15, 12, 0, 0, tzinfo=timezone.utc),
|
|
98
|
+
... )
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
model_config = ConfigDict(
|
|
102
|
+
frozen=True,
|
|
103
|
+
extra="forbid",
|
|
104
|
+
from_attributes=True,
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# ---- Dispatcher Identity ----
|
|
108
|
+
dispatcher_id: str = Field(
|
|
109
|
+
...,
|
|
110
|
+
description="Unique identifier for this dispatcher (referenced by routes).",
|
|
111
|
+
min_length=1,
|
|
112
|
+
max_length=200,
|
|
113
|
+
)
|
|
114
|
+
dispatcher_name: str = Field(
|
|
115
|
+
...,
|
|
116
|
+
description="Human-readable name for the dispatcher.",
|
|
117
|
+
min_length=1,
|
|
118
|
+
max_length=200,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# ---- Node Information ----
|
|
122
|
+
node_kind: EnumNodeKind = Field(
|
|
123
|
+
...,
|
|
124
|
+
description="The ONEX node kind this dispatcher represents.",
|
|
125
|
+
)
|
|
126
|
+
node_id: UUID | None = Field(
|
|
127
|
+
default=None,
|
|
128
|
+
description="Optional UUID of the node instance implementing this dispatcher.",
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
# ---- Capabilities ----
|
|
132
|
+
supported_categories: list[EnumMessageCategory] = Field(
|
|
133
|
+
...,
|
|
134
|
+
description="Message categories this dispatcher can process.",
|
|
135
|
+
min_length=1,
|
|
136
|
+
)
|
|
137
|
+
supported_message_types: list[str] = Field(
|
|
138
|
+
default_factory=list,
|
|
139
|
+
description=(
|
|
140
|
+
"Specific message types this dispatcher accepts. "
|
|
141
|
+
"When empty, accepts all message types in supported categories."
|
|
142
|
+
),
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
# ---- Execution Configuration ----
|
|
146
|
+
timeout_seconds: int = Field(
|
|
147
|
+
default=30,
|
|
148
|
+
description="Maximum execution time before timeout.",
|
|
149
|
+
ge=1,
|
|
150
|
+
le=3600,
|
|
151
|
+
)
|
|
152
|
+
max_concurrent: int = Field(
|
|
153
|
+
default=10,
|
|
154
|
+
description="Maximum concurrent executions allowed.",
|
|
155
|
+
ge=1,
|
|
156
|
+
le=1000,
|
|
157
|
+
)
|
|
158
|
+
max_retries: int = Field(
|
|
159
|
+
default=3,
|
|
160
|
+
description="Maximum retry attempts for failed executions.",
|
|
161
|
+
ge=0,
|
|
162
|
+
le=10,
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
# ---- Status ----
|
|
166
|
+
enabled: bool = Field(
|
|
167
|
+
default=True,
|
|
168
|
+
description="Whether this dispatcher is currently accepting messages.",
|
|
169
|
+
)
|
|
170
|
+
healthy: bool = Field(
|
|
171
|
+
default=True,
|
|
172
|
+
description="Whether this dispatcher is currently healthy.",
|
|
173
|
+
)
|
|
174
|
+
last_health_check: datetime | None = Field(
|
|
175
|
+
default=None,
|
|
176
|
+
description="Timestamp of the last health check (UTC).",
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
# ---- Registration Metadata ----
|
|
180
|
+
# Timestamps - MUST be explicitly injected (no default_factory for testability)
|
|
181
|
+
registered_at: datetime = Field(
|
|
182
|
+
...,
|
|
183
|
+
description="Timestamp when this dispatcher was registered (UTC, must be explicitly provided).",
|
|
184
|
+
)
|
|
185
|
+
version: str | None = Field(
|
|
186
|
+
default=None,
|
|
187
|
+
description="Dispatcher version string for compatibility tracking.",
|
|
188
|
+
max_length=50,
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
# ---- Documentation ----
|
|
192
|
+
description: str | None = Field(
|
|
193
|
+
default=None,
|
|
194
|
+
description="Human-readable description of the dispatcher's purpose.",
|
|
195
|
+
max_length=1000,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
# ---- Optional Metadata ----
|
|
199
|
+
tags: list[str] | None = Field(
|
|
200
|
+
default=None,
|
|
201
|
+
description="Optional tags for categorization and filtering.",
|
|
202
|
+
)
|
|
203
|
+
metadata: ModelDispatchMetadata | None = Field(
|
|
204
|
+
default=None,
|
|
205
|
+
description="Optional additional metadata about the dispatcher.",
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
def supports_category(self, category: EnumMessageCategory) -> bool:
|
|
209
|
+
"""
|
|
210
|
+
Check if this dispatcher supports the given message category.
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
category: The message category to check
|
|
214
|
+
|
|
215
|
+
Returns:
|
|
216
|
+
True if the dispatcher supports this category, False otherwise
|
|
217
|
+
|
|
218
|
+
Example:
|
|
219
|
+
>>> from datetime import datetime, timezone
|
|
220
|
+
>>> dispatcher = ModelDispatcherRegistration(
|
|
221
|
+
... dispatcher_id="test",
|
|
222
|
+
... dispatcher_name="Test Dispatcher",
|
|
223
|
+
... node_kind=EnumNodeKind.REDUCER,
|
|
224
|
+
... supported_categories=[EnumMessageCategory.EVENT],
|
|
225
|
+
... registered_at=datetime(2025, 1, 15, 12, 0, 0, tzinfo=timezone.utc),
|
|
226
|
+
... )
|
|
227
|
+
>>> dispatcher.supports_category(EnumMessageCategory.EVENT)
|
|
228
|
+
True
|
|
229
|
+
>>> dispatcher.supports_category(EnumMessageCategory.COMMAND)
|
|
230
|
+
False
|
|
231
|
+
"""
|
|
232
|
+
return category in self.supported_categories
|
|
233
|
+
|
|
234
|
+
def supports_message_type(self, message_type: str) -> bool:
|
|
235
|
+
"""
|
|
236
|
+
Check if this dispatcher supports the given message type.
|
|
237
|
+
|
|
238
|
+
If supported_message_types is empty, accepts all message types.
|
|
239
|
+
|
|
240
|
+
Args:
|
|
241
|
+
message_type: The message type to check
|
|
242
|
+
|
|
243
|
+
Returns:
|
|
244
|
+
True if the dispatcher supports this message type, False otherwise
|
|
245
|
+
|
|
246
|
+
Example:
|
|
247
|
+
>>> from datetime import datetime, timezone
|
|
248
|
+
>>> dispatcher = ModelDispatcherRegistration(
|
|
249
|
+
... dispatcher_id="test",
|
|
250
|
+
... dispatcher_name="Test Dispatcher",
|
|
251
|
+
... node_kind=EnumNodeKind.REDUCER,
|
|
252
|
+
... supported_categories=[EnumMessageCategory.EVENT],
|
|
253
|
+
... supported_message_types=["UserCreated", "UserUpdated"],
|
|
254
|
+
... registered_at=datetime(2025, 1, 15, 12, 0, 0, tzinfo=timezone.utc),
|
|
255
|
+
... )
|
|
256
|
+
>>> dispatcher.supports_message_type("UserCreated")
|
|
257
|
+
True
|
|
258
|
+
>>> dispatcher.supports_message_type("OrderCreated")
|
|
259
|
+
False
|
|
260
|
+
"""
|
|
261
|
+
if not self.supported_message_types:
|
|
262
|
+
# Empty list means all message types are supported
|
|
263
|
+
return True
|
|
264
|
+
return message_type in self.supported_message_types
|
|
265
|
+
|
|
266
|
+
def can_accept_message(
|
|
267
|
+
self,
|
|
268
|
+
category: EnumMessageCategory,
|
|
269
|
+
message_type: str | None = None,
|
|
270
|
+
) -> bool:
|
|
271
|
+
"""
|
|
272
|
+
Check if this dispatcher can accept a message with the given category and type.
|
|
273
|
+
|
|
274
|
+
Args:
|
|
275
|
+
category: The message category
|
|
276
|
+
message_type: Optional message type
|
|
277
|
+
|
|
278
|
+
Returns:
|
|
279
|
+
True if the dispatcher can accept this message, False otherwise
|
|
280
|
+
|
|
281
|
+
Example:
|
|
282
|
+
>>> from datetime import datetime, timezone
|
|
283
|
+
>>> dispatcher = ModelDispatcherRegistration(
|
|
284
|
+
... dispatcher_id="test",
|
|
285
|
+
... dispatcher_name="Test Dispatcher",
|
|
286
|
+
... node_kind=EnumNodeKind.REDUCER,
|
|
287
|
+
... supported_categories=[EnumMessageCategory.EVENT],
|
|
288
|
+
... supported_message_types=["UserCreated"],
|
|
289
|
+
... registered_at=datetime(2025, 1, 15, 12, 0, 0, tzinfo=timezone.utc),
|
|
290
|
+
... )
|
|
291
|
+
>>> dispatcher.can_accept_message(EnumMessageCategory.EVENT, "UserCreated")
|
|
292
|
+
True
|
|
293
|
+
>>> dispatcher.can_accept_message(EnumMessageCategory.EVENT, "OrderCreated")
|
|
294
|
+
False
|
|
295
|
+
"""
|
|
296
|
+
if not self.enabled:
|
|
297
|
+
return False
|
|
298
|
+
if not self.healthy:
|
|
299
|
+
return False
|
|
300
|
+
if not self.supports_category(category):
|
|
301
|
+
return False
|
|
302
|
+
if message_type is not None and not self.supports_message_type(message_type):
|
|
303
|
+
return False
|
|
304
|
+
return True
|
|
305
|
+
|
|
306
|
+
def is_available(self) -> bool:
|
|
307
|
+
"""
|
|
308
|
+
Check if this dispatcher is available to accept messages.
|
|
309
|
+
|
|
310
|
+
A dispatcher is available if it is both enabled and healthy.
|
|
311
|
+
|
|
312
|
+
Returns:
|
|
313
|
+
True if the dispatcher is available, False otherwise
|
|
314
|
+
"""
|
|
315
|
+
return self.enabled and self.healthy
|
|
316
|
+
|
|
317
|
+
def with_health_status(
|
|
318
|
+
self,
|
|
319
|
+
healthy: bool,
|
|
320
|
+
check_time: datetime | None = None,
|
|
321
|
+
) -> "ModelDispatcherRegistration":
|
|
322
|
+
"""
|
|
323
|
+
Create a new registration with updated health status.
|
|
324
|
+
|
|
325
|
+
Args:
|
|
326
|
+
healthy: The new health status
|
|
327
|
+
check_time: Optional timestamp for the health check (defaults to now)
|
|
328
|
+
|
|
329
|
+
Returns:
|
|
330
|
+
New ModelDispatcherRegistration with updated health status
|
|
331
|
+
"""
|
|
332
|
+
return self.model_copy(
|
|
333
|
+
update={
|
|
334
|
+
"healthy": healthy,
|
|
335
|
+
"last_health_check": check_time or datetime.now(UTC),
|
|
336
|
+
}
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
def with_enabled(self, enabled: bool) -> "ModelDispatcherRegistration":
|
|
340
|
+
"""
|
|
341
|
+
Create a new registration with updated enabled status.
|
|
342
|
+
|
|
343
|
+
Args:
|
|
344
|
+
enabled: The new enabled status
|
|
345
|
+
|
|
346
|
+
Returns:
|
|
347
|
+
New ModelDispatcherRegistration with updated enabled status
|
|
348
|
+
"""
|
|
349
|
+
return self.model_copy(update={"enabled": enabled})
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
__all__ = ["ModelDispatcherRegistration"]
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Parsed Topic Model.
|
|
5
|
+
|
|
6
|
+
Provides structured representation of parsed topic information for
|
|
7
|
+
deterministic routing in the ONEX message dispatch engine.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
from omnibase_core.enums import EnumTopicType
|
|
13
|
+
from omnibase_infra.enums import EnumMessageCategory, EnumTopicStandard
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ModelParsedTopic(BaseModel):
|
|
17
|
+
"""
|
|
18
|
+
Structured result of parsing a topic string.
|
|
19
|
+
|
|
20
|
+
Contains all extracted components from a topic name along with
|
|
21
|
+
validation status and error information. This model enables
|
|
22
|
+
deterministic routing by providing consistent access to topic
|
|
23
|
+
metadata regardless of the original topic format.
|
|
24
|
+
|
|
25
|
+
Attributes:
|
|
26
|
+
raw_topic: The original topic string that was parsed.
|
|
27
|
+
standard: The detected topic naming standard.
|
|
28
|
+
domain: The domain extracted from the topic (e.g., 'registration').
|
|
29
|
+
category: The message category (EVENT, COMMAND, INTENT) if detected.
|
|
30
|
+
topic_type: The topic type (events, commands, intents, snapshots) if detected.
|
|
31
|
+
environment: The environment prefix (e.g., 'dev', 'prod') if present.
|
|
32
|
+
version: The version suffix (e.g., 'v1', 'v2') if present.
|
|
33
|
+
is_valid: Whether the topic successfully parsed. For UNKNOWN-standard topics,
|
|
34
|
+
is_valid=True indicates a message category could be extracted (sufficient
|
|
35
|
+
for routing), even if the topic doesn't match a known standard exactly.
|
|
36
|
+
validation_error: Error message if parsing failed.
|
|
37
|
+
|
|
38
|
+
Example:
|
|
39
|
+
>>> parsed = ModelParsedTopic(
|
|
40
|
+
... raw_topic="onex.registration.events",
|
|
41
|
+
... standard=EnumTopicStandard.ONEX_KAFKA,
|
|
42
|
+
... domain="registration",
|
|
43
|
+
... category=EnumMessageCategory.EVENT,
|
|
44
|
+
... topic_type=EnumTopicType.EVENTS,
|
|
45
|
+
... is_valid=True,
|
|
46
|
+
... )
|
|
47
|
+
>>> parsed.is_valid
|
|
48
|
+
True
|
|
49
|
+
>>> parsed.domain
|
|
50
|
+
'registration'
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
model_config = ConfigDict(
|
|
54
|
+
frozen=True,
|
|
55
|
+
extra="forbid",
|
|
56
|
+
from_attributes=True,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
# ---- Source ----
|
|
60
|
+
raw_topic: str = Field(
|
|
61
|
+
...,
|
|
62
|
+
description="The original topic string that was parsed.",
|
|
63
|
+
min_length=1,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# ---- Detected Standard ----
|
|
67
|
+
standard: EnumTopicStandard = Field(
|
|
68
|
+
...,
|
|
69
|
+
description="The detected topic naming standard.",
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
# ---- Extracted Components ----
|
|
73
|
+
domain: str | None = Field(
|
|
74
|
+
default=None,
|
|
75
|
+
description="The domain extracted from the topic (e.g., 'registration').",
|
|
76
|
+
)
|
|
77
|
+
category: EnumMessageCategory | None = Field(
|
|
78
|
+
default=None,
|
|
79
|
+
description="The message category (EVENT, COMMAND, INTENT) if detected.",
|
|
80
|
+
)
|
|
81
|
+
topic_type: EnumTopicType | None = Field(
|
|
82
|
+
default=None,
|
|
83
|
+
description="The topic type (events, commands, intents, snapshots) if detected.",
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
# ---- Environment-Aware Components ----
|
|
87
|
+
environment: str | None = Field(
|
|
88
|
+
default=None,
|
|
89
|
+
description="The environment prefix (e.g., 'dev', 'prod') if present.",
|
|
90
|
+
)
|
|
91
|
+
version: str | None = Field(
|
|
92
|
+
default=None,
|
|
93
|
+
description="The version suffix (e.g., 'v1', 'v2') if present.",
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# ---- Validation Status ----
|
|
97
|
+
is_valid: bool = Field(
|
|
98
|
+
default=False,
|
|
99
|
+
description=(
|
|
100
|
+
"Whether the topic successfully parsed according to its standard. "
|
|
101
|
+
"For UNKNOWN-standard topics, is_valid=True indicates that a message "
|
|
102
|
+
"category could be extracted (enabling routing), even though the topic "
|
|
103
|
+
"does not match a known standard exactly. Use is_routable() to check "
|
|
104
|
+
"if the topic has sufficient information for dispatch routing."
|
|
105
|
+
),
|
|
106
|
+
)
|
|
107
|
+
validation_error: str | None = Field(
|
|
108
|
+
default=None,
|
|
109
|
+
description="Error message if parsing failed.",
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
def is_routable(self) -> bool:
|
|
113
|
+
"""
|
|
114
|
+
Check if this parsed topic has sufficient information for routing.
|
|
115
|
+
|
|
116
|
+
A topic is routable if it has a valid category, which enables
|
|
117
|
+
deterministic routing to the appropriate dispatcher type.
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
True if the topic can be used for routing, False otherwise
|
|
121
|
+
|
|
122
|
+
Example:
|
|
123
|
+
>>> parsed = ModelParsedTopic(
|
|
124
|
+
... raw_topic="onex.registration.events",
|
|
125
|
+
... standard=EnumTopicStandard.ONEX_KAFKA,
|
|
126
|
+
... category=EnumMessageCategory.EVENT,
|
|
127
|
+
... is_valid=True,
|
|
128
|
+
... )
|
|
129
|
+
>>> parsed.is_routable()
|
|
130
|
+
True
|
|
131
|
+
"""
|
|
132
|
+
return self.is_valid and self.category is not None
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
__all__ = ["ModelParsedTopic"]
|