omnibase_infra 0.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +261 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +138 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +123 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +101 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +156 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +92 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +102 -0
- omnibase_infra/errors/error_infra.py +608 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +112 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +86 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +743 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1658 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +184 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +765 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +725 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +75 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +787 -0
- omnibase_infra/handlers/handler_db.py +1039 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +1154 -0
- omnibase_infra/handlers/handler_http.py +920 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +748 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +422 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +42 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +337 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +277 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +915 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +747 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +99 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +655 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2465 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +136 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +311 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +147 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +37 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +80 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +185 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +590 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +59 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +179 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +175 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +40 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +280 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +120 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +48 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +208 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +99 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +172 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +475 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +609 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +525 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +392 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +742 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +225 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +109 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +194 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +682 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +416 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +214 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +32 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +76 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1137 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +435 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +99 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +296 -0
- omnibase_infra/runtime/binding_config_resolver.py +2706 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/contract_handler_discovery.py +582 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +42 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/handler_contract_source.py +669 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2029 -0
- omnibase_infra/runtime/handler_registry.py +321 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +378 -0
- omnibase_infra/runtime/mixins/__init__.py +17 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +757 -0
- omnibase_infra/runtime/models/__init__.py +192 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +228 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +624 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1102 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +27 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +444 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1502 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2110 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1573 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +1805 -0
- omnibase_infra/runtime/service_runtime_host_process.py +2260 -0
- omnibase_infra/runtime/util_container_wiring.py +1123 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +566 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/services/__init__.py +68 -0
- omnibase_infra/services/corpus_capture.py +678 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +897 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +682 -0
- omnibase_infra/services/service_timeout_scanner.py +390 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +21 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +89 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1486 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +1710 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +410 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.1.dist-info/METADATA +197 -0
- omnibase_infra-0.2.1.dist-info/RECORD +675 -0
- omnibase_infra-0.2.1.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.1.dist-info/entry_points.txt +4 -0
- omnibase_infra-0.2.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registration Snapshot Model.
|
|
4
|
+
|
|
5
|
+
Provides the Pydantic model for registration snapshots used for read optimization.
|
|
6
|
+
Snapshots are compacted representations of registration state for efficient querying.
|
|
7
|
+
|
|
8
|
+
IMPORTANT: Snapshots are a read optimization layer and do NOT replace the immutable
|
|
9
|
+
event log. The source of truth remains the event log and projections. Snapshots
|
|
10
|
+
provide a compacted view for faster reads at the cost of historical granularity.
|
|
11
|
+
|
|
12
|
+
Thread Safety:
|
|
13
|
+
This model is frozen (immutable) as snapshots are point-in-time captures.
|
|
14
|
+
Create new snapshots rather than mutating existing ones.
|
|
15
|
+
|
|
16
|
+
Related Tickets:
|
|
17
|
+
- OMN-947 (F2): Snapshot Publishing
|
|
18
|
+
- OMN-944 (F1): Implement Registration Projection Schema
|
|
19
|
+
- OMN-940 (F0): Define Projector Execution Model
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
from datetime import datetime
|
|
25
|
+
from typing import TYPE_CHECKING
|
|
26
|
+
from uuid import UUID, uuid4
|
|
27
|
+
|
|
28
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
29
|
+
|
|
30
|
+
from omnibase_core.enums import EnumNodeKind
|
|
31
|
+
from omnibase_infra.enums import EnumInfraTransportType, EnumRegistrationState
|
|
32
|
+
from omnibase_infra.errors import ModelInfraErrorContext, ProtocolConfigurationError
|
|
33
|
+
from omnibase_infra.models.registration.model_node_capabilities import (
|
|
34
|
+
ModelNodeCapabilities,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
if TYPE_CHECKING:
|
|
38
|
+
from omnibase_infra.models.projection.model_registration_projection import (
|
|
39
|
+
ModelRegistrationProjection,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class ModelRegistrationSnapshot(BaseModel):
|
|
44
|
+
"""Compacted registration snapshot for read optimization.
|
|
45
|
+
|
|
46
|
+
Snapshots provide a compacted view of registration state optimized for
|
|
47
|
+
read-heavy workloads. They capture the essential state needed for:
|
|
48
|
+
- Service discovery (which nodes are ACTIVE)
|
|
49
|
+
- Capability queries (what can each node do)
|
|
50
|
+
- Status dashboards (current registration states)
|
|
51
|
+
|
|
52
|
+
Design Notes (per F2 requirements):
|
|
53
|
+
- Compacted representation: Only essential fields, no timeout tracking
|
|
54
|
+
- Kafka topic compaction: Uses domain:entity_id as key for log compaction
|
|
55
|
+
- Version-based ordering: snapshot_version for conflict resolution
|
|
56
|
+
- Traceability: source_projection_sequence links back to source projection
|
|
57
|
+
|
|
58
|
+
Key Differences from Projection:
|
|
59
|
+
- Frozen (immutable): Snapshots are point-in-time captures
|
|
60
|
+
- No timeout fields: Snapshots don't track ack/liveness deadlines
|
|
61
|
+
- No event tracking: No last_applied_event_id/offset (use source_projection_sequence)
|
|
62
|
+
- Compaction key: to_kafka_key() for topic compaction
|
|
63
|
+
|
|
64
|
+
Primary Key:
|
|
65
|
+
(entity_id, domain) - same composite key as projection
|
|
66
|
+
|
|
67
|
+
Compaction Strategy:
|
|
68
|
+
Kafka topic compaction with key = "{domain}:{entity_id}"
|
|
69
|
+
Only the latest snapshot per entity is retained after compaction.
|
|
70
|
+
|
|
71
|
+
Attributes:
|
|
72
|
+
entity_id: Node identifier (partition key for per-entity ordering)
|
|
73
|
+
domain: Domain namespace for multi-domain support (default: "registration")
|
|
74
|
+
current_state: Current FSM state for workflow decisions
|
|
75
|
+
node_type: ONEX node type (effect, compute, reducer, orchestrator)
|
|
76
|
+
node_name: Human-readable node name (cached from introspection)
|
|
77
|
+
capabilities: Node capabilities snapshot at registration time
|
|
78
|
+
last_state_change_at: Timestamp when current_state last changed
|
|
79
|
+
snapshot_version: Monotonically increasing version for compaction ordering
|
|
80
|
+
snapshot_created_at: When this snapshot was created
|
|
81
|
+
source_projection_sequence: Source projection sequence for traceability
|
|
82
|
+
|
|
83
|
+
Example:
|
|
84
|
+
>>> from datetime import datetime, timezone
|
|
85
|
+
>>> from uuid import uuid4
|
|
86
|
+
>>> from omnibase_core.enums import EnumNodeKind
|
|
87
|
+
>>> now = datetime.now(timezone.utc)
|
|
88
|
+
>>> entity_id = uuid4()
|
|
89
|
+
>>> snapshot = ModelRegistrationSnapshot(
|
|
90
|
+
... entity_id=entity_id,
|
|
91
|
+
... current_state=EnumRegistrationState.ACTIVE,
|
|
92
|
+
... node_type=EnumNodeKind.EFFECT,
|
|
93
|
+
... node_name="PostgresAdapter",
|
|
94
|
+
... last_state_change_at=now,
|
|
95
|
+
... snapshot_version=1,
|
|
96
|
+
... snapshot_created_at=now,
|
|
97
|
+
... )
|
|
98
|
+
>>> snapshot.to_kafka_key() # Returns 'registration:<uuid>'
|
|
99
|
+
'registration:...'
|
|
100
|
+
|
|
101
|
+
Note:
|
|
102
|
+
When serialized to JSON via ``model_dump(mode="json")``, the ``node_type``
|
|
103
|
+
field is serialized as its string value (e.g., ``"effect"``). When
|
|
104
|
+
deserializing, both ``EnumNodeKind.EFFECT`` and ``"effect"`` are accepted.
|
|
105
|
+
"""
|
|
106
|
+
|
|
107
|
+
model_config = ConfigDict(
|
|
108
|
+
frozen=True, # Immutable - snapshots are point-in-time captures
|
|
109
|
+
extra="forbid",
|
|
110
|
+
from_attributes=True,
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
# Identity (composite key: entity_id + domain)
|
|
114
|
+
entity_id: UUID = Field(
|
|
115
|
+
...,
|
|
116
|
+
description="Node UUID (partition key for per-entity ordering)",
|
|
117
|
+
)
|
|
118
|
+
domain: str = Field(
|
|
119
|
+
default="registration",
|
|
120
|
+
min_length=1,
|
|
121
|
+
max_length=128,
|
|
122
|
+
description="Domain namespace for multi-domain support",
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# FSM State
|
|
126
|
+
current_state: EnumRegistrationState = Field(
|
|
127
|
+
...,
|
|
128
|
+
description="Current FSM state for workflow decisions",
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
# Node Information (cached from introspection/registration)
|
|
132
|
+
node_type: EnumNodeKind | None = Field(
|
|
133
|
+
default=None,
|
|
134
|
+
description="ONEX node type (cached from introspection)",
|
|
135
|
+
)
|
|
136
|
+
node_name: str | None = Field(
|
|
137
|
+
default=None,
|
|
138
|
+
max_length=256,
|
|
139
|
+
description="Human-readable node name (cached from introspection)",
|
|
140
|
+
)
|
|
141
|
+
capabilities: ModelNodeCapabilities | None = Field(
|
|
142
|
+
default=None,
|
|
143
|
+
description="Node capabilities snapshot at registration",
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
# State Change Tracking
|
|
147
|
+
last_state_change_at: datetime = Field(
|
|
148
|
+
...,
|
|
149
|
+
description="Timestamp when current_state last changed",
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
# Snapshot Versioning (for compaction and conflict resolution)
|
|
153
|
+
snapshot_version: int = Field(
|
|
154
|
+
...,
|
|
155
|
+
ge=1,
|
|
156
|
+
description="Monotonically increasing version for compaction ordering",
|
|
157
|
+
)
|
|
158
|
+
snapshot_created_at: datetime = Field(
|
|
159
|
+
...,
|
|
160
|
+
description="When this snapshot was created",
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
# Traceability
|
|
164
|
+
source_projection_sequence: int | None = Field(
|
|
165
|
+
default=None,
|
|
166
|
+
ge=0,
|
|
167
|
+
description="Source projection sequence for traceability to projection",
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
@classmethod
|
|
171
|
+
def from_projection(
|
|
172
|
+
cls,
|
|
173
|
+
projection: ModelRegistrationProjection,
|
|
174
|
+
*,
|
|
175
|
+
snapshot_version: int,
|
|
176
|
+
snapshot_created_at: datetime,
|
|
177
|
+
node_name: str | None = None,
|
|
178
|
+
) -> ModelRegistrationSnapshot:
|
|
179
|
+
"""Create a snapshot from a projection.
|
|
180
|
+
|
|
181
|
+
Factory method to create a compacted snapshot from a full projection.
|
|
182
|
+
Extracts essential fields and discards timeout tracking data.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
projection: Source projection to create snapshot from
|
|
186
|
+
snapshot_version: Version number for this snapshot (must be monotonically increasing)
|
|
187
|
+
snapshot_created_at: Timestamp when snapshot is being created
|
|
188
|
+
node_name: Optional node name (not stored in projection, must be provided externally)
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
A new ModelRegistrationSnapshot with compacted state
|
|
192
|
+
|
|
193
|
+
Example:
|
|
194
|
+
>>> from datetime import datetime, UTC
|
|
195
|
+
>>> now = datetime.now(UTC)
|
|
196
|
+
>>> projection = ModelRegistrationProjection(...)
|
|
197
|
+
>>> snapshot = ModelRegistrationSnapshot.from_projection(
|
|
198
|
+
... projection,
|
|
199
|
+
... snapshot_version=1,
|
|
200
|
+
... snapshot_created_at=now,
|
|
201
|
+
... node_name="PostgresAdapter",
|
|
202
|
+
... )
|
|
203
|
+
"""
|
|
204
|
+
# Determine source sequence for traceability
|
|
205
|
+
# Prefer last_applied_sequence if set, otherwise use last_applied_offset
|
|
206
|
+
source_sequence = (
|
|
207
|
+
projection.last_applied_sequence
|
|
208
|
+
if projection.last_applied_sequence is not None
|
|
209
|
+
else projection.last_applied_offset
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
return cls(
|
|
213
|
+
entity_id=projection.entity_id,
|
|
214
|
+
domain=projection.domain,
|
|
215
|
+
current_state=projection.current_state,
|
|
216
|
+
node_type=projection.node_type,
|
|
217
|
+
node_name=node_name,
|
|
218
|
+
capabilities=projection.capabilities,
|
|
219
|
+
last_state_change_at=projection.updated_at,
|
|
220
|
+
snapshot_version=snapshot_version,
|
|
221
|
+
snapshot_created_at=snapshot_created_at,
|
|
222
|
+
source_projection_sequence=source_sequence,
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
def to_kafka_key(self) -> str:
|
|
226
|
+
"""Generate Kafka compaction key for this snapshot.
|
|
227
|
+
|
|
228
|
+
Returns a key suitable for Kafka topic compaction. The key format
|
|
229
|
+
is "{domain}:{entity_id}" which ensures:
|
|
230
|
+
- Per-entity compaction (only latest snapshot retained per entity)
|
|
231
|
+
- Multi-domain support (entities in different domains are distinct)
|
|
232
|
+
|
|
233
|
+
Returns:
|
|
234
|
+
Compaction key in format "domain:entity_id"
|
|
235
|
+
|
|
236
|
+
Example:
|
|
237
|
+
>>> from uuid import UUID
|
|
238
|
+
>>> snapshot = ModelRegistrationSnapshot(
|
|
239
|
+
... entity_id=UUID("550e8400-e29b-41d4-a716-446655440000"),
|
|
240
|
+
... domain="registration",
|
|
241
|
+
... ...
|
|
242
|
+
... )
|
|
243
|
+
>>> snapshot.to_kafka_key()
|
|
244
|
+
'registration:550e8400-e29b-41d4-a716-446655440000'
|
|
245
|
+
"""
|
|
246
|
+
return f"{self.domain}:{self.entity_id!s}"
|
|
247
|
+
|
|
248
|
+
def is_newer_than(self, other: ModelRegistrationSnapshot) -> bool:
|
|
249
|
+
"""Check if this snapshot is newer than another.
|
|
250
|
+
|
|
251
|
+
Compares snapshots by version number for conflict resolution
|
|
252
|
+
during compaction or merge operations.
|
|
253
|
+
|
|
254
|
+
Args:
|
|
255
|
+
other: Another snapshot to compare against
|
|
256
|
+
|
|
257
|
+
Returns:
|
|
258
|
+
True if this snapshot has a higher version, False otherwise
|
|
259
|
+
|
|
260
|
+
Raises:
|
|
261
|
+
ProtocolConfigurationError: If snapshots are for different entities (entity_id + domain mismatch)
|
|
262
|
+
|
|
263
|
+
Example:
|
|
264
|
+
>>> snap_v1 = ModelRegistrationSnapshot(snapshot_version=1, ...)
|
|
265
|
+
>>> snap_v2 = ModelRegistrationSnapshot(snapshot_version=2, ...)
|
|
266
|
+
>>> snap_v2.is_newer_than(snap_v1)
|
|
267
|
+
True
|
|
268
|
+
>>> snap_v1.is_newer_than(snap_v2)
|
|
269
|
+
False
|
|
270
|
+
"""
|
|
271
|
+
if self.entity_id != other.entity_id or self.domain != other.domain:
|
|
272
|
+
context = ModelInfraErrorContext(
|
|
273
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
274
|
+
operation="is_newer_than",
|
|
275
|
+
correlation_id=uuid4(),
|
|
276
|
+
)
|
|
277
|
+
raise ProtocolConfigurationError(
|
|
278
|
+
f"Cannot compare snapshots for different entities: "
|
|
279
|
+
f"{self.to_kafka_key()} vs {other.to_kafka_key()}",
|
|
280
|
+
context=context,
|
|
281
|
+
)
|
|
282
|
+
return self.snapshot_version > other.snapshot_version
|
|
283
|
+
|
|
284
|
+
def is_active(self) -> bool:
|
|
285
|
+
"""Check if the snapshotted entity is in ACTIVE state.
|
|
286
|
+
|
|
287
|
+
Convenience method for service discovery queries.
|
|
288
|
+
|
|
289
|
+
Returns:
|
|
290
|
+
True if current_state is ACTIVE, False otherwise
|
|
291
|
+
|
|
292
|
+
Example:
|
|
293
|
+
>>> snapshot = ModelRegistrationSnapshot(
|
|
294
|
+
... current_state=EnumRegistrationState.ACTIVE,
|
|
295
|
+
... ...
|
|
296
|
+
... )
|
|
297
|
+
>>> snapshot.is_active()
|
|
298
|
+
True
|
|
299
|
+
"""
|
|
300
|
+
return self.current_state.is_active()
|
|
301
|
+
|
|
302
|
+
def is_terminal(self) -> bool:
|
|
303
|
+
"""Check if the snapshotted entity is in a terminal state.
|
|
304
|
+
|
|
305
|
+
Terminal states (REJECTED, LIVENESS_EXPIRED) indicate the registration
|
|
306
|
+
has ended and requires re-registration to continue.
|
|
307
|
+
|
|
308
|
+
Returns:
|
|
309
|
+
True if current_state is terminal, False otherwise
|
|
310
|
+
|
|
311
|
+
Example:
|
|
312
|
+
>>> snapshot = ModelRegistrationSnapshot(
|
|
313
|
+
... current_state=EnumRegistrationState.LIVENESS_EXPIRED,
|
|
314
|
+
... ...
|
|
315
|
+
... )
|
|
316
|
+
>>> snapshot.is_terminal()
|
|
317
|
+
True
|
|
318
|
+
"""
|
|
319
|
+
return self.current_state.is_terminal()
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
__all__: list[str] = ["ModelRegistrationSnapshot"]
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Sequence Information Model.
|
|
4
|
+
|
|
5
|
+
Provides sequence information for projection ordering and idempotency.
|
|
6
|
+
Supports both Kafka (partition, offset) and generic transports (sequence).
|
|
7
|
+
|
|
8
|
+
Thread Safety:
|
|
9
|
+
This model is frozen (immutable) and safe for concurrent access.
|
|
10
|
+
|
|
11
|
+
Related Tickets:
|
|
12
|
+
- OMN-944 (F1): Implement Registration Projection Schema
|
|
13
|
+
- OMN-940 (F0): Define Projector Execution Model
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ModelSequenceInfo(BaseModel):
|
|
22
|
+
"""Sequence information for projection ordering and idempotency.
|
|
23
|
+
|
|
24
|
+
Supports both Kafka-based transports (using partition and offset) and
|
|
25
|
+
generic transports (using sequence number). Per-entity monotonic ordering
|
|
26
|
+
is enforced by the projector.
|
|
27
|
+
|
|
28
|
+
Ordering Semantics:
|
|
29
|
+
- Primary ordering is by `sequence` (transport-agnostic)
|
|
30
|
+
- For Kafka transports, `offset` provides within-partition ordering
|
|
31
|
+
- Projectors reject updates where incoming sequence <= current sequence
|
|
32
|
+
|
|
33
|
+
Attributes:
|
|
34
|
+
sequence: Monotonic sequence number (transport-agnostic).
|
|
35
|
+
For Kafka, this is typically derived from offset.
|
|
36
|
+
For generic transports, this is the application-provided sequence.
|
|
37
|
+
partition: Kafka partition identifier (optional).
|
|
38
|
+
Present only for Kafka transports. Used for debugging and
|
|
39
|
+
partition-aware ordering when multiple partitions are involved.
|
|
40
|
+
offset: Kafka offset within partition (optional).
|
|
41
|
+
Present only for Kafka transports. Combined with partition,
|
|
42
|
+
provides globally unique ordering within a topic.
|
|
43
|
+
|
|
44
|
+
Example:
|
|
45
|
+
>>> # From Kafka message
|
|
46
|
+
>>> seq = ModelSequenceInfo(sequence=1000, partition="0", offset=1000)
|
|
47
|
+
>>> # From generic transport
|
|
48
|
+
>>> seq = ModelSequenceInfo(sequence=42)
|
|
49
|
+
>>> # Staleness check
|
|
50
|
+
>>> old_seq = ModelSequenceInfo(sequence=10)
|
|
51
|
+
>>> new_seq = ModelSequenceInfo(sequence=20)
|
|
52
|
+
>>> old_seq.is_stale_compared_to(new_seq)
|
|
53
|
+
True
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
model_config = ConfigDict(frozen=True, extra="forbid", from_attributes=True)
|
|
57
|
+
|
|
58
|
+
sequence: int = Field(
|
|
59
|
+
...,
|
|
60
|
+
ge=0,
|
|
61
|
+
description="Monotonic sequence number (transport-agnostic)",
|
|
62
|
+
)
|
|
63
|
+
partition: str | None = Field(
|
|
64
|
+
default=None,
|
|
65
|
+
description="Kafka partition identifier (optional)",
|
|
66
|
+
)
|
|
67
|
+
offset: int | None = Field(
|
|
68
|
+
default=None,
|
|
69
|
+
ge=0,
|
|
70
|
+
description="Kafka offset within partition (optional)",
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
def is_stale_compared_to(self, other: ModelSequenceInfo) -> bool:
|
|
74
|
+
"""Check if this sequence info is older (stale) compared to another.
|
|
75
|
+
|
|
76
|
+
A sequence is considered stale if it has a lower sequence number,
|
|
77
|
+
indicating it represents an earlier state that should not overwrite
|
|
78
|
+
a more recent state.
|
|
79
|
+
|
|
80
|
+
For Kafka transports, when sequences are equal, the offset is used
|
|
81
|
+
as a tiebreaker within the same partition.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
other: The sequence info to compare against (presumed current state)
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
True if this sequence is older than other, False otherwise
|
|
88
|
+
|
|
89
|
+
Example:
|
|
90
|
+
>>> old = ModelSequenceInfo(sequence=10)
|
|
91
|
+
>>> new = ModelSequenceInfo(sequence=20)
|
|
92
|
+
>>> old.is_stale_compared_to(new)
|
|
93
|
+
True
|
|
94
|
+
>>> new.is_stale_compared_to(old)
|
|
95
|
+
False
|
|
96
|
+
>>> same = ModelSequenceInfo(sequence=10)
|
|
97
|
+
>>> old.is_stale_compared_to(same)
|
|
98
|
+
False
|
|
99
|
+
"""
|
|
100
|
+
if self.sequence < other.sequence:
|
|
101
|
+
return True
|
|
102
|
+
if self.sequence == other.sequence:
|
|
103
|
+
# Same sequence but lower offset is stale (Kafka tiebreaker)
|
|
104
|
+
if (
|
|
105
|
+
self.offset is not None
|
|
106
|
+
and other.offset is not None
|
|
107
|
+
and self.partition == other.partition
|
|
108
|
+
):
|
|
109
|
+
return self.offset < other.offset
|
|
110
|
+
return False
|
|
111
|
+
|
|
112
|
+
def is_newer_than(self, other: ModelSequenceInfo) -> bool:
|
|
113
|
+
"""Check if this sequence info is newer than another.
|
|
114
|
+
|
|
115
|
+
The inverse of is_stale_compared_to - returns True if this
|
|
116
|
+
sequence should replace the other.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
other: The sequence info to compare against
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
True if this sequence is newer than other, False otherwise
|
|
123
|
+
|
|
124
|
+
Example:
|
|
125
|
+
>>> old = ModelSequenceInfo(sequence=10)
|
|
126
|
+
>>> new = ModelSequenceInfo(sequence=20)
|
|
127
|
+
>>> new.is_newer_than(old)
|
|
128
|
+
True
|
|
129
|
+
"""
|
|
130
|
+
return other.is_stale_compared_to(self)
|
|
131
|
+
|
|
132
|
+
@classmethod
|
|
133
|
+
def from_kafka(cls, partition: int, offset: int) -> ModelSequenceInfo:
|
|
134
|
+
"""Create sequence info from Kafka message metadata.
|
|
135
|
+
|
|
136
|
+
Convenience factory for creating sequence info from Kafka consumer
|
|
137
|
+
message metadata. Uses offset as the sequence number.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
partition: Kafka partition number
|
|
141
|
+
offset: Kafka offset within the partition
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
ModelSequenceInfo configured for Kafka transport
|
|
145
|
+
|
|
146
|
+
Example:
|
|
147
|
+
>>> seq = ModelSequenceInfo.from_kafka(partition=0, offset=12345)
|
|
148
|
+
>>> seq.sequence
|
|
149
|
+
12345
|
|
150
|
+
>>> seq.partition
|
|
151
|
+
'0'
|
|
152
|
+
"""
|
|
153
|
+
return cls(
|
|
154
|
+
sequence=offset,
|
|
155
|
+
partition=str(partition),
|
|
156
|
+
offset=offset,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
@classmethod
|
|
160
|
+
def from_sequence(cls, sequence: int) -> ModelSequenceInfo:
|
|
161
|
+
"""Create sequence info from a generic sequence number.
|
|
162
|
+
|
|
163
|
+
Convenience factory for non-Kafka transports that use
|
|
164
|
+
application-provided sequence numbers.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
sequence: Application-provided sequence number
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
ModelSequenceInfo with only sequence set
|
|
171
|
+
|
|
172
|
+
Example:
|
|
173
|
+
>>> seq = ModelSequenceInfo.from_sequence(42)
|
|
174
|
+
>>> seq.sequence
|
|
175
|
+
42
|
|
176
|
+
>>> seq.partition is None
|
|
177
|
+
True
|
|
178
|
+
"""
|
|
179
|
+
return cls(sequence=sequence)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
__all__: list[str] = ["ModelSequenceInfo"]
|