omnibase_infra 0.2.6__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/adapters/adapter_onex_tool_execution.py +451 -0
- omnibase_infra/capabilities/__init__.py +15 -0
- omnibase_infra/capabilities/capability_inference_rules.py +211 -0
- omnibase_infra/capabilities/contract_capability_extractor.py +221 -0
- omnibase_infra/capabilities/intent_type_extractor.py +160 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/configs/widget_mapping.yaml +176 -0
- omnibase_infra/constants_topic_patterns.py +26 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +264 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +141 -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 +132 -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_consumer_group_purpose.py +92 -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 +111 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_mode.py +86 -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_kafka_acks.py +99 -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 +160 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_binding_resolution.py +128 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +95 -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 +105 -0
- omnibase_infra/errors/error_infra.py +610 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +115 -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 +84 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +797 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1716 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +180 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +771 -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 +693 -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/testing/__init__.py +26 -0
- omnibase_infra/event_bus/testing/adapter_protocol_event_publisher_inmemory.py +418 -0
- omnibase_infra/event_bus/testing/model_publisher_metrics.py +64 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +82 -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 +795 -0
- omnibase_infra/handlers/handler_db.py +1046 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +2015 -0
- omnibase_infra/handlers/handler_http.py +926 -0
- omnibase_infra/handlers/handler_intent.py +387 -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 +1430 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +428 -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 +47 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +338 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +542 -0
- omnibase_infra/handlers/mixins/mixin_consul_topic_index.py +585 -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 +922 -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 +1051 -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 +109 -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/migrations/001_create_event_ledger.sql +166 -0
- omnibase_infra/migrations/001_drop_event_ledger.sql +18 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +656 -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 +2670 -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 +144 -0
- omnibase_infra/models/bindings/__init__.py +59 -0
- omnibase_infra/models/bindings/constants.py +144 -0
- omnibase_infra/models/bindings/model_binding_resolution_result.py +103 -0
- omnibase_infra/models/bindings/model_operation_binding.py +44 -0
- omnibase_infra/models/bindings/model_operation_bindings_subcontract.py +152 -0
- omnibase_infra/models/bindings/model_parsed_binding.py +52 -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 +330 -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 +155 -0
- omnibase_infra/models/dispatch/model_debug_trace_snapshot.py +114 -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_materialized_dispatch.py +141 -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 +80 -0
- omnibase_infra/models/handlers/model_bootstrap_handler_descriptor.py +162 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +82 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +200 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/handlers/model_handler_source_config.py +220 -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/mcp/__init__.py +15 -0
- omnibase_infra/models/mcp/model_mcp_contract_config.py +80 -0
- omnibase_infra/models/mcp/model_mcp_server_config.py +67 -0
- omnibase_infra/models/mcp/model_mcp_tool_definition.py +73 -0
- omnibase_infra/models/mcp/model_mcp_tool_parameter.py +35 -0
- omnibase_infra/models/model_node_identity.py +126 -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 +591 -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 +68 -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_event_bus_topic_entry.py +59 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +190 -0
- omnibase_infra/models/registration/model_node_event_bus_config.py +99 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +195 -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 +49 -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 +296 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +129 -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 +57 -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 +203 -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 +106 -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/contract_registry_reducer/__init__.py +29 -0
- omnibase_infra/nodes/contract_registry_reducer/contract.yaml +255 -0
- omnibase_infra/nodes/contract_registry_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_contract_registry_state.py +266 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_cleanup_topic_references.py +55 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_deactivate_contract.py +58 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_mark_stale.py +49 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_heartbeat.py +71 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_topic.py +66 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_upsert_contract.py +92 -0
- omnibase_infra/nodes/contract_registry_reducer/node.py +121 -0
- omnibase_infra/nodes/contract_registry_reducer/reducer.py +784 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/registry_infra_contract_registry_reducer.py +101 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +167 -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/handlers/consul/contract.yaml +85 -0
- omnibase_infra/nodes/handlers/db/contract.yaml +72 -0
- omnibase_infra/nodes/handlers/graph/contract.yaml +127 -0
- omnibase_infra/nodes/handlers/http/contract.yaml +74 -0
- omnibase_infra/nodes/handlers/intent/contract.yaml +66 -0
- omnibase_infra/nodes/handlers/mcp/contract.yaml +69 -0
- omnibase_infra/nodes/handlers/vault/contract.yaml +91 -0
- omnibase_infra/nodes/node_intent_storage_effect/__init__.py +50 -0
- omnibase_infra/nodes/node_intent_storage_effect/contract.yaml +194 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/__init__.py +24 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_input.py +141 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_output.py +130 -0
- omnibase_infra/nodes/node_intent_storage_effect/node.py +94 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/__init__.py +35 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/registry_infra_intent_storage.py +294 -0
- omnibase_infra/nodes/node_ledger_projection_compute/__init__.py +50 -0
- omnibase_infra/nodes/node_ledger_projection_compute/contract.yaml +104 -0
- omnibase_infra/nodes/node_ledger_projection_compute/node.py +284 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/__init__.py +29 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/registry_infra_ledger_projection.py +118 -0
- omnibase_infra/nodes/node_ledger_write_effect/__init__.py +82 -0
- omnibase_infra/nodes/node_ledger_write_effect/contract.yaml +200 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/__init__.py +22 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_append.py +372 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_query.py +597 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/__init__.py +31 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_append_result.py +54 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_entry.py +92 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query.py +53 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query_result.py +41 -0
- omnibase_infra/nodes/node_ledger_write_effect/node.py +89 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/__init__.py +13 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/protocol_ledger_persistence.py +127 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/registry_infra_ledger_write.py +121 -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 +482 -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 +694 -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 +528 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +393 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +743 -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 +220 -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 +112 -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 +215 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +677 -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 +417 -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 +222 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +37 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +87 -0
- omnibase_infra/nodes/reducers/models/model_payload_ledger_append.py +133 -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 +1138 -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 +449 -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 +104 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_container_aware.py +200 -0
- omnibase_infra/protocols/protocol_dispatch_engine.py +152 -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 +445 -0
- omnibase_infra/runtime/binding_config_resolver.py +2771 -0
- omnibase_infra/runtime/binding_resolver.py +753 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/constants_notification.py +75 -0
- omnibase_infra/runtime/constants_security.py +70 -0
- omnibase_infra/runtime/contract_handler_discovery.py +587 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +51 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/contract_loaders/operation_bindings_loader.py +789 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/emit_daemon/__init__.py +97 -0
- omnibase_infra/runtime/emit_daemon/cli.py +844 -0
- omnibase_infra/runtime/emit_daemon/client.py +811 -0
- omnibase_infra/runtime/emit_daemon/config.py +535 -0
- omnibase_infra/runtime/emit_daemon/daemon.py +812 -0
- omnibase_infra/runtime/emit_daemon/event_registry.py +477 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_request.py +139 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_response.py +191 -0
- omnibase_infra/runtime/emit_daemon/queue.py +618 -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/event_bus_subcontract_wiring.py +466 -0
- omnibase_infra/runtime/handler_bootstrap_source.py +507 -0
- omnibase_infra/runtime/handler_contract_config_loader.py +603 -0
- omnibase_infra/runtime/handler_contract_source.py +750 -0
- omnibase_infra/runtime/handler_identity.py +81 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2046 -0
- omnibase_infra/runtime/handler_registry.py +329 -0
- omnibase_infra/runtime/handler_source_resolver.py +367 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kafka_contract_source.py +984 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +402 -0
- omnibase_infra/runtime/mixins/__init__.py +24 -0
- omnibase_infra/runtime/mixins/mixin_projector_notification_publishing.py +566 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +778 -0
- omnibase_infra/runtime/models/__init__.py +229 -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_contract_load_result.py +224 -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 +229 -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_notification_config.py +171 -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_contract_config.py +268 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +625 -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_security_config.py +109 -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/models/model_transition_notification_outbox_config.py +112 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_metrics.py +140 -0
- omnibase_infra/runtime/models/model_transition_notification_publisher_metrics.py +357 -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 +1330 -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 +37 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/publisher_topic_scoped.py +294 -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 +445 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_contract_source.py +693 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1185 -0
- omnibase_infra/runtime/runtime_contract_config_loader.py +406 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2112 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1651 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +2350 -0
- omnibase_infra/runtime/service_runtime_host_process.py +3493 -0
- omnibase_infra/runtime/transition_notification_outbox.py +1190 -0
- omnibase_infra/runtime/transition_notification_publisher.py +765 -0
- omnibase_infra/runtime/util_container_wiring.py +1124 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +723 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/schemas/schema_transition_notification_outbox.sql +245 -0
- omnibase_infra/services/__init__.py +89 -0
- omnibase_infra/services/corpus_capture.py +684 -0
- omnibase_infra/services/mcp/__init__.py +31 -0
- omnibase_infra/services/mcp/mcp_server_lifecycle.py +449 -0
- omnibase_infra/services/mcp/service_mcp_tool_discovery.py +411 -0
- omnibase_infra/services/mcp/service_mcp_tool_registry.py +329 -0
- omnibase_infra/services/mcp/service_mcp_tool_sync.py +565 -0
- omnibase_infra/services/registry_api/__init__.py +40 -0
- omnibase_infra/services/registry_api/main.py +261 -0
- omnibase_infra/services/registry_api/models/__init__.py +66 -0
- omnibase_infra/services/registry_api/models/model_capability_widget_mapping.py +38 -0
- omnibase_infra/services/registry_api/models/model_pagination_info.py +48 -0
- omnibase_infra/services/registry_api/models/model_registry_discovery_response.py +73 -0
- omnibase_infra/services/registry_api/models/model_registry_health_response.py +49 -0
- omnibase_infra/services/registry_api/models/model_registry_instance_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_node_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_summary.py +60 -0
- omnibase_infra/services/registry_api/models/model_response_list_instances.py +43 -0
- omnibase_infra/services/registry_api/models/model_response_list_nodes.py +51 -0
- omnibase_infra/services/registry_api/models/model_warning.py +49 -0
- omnibase_infra/services/registry_api/models/model_widget_defaults.py +28 -0
- omnibase_infra/services/registry_api/models/model_widget_mapping.py +51 -0
- omnibase_infra/services/registry_api/routes.py +371 -0
- omnibase_infra/services/registry_api/service.py +837 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +898 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +699 -0
- omnibase_infra/services/service_timeout_scanner.py +394 -0
- omnibase_infra/services/session/__init__.py +56 -0
- omnibase_infra/services/session/config_consumer.py +137 -0
- omnibase_infra/services/session/config_store.py +139 -0
- omnibase_infra/services/session/consumer.py +1007 -0
- omnibase_infra/services/session/protocol_session_aggregator.py +117 -0
- omnibase_infra/services/session/store.py +997 -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/topics/__init__.py +45 -0
- omnibase_infra/topics/platform_topic_suffixes.py +140 -0
- omnibase_infra/topics/util_topic_composition.py +95 -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 +29 -0
- omnibase_infra/types/typed_dict/typed_dict_envelope_build_params.py +115 -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 +117 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_atomic_file.py +261 -0
- omnibase_infra/utils/util_consumer_group.py +232 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_db_transaction.py +239 -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_retry_optimistic.py +281 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/contracts/security.validation.yaml +114 -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 +1514 -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 +2033 -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 +513 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.6.dist-info/METADATA +197 -0
- omnibase_infra-0.2.6.dist-info/RECORD +833 -0
- omnibase_infra-0.2.6.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.6.dist-info/entry_points.txt +5 -0
- omnibase_infra-0.2.6.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""ONEX Infrastructure Validation Models.
|
|
4
|
+
|
|
5
|
+
Provides models for ONEX execution shape validation and chain validation,
|
|
6
|
+
including rules defining handler constraints, violation results for CI gate
|
|
7
|
+
integration, message category to node kind routing validation, coverage metrics
|
|
8
|
+
for routing validation, correlation/causation chain violation tracking,
|
|
9
|
+
and Any type violation detection.
|
|
10
|
+
|
|
11
|
+
Exports:
|
|
12
|
+
ModelAnyTypeValidationResult: Aggregate result of Any type validation for CI
|
|
13
|
+
ModelAnyTypeViolation: Result of Any type violation detection
|
|
14
|
+
ModelCategoryMatchResult: Result of category matching operation
|
|
15
|
+
ModelChainViolation: Result of chain violation detection
|
|
16
|
+
ModelCoverageMetrics: Coverage metrics for routing validation
|
|
17
|
+
ModelExecutionShapeRule: Rule defining handler type constraints
|
|
18
|
+
ModelExecutionShapeValidation: Validates message category to node kind routing
|
|
19
|
+
ModelExecutionShapeValidationResult: Aggregate result of execution shape validation
|
|
20
|
+
ModelExecutionShapeViolationResult: Result of violation detection
|
|
21
|
+
ModelLocalHandlerValidationResult: Aggregate result of LocalHandler validation for CI
|
|
22
|
+
ModelLocalHandlerViolation: Result of LocalHandler import violation detection
|
|
23
|
+
ModelOutputValidationParams: Parameters for output validation
|
|
24
|
+
ModelValidateAndRaiseParams: Parameters for validate and raise operations
|
|
25
|
+
ModelValidationErrorParams: Parameters for security validation error creation
|
|
26
|
+
ModelValidationOutcome: Generic validation result model
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
from omnibase_infra.models.validation.model_any_type_validation_result import (
|
|
30
|
+
ModelAnyTypeValidationResult,
|
|
31
|
+
)
|
|
32
|
+
from omnibase_infra.models.validation.model_any_type_violation import (
|
|
33
|
+
ModelAnyTypeViolation,
|
|
34
|
+
)
|
|
35
|
+
from omnibase_infra.models.validation.model_category_match_result import (
|
|
36
|
+
ModelCategoryMatchResult,
|
|
37
|
+
)
|
|
38
|
+
from omnibase_infra.models.validation.model_chain_violation import ModelChainViolation
|
|
39
|
+
from omnibase_infra.models.validation.model_coverage_metrics import (
|
|
40
|
+
ModelCoverageMetrics,
|
|
41
|
+
)
|
|
42
|
+
from omnibase_infra.models.validation.model_execution_shape_rule import (
|
|
43
|
+
ModelExecutionShapeRule,
|
|
44
|
+
)
|
|
45
|
+
from omnibase_infra.models.validation.model_execution_shape_validation import (
|
|
46
|
+
ModelExecutionShapeValidation,
|
|
47
|
+
)
|
|
48
|
+
from omnibase_infra.models.validation.model_execution_shape_validation_result import (
|
|
49
|
+
ModelExecutionShapeValidationResult,
|
|
50
|
+
)
|
|
51
|
+
from omnibase_infra.models.validation.model_execution_shape_violation import (
|
|
52
|
+
ModelExecutionShapeViolationResult,
|
|
53
|
+
)
|
|
54
|
+
from omnibase_infra.models.validation.model_localhandler_validation_result import (
|
|
55
|
+
ModelLocalHandlerValidationResult,
|
|
56
|
+
)
|
|
57
|
+
from omnibase_infra.models.validation.model_localhandler_violation import (
|
|
58
|
+
ModelLocalHandlerViolation,
|
|
59
|
+
)
|
|
60
|
+
from omnibase_infra.models.validation.model_output_validation_params import (
|
|
61
|
+
ModelOutputValidationParams,
|
|
62
|
+
)
|
|
63
|
+
from omnibase_infra.models.validation.model_validate_and_raise_params import (
|
|
64
|
+
ModelValidateAndRaiseParams,
|
|
65
|
+
)
|
|
66
|
+
from omnibase_infra.models.validation.model_validation_error_params import (
|
|
67
|
+
ModelValidationErrorParams,
|
|
68
|
+
)
|
|
69
|
+
from omnibase_infra.models.validation.model_validation_outcome import (
|
|
70
|
+
ModelValidationOutcome,
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
__all__ = [
|
|
74
|
+
"ModelAnyTypeValidationResult",
|
|
75
|
+
"ModelAnyTypeViolation",
|
|
76
|
+
"ModelCategoryMatchResult",
|
|
77
|
+
"ModelChainViolation",
|
|
78
|
+
"ModelCoverageMetrics",
|
|
79
|
+
"ModelExecutionShapeRule",
|
|
80
|
+
"ModelExecutionShapeValidation",
|
|
81
|
+
"ModelExecutionShapeValidationResult",
|
|
82
|
+
"ModelExecutionShapeViolationResult",
|
|
83
|
+
"ModelLocalHandlerValidationResult",
|
|
84
|
+
"ModelLocalHandlerViolation",
|
|
85
|
+
"ModelOutputValidationParams",
|
|
86
|
+
"ModelValidateAndRaiseParams",
|
|
87
|
+
"ModelValidationErrorParams",
|
|
88
|
+
"ModelValidationOutcome",
|
|
89
|
+
]
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Any Type Validation Result Model.
|
|
4
|
+
|
|
5
|
+
Defines the aggregate result structure for Any type validation operations.
|
|
6
|
+
Used by the Any type validator to provide a structured result for CI pipeline
|
|
7
|
+
integration with convenience methods for reporting.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
13
|
+
|
|
14
|
+
from omnibase_infra.models.validation.model_any_type_violation import (
|
|
15
|
+
ModelAnyTypeViolation,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ModelAnyTypeValidationResult(BaseModel):
|
|
20
|
+
"""Aggregate result of Any type validation.
|
|
21
|
+
|
|
22
|
+
Provides a structured result for CI pipeline integration with
|
|
23
|
+
convenience methods for reporting.
|
|
24
|
+
|
|
25
|
+
Attributes:
|
|
26
|
+
passed: True if no blocking violations found.
|
|
27
|
+
violations: List of all detected violations.
|
|
28
|
+
files_checked: Number of files that were validated.
|
|
29
|
+
total_violations: Total count of violations.
|
|
30
|
+
blocking_count: Count of blocking (error severity) violations.
|
|
31
|
+
|
|
32
|
+
Example:
|
|
33
|
+
>>> result = ModelAnyTypeValidationResult.from_violations(
|
|
34
|
+
... violations=[violation1, violation2],
|
|
35
|
+
... files_checked=10,
|
|
36
|
+
... )
|
|
37
|
+
>>> if not result.passed:
|
|
38
|
+
... print(result.format_summary())
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
passed: bool = Field(
|
|
42
|
+
...,
|
|
43
|
+
description="True if no blocking violations found",
|
|
44
|
+
)
|
|
45
|
+
violations: list[ModelAnyTypeViolation] = Field(
|
|
46
|
+
default_factory=list,
|
|
47
|
+
description="List of all detected violations",
|
|
48
|
+
)
|
|
49
|
+
files_checked: int = Field(
|
|
50
|
+
default=0,
|
|
51
|
+
ge=0,
|
|
52
|
+
description="Number of files that were validated",
|
|
53
|
+
)
|
|
54
|
+
total_violations: int = Field(
|
|
55
|
+
default=0,
|
|
56
|
+
ge=0,
|
|
57
|
+
description="Total count of violations",
|
|
58
|
+
)
|
|
59
|
+
blocking_count: int = Field(
|
|
60
|
+
default=0,
|
|
61
|
+
ge=0,
|
|
62
|
+
description="Count of blocking (error severity) violations",
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
model_config = ConfigDict(
|
|
66
|
+
frozen=True,
|
|
67
|
+
extra="forbid",
|
|
68
|
+
strict=True,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
def from_violations(
|
|
73
|
+
cls,
|
|
74
|
+
violations: list[ModelAnyTypeViolation],
|
|
75
|
+
files_checked: int = 0,
|
|
76
|
+
) -> ModelAnyTypeValidationResult:
|
|
77
|
+
"""Create a result from a list of violations.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
violations: List of detected violations.
|
|
81
|
+
files_checked: Number of files that were checked.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
A ModelAnyTypeValidationResult instance.
|
|
85
|
+
"""
|
|
86
|
+
blocking_count = sum(1 for v in violations if v.is_blocking())
|
|
87
|
+
return cls(
|
|
88
|
+
passed=blocking_count == 0,
|
|
89
|
+
violations=violations,
|
|
90
|
+
files_checked=files_checked,
|
|
91
|
+
total_violations=len(violations),
|
|
92
|
+
blocking_count=blocking_count,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
def format_for_ci(self) -> list[str]:
|
|
96
|
+
"""Format all violations for CI output.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
List of formatted strings for CI annotation.
|
|
100
|
+
"""
|
|
101
|
+
return [v.format_for_ci() for v in self.violations]
|
|
102
|
+
|
|
103
|
+
def format_summary(self) -> str:
|
|
104
|
+
"""Format a summary for console output.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
Summary string with pass/fail status and counts.
|
|
108
|
+
"""
|
|
109
|
+
status = "PASSED" if self.passed else "FAILED"
|
|
110
|
+
return (
|
|
111
|
+
f"Any Type Validation: {status}\n"
|
|
112
|
+
f" Files checked: {self.files_checked}\n"
|
|
113
|
+
f" Total violations: {self.total_violations}\n"
|
|
114
|
+
f" Blocking violations: {self.blocking_count}"
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
__all__ = ["ModelAnyTypeValidationResult"]
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Any Type Violation Model.
|
|
4
|
+
|
|
5
|
+
Defines the result structure for detected Any type violations.
|
|
6
|
+
Used by the Any type validator to report policy breaches with
|
|
7
|
+
full context for debugging and CI gate integration.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
15
|
+
|
|
16
|
+
from omnibase_infra.enums import EnumAnyTypeViolation, EnumValidationSeverity
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ModelAnyTypeViolation(BaseModel):
|
|
20
|
+
"""Result of an Any type violation detection.
|
|
21
|
+
|
|
22
|
+
Contains full context about a detected violation for debugging,
|
|
23
|
+
reporting, and CI gate integration. Each violation includes the
|
|
24
|
+
source location, violation type, and suggested fix.
|
|
25
|
+
|
|
26
|
+
Attributes:
|
|
27
|
+
file_path: Path to the source file containing the violation.
|
|
28
|
+
line_number: Line number where the violation was detected (1-indexed).
|
|
29
|
+
column: Column offset where Any appears (0-indexed).
|
|
30
|
+
violation_type: The specific violation category detected.
|
|
31
|
+
code_snippet: The relevant code snippet showing the violation.
|
|
32
|
+
suggestion: Human-readable suggestion for fixing the violation.
|
|
33
|
+
severity: Severity classification (error blocks CI, warning is advisory).
|
|
34
|
+
context_name: Name of function, class, or variable where violation occurs.
|
|
35
|
+
|
|
36
|
+
Example:
|
|
37
|
+
>>> violation = ModelAnyTypeViolation(
|
|
38
|
+
... file_path=Path("/src/handlers/data_handler.py"),
|
|
39
|
+
... line_number=42,
|
|
40
|
+
... column=15,
|
|
41
|
+
... violation_type=EnumAnyTypeViolation.FUNCTION_PARAMETER,
|
|
42
|
+
... code_snippet="def process(data: Any) -> str:",
|
|
43
|
+
... suggestion="Replace Any with specific type...",
|
|
44
|
+
... context_name="process",
|
|
45
|
+
... )
|
|
46
|
+
|
|
47
|
+
Note:
|
|
48
|
+
Violations with severity='error' should block CI pipelines.
|
|
49
|
+
Violations with severity='warning' are advisory and should be logged.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
file_path: Path = Field(
|
|
53
|
+
...,
|
|
54
|
+
description="Path to the source file containing the violation",
|
|
55
|
+
)
|
|
56
|
+
line_number: int = Field(
|
|
57
|
+
...,
|
|
58
|
+
ge=1,
|
|
59
|
+
description="Line number where the violation was detected (1-indexed)",
|
|
60
|
+
)
|
|
61
|
+
column: int = Field(
|
|
62
|
+
...,
|
|
63
|
+
ge=0,
|
|
64
|
+
description="Column offset where Any appears in the line (0-indexed)",
|
|
65
|
+
)
|
|
66
|
+
violation_type: EnumAnyTypeViolation = Field(
|
|
67
|
+
...,
|
|
68
|
+
description="The specific Any type violation category",
|
|
69
|
+
)
|
|
70
|
+
code_snippet: str = Field(
|
|
71
|
+
...,
|
|
72
|
+
min_length=1,
|
|
73
|
+
description="The relevant code snippet showing the violation",
|
|
74
|
+
)
|
|
75
|
+
suggestion: str = Field(
|
|
76
|
+
...,
|
|
77
|
+
min_length=1,
|
|
78
|
+
description="Human-readable suggestion for fixing the violation",
|
|
79
|
+
)
|
|
80
|
+
severity: EnumValidationSeverity = Field(
|
|
81
|
+
default=EnumValidationSeverity.ERROR,
|
|
82
|
+
description="Severity classification: 'error' blocks CI, 'warning' is advisory",
|
|
83
|
+
)
|
|
84
|
+
context_name: str = Field(
|
|
85
|
+
default="",
|
|
86
|
+
description="Name of function, class, or variable where violation occurs",
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
model_config = ConfigDict(
|
|
90
|
+
frozen=True,
|
|
91
|
+
extra="forbid",
|
|
92
|
+
strict=True,
|
|
93
|
+
str_strip_whitespace=True,
|
|
94
|
+
use_enum_values=False, # Keep enum objects for type safety
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
def is_blocking(self) -> bool:
|
|
98
|
+
"""Check if this violation should block CI.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
True if severity is 'error', False for 'warning'.
|
|
102
|
+
"""
|
|
103
|
+
return self.severity == EnumValidationSeverity.ERROR
|
|
104
|
+
|
|
105
|
+
def format_for_ci(self) -> str:
|
|
106
|
+
"""Format violation for CI output (GitHub Actions compatible).
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
Formatted string in GitHub Actions annotation format.
|
|
110
|
+
|
|
111
|
+
Example:
|
|
112
|
+
::error file=src/handler.py,line=42,col=15::FUNCTION_PARAMETER: ...
|
|
113
|
+
"""
|
|
114
|
+
annotation_type = "error" if self.is_blocking() else "warning"
|
|
115
|
+
return (
|
|
116
|
+
f"::{annotation_type} file={self.file_path},line={self.line_number},"
|
|
117
|
+
f"col={self.column}::{self.violation_type.value}: {self.code_snippet}"
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
def format_human_readable(self) -> str:
|
|
121
|
+
"""Format violation for human-readable console output.
|
|
122
|
+
|
|
123
|
+
Returns:
|
|
124
|
+
Formatted string with file location and suggestion.
|
|
125
|
+
|
|
126
|
+
Example:
|
|
127
|
+
src/handler.py:42:15 - FUNCTION_PARAMETER
|
|
128
|
+
Code: def process(data: Any) -> str:
|
|
129
|
+
Suggestion: Replace Any with specific type...
|
|
130
|
+
"""
|
|
131
|
+
lines = [
|
|
132
|
+
f"{self.file_path}:{self.line_number}:{self.column} - {self.violation_type.value}",
|
|
133
|
+
f" Code: {self.code_snippet}",
|
|
134
|
+
f" Suggestion: {self.suggestion}",
|
|
135
|
+
]
|
|
136
|
+
if self.context_name:
|
|
137
|
+
lines.insert(1, f" Context: {self.context_name}")
|
|
138
|
+
return "\n".join(lines)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
__all__ = ["ModelAnyTypeViolation"]
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Category match result model for message type detection.
|
|
4
|
+
|
|
5
|
+
This model replaces the tuple pattern ``tuple[bool, MessageOutputCategory | None]``
|
|
6
|
+
that was used for category matching operations in the routing coverage validator.
|
|
7
|
+
By using a structured model, we provide:
|
|
8
|
+
|
|
9
|
+
- Clear semantics for match results (matched vs has_category)
|
|
10
|
+
- Type-safe access to the matched category
|
|
11
|
+
- Factory methods for common use cases
|
|
12
|
+
|
|
13
|
+
Usage in routing_coverage_validator.py:
|
|
14
|
+
The ``_has_message_decorator`` function uses this model to return
|
|
15
|
+
whether a class has a message type decorator and, if so, which
|
|
16
|
+
category it represents.
|
|
17
|
+
|
|
18
|
+
Example:
|
|
19
|
+
>>> # Successful match with category
|
|
20
|
+
>>> result = ModelCategoryMatchResult.matched_with_category(
|
|
21
|
+
... EnumMessageCategory.EVENT
|
|
22
|
+
... )
|
|
23
|
+
>>> result.matched
|
|
24
|
+
True
|
|
25
|
+
>>> result.has_category
|
|
26
|
+
True
|
|
27
|
+
>>> result.category
|
|
28
|
+
<EnumMessageCategory.EVENT: 'event'>
|
|
29
|
+
|
|
30
|
+
>>> # Match without specific category (generic decorator)
|
|
31
|
+
>>> result = ModelCategoryMatchResult.matched_without_category()
|
|
32
|
+
>>> result.matched
|
|
33
|
+
True
|
|
34
|
+
>>> result.has_category
|
|
35
|
+
False
|
|
36
|
+
|
|
37
|
+
>>> # No match
|
|
38
|
+
>>> result = ModelCategoryMatchResult.not_matched()
|
|
39
|
+
>>> result.matched
|
|
40
|
+
False
|
|
41
|
+
|
|
42
|
+
.. versionadded:: 0.6.1
|
|
43
|
+
Created as part of Union Reduction Phase 2 (OMN-1007).
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
from __future__ import annotations
|
|
47
|
+
|
|
48
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
49
|
+
|
|
50
|
+
from omnibase_infra.enums import EnumMessageCategory, EnumNodeOutputType
|
|
51
|
+
from omnibase_infra.types import MessageOutputCategory
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class ModelCategoryMatchResult(BaseModel):
|
|
55
|
+
"""Result of a category matching operation.
|
|
56
|
+
|
|
57
|
+
This model represents the outcome of attempting to match a class name,
|
|
58
|
+
decorator, or base class to a message category (EVENT, COMMAND, INTENT)
|
|
59
|
+
or node output type (PROJECTION).
|
|
60
|
+
|
|
61
|
+
The model distinguishes between:
|
|
62
|
+
- **matched**: Whether the matching criteria was satisfied (e.g., decorator found)
|
|
63
|
+
- **category**: The specific category identified, if any
|
|
64
|
+
|
|
65
|
+
This distinction is important because some patterns (e.g., a generic
|
|
66
|
+
``@message_type`` decorator) indicate a match but don't specify the category.
|
|
67
|
+
|
|
68
|
+
Attributes:
|
|
69
|
+
matched: Whether the category matching criteria was satisfied.
|
|
70
|
+
category: The matched category (EnumMessageCategory or EnumNodeOutputType),
|
|
71
|
+
or None if no specific category was identified.
|
|
72
|
+
|
|
73
|
+
Warning:
|
|
74
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to return
|
|
75
|
+
``True`` only when ``matched`` is True. This differs from typical Pydantic model
|
|
76
|
+
behavior where ``bool(model)`` always returns ``True`` for any valid instance.
|
|
77
|
+
|
|
78
|
+
This design enables idiomatic conditional checks for category matching::
|
|
79
|
+
|
|
80
|
+
if result:
|
|
81
|
+
# Category was matched - process it
|
|
82
|
+
handle_category(result.category)
|
|
83
|
+
else:
|
|
84
|
+
# No match found - skip processing
|
|
85
|
+
pass
|
|
86
|
+
|
|
87
|
+
If you need to check model validity instead, use explicit attribute access::
|
|
88
|
+
|
|
89
|
+
# Check for match (uses __bool__)
|
|
90
|
+
if result:
|
|
91
|
+
...
|
|
92
|
+
|
|
93
|
+
# Check model is valid (always True for constructed instance)
|
|
94
|
+
if result is not None:
|
|
95
|
+
...
|
|
96
|
+
|
|
97
|
+
# Explicit match check (preferred for clarity)
|
|
98
|
+
if result.matched:
|
|
99
|
+
...
|
|
100
|
+
|
|
101
|
+
Example:
|
|
102
|
+
>>> # Event category match
|
|
103
|
+
>>> result = ModelCategoryMatchResult.matched_with_category(
|
|
104
|
+
... EnumMessageCategory.EVENT
|
|
105
|
+
... )
|
|
106
|
+
>>> result.matched
|
|
107
|
+
True
|
|
108
|
+
>>> result.category
|
|
109
|
+
<EnumMessageCategory.EVENT: 'event'>
|
|
110
|
+
|
|
111
|
+
>>> # Projection (node output type) match
|
|
112
|
+
>>> result = ModelCategoryMatchResult.matched_with_category(
|
|
113
|
+
... EnumNodeOutputType.PROJECTION
|
|
114
|
+
... )
|
|
115
|
+
>>> result.matched
|
|
116
|
+
True
|
|
117
|
+
>>> result.category
|
|
118
|
+
<EnumNodeOutputType.PROJECTION: 'projection'>
|
|
119
|
+
|
|
120
|
+
>>> # No match (e.g., class without message decorator)
|
|
121
|
+
>>> result = ModelCategoryMatchResult.not_matched()
|
|
122
|
+
>>> result.matched
|
|
123
|
+
False
|
|
124
|
+
>>> result.has_category
|
|
125
|
+
False
|
|
126
|
+
|
|
127
|
+
.. versionadded:: 0.6.1
|
|
128
|
+
Created as part of OMN-1007 tuple-to-model conversion.
|
|
129
|
+
"""
|
|
130
|
+
|
|
131
|
+
model_config = ConfigDict(
|
|
132
|
+
frozen=True,
|
|
133
|
+
extra="forbid",
|
|
134
|
+
strict=True,
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
matched: bool = Field(
|
|
138
|
+
description="Whether the category matching criteria was satisfied.",
|
|
139
|
+
)
|
|
140
|
+
category: MessageOutputCategory | None = Field(
|
|
141
|
+
default=None,
|
|
142
|
+
description="The matched category (EnumMessageCategory or EnumNodeOutputType), "
|
|
143
|
+
"or None if no specific category was identified.",
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
@property
|
|
147
|
+
def has_category(self) -> bool:
|
|
148
|
+
"""Check if a specific category was identified.
|
|
149
|
+
|
|
150
|
+
This property should be used to check if a category exists before
|
|
151
|
+
accessing the ``category`` field to ensure meaningful results.
|
|
152
|
+
|
|
153
|
+
Returns:
|
|
154
|
+
True if category is not None, False otherwise.
|
|
155
|
+
|
|
156
|
+
Example:
|
|
157
|
+
>>> ModelCategoryMatchResult.matched_with_category(
|
|
158
|
+
... EnumMessageCategory.EVENT
|
|
159
|
+
... ).has_category
|
|
160
|
+
True
|
|
161
|
+
>>> ModelCategoryMatchResult.matched_without_category().has_category
|
|
162
|
+
False
|
|
163
|
+
>>> ModelCategoryMatchResult.not_matched().has_category
|
|
164
|
+
False
|
|
165
|
+
|
|
166
|
+
.. versionadded:: 0.6.1
|
|
167
|
+
"""
|
|
168
|
+
return self.category is not None
|
|
169
|
+
|
|
170
|
+
@property
|
|
171
|
+
def is_message_category(self) -> bool:
|
|
172
|
+
"""Check if the matched category is a message category (not PROJECTION).
|
|
173
|
+
|
|
174
|
+
Message categories (EVENT, COMMAND, INTENT) are routable and can be
|
|
175
|
+
used for message dispatching. PROJECTION is a node output type that
|
|
176
|
+
is not routable.
|
|
177
|
+
|
|
178
|
+
Returns:
|
|
179
|
+
True if category is an EnumMessageCategory, False otherwise.
|
|
180
|
+
|
|
181
|
+
Example:
|
|
182
|
+
>>> ModelCategoryMatchResult.matched_with_category(
|
|
183
|
+
... EnumMessageCategory.EVENT
|
|
184
|
+
... ).is_message_category
|
|
185
|
+
True
|
|
186
|
+
>>> ModelCategoryMatchResult.matched_with_category(
|
|
187
|
+
... EnumNodeOutputType.PROJECTION
|
|
188
|
+
... ).is_message_category
|
|
189
|
+
False
|
|
190
|
+
|
|
191
|
+
.. versionadded:: 0.6.1
|
|
192
|
+
"""
|
|
193
|
+
# Single type check is sufficient - EnumMessageCategory is the only message
|
|
194
|
+
# category enum. EnumNodeOutputType contains PROJECTION which is NOT a
|
|
195
|
+
# routable message category (it's for reducer state aggregation outputs).
|
|
196
|
+
return isinstance(self.category, EnumMessageCategory)
|
|
197
|
+
|
|
198
|
+
@property
|
|
199
|
+
def is_projection(self) -> bool:
|
|
200
|
+
"""Check if the matched category is PROJECTION.
|
|
201
|
+
|
|
202
|
+
PROJECTION is a node output type used for reducer state aggregation
|
|
203
|
+
outputs. It is not a routable message category.
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
True if category is EnumNodeOutputType.PROJECTION, False otherwise.
|
|
207
|
+
|
|
208
|
+
Example:
|
|
209
|
+
>>> ModelCategoryMatchResult.matched_with_category(
|
|
210
|
+
... EnumNodeOutputType.PROJECTION
|
|
211
|
+
... ).is_projection
|
|
212
|
+
True
|
|
213
|
+
>>> ModelCategoryMatchResult.matched_with_category(
|
|
214
|
+
... EnumMessageCategory.EVENT
|
|
215
|
+
... ).is_projection
|
|
216
|
+
False
|
|
217
|
+
|
|
218
|
+
.. versionadded:: 0.6.1
|
|
219
|
+
"""
|
|
220
|
+
return self.category == EnumNodeOutputType.PROJECTION
|
|
221
|
+
|
|
222
|
+
@classmethod
|
|
223
|
+
def matched_with_category(
|
|
224
|
+
cls, category: MessageOutputCategory
|
|
225
|
+
) -> ModelCategoryMatchResult:
|
|
226
|
+
"""Create a successful match result with a specific category.
|
|
227
|
+
|
|
228
|
+
Use this factory when the matching operation found a pattern that
|
|
229
|
+
indicates a specific message category or node output type.
|
|
230
|
+
|
|
231
|
+
Args:
|
|
232
|
+
category: The matched category (EnumMessageCategory or EnumNodeOutputType).
|
|
233
|
+
|
|
234
|
+
Returns:
|
|
235
|
+
ModelCategoryMatchResult with matched=True and the specified category.
|
|
236
|
+
|
|
237
|
+
Example:
|
|
238
|
+
>>> result = ModelCategoryMatchResult.matched_with_category(
|
|
239
|
+
... EnumMessageCategory.COMMAND
|
|
240
|
+
... )
|
|
241
|
+
>>> result.matched
|
|
242
|
+
True
|
|
243
|
+
>>> result.category
|
|
244
|
+
<EnumMessageCategory.COMMAND: 'command'>
|
|
245
|
+
|
|
246
|
+
.. versionadded:: 0.6.1
|
|
247
|
+
"""
|
|
248
|
+
return cls(matched=True, category=category)
|
|
249
|
+
|
|
250
|
+
@classmethod
|
|
251
|
+
def matched_without_category(cls) -> ModelCategoryMatchResult:
|
|
252
|
+
"""Create a successful match result without a specific category.
|
|
253
|
+
|
|
254
|
+
Use this factory when the matching operation found a pattern that
|
|
255
|
+
indicates a message type, but the specific category cannot be
|
|
256
|
+
determined. For example, a generic ``@message_type`` decorator
|
|
257
|
+
without category-specific information.
|
|
258
|
+
|
|
259
|
+
Returns:
|
|
260
|
+
ModelCategoryMatchResult with matched=True but category=None.
|
|
261
|
+
|
|
262
|
+
Example:
|
|
263
|
+
>>> result = ModelCategoryMatchResult.matched_without_category()
|
|
264
|
+
>>> result.matched
|
|
265
|
+
True
|
|
266
|
+
>>> result.has_category
|
|
267
|
+
False
|
|
268
|
+
|
|
269
|
+
.. versionadded:: 0.6.1
|
|
270
|
+
"""
|
|
271
|
+
return cls(matched=True, category=None)
|
|
272
|
+
|
|
273
|
+
@classmethod
|
|
274
|
+
def not_matched(cls) -> ModelCategoryMatchResult:
|
|
275
|
+
"""Create a result indicating no match was found.
|
|
276
|
+
|
|
277
|
+
Use this factory when the matching operation did not find any
|
|
278
|
+
pattern indicating a message type.
|
|
279
|
+
|
|
280
|
+
Returns:
|
|
281
|
+
ModelCategoryMatchResult with matched=False and category=None.
|
|
282
|
+
|
|
283
|
+
Example:
|
|
284
|
+
>>> result = ModelCategoryMatchResult.not_matched()
|
|
285
|
+
>>> result.matched
|
|
286
|
+
False
|
|
287
|
+
>>> result.has_category
|
|
288
|
+
False
|
|
289
|
+
|
|
290
|
+
.. versionadded:: 0.6.1
|
|
291
|
+
"""
|
|
292
|
+
return cls(matched=False, category=None)
|
|
293
|
+
|
|
294
|
+
def __bool__(self) -> bool:
|
|
295
|
+
"""Allow using result in boolean context.
|
|
296
|
+
|
|
297
|
+
Returns True if the matching operation was successful (matched=True),
|
|
298
|
+
regardless of whether a specific category was identified.
|
|
299
|
+
|
|
300
|
+
Warning:
|
|
301
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
302
|
+
return ``True`` only when ``matched`` is True. This differs from typical
|
|
303
|
+
Pydantic model behavior where ``bool(model)`` always returns ``True`` for
|
|
304
|
+
any valid model instance.
|
|
305
|
+
|
|
306
|
+
This design enables idiomatic conditional checks for match results::
|
|
307
|
+
|
|
308
|
+
if result:
|
|
309
|
+
# Category was matched - process it
|
|
310
|
+
handle_category(result.category)
|
|
311
|
+
else:
|
|
312
|
+
# No match found - skip processing
|
|
313
|
+
pass
|
|
314
|
+
|
|
315
|
+
If you need to check model validity instead, use explicit attribute access::
|
|
316
|
+
|
|
317
|
+
# Check for match (uses __bool__)
|
|
318
|
+
if result:
|
|
319
|
+
...
|
|
320
|
+
|
|
321
|
+
# Check model is valid (always True for constructed instance)
|
|
322
|
+
if result is not None:
|
|
323
|
+
...
|
|
324
|
+
|
|
325
|
+
# Explicit match check (preferred for clarity)
|
|
326
|
+
if result.matched:
|
|
327
|
+
...
|
|
328
|
+
|
|
329
|
+
Returns:
|
|
330
|
+
True if matched, False otherwise.
|
|
331
|
+
|
|
332
|
+
Example:
|
|
333
|
+
>>> if ModelCategoryMatchResult.matched_with_category(
|
|
334
|
+
... EnumMessageCategory.EVENT
|
|
335
|
+
... ):
|
|
336
|
+
... print("Found!")
|
|
337
|
+
Found!
|
|
338
|
+
|
|
339
|
+
>>> if not ModelCategoryMatchResult.not_matched():
|
|
340
|
+
... print("Not found")
|
|
341
|
+
Not found
|
|
342
|
+
|
|
343
|
+
.. versionadded:: 0.6.1
|
|
344
|
+
"""
|
|
345
|
+
return self.matched
|