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,349 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Consul initialization operations mixin.
|
|
4
|
+
|
|
5
|
+
This mixin provides initialization and setup helper methods for HandlerConsul,
|
|
6
|
+
extracted to reduce class complexity and improve maintainability.
|
|
7
|
+
|
|
8
|
+
Provides:
|
|
9
|
+
- Configuration validation and parsing
|
|
10
|
+
- Client setup and connection verification
|
|
11
|
+
- Thread pool and circuit breaker initialization
|
|
12
|
+
- Error handling helpers for initialization
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import logging
|
|
18
|
+
from typing import TYPE_CHECKING, Protocol
|
|
19
|
+
from uuid import UUID
|
|
20
|
+
|
|
21
|
+
import consul
|
|
22
|
+
from pydantic import SecretStr, ValidationError
|
|
23
|
+
|
|
24
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
25
|
+
from omnibase_infra.errors import (
|
|
26
|
+
InfraConnectionError,
|
|
27
|
+
ModelInfraErrorContext,
|
|
28
|
+
ProtocolConfigurationError,
|
|
29
|
+
RuntimeHostError,
|
|
30
|
+
)
|
|
31
|
+
from omnibase_infra.handlers.models.consul import ModelConsulHandlerConfig
|
|
32
|
+
|
|
33
|
+
if TYPE_CHECKING:
|
|
34
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
35
|
+
|
|
36
|
+
logger = logging.getLogger(__name__)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class ProtocolConsulInitDependencies(Protocol):
|
|
40
|
+
"""Protocol defining required dependencies for initialization operations.
|
|
41
|
+
|
|
42
|
+
HandlerConsul must provide these attributes for the mixin to work.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
_executor: ThreadPoolExecutor | None
|
|
46
|
+
_max_workers: int
|
|
47
|
+
_max_queue_size: int
|
|
48
|
+
_circuit_breaker_initialized: bool
|
|
49
|
+
|
|
50
|
+
def _init_circuit_breaker(
|
|
51
|
+
self,
|
|
52
|
+
threshold: int,
|
|
53
|
+
reset_timeout: float,
|
|
54
|
+
service_name: str,
|
|
55
|
+
transport_type: EnumInfraTransportType,
|
|
56
|
+
) -> None:
|
|
57
|
+
"""Initialize circuit breaker."""
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class MixinConsulInitialization:
|
|
62
|
+
"""Mixin providing Consul initialization helper methods.
|
|
63
|
+
|
|
64
|
+
This mixin extracts initialization operations from HandlerConsul to reduce
|
|
65
|
+
class complexity while maintaining full functionality.
|
|
66
|
+
|
|
67
|
+
Required Dependencies (from host class):
|
|
68
|
+
- _executor: ThreadPoolExecutor instance
|
|
69
|
+
- _max_workers: Max worker count
|
|
70
|
+
- _max_queue_size: Max queue size
|
|
71
|
+
- _circuit_breaker_initialized: Circuit breaker init flag
|
|
72
|
+
- _init_circuit_breaker: Circuit breaker initialization method
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
# Instance attribute declarations for type checking (must match handler)
|
|
76
|
+
_executor: ThreadPoolExecutor | None
|
|
77
|
+
_max_workers: int
|
|
78
|
+
_max_queue_size: int
|
|
79
|
+
_circuit_breaker_initialized: bool
|
|
80
|
+
|
|
81
|
+
# Methods from other mixins that will be available at runtime
|
|
82
|
+
def _init_circuit_breaker(
|
|
83
|
+
self,
|
|
84
|
+
threshold: int,
|
|
85
|
+
reset_timeout: float,
|
|
86
|
+
service_name: str,
|
|
87
|
+
transport_type: EnumInfraTransportType,
|
|
88
|
+
) -> None:
|
|
89
|
+
"""Initialize circuit breaker - provided by MixinAsyncCircuitBreaker."""
|
|
90
|
+
raise NotImplementedError("Must be provided by implementing class")
|
|
91
|
+
|
|
92
|
+
def _validate_consul_config(
|
|
93
|
+
self,
|
|
94
|
+
config: dict[str, object],
|
|
95
|
+
correlation_id: UUID,
|
|
96
|
+
) -> ModelConsulHandlerConfig:
|
|
97
|
+
"""Validate and parse Consul configuration.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
config: Raw configuration dictionary.
|
|
101
|
+
correlation_id: Correlation ID for error context.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
Validated ModelConsulHandlerConfig.
|
|
105
|
+
|
|
106
|
+
Raises:
|
|
107
|
+
ProtocolConfigurationError: If validation fails.
|
|
108
|
+
RuntimeHostError: If parsing fails unexpectedly.
|
|
109
|
+
"""
|
|
110
|
+
try:
|
|
111
|
+
# Handle SecretStr token conversion
|
|
112
|
+
token_raw = config.get("token")
|
|
113
|
+
if isinstance(token_raw, str):
|
|
114
|
+
config = dict(config) # Make mutable copy
|
|
115
|
+
config["token"] = SecretStr(token_raw)
|
|
116
|
+
|
|
117
|
+
return ModelConsulHandlerConfig.model_validate(config)
|
|
118
|
+
except ValidationError as e:
|
|
119
|
+
ctx = ModelInfraErrorContext(
|
|
120
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
121
|
+
operation="initialize",
|
|
122
|
+
target_name="consul_handler",
|
|
123
|
+
correlation_id=correlation_id,
|
|
124
|
+
)
|
|
125
|
+
sanitized_fields = [err.get("loc", ("unknown",))[-1] for err in e.errors()]
|
|
126
|
+
raise ProtocolConfigurationError(
|
|
127
|
+
f"Invalid Consul configuration - validation failed for fields: {sanitized_fields}",
|
|
128
|
+
context=ctx,
|
|
129
|
+
) from e
|
|
130
|
+
except Exception as e:
|
|
131
|
+
ctx = ModelInfraErrorContext(
|
|
132
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
133
|
+
operation="initialize",
|
|
134
|
+
target_name="consul_handler",
|
|
135
|
+
correlation_id=correlation_id,
|
|
136
|
+
)
|
|
137
|
+
raise RuntimeHostError(
|
|
138
|
+
f"Configuration parsing failed: {type(e).__name__}",
|
|
139
|
+
context=ctx,
|
|
140
|
+
) from e
|
|
141
|
+
|
|
142
|
+
def _setup_consul_client(
|
|
143
|
+
self,
|
|
144
|
+
consul_config: ModelConsulHandlerConfig,
|
|
145
|
+
) -> consul.Consul:
|
|
146
|
+
"""Create and configure the Consul client.
|
|
147
|
+
|
|
148
|
+
Args:
|
|
149
|
+
consul_config: Validated Consul configuration.
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
Configured consul.Consul client instance.
|
|
153
|
+
"""
|
|
154
|
+
token_value: str | None = None
|
|
155
|
+
if consul_config.token is not None:
|
|
156
|
+
token_value = consul_config.token.get_secret_value()
|
|
157
|
+
|
|
158
|
+
return consul.Consul(
|
|
159
|
+
host=consul_config.host,
|
|
160
|
+
port=consul_config.port,
|
|
161
|
+
scheme=consul_config.scheme,
|
|
162
|
+
token=token_value,
|
|
163
|
+
dc=consul_config.datacenter,
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
def _verify_consul_connection(
|
|
167
|
+
self,
|
|
168
|
+
client: consul.Consul,
|
|
169
|
+
correlation_id: UUID,
|
|
170
|
+
) -> None:
|
|
171
|
+
"""Verify connectivity to Consul by checking leader status.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
client: The Consul client to verify.
|
|
175
|
+
correlation_id: Correlation ID for error context.
|
|
176
|
+
|
|
177
|
+
Raises:
|
|
178
|
+
InfraConnectionError: If verification fails.
|
|
179
|
+
"""
|
|
180
|
+
try:
|
|
181
|
+
leader = client.status.leader()
|
|
182
|
+
if not leader:
|
|
183
|
+
ctx = ModelInfraErrorContext(
|
|
184
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
185
|
+
operation="initialize",
|
|
186
|
+
target_name="consul_handler",
|
|
187
|
+
correlation_id=correlation_id,
|
|
188
|
+
)
|
|
189
|
+
raise InfraConnectionError(
|
|
190
|
+
"Consul leader check failed: expected a leader, got empty response",
|
|
191
|
+
context=ctx,
|
|
192
|
+
)
|
|
193
|
+
except consul.ConsulException as e:
|
|
194
|
+
ctx = ModelInfraErrorContext(
|
|
195
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
196
|
+
operation="initialize",
|
|
197
|
+
target_name="consul_handler",
|
|
198
|
+
correlation_id=correlation_id,
|
|
199
|
+
)
|
|
200
|
+
raise InfraConnectionError(
|
|
201
|
+
"Consul connectivity verification failed",
|
|
202
|
+
context=ctx,
|
|
203
|
+
) from e
|
|
204
|
+
|
|
205
|
+
def _setup_thread_pool(
|
|
206
|
+
self,
|
|
207
|
+
consul_config: ModelConsulHandlerConfig,
|
|
208
|
+
) -> None:
|
|
209
|
+
"""Set up the thread pool executor for async operations.
|
|
210
|
+
|
|
211
|
+
Args:
|
|
212
|
+
consul_config: Validated Consul configuration.
|
|
213
|
+
"""
|
|
214
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
215
|
+
|
|
216
|
+
self._max_workers = consul_config.max_concurrent_operations
|
|
217
|
+
self._executor = ThreadPoolExecutor(
|
|
218
|
+
max_workers=self._max_workers,
|
|
219
|
+
thread_name_prefix="consul_handler_",
|
|
220
|
+
)
|
|
221
|
+
self._max_queue_size = (
|
|
222
|
+
self._max_workers * consul_config.max_queue_size_multiplier
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
def _setup_circuit_breaker(
|
|
226
|
+
self,
|
|
227
|
+
consul_config: ModelConsulHandlerConfig,
|
|
228
|
+
) -> None:
|
|
229
|
+
"""Initialize circuit breaker if enabled.
|
|
230
|
+
|
|
231
|
+
Args:
|
|
232
|
+
consul_config: Validated Consul configuration.
|
|
233
|
+
"""
|
|
234
|
+
if consul_config.circuit_breaker_enabled:
|
|
235
|
+
self._init_circuit_breaker(
|
|
236
|
+
threshold=consul_config.circuit_breaker_failure_threshold,
|
|
237
|
+
reset_timeout=consul_config.circuit_breaker_reset_timeout_seconds,
|
|
238
|
+
service_name=f"consul.{consul_config.datacenter or 'default'}",
|
|
239
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
240
|
+
)
|
|
241
|
+
self._circuit_breaker_initialized = True
|
|
242
|
+
|
|
243
|
+
def _log_initialization_success(
|
|
244
|
+
self,
|
|
245
|
+
config: ModelConsulHandlerConfig,
|
|
246
|
+
correlation_id: UUID,
|
|
247
|
+
) -> None:
|
|
248
|
+
"""Log successful initialization with handler details.
|
|
249
|
+
|
|
250
|
+
Args:
|
|
251
|
+
config: The validated configuration.
|
|
252
|
+
correlation_id: Correlation ID for logging.
|
|
253
|
+
"""
|
|
254
|
+
logger.info(
|
|
255
|
+
"%s initialized successfully",
|
|
256
|
+
self.__class__.__name__,
|
|
257
|
+
extra={
|
|
258
|
+
"handler": self.__class__.__name__,
|
|
259
|
+
"host": config.host,
|
|
260
|
+
"port": config.port,
|
|
261
|
+
"scheme": config.scheme,
|
|
262
|
+
"datacenter": config.datacenter,
|
|
263
|
+
"timeout_seconds": config.timeout_seconds,
|
|
264
|
+
"thread_pool_max_workers": self._max_workers,
|
|
265
|
+
"thread_pool_max_queue_size": self._max_queue_size,
|
|
266
|
+
"circuit_breaker_enabled": self._circuit_breaker_initialized,
|
|
267
|
+
"correlation_id": str(correlation_id),
|
|
268
|
+
},
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
def _raise_auth_error(
|
|
272
|
+
self,
|
|
273
|
+
correlation_id: UUID,
|
|
274
|
+
original_error: Exception,
|
|
275
|
+
) -> None:
|
|
276
|
+
"""Raise InfraAuthenticationError with context.
|
|
277
|
+
|
|
278
|
+
Args:
|
|
279
|
+
correlation_id: Correlation ID for error context.
|
|
280
|
+
original_error: The original exception for chaining.
|
|
281
|
+
|
|
282
|
+
Raises:
|
|
283
|
+
InfraAuthenticationError: Always raises this error.
|
|
284
|
+
"""
|
|
285
|
+
from omnibase_infra.errors import InfraAuthenticationError
|
|
286
|
+
|
|
287
|
+
ctx = ModelInfraErrorContext(
|
|
288
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
289
|
+
operation="initialize",
|
|
290
|
+
target_name="consul_handler",
|
|
291
|
+
correlation_id=correlation_id,
|
|
292
|
+
)
|
|
293
|
+
raise InfraAuthenticationError(
|
|
294
|
+
"Consul ACL permission denied - check token validity and permissions",
|
|
295
|
+
context=ctx,
|
|
296
|
+
) from original_error
|
|
297
|
+
|
|
298
|
+
def _raise_connection_error(
|
|
299
|
+
self,
|
|
300
|
+
correlation_id: UUID,
|
|
301
|
+
original_error: Exception,
|
|
302
|
+
) -> None:
|
|
303
|
+
"""Raise InfraConnectionError with context.
|
|
304
|
+
|
|
305
|
+
Args:
|
|
306
|
+
correlation_id: Correlation ID for error context.
|
|
307
|
+
original_error: The original exception for chaining.
|
|
308
|
+
|
|
309
|
+
Raises:
|
|
310
|
+
InfraConnectionError: Always raises this error.
|
|
311
|
+
"""
|
|
312
|
+
ctx = ModelInfraErrorContext(
|
|
313
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
314
|
+
operation="initialize",
|
|
315
|
+
target_name="consul_handler",
|
|
316
|
+
correlation_id=correlation_id,
|
|
317
|
+
)
|
|
318
|
+
raise InfraConnectionError(
|
|
319
|
+
f"Consul connection failed: {type(original_error).__name__}",
|
|
320
|
+
context=ctx,
|
|
321
|
+
) from original_error
|
|
322
|
+
|
|
323
|
+
def _raise_runtime_error(
|
|
324
|
+
self,
|
|
325
|
+
correlation_id: UUID,
|
|
326
|
+
original_error: Exception,
|
|
327
|
+
) -> None:
|
|
328
|
+
"""Raise RuntimeHostError with context.
|
|
329
|
+
|
|
330
|
+
Args:
|
|
331
|
+
correlation_id: Correlation ID for error context.
|
|
332
|
+
original_error: The original exception for chaining.
|
|
333
|
+
|
|
334
|
+
Raises:
|
|
335
|
+
RuntimeHostError: Always raises this error.
|
|
336
|
+
"""
|
|
337
|
+
ctx = ModelInfraErrorContext(
|
|
338
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
339
|
+
operation="initialize",
|
|
340
|
+
target_name="consul_handler",
|
|
341
|
+
correlation_id=correlation_id,
|
|
342
|
+
)
|
|
343
|
+
raise RuntimeHostError(
|
|
344
|
+
f"Consul client initialization failed: {type(original_error).__name__}",
|
|
345
|
+
context=ctx,
|
|
346
|
+
) from original_error
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
__all__: list[str] = ["MixinConsulInitialization"]
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Consul Key-Value operations mixin.
|
|
4
|
+
|
|
5
|
+
This mixin provides key-value store operations for HandlerConsul,
|
|
6
|
+
extracted to reduce class complexity and improve maintainability.
|
|
7
|
+
|
|
8
|
+
Operations:
|
|
9
|
+
- consul.kv_get: Retrieve value(s) from KV store
|
|
10
|
+
- consul.kv_put: Store value in KV store
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from collections.abc import Callable
|
|
16
|
+
from typing import TYPE_CHECKING, Protocol, TypeVar, cast
|
|
17
|
+
from uuid import UUID
|
|
18
|
+
|
|
19
|
+
T = TypeVar("T")
|
|
20
|
+
|
|
21
|
+
from omnibase_core.models.dispatch import ModelHandlerOutput
|
|
22
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
23
|
+
from omnibase_infra.errors import (
|
|
24
|
+
InfraConsulError,
|
|
25
|
+
ModelInfraErrorContext,
|
|
26
|
+
RuntimeHostError,
|
|
27
|
+
)
|
|
28
|
+
from omnibase_infra.handlers.models.consul import (
|
|
29
|
+
ConsulPayload,
|
|
30
|
+
ModelConsulKVGetFoundPayload,
|
|
31
|
+
ModelConsulKVGetNotFoundPayload,
|
|
32
|
+
ModelConsulKVGetRecursePayload,
|
|
33
|
+
ModelConsulKVItem,
|
|
34
|
+
ModelConsulKVPutPayload,
|
|
35
|
+
)
|
|
36
|
+
from omnibase_infra.handlers.models.model_consul_handler_response import (
|
|
37
|
+
ModelConsulHandlerResponse,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
if TYPE_CHECKING:
|
|
41
|
+
import consul as consul_lib
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class ProtocolConsulKVDependencies(Protocol):
|
|
45
|
+
"""Protocol defining required dependencies for KV operations.
|
|
46
|
+
|
|
47
|
+
HandlerConsul must provide these attributes/methods for the mixin to work.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
_client: consul_lib.Consul | None
|
|
51
|
+
_config: object | None
|
|
52
|
+
|
|
53
|
+
async def _execute_with_retry(
|
|
54
|
+
self,
|
|
55
|
+
operation: str,
|
|
56
|
+
func: Callable[[], T],
|
|
57
|
+
correlation_id: UUID,
|
|
58
|
+
) -> T:
|
|
59
|
+
"""Execute operation with retry logic."""
|
|
60
|
+
...
|
|
61
|
+
|
|
62
|
+
def _build_response(
|
|
63
|
+
self,
|
|
64
|
+
typed_payload: ConsulPayload,
|
|
65
|
+
correlation_id: UUID,
|
|
66
|
+
input_envelope_id: UUID,
|
|
67
|
+
) -> ModelHandlerOutput[ModelConsulHandlerResponse]:
|
|
68
|
+
"""Build standardized response."""
|
|
69
|
+
...
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class MixinConsulKV:
|
|
73
|
+
"""Mixin providing Consul Key-Value store operations.
|
|
74
|
+
|
|
75
|
+
This mixin extracts KV operations from HandlerConsul to reduce
|
|
76
|
+
class complexity while maintaining full functionality.
|
|
77
|
+
|
|
78
|
+
Required Dependencies (from host class):
|
|
79
|
+
- _client: consul.Consul client instance
|
|
80
|
+
- _config: Handler configuration
|
|
81
|
+
- _execute_with_retry: Retry execution method
|
|
82
|
+
- _build_response: Response builder method
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
# Instance attribute declarations for type checking
|
|
86
|
+
_client: consul_lib.Consul | None
|
|
87
|
+
_config: object | None
|
|
88
|
+
|
|
89
|
+
# Methods from host class (abstract stubs for type checking)
|
|
90
|
+
async def _execute_with_retry(
|
|
91
|
+
self,
|
|
92
|
+
operation: str,
|
|
93
|
+
func: Callable[[], T],
|
|
94
|
+
correlation_id: UUID,
|
|
95
|
+
) -> T:
|
|
96
|
+
"""Execute operation with retry logic - provided by host class."""
|
|
97
|
+
raise NotImplementedError("Must be provided by implementing class")
|
|
98
|
+
|
|
99
|
+
def _build_response(
|
|
100
|
+
self,
|
|
101
|
+
typed_payload: ConsulPayload,
|
|
102
|
+
correlation_id: UUID,
|
|
103
|
+
input_envelope_id: UUID,
|
|
104
|
+
) -> ModelHandlerOutput[ModelConsulHandlerResponse]:
|
|
105
|
+
"""Build standardized response - provided by host class."""
|
|
106
|
+
|
|
107
|
+
async def _kv_get(
|
|
108
|
+
self,
|
|
109
|
+
payload: dict[str, object],
|
|
110
|
+
correlation_id: UUID,
|
|
111
|
+
input_envelope_id: UUID,
|
|
112
|
+
) -> ModelHandlerOutput[ModelConsulHandlerResponse]:
|
|
113
|
+
"""Get value from Consul KV store.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
payload: dict containing:
|
|
117
|
+
- key: KV key path (required)
|
|
118
|
+
- recurse: Optional bool to get all keys under prefix (default: False)
|
|
119
|
+
correlation_id: Correlation ID for tracing
|
|
120
|
+
input_envelope_id: Input envelope ID for causality tracking
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
ModelHandlerOutput wrapping the KV data with correlation tracking
|
|
124
|
+
"""
|
|
125
|
+
key = payload.get("key")
|
|
126
|
+
if not isinstance(key, str) or not key:
|
|
127
|
+
ctx = ModelInfraErrorContext(
|
|
128
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
129
|
+
operation="consul.kv_get",
|
|
130
|
+
target_name="consul_handler",
|
|
131
|
+
correlation_id=correlation_id,
|
|
132
|
+
)
|
|
133
|
+
raise RuntimeHostError(
|
|
134
|
+
"Missing or invalid 'key' in payload",
|
|
135
|
+
context=ctx,
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
recurse = payload.get("recurse", False)
|
|
139
|
+
recurse_bool = recurse is True or recurse == "true"
|
|
140
|
+
|
|
141
|
+
if self._client is None:
|
|
142
|
+
context = ModelInfraErrorContext(
|
|
143
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
144
|
+
operation="consul.kv_get",
|
|
145
|
+
target_name="consul_handler",
|
|
146
|
+
correlation_id=correlation_id,
|
|
147
|
+
)
|
|
148
|
+
raise InfraConsulError(
|
|
149
|
+
"Consul client not initialized",
|
|
150
|
+
context=context,
|
|
151
|
+
consul_key=key,
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
def get_func() -> tuple[
|
|
155
|
+
int, list[dict[str, object]] | dict[str, object] | None
|
|
156
|
+
]:
|
|
157
|
+
if self._client is None:
|
|
158
|
+
ctx = ModelInfraErrorContext(
|
|
159
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
160
|
+
operation="consul.kv_get",
|
|
161
|
+
target_name="consul_handler",
|
|
162
|
+
correlation_id=correlation_id,
|
|
163
|
+
)
|
|
164
|
+
raise InfraConsulError(
|
|
165
|
+
"Consul client not initialized",
|
|
166
|
+
context=ctx,
|
|
167
|
+
consul_key=key,
|
|
168
|
+
)
|
|
169
|
+
index, data = self._client.kv.get(key, recurse=recurse_bool)
|
|
170
|
+
return index, data
|
|
171
|
+
|
|
172
|
+
# Type alias for KV get result
|
|
173
|
+
KVGetResult = tuple[int, list[dict[str, object]] | dict[str, object] | None]
|
|
174
|
+
result = await self._execute_with_retry(
|
|
175
|
+
"consul.kv_get",
|
|
176
|
+
get_func,
|
|
177
|
+
correlation_id,
|
|
178
|
+
)
|
|
179
|
+
index, data = cast(KVGetResult, result)
|
|
180
|
+
|
|
181
|
+
# Handle response - data can be None if key doesn't exist
|
|
182
|
+
if data is None:
|
|
183
|
+
typed_payload = ModelConsulKVGetNotFoundPayload(
|
|
184
|
+
key=key,
|
|
185
|
+
index=index,
|
|
186
|
+
)
|
|
187
|
+
return self._build_response(
|
|
188
|
+
typed_payload, correlation_id, input_envelope_id
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
# Handle single key or recurse results
|
|
192
|
+
if isinstance(data, list):
|
|
193
|
+
# Recurse mode - multiple keys
|
|
194
|
+
items: list[ModelConsulKVItem] = []
|
|
195
|
+
for item in data:
|
|
196
|
+
value = item.get("Value")
|
|
197
|
+
decoded_value = (
|
|
198
|
+
value.decode("utf-8") if isinstance(value, bytes) else value
|
|
199
|
+
)
|
|
200
|
+
item_key = item.get("Key")
|
|
201
|
+
item_flags = item.get("Flags")
|
|
202
|
+
item_modify_index = item.get("ModifyIndex")
|
|
203
|
+
items.append(
|
|
204
|
+
ModelConsulKVItem(
|
|
205
|
+
key=item_key if isinstance(item_key, str) else "",
|
|
206
|
+
value=decoded_value if isinstance(decoded_value, str) else None,
|
|
207
|
+
flags=item_flags if isinstance(item_flags, int) else None,
|
|
208
|
+
modify_index=item_modify_index
|
|
209
|
+
if isinstance(item_modify_index, int)
|
|
210
|
+
else None,
|
|
211
|
+
)
|
|
212
|
+
)
|
|
213
|
+
typed_payload_recurse = ModelConsulKVGetRecursePayload(
|
|
214
|
+
found=len(items) > 0,
|
|
215
|
+
items=items,
|
|
216
|
+
count=len(items),
|
|
217
|
+
index=index,
|
|
218
|
+
)
|
|
219
|
+
return self._build_response(
|
|
220
|
+
typed_payload_recurse, correlation_id, input_envelope_id
|
|
221
|
+
)
|
|
222
|
+
else:
|
|
223
|
+
# Single key mode
|
|
224
|
+
value = data.get("Value")
|
|
225
|
+
decoded_value = value.decode("utf-8") if isinstance(value, bytes) else value
|
|
226
|
+
data_key = data.get("Key")
|
|
227
|
+
data_flags = data.get("Flags")
|
|
228
|
+
data_modify_index = data.get("ModifyIndex")
|
|
229
|
+
typed_payload_found = ModelConsulKVGetFoundPayload(
|
|
230
|
+
key=data_key if isinstance(data_key, str) else key,
|
|
231
|
+
value=decoded_value if isinstance(decoded_value, str) else None,
|
|
232
|
+
flags=data_flags if isinstance(data_flags, int) else None,
|
|
233
|
+
modify_index=data_modify_index
|
|
234
|
+
if isinstance(data_modify_index, int)
|
|
235
|
+
else None,
|
|
236
|
+
index=index,
|
|
237
|
+
)
|
|
238
|
+
return self._build_response(
|
|
239
|
+
typed_payload_found, correlation_id, input_envelope_id
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
async def _kv_put(
|
|
243
|
+
self,
|
|
244
|
+
payload: dict[str, object],
|
|
245
|
+
correlation_id: UUID,
|
|
246
|
+
input_envelope_id: UUID,
|
|
247
|
+
) -> ModelHandlerOutput[ModelConsulHandlerResponse]:
|
|
248
|
+
"""Put value to Consul KV store.
|
|
249
|
+
|
|
250
|
+
Args:
|
|
251
|
+
payload: dict containing:
|
|
252
|
+
- key: KV key path (required)
|
|
253
|
+
- value: Value to store (required, string)
|
|
254
|
+
- flags: Optional integer flags
|
|
255
|
+
- cas: Optional check-and-set index for optimistic locking
|
|
256
|
+
correlation_id: Correlation ID for tracing
|
|
257
|
+
input_envelope_id: Input envelope ID for causality tracking
|
|
258
|
+
|
|
259
|
+
Returns:
|
|
260
|
+
ModelHandlerOutput wrapping the operation result with correlation tracking
|
|
261
|
+
"""
|
|
262
|
+
key = payload.get("key")
|
|
263
|
+
if not isinstance(key, str) or not key:
|
|
264
|
+
ctx = ModelInfraErrorContext(
|
|
265
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
266
|
+
operation="consul.kv_put",
|
|
267
|
+
target_name="consul_handler",
|
|
268
|
+
correlation_id=correlation_id,
|
|
269
|
+
)
|
|
270
|
+
raise RuntimeHostError(
|
|
271
|
+
"Missing or invalid 'key' in payload",
|
|
272
|
+
context=ctx,
|
|
273
|
+
)
|
|
274
|
+
|
|
275
|
+
value = payload.get("value")
|
|
276
|
+
if not isinstance(value, str):
|
|
277
|
+
ctx = ModelInfraErrorContext(
|
|
278
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
279
|
+
operation="consul.kv_put",
|
|
280
|
+
target_name="consul_handler",
|
|
281
|
+
correlation_id=correlation_id,
|
|
282
|
+
)
|
|
283
|
+
raise RuntimeHostError(
|
|
284
|
+
"Missing or invalid 'value' in payload - must be a string",
|
|
285
|
+
context=ctx,
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
flags = payload.get("flags")
|
|
289
|
+
flags_int: int | None = flags if isinstance(flags, int) else None
|
|
290
|
+
|
|
291
|
+
cas = payload.get("cas")
|
|
292
|
+
cas_int: int | None = cas if isinstance(cas, int) else None
|
|
293
|
+
|
|
294
|
+
if self._client is None:
|
|
295
|
+
context = ModelInfraErrorContext(
|
|
296
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
297
|
+
operation="consul.kv_put",
|
|
298
|
+
target_name="consul_handler",
|
|
299
|
+
correlation_id=correlation_id,
|
|
300
|
+
)
|
|
301
|
+
raise InfraConsulError(
|
|
302
|
+
"Consul client not initialized",
|
|
303
|
+
context=context,
|
|
304
|
+
consul_key=key,
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
def put_func() -> bool:
|
|
308
|
+
if self._client is None:
|
|
309
|
+
ctx = ModelInfraErrorContext(
|
|
310
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
311
|
+
operation="consul.kv_put",
|
|
312
|
+
target_name="consul_handler",
|
|
313
|
+
correlation_id=correlation_id,
|
|
314
|
+
)
|
|
315
|
+
raise InfraConsulError(
|
|
316
|
+
"Consul client not initialized",
|
|
317
|
+
context=ctx,
|
|
318
|
+
consul_key=key,
|
|
319
|
+
)
|
|
320
|
+
result: bool = self._client.kv.put(key, value, flags=flags_int, cas=cas_int)
|
|
321
|
+
return result
|
|
322
|
+
|
|
323
|
+
result = await self._execute_with_retry(
|
|
324
|
+
"consul.kv_put",
|
|
325
|
+
put_func,
|
|
326
|
+
correlation_id,
|
|
327
|
+
)
|
|
328
|
+
success = cast(bool, result)
|
|
329
|
+
|
|
330
|
+
typed_payload = ModelConsulKVPutPayload(
|
|
331
|
+
success=success,
|
|
332
|
+
key=key,
|
|
333
|
+
)
|
|
334
|
+
return self._build_response(typed_payload, correlation_id, input_envelope_id)
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
__all__: list[str] = ["MixinConsulKV"]
|