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,142 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Idempotency Store Protocol Definition.
|
|
4
|
+
|
|
5
|
+
This module defines the protocol interface for idempotency stores used
|
|
6
|
+
to track processed messages and prevent duplicate processing.
|
|
7
|
+
|
|
8
|
+
Note: This protocol is defined locally in omnibase_infra until it is
|
|
9
|
+
promoted to omnibase_spi. Once available in omnibase_spi, imports should
|
|
10
|
+
be updated to use the canonical location.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from datetime import datetime
|
|
16
|
+
from typing import Protocol, runtime_checkable
|
|
17
|
+
from uuid import UUID
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@runtime_checkable
|
|
21
|
+
class ProtocolIdempotencyStore(Protocol):
|
|
22
|
+
"""Protocol for idempotency stores.
|
|
23
|
+
|
|
24
|
+
Idempotency stores track processed message IDs to enable exactly-once
|
|
25
|
+
or at-least-once-with-dedup semantics in distributed message processing.
|
|
26
|
+
|
|
27
|
+
Key Operations:
|
|
28
|
+
- check_and_record: Atomically check if message is new and record it
|
|
29
|
+
- is_processed: Read-only check if message was already processed
|
|
30
|
+
- mark_processed: Explicitly mark a message as processed
|
|
31
|
+
- cleanup_expired: Remove old records based on TTL
|
|
32
|
+
|
|
33
|
+
Concurrency Safety:
|
|
34
|
+
All implementations MUST be safe for concurrent coroutine access. The
|
|
35
|
+
check_and_record method MUST provide atomic check-and-set semantics to
|
|
36
|
+
prevent race conditions. Use asyncio.Lock for coroutine-safety.
|
|
37
|
+
|
|
38
|
+
Domain Isolation:
|
|
39
|
+
The optional `domain` parameter allows different message namespaces
|
|
40
|
+
to be tracked independently. The same message_id can exist in different
|
|
41
|
+
domains without conflict.
|
|
42
|
+
|
|
43
|
+
Example Usage:
|
|
44
|
+
>>> store: ProtocolIdempotencyStore = get_store()
|
|
45
|
+
>>> is_new = await store.check_and_record(
|
|
46
|
+
... message_id=uuid4(),
|
|
47
|
+
... domain="orders",
|
|
48
|
+
... correlation_id=uuid4(),
|
|
49
|
+
... )
|
|
50
|
+
>>> if is_new:
|
|
51
|
+
... # Process the message
|
|
52
|
+
... await process_order(message)
|
|
53
|
+
>>> else:
|
|
54
|
+
... # Duplicate - skip processing
|
|
55
|
+
... log.info("Skipping duplicate message")
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
async def check_and_record(
|
|
59
|
+
self,
|
|
60
|
+
message_id: UUID,
|
|
61
|
+
domain: str | None = None,
|
|
62
|
+
correlation_id: UUID | None = None,
|
|
63
|
+
) -> bool:
|
|
64
|
+
"""Atomically check if message was processed and record if not.
|
|
65
|
+
|
|
66
|
+
This is the primary idempotency check method. It MUST be atomic:
|
|
67
|
+
when multiple concurrent calls are made with the same (domain, message_id),
|
|
68
|
+
exactly ONE caller receives True.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
message_id: Unique identifier for the message.
|
|
72
|
+
domain: Optional domain namespace for isolated deduplication.
|
|
73
|
+
correlation_id: Optional correlation ID for distributed tracing.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
True if message is new (should be processed).
|
|
77
|
+
False if message is duplicate (should be skipped).
|
|
78
|
+
"""
|
|
79
|
+
...
|
|
80
|
+
|
|
81
|
+
async def is_processed(
|
|
82
|
+
self,
|
|
83
|
+
message_id: UUID,
|
|
84
|
+
domain: str | None = None,
|
|
85
|
+
) -> bool:
|
|
86
|
+
"""Check if a message was already processed.
|
|
87
|
+
|
|
88
|
+
Read-only check that does not modify the store. Use this for
|
|
89
|
+
inspection or status queries where recording is not desired.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
message_id: Unique identifier for the message.
|
|
93
|
+
domain: Optional domain namespace.
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
True if the message has been processed.
|
|
97
|
+
False if the message has not been processed.
|
|
98
|
+
"""
|
|
99
|
+
...
|
|
100
|
+
|
|
101
|
+
async def mark_processed(
|
|
102
|
+
self,
|
|
103
|
+
message_id: UUID,
|
|
104
|
+
domain: str | None = None,
|
|
105
|
+
correlation_id: UUID | None = None,
|
|
106
|
+
processed_at: datetime | None = None,
|
|
107
|
+
) -> None:
|
|
108
|
+
"""Mark a message as processed.
|
|
109
|
+
|
|
110
|
+
Records a message as processed without checking if it already exists.
|
|
111
|
+
Use this for explicit marking, such as when replaying events or
|
|
112
|
+
seeding the store with known processed messages.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
message_id: Unique identifier for the message.
|
|
116
|
+
domain: Optional domain namespace for isolated deduplication.
|
|
117
|
+
correlation_id: Optional correlation ID for tracing.
|
|
118
|
+
processed_at: Optional timestamp of when processing occurred.
|
|
119
|
+
If None, implementations should use current time.
|
|
120
|
+
"""
|
|
121
|
+
...
|
|
122
|
+
|
|
123
|
+
async def cleanup_expired(
|
|
124
|
+
self,
|
|
125
|
+
ttl_seconds: int,
|
|
126
|
+
) -> int:
|
|
127
|
+
"""Remove entries older than TTL.
|
|
128
|
+
|
|
129
|
+
Cleans up old idempotency records based on their processed_at timestamp.
|
|
130
|
+
This prevents unbounded growth of the store.
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
ttl_seconds: Time-to-live in seconds. Records older than this
|
|
134
|
+
value (based on processed_at timestamp) are removed.
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
Number of entries removed.
|
|
138
|
+
"""
|
|
139
|
+
...
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
__all__: list[str] = ["ProtocolIdempotencyStore"]
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Protocol for Message Dispatchers in the ONEX Dispatch Engine.
|
|
5
|
+
|
|
6
|
+
This module defines the ProtocolMessageDispatcher protocol for category-based
|
|
7
|
+
message dispatchers. Dispatchers are the execution units that process messages
|
|
8
|
+
after routing in the dispatch engine.
|
|
9
|
+
|
|
10
|
+
Thread Safety:
|
|
11
|
+
Dispatcher implementations may be invoked concurrently from the dispatch engine.
|
|
12
|
+
The same dispatcher instance may be called from multiple coroutines simultaneously.
|
|
13
|
+
|
|
14
|
+
Design Requirements:
|
|
15
|
+
- Stateless Dispatchers (Recommended): Keep dispatchers stateless by
|
|
16
|
+
extracting all needed data from the envelope. This is the safest
|
|
17
|
+
approach and requires no synchronization.
|
|
18
|
+
- Stateful Dispatchers: If state is required, use appropriate
|
|
19
|
+
synchronization primitives (asyncio.Lock for async state).
|
|
20
|
+
|
|
21
|
+
Related:
|
|
22
|
+
- OMN-934: Dispatcher registry for message dispatch engine
|
|
23
|
+
- RegistryDispatcher: Registry for managing dispatcher registrations
|
|
24
|
+
- ModelDispatchResult: Result model for dispatch operations
|
|
25
|
+
|
|
26
|
+
.. versionadded:: 0.5.0
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
from __future__ import annotations
|
|
30
|
+
|
|
31
|
+
__all__ = ["ProtocolMessageDispatcher"]
|
|
32
|
+
|
|
33
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
34
|
+
|
|
35
|
+
from omnibase_core.enums import EnumNodeKind
|
|
36
|
+
from omnibase_infra.enums import EnumMessageCategory
|
|
37
|
+
from omnibase_infra.models.dispatch.model_dispatch_result import ModelDispatchResult
|
|
38
|
+
|
|
39
|
+
if TYPE_CHECKING:
|
|
40
|
+
from omnibase_core.models.events.model_event_envelope import ModelEventEnvelope
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@runtime_checkable
|
|
44
|
+
class ProtocolMessageDispatcher(Protocol):
|
|
45
|
+
"""
|
|
46
|
+
Protocol for category-based message dispatchers in the dispatch engine.
|
|
47
|
+
|
|
48
|
+
Message dispatchers are the execution units that process messages after routing.
|
|
49
|
+
Each dispatcher is classified by:
|
|
50
|
+
- category: The message category it handles (EVENT, COMMAND, INTENT)
|
|
51
|
+
- message_types: Specific message types it accepts (empty = all)
|
|
52
|
+
- node_kind: The ONEX node kind this dispatcher represents
|
|
53
|
+
|
|
54
|
+
Protocol Verification:
|
|
55
|
+
Per ONEX conventions, protocol compliance is verified via duck typing rather
|
|
56
|
+
than isinstance checks. Verify required methods and properties exist:
|
|
57
|
+
|
|
58
|
+
**Validation Approaches**:
|
|
59
|
+
|
|
60
|
+
1. **Duck Typing Check** (recommended for quick structural validation):
|
|
61
|
+
Use when you need to verify an object implements the dispatcher interface
|
|
62
|
+
before passing it to components that expect a dispatcher.
|
|
63
|
+
|
|
64
|
+
.. code-block:: python
|
|
65
|
+
|
|
66
|
+
# Verify required properties and methods exist
|
|
67
|
+
if (hasattr(dispatcher, 'dispatcher_id') and
|
|
68
|
+
hasattr(dispatcher, 'category') and
|
|
69
|
+
hasattr(dispatcher, 'handle') and callable(dispatcher.handle)):
|
|
70
|
+
registry.register_dispatcher(dispatcher)
|
|
71
|
+
else:
|
|
72
|
+
raise TypeError("Object does not implement ProtocolMessageDispatcher")
|
|
73
|
+
|
|
74
|
+
2. **RegistryDispatcher Validation** (comprehensive validation):
|
|
75
|
+
The ``RegistryDispatcher.register_dispatcher()`` method performs thorough
|
|
76
|
+
validation including:
|
|
77
|
+
- All required properties exist and have correct types
|
|
78
|
+
- Execution shape is valid (category -> node_kind combination)
|
|
79
|
+
- ``handle()`` method is callable
|
|
80
|
+
|
|
81
|
+
This is the recommended approach for production registration as it
|
|
82
|
+
provides detailed error messages for debugging.
|
|
83
|
+
|
|
84
|
+
**Note**: For complete type safety, use static type checking (mypy)
|
|
85
|
+
in addition to duck typing verification.
|
|
86
|
+
|
|
87
|
+
Example:
|
|
88
|
+
.. code-block:: python
|
|
89
|
+
|
|
90
|
+
from omnibase_core.enums.enum_node_kind import EnumNodeKind
|
|
91
|
+
from omnibase_core.models.events.model_event_envelope import ModelEventEnvelope
|
|
92
|
+
from omnibase_infra.enums import EnumMessageCategory
|
|
93
|
+
from omnibase_infra.enums.enum_dispatch_status import EnumDispatchStatus
|
|
94
|
+
from omnibase_infra.models.dispatch.model_dispatch_result import ModelDispatchResult
|
|
95
|
+
from omnibase_infra.protocols import ProtocolMessageDispatcher
|
|
96
|
+
|
|
97
|
+
class UserEventDispatcher:
|
|
98
|
+
'''Dispatcher for user-related events.'''
|
|
99
|
+
|
|
100
|
+
@property
|
|
101
|
+
def dispatcher_id(self) -> str:
|
|
102
|
+
return "user-event-dispatcher"
|
|
103
|
+
|
|
104
|
+
@property
|
|
105
|
+
def category(self) -> EnumMessageCategory:
|
|
106
|
+
return EnumMessageCategory.EVENT
|
|
107
|
+
|
|
108
|
+
@property
|
|
109
|
+
def message_types(self) -> set[str]:
|
|
110
|
+
return {"UserCreated", "UserUpdated", "UserDeleted"}
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def node_kind(self) -> EnumNodeKind:
|
|
114
|
+
return EnumNodeKind.REDUCER
|
|
115
|
+
|
|
116
|
+
async def handle(
|
|
117
|
+
self, envelope: ModelEventEnvelope[object]
|
|
118
|
+
) -> ModelDispatchResult:
|
|
119
|
+
# Process the event
|
|
120
|
+
return ModelDispatchResult(
|
|
121
|
+
status=EnumDispatchStatus.SUCCESS,
|
|
122
|
+
topic="user.events",
|
|
123
|
+
dispatcher_id=self.dispatcher_id,
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
# Verify protocol compliance via duck typing (per ONEX conventions)
|
|
127
|
+
dispatcher = UserEventDispatcher()
|
|
128
|
+
assert hasattr(dispatcher, 'dispatcher_id')
|
|
129
|
+
assert hasattr(dispatcher, 'category')
|
|
130
|
+
assert hasattr(dispatcher, 'handle') and callable(dispatcher.handle)
|
|
131
|
+
|
|
132
|
+
Attributes:
|
|
133
|
+
dispatcher_id: Unique identifier for this dispatcher.
|
|
134
|
+
category: The message category this dispatcher processes.
|
|
135
|
+
message_types: Specific message types this dispatcher accepts.
|
|
136
|
+
Empty set means dispatcher accepts all message types in its category.
|
|
137
|
+
node_kind: The ONEX node kind this dispatcher represents.
|
|
138
|
+
|
|
139
|
+
Note:
|
|
140
|
+
Method bodies in this Protocol use ``...`` (Ellipsis) rather than
|
|
141
|
+
``raise NotImplementedError()``. This is the standard Python convention
|
|
142
|
+
for ``typing.Protocol`` classes per PEP 544.
|
|
143
|
+
|
|
144
|
+
.. versionadded:: 0.5.0
|
|
145
|
+
"""
|
|
146
|
+
|
|
147
|
+
@property
|
|
148
|
+
def dispatcher_id(self) -> str:
|
|
149
|
+
"""
|
|
150
|
+
Return the unique identifier for this dispatcher.
|
|
151
|
+
|
|
152
|
+
The dispatcher ID is used for:
|
|
153
|
+
- Registration and lookup in the registry
|
|
154
|
+
- Tracing and observability
|
|
155
|
+
- Error reporting and debugging
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
str: Unique dispatcher identifier (e.g., "user-event-dispatcher")
|
|
159
|
+
"""
|
|
160
|
+
...
|
|
161
|
+
|
|
162
|
+
@property
|
|
163
|
+
def category(self) -> EnumMessageCategory:
|
|
164
|
+
"""
|
|
165
|
+
Return the message category this dispatcher processes.
|
|
166
|
+
|
|
167
|
+
Dispatchers are classified by the category of messages they can handle:
|
|
168
|
+
- EVENT: Past-tense immutable facts
|
|
169
|
+
- COMMAND: Imperative action requests
|
|
170
|
+
- INTENT: Goal-oriented desires
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
EnumMessageCategory: The message category (EVENT, COMMAND, or INTENT)
|
|
174
|
+
"""
|
|
175
|
+
...
|
|
176
|
+
|
|
177
|
+
@property
|
|
178
|
+
def message_types(self) -> set[str]:
|
|
179
|
+
"""
|
|
180
|
+
Return the specific message types this dispatcher accepts.
|
|
181
|
+
|
|
182
|
+
When empty, the dispatcher accepts all message types within its category.
|
|
183
|
+
When non-empty, only the listed message types are accepted.
|
|
184
|
+
|
|
185
|
+
Returns:
|
|
186
|
+
set[str]: Set of accepted message types, or empty for all types
|
|
187
|
+
"""
|
|
188
|
+
...
|
|
189
|
+
|
|
190
|
+
@property
|
|
191
|
+
def node_kind(self) -> EnumNodeKind:
|
|
192
|
+
"""
|
|
193
|
+
Return the ONEX node kind this dispatcher represents.
|
|
194
|
+
|
|
195
|
+
The node kind determines valid execution shapes:
|
|
196
|
+
- REDUCER: Handles EVENT messages for state aggregation
|
|
197
|
+
- ORCHESTRATOR: Handles EVENT and COMMAND messages for coordination
|
|
198
|
+
- EFFECT: Handles INTENT and COMMAND messages for external I/O
|
|
199
|
+
|
|
200
|
+
Returns:
|
|
201
|
+
EnumNodeKind: The node kind (REDUCER, ORCHESTRATOR, EFFECT, etc.)
|
|
202
|
+
"""
|
|
203
|
+
...
|
|
204
|
+
|
|
205
|
+
async def handle(
|
|
206
|
+
self,
|
|
207
|
+
envelope: ModelEventEnvelope[object],
|
|
208
|
+
) -> ModelDispatchResult:
|
|
209
|
+
"""
|
|
210
|
+
Handle the given envelope and return a dispatch result.
|
|
211
|
+
|
|
212
|
+
This is the primary execution method. The dispatcher receives an input
|
|
213
|
+
envelope, processes it according to its category and node kind,
|
|
214
|
+
and returns a dispatch result indicating success or failure.
|
|
215
|
+
|
|
216
|
+
Typing Note (ModelEventEnvelope[object]):
|
|
217
|
+
The envelope parameter uses ``ModelEventEnvelope[object]`` instead of
|
|
218
|
+
``Any`` per CLAUDE.md guidance: "Use ``object`` for generic payloads".
|
|
219
|
+
|
|
220
|
+
This is intentional:
|
|
221
|
+
- CLAUDE.md mandates "NEVER use ``Any``" and specifies ``object`` for
|
|
222
|
+
generic payloads that can accept multiple event types
|
|
223
|
+
- Generic dispatchers must handle multiple event types at runtime;
|
|
224
|
+
the dispatch engine routes based on topic/category/message_type,
|
|
225
|
+
not payload shape
|
|
226
|
+
- Payload extraction uses ``isinstance()`` type guards for runtime
|
|
227
|
+
safety (see dispatcher implementations)
|
|
228
|
+
- ``object`` provides better type safety than ``Any`` while allowing
|
|
229
|
+
the flexibility required for polymorphic dispatch
|
|
230
|
+
|
|
231
|
+
For type-specific processing, dispatcher implementations should use
|
|
232
|
+
type guards to narrow the payload type:
|
|
233
|
+
|
|
234
|
+
.. code-block:: python
|
|
235
|
+
|
|
236
|
+
payload = envelope.payload
|
|
237
|
+
if isinstance(payload, SpecificEventType):
|
|
238
|
+
# Type-safe processing here
|
|
239
|
+
process_specific_event(payload)
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
envelope: The input envelope containing the message to process.
|
|
243
|
+
|
|
244
|
+
Returns:
|
|
245
|
+
ModelDispatchResult: The result of the dispatch operation.
|
|
246
|
+
"""
|
|
247
|
+
...
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Protocol definition for the Message Type Registry.
|
|
5
|
+
|
|
6
|
+
Defines the interface contract for message type registry implementations.
|
|
7
|
+
Enables duck typing and test mocking while ensuring consistent API.
|
|
8
|
+
|
|
9
|
+
Design Principles:
|
|
10
|
+
- Protocol-based interface for flexibility and testability
|
|
11
|
+
- Runtime-checkable for isinstance() validation
|
|
12
|
+
- Comprehensive API covering registration, query, and validation
|
|
13
|
+
- Thread-safety documented in implementation requirements
|
|
14
|
+
|
|
15
|
+
Related:
|
|
16
|
+
- OMN-937: Central Message Type Registry implementation
|
|
17
|
+
- RegistryMessageType: Primary implementation of this protocol
|
|
18
|
+
|
|
19
|
+
.. versionadded:: 0.5.0
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from typing import Protocol, runtime_checkable
|
|
23
|
+
|
|
24
|
+
from omnibase_infra.enums import EnumMessageCategory
|
|
25
|
+
from omnibase_infra.models.registry.model_message_type_entry import (
|
|
26
|
+
ModelMessageTypeEntry,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@runtime_checkable
|
|
31
|
+
class ProtocolMessageTypeRegistry(Protocol):
|
|
32
|
+
"""
|
|
33
|
+
Protocol for message type registry implementations.
|
|
34
|
+
|
|
35
|
+
Defines the interface contract for registries that map message types
|
|
36
|
+
to handler implementations with category and domain constraints.
|
|
37
|
+
|
|
38
|
+
Implementations must follow the freeze-after-init pattern:
|
|
39
|
+
1. Registration phase: All register_* methods available
|
|
40
|
+
2. Freeze: Call freeze() to lock the registry
|
|
41
|
+
3. Query phase: Only lookup methods available
|
|
42
|
+
|
|
43
|
+
Thread Safety Requirements:
|
|
44
|
+
- Registration methods must be thread-safe during registration phase
|
|
45
|
+
- After freeze(), all query methods must be safe for concurrent access
|
|
46
|
+
- Implementations should use appropriate locking strategies
|
|
47
|
+
|
|
48
|
+
Example Implementation:
|
|
49
|
+
.. code-block:: python
|
|
50
|
+
|
|
51
|
+
class MyRegistry:
|
|
52
|
+
'''Custom registry implementation.'''
|
|
53
|
+
|
|
54
|
+
def register_message_type(
|
|
55
|
+
self,
|
|
56
|
+
entry: ModelMessageTypeEntry,
|
|
57
|
+
) -> None:
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
def get_handlers(
|
|
61
|
+
self,
|
|
62
|
+
message_type: str,
|
|
63
|
+
topic_category: EnumMessageCategory,
|
|
64
|
+
topic_domain: str,
|
|
65
|
+
) -> list[str]:
|
|
66
|
+
...
|
|
67
|
+
|
|
68
|
+
# ... implement all protocol methods
|
|
69
|
+
|
|
70
|
+
# Verify protocol compliance
|
|
71
|
+
registry: ProtocolMessageTypeRegistry = MyRegistry()
|
|
72
|
+
|
|
73
|
+
See Also:
|
|
74
|
+
- :class:`RegistryMessageType`: Primary implementation
|
|
75
|
+
|
|
76
|
+
.. versionadded:: 0.5.0
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
# =========================================================================
|
|
80
|
+
# Registration Methods (available before freeze)
|
|
81
|
+
# =========================================================================
|
|
82
|
+
|
|
83
|
+
def register_message_type(
|
|
84
|
+
self,
|
|
85
|
+
entry: ModelMessageTypeEntry,
|
|
86
|
+
) -> None:
|
|
87
|
+
"""
|
|
88
|
+
Register a message type with its handler mappings.
|
|
89
|
+
|
|
90
|
+
Associates a message type with handler(s) and defines constraints
|
|
91
|
+
for valid usage. Supports fan-out by registering multiple handlers
|
|
92
|
+
for the same message type.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
entry: The message type entry containing handler mappings
|
|
96
|
+
and constraints.
|
|
97
|
+
|
|
98
|
+
Raises:
|
|
99
|
+
ModelOnexError: If registry is frozen (INVALID_STATE)
|
|
100
|
+
ModelOnexError: If entry validation fails (VALIDATION_ERROR)
|
|
101
|
+
|
|
102
|
+
Thread Safety:
|
|
103
|
+
Must be thread-safe during registration phase.
|
|
104
|
+
|
|
105
|
+
.. versionadded:: 0.5.0
|
|
106
|
+
"""
|
|
107
|
+
...
|
|
108
|
+
|
|
109
|
+
def freeze(self) -> None:
|
|
110
|
+
"""
|
|
111
|
+
Freeze the registry to prevent further modifications.
|
|
112
|
+
|
|
113
|
+
Once frozen, registration methods will raise ModelOnexError.
|
|
114
|
+
This enables thread-safe concurrent access during query phase.
|
|
115
|
+
|
|
116
|
+
Idempotent: Calling freeze() multiple times has no additional effect.
|
|
117
|
+
|
|
118
|
+
Raises:
|
|
119
|
+
ModelOnexError: If validation fails during freeze (e.g., missing
|
|
120
|
+
handler references)
|
|
121
|
+
|
|
122
|
+
Thread Safety:
|
|
123
|
+
Must be thread-safe.
|
|
124
|
+
|
|
125
|
+
.. versionadded:: 0.5.0
|
|
126
|
+
"""
|
|
127
|
+
...
|
|
128
|
+
|
|
129
|
+
# =========================================================================
|
|
130
|
+
# Query Methods (available after freeze)
|
|
131
|
+
# =========================================================================
|
|
132
|
+
|
|
133
|
+
def get_handlers(
|
|
134
|
+
self,
|
|
135
|
+
message_type: str,
|
|
136
|
+
topic_category: EnumMessageCategory,
|
|
137
|
+
topic_domain: str,
|
|
138
|
+
) -> list[str]:
|
|
139
|
+
"""
|
|
140
|
+
Get handler IDs for a message type with validation.
|
|
141
|
+
|
|
142
|
+
Validates that the message type is allowed in the given category
|
|
143
|
+
and that the topic domain matches domain constraints.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
message_type: The message type to look up.
|
|
147
|
+
topic_category: The category inferred from the topic.
|
|
148
|
+
topic_domain: The domain extracted from the topic.
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
List of handler IDs that can process this message type.
|
|
152
|
+
Empty list if no handlers registered.
|
|
153
|
+
|
|
154
|
+
Raises:
|
|
155
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
156
|
+
ModelOnexError: If category constraint violated (VALIDATION_ERROR)
|
|
157
|
+
ModelOnexError: If domain constraint violated (VALIDATION_ERROR)
|
|
158
|
+
|
|
159
|
+
Thread Safety:
|
|
160
|
+
Must be safe for concurrent access after freeze().
|
|
161
|
+
|
|
162
|
+
.. versionadded:: 0.5.0
|
|
163
|
+
"""
|
|
164
|
+
...
|
|
165
|
+
|
|
166
|
+
def get_entry(self, message_type: str) -> ModelMessageTypeEntry | None:
|
|
167
|
+
"""
|
|
168
|
+
Get the registry entry for a message type.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
message_type: The message type to look up.
|
|
172
|
+
|
|
173
|
+
Returns:
|
|
174
|
+
The registry entry if found, None otherwise.
|
|
175
|
+
|
|
176
|
+
Raises:
|
|
177
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
178
|
+
|
|
179
|
+
Thread Safety:
|
|
180
|
+
Must be safe for concurrent access after freeze().
|
|
181
|
+
|
|
182
|
+
.. versionadded:: 0.5.0
|
|
183
|
+
"""
|
|
184
|
+
...
|
|
185
|
+
|
|
186
|
+
def has_message_type(self, message_type: str) -> bool:
|
|
187
|
+
"""
|
|
188
|
+
Check if a message type is registered.
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
message_type: The message type to check.
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
True if registered, False otherwise.
|
|
195
|
+
|
|
196
|
+
Raises:
|
|
197
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
198
|
+
|
|
199
|
+
Thread Safety:
|
|
200
|
+
Must be safe for concurrent access after freeze().
|
|
201
|
+
|
|
202
|
+
.. versionadded:: 0.5.0
|
|
203
|
+
"""
|
|
204
|
+
...
|
|
205
|
+
|
|
206
|
+
def list_message_types(
|
|
207
|
+
self,
|
|
208
|
+
category: EnumMessageCategory | None = None,
|
|
209
|
+
domain: str | None = None,
|
|
210
|
+
) -> list[str]:
|
|
211
|
+
"""
|
|
212
|
+
List registered message types with optional filtering.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
category: Optional filter by allowed category.
|
|
216
|
+
domain: Optional filter by owning domain.
|
|
217
|
+
|
|
218
|
+
Returns:
|
|
219
|
+
List of message type names matching the filters.
|
|
220
|
+
|
|
221
|
+
Raises:
|
|
222
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
223
|
+
|
|
224
|
+
Thread Safety:
|
|
225
|
+
Must be safe for concurrent access after freeze().
|
|
226
|
+
|
|
227
|
+
.. versionadded:: 0.5.0
|
|
228
|
+
"""
|
|
229
|
+
...
|
|
230
|
+
|
|
231
|
+
def list_domains(self) -> list[str]:
|
|
232
|
+
"""
|
|
233
|
+
List all domains that have registered message types.
|
|
234
|
+
|
|
235
|
+
Returns:
|
|
236
|
+
List of unique domain names, sorted alphabetically.
|
|
237
|
+
|
|
238
|
+
Raises:
|
|
239
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
240
|
+
|
|
241
|
+
Thread Safety:
|
|
242
|
+
Must be safe for concurrent access after freeze().
|
|
243
|
+
|
|
244
|
+
.. versionadded:: 0.5.0
|
|
245
|
+
"""
|
|
246
|
+
...
|
|
247
|
+
|
|
248
|
+
# =========================================================================
|
|
249
|
+
# Validation Methods
|
|
250
|
+
# =========================================================================
|
|
251
|
+
|
|
252
|
+
def validate_startup(self) -> list[str]:
|
|
253
|
+
"""
|
|
254
|
+
Perform startup-time validation and return any errors.
|
|
255
|
+
|
|
256
|
+
Validates registry consistency:
|
|
257
|
+
- All handler references are valid
|
|
258
|
+
- No conflicting category constraints
|
|
259
|
+
- Domain constraints are properly configured
|
|
260
|
+
|
|
261
|
+
This method should be called after freeze() to ensure fail-fast
|
|
262
|
+
behavior before consumers start processing messages.
|
|
263
|
+
|
|
264
|
+
Returns:
|
|
265
|
+
List of validation error messages. Empty list if valid.
|
|
266
|
+
|
|
267
|
+
Raises:
|
|
268
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
269
|
+
|
|
270
|
+
Thread Safety:
|
|
271
|
+
Must be safe for concurrent access after freeze().
|
|
272
|
+
|
|
273
|
+
.. versionadded:: 0.5.0
|
|
274
|
+
"""
|
|
275
|
+
...
|
|
276
|
+
|
|
277
|
+
# =========================================================================
|
|
278
|
+
# Properties
|
|
279
|
+
# =========================================================================
|
|
280
|
+
|
|
281
|
+
@property
|
|
282
|
+
def is_frozen(self) -> bool:
|
|
283
|
+
"""
|
|
284
|
+
Check if the registry is frozen.
|
|
285
|
+
|
|
286
|
+
Returns:
|
|
287
|
+
True if frozen and registration is disabled.
|
|
288
|
+
|
|
289
|
+
.. versionadded:: 0.5.0
|
|
290
|
+
"""
|
|
291
|
+
...
|
|
292
|
+
|
|
293
|
+
@property
|
|
294
|
+
def entry_count(self) -> int:
|
|
295
|
+
"""
|
|
296
|
+
Get the number of registered message type entries.
|
|
297
|
+
|
|
298
|
+
Returns:
|
|
299
|
+
Number of registered message types.
|
|
300
|
+
|
|
301
|
+
.. versionadded:: 0.5.0
|
|
302
|
+
"""
|
|
303
|
+
...
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
__all__ = ["ProtocolMessageTypeRegistry"]
|