digitalkin 1.0.0.dev17__tar.gz → 1.0.0.dev19__tar.gz
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.
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/PKG-INFO +2 -2
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/pyproject.toml +5 -5
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/__version__.py +1 -1
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/module_runner.py +17 -1
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/proto_streams.py +7 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/redis_client.py +16 -16
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/redis_state.py +2 -2
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/_base_server.py +2 -1
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/gateway_servicer.py +251 -79
- digitalkin-1.0.0.dev19/src/digitalkin/grpc_servers/interceptors/request_ids.py +257 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/circuit_breaker.py +16 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +90 -55
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/logger.py +22 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/stream_error_codes.py +1 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/grpc_client.py +3 -3
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/communication/grpc_communication.py +16 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin.egg-info/PKG-INFO +2 -2
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin.egg-info/SOURCES.txt +1 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin.egg-info/requires.txt +1 -1
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/LICENSE +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/README.md +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/mock/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/mock/mock_pb2.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/server_async_insecure.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/server_async_secure.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/server_sync_insecure.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/base_server/server_sync_secure.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/echo_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/models/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/models/input.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/models/output.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/models/secret.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/models/setup.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/server.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/triggers/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/bench_module/triggers/message_trigger.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/archetype_with_tools_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/cpu_intensive_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/dynamic_setup_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/minimal_llm_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/modules/text_transform_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/monitoring/tests/test_metrics.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/client.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/echo_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/models/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/models/input.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/models/output.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/models/secret.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/models/setup.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/server.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/triggers/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/redis_demo/triggers/message_trigger.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/services/filesystem_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/examples/services/storage_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/setup.cfg +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/agno/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/agno/agno_adapter.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/agno/agui_tools.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/agno/hitl.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/community/agno/models.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/common/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/common/factories.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/job_manager/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/profiling/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/profiling/step_timer.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/profiling/task_profiler.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/resilience/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/resilience/bulkhead.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/resilience/task_supervisor.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/redis_idempotency.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/redis/redis_signal.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/task_executor.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/task_session.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/interceptors/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/m2m_call_registry.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/module_server.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/stream_registry.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/stream_session.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/utils/validators.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/agui_mixin.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/base_mixin.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/cost_mixin.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/file_history_mixin.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/logger_mixin.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/mixins/storage_mixin.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/core/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/core/job_manager_models.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/core/redis.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/core/task_monitor.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/events/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/events/agent_events.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/circuit_breaker.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/m2m.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/models.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/grpc_servers/types.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/ag_ui.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/base_types.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/module_context.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/module_types.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/request_metadata.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/select_schema.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/setup_types.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/tool_cache.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/tool_reference.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/module/utility.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/services/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/services/cost.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/services/registry.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/services/services.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/services/storage.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/gateway.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/log.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/profiling.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/queue.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/redis.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/resilience.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/server/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/server/channel.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/server/grpc.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/server/server.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/server/servicer.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/task_manager.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/utils/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/settings/utils/channel.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/utils/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/models/utils/dynamic_schema.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/_base_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/archetype_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/tool_module.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/trigger_handler.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/triggers/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/py.typed +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/base_strategy.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/communication/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/communication/communication_strategy.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/communication/default_communication.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/communication/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/cost/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/cost/cost_strategy.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/cost/default_cost.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/cost/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/cost/grpc_cost.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/filesystem/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/filesystem/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/identity/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/identity/default_identity.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/identity/identity_strategy.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/default_registry.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/grpc_registry.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/registry_models.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/registry/registry_strategy.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/services_config.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/services_models.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/setup/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/setup/default_setup.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/setup/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/setup/grpc_setup.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/setup/setup_strategy.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/storage/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/storage/default_storage.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/storage/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/storage/grpc_storage.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/storage/storage_strategy.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/task_manager/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/task_manager/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/task_manager/redis_task_manager.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/user_profile/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/user_profile/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/__init__.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/arg_parser.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/conditional_schema.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/development_mode_action.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/dynamic_schema.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/exceptions.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/llm_ready_schema.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/package_discover.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/proto_utils.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/utils/schema_splitter.py +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin.egg-info/dependency_links.txt +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin.egg-info/top_level.txt +0 -0
- {digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/tests/test_exceptions.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalkin
|
|
3
|
-
Version: 1.0.0.
|
|
3
|
+
Version: 1.0.0.dev19
|
|
4
4
|
Summary: SDK to build kin used in DigitalKin
|
|
5
5
|
Author-email: "DigitalKin.ai" <contact@digitalkin.ai>
|
|
6
6
|
License: Attribution-NonCommercial-ShareAlike 4.0 International
|
|
@@ -460,7 +460,7 @@ Requires-Dist: grpcio-reflection==1.81.0
|
|
|
460
460
|
Requires-Dist: grpcio-status==1.81.0
|
|
461
461
|
Requires-Dist: pydantic>=2.12.4
|
|
462
462
|
Requires-Dist: pydantic-settings>=2.14.1
|
|
463
|
-
Requires-Dist: redis[hiredis]<
|
|
463
|
+
Requires-Dist: redis[hiredis]<9,>=7.4.0
|
|
464
464
|
Provides-Extra: performance
|
|
465
465
|
Requires-Dist: uvloop>=0.21; extra == "performance"
|
|
466
466
|
Provides-Extra: profiling
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
"grpcio-status==1.81.0",
|
|
36
36
|
"pydantic>=2.12.4",
|
|
37
37
|
"pydantic-settings>=2.14.1",
|
|
38
|
-
"redis[hiredis]>=7.4.0,<
|
|
38
|
+
"redis[hiredis]>=7.4.0,<9",
|
|
39
39
|
]
|
|
40
|
-
version = "1.0.0.
|
|
40
|
+
version = "1.0.0.dev19"
|
|
41
41
|
|
|
42
42
|
[project.optional-dependencies]
|
|
43
43
|
performance = [ "uvloop>=0.21" ]
|
|
@@ -62,14 +62,14 @@
|
|
|
62
62
|
"cryptography>=48.0.0",
|
|
63
63
|
"mypy>=2.1.0",
|
|
64
64
|
"pre-commit>=4.6.0",
|
|
65
|
-
"pyright>=1.1.
|
|
66
|
-
"ruff>=0.15.
|
|
65
|
+
"pyright>=1.1.411",
|
|
66
|
+
"ruff>=0.15.20",
|
|
67
67
|
"twine>=6.2.0",
|
|
68
68
|
"types-grpcio-health-checking>=1.0.0.20260518",
|
|
69
69
|
"types-grpcio-reflection>=1.0.0.20260508",
|
|
70
70
|
"types-grpcio>=1.0.0.20260518",
|
|
71
71
|
"types-protobuf>=7.34.1.20260518",
|
|
72
|
-
"typos>=1.
|
|
72
|
+
"typos>=1.48.0",
|
|
73
73
|
]
|
|
74
74
|
docs = [
|
|
75
75
|
"griffe-inherited-docstrings>=1.1.3",
|
{digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/core/task_manager/module_runner.py
RENAMED
|
@@ -8,10 +8,12 @@ from typing import TYPE_CHECKING, Any
|
|
|
8
8
|
|
|
9
9
|
from google.protobuf import json_format, struct_pb2
|
|
10
10
|
from pydantic import ValidationError
|
|
11
|
+
from redis.exceptions import RedisError
|
|
11
12
|
|
|
12
13
|
from digitalkin.core.exceptions import BackpressureTimeoutError
|
|
13
14
|
from digitalkin.core.profiling.step_timer import StepTimer
|
|
14
15
|
from digitalkin.core.profiling.task_profiler import TaskProfiler
|
|
16
|
+
from digitalkin.grpc_servers.interceptors.request_ids import RequestContext
|
|
15
17
|
from digitalkin.logger import logger
|
|
16
18
|
from digitalkin.models.grpc_servers.stream_error_codes import StreamErrorCode
|
|
17
19
|
from digitalkin.models.settings.gateway import get_gateway_settings
|
|
@@ -40,7 +42,7 @@ class ModuleRunner:
|
|
|
40
42
|
self._redis_client = redis_client
|
|
41
43
|
self._servicer = servicer
|
|
42
44
|
|
|
43
|
-
async def run( # noqa: PLR0914, PLR0915
|
|
45
|
+
async def run( # noqa: C901, PLR0914, PLR0915
|
|
44
46
|
self,
|
|
45
47
|
query: struct_pb2.Struct,
|
|
46
48
|
*,
|
|
@@ -62,6 +64,9 @@ class ModuleRunner:
|
|
|
62
64
|
log_extra = {"task_id": task_id, "setup_id": setup_id, "mission_id": mission_id}
|
|
63
65
|
stream_key = f"task:{task_id}:stream"
|
|
64
66
|
timer = StepTimer()
|
|
67
|
+
# Bind IDs so every downstream gRPC call (registry/storage/cost/...) and
|
|
68
|
+
# log record made during this task carries them via the interceptors/filter.
|
|
69
|
+
ctx_token = RequestContext.bind(task_id=task_id, setup_id=setup_id, mission_id=mission_id)
|
|
65
70
|
|
|
66
71
|
# Construct profiler outside try so finally can always stop it.
|
|
67
72
|
profiling = get_profiling_settings()
|
|
@@ -211,6 +216,16 @@ class ModuleRunner:
|
|
|
211
216
|
except BackpressureTimeoutError as exc:
|
|
212
217
|
logger.exception("ModuleRunner: backpressure timeout", extra=log_extra)
|
|
213
218
|
await on_fatal(StreamErrorCode.BACKPRESSURE_TIMEOUT.value, str(exc))
|
|
219
|
+
except RedisError as exc:
|
|
220
|
+
logger.error(
|
|
221
|
+
"[VALIDATE R2] ModuleRunner: Redis unavailable writing output: task_id=%s",
|
|
222
|
+
task_id,
|
|
223
|
+
extra=log_extra,
|
|
224
|
+
) # TODO(validate): remove after prod validation
|
|
225
|
+
await on_fatal(
|
|
226
|
+
StreamErrorCode.REDIS_UNAVAILABLE.value,
|
|
227
|
+
f"redis unavailable: {type(exc).__name__}: {exc}",
|
|
228
|
+
)
|
|
214
229
|
except Exception as exc:
|
|
215
230
|
logger.exception("ModuleRunner: module job failed", extra=log_extra)
|
|
216
231
|
await on_fatal(
|
|
@@ -219,3 +234,4 @@ class ModuleRunner:
|
|
|
219
234
|
)
|
|
220
235
|
finally:
|
|
221
236
|
profiler.stop()
|
|
237
|
+
RequestContext.reset(ctx_token)
|
|
@@ -73,6 +73,7 @@ class ProtoStreamReader:
|
|
|
73
73
|
self,
|
|
74
74
|
count: int = 50,
|
|
75
75
|
cursor_save_interval: int = 100,
|
|
76
|
+
skip_to_seq: int | None = None,
|
|
76
77
|
) -> AsyncGenerator[struct_pb2.Struct, None]:
|
|
77
78
|
"""Read proto Structs from the stream until EOS.
|
|
78
79
|
|
|
@@ -87,6 +88,9 @@ class ProtoStreamReader:
|
|
|
87
88
|
Args:
|
|
88
89
|
count: Max entries per XREAD call.
|
|
89
90
|
cursor_save_interval: Save cursor every N entries (default 100).
|
|
91
|
+
skip_to_seq: If set, entries with stored ``seq <= skip_to_seq``
|
|
92
|
+
are consumed (cursor and gap detection advance) but not
|
|
93
|
+
yielded, so a resumed reader starts past the consumer's cursor.
|
|
90
94
|
|
|
91
95
|
Yields:
|
|
92
96
|
Proto Struct objects from the stream.
|
|
@@ -134,6 +138,9 @@ class ProtoStreamReader:
|
|
|
134
138
|
)
|
|
135
139
|
self._last_seq = seq
|
|
136
140
|
|
|
141
|
+
if skip_to_seq is not None and seq <= skip_to_seq:
|
|
142
|
+
continue
|
|
143
|
+
|
|
137
144
|
pb_bytes = fields.get(b"pb", b"")
|
|
138
145
|
if not pb_bytes:
|
|
139
146
|
continue
|
|
@@ -83,8 +83,8 @@ class RedisClient: # noqa: PLR0904
|
|
|
83
83
|
try:
|
|
84
84
|
timeout = get_redis_settings().pool.health_check_timeout
|
|
85
85
|
results = await asyncio.gather(
|
|
86
|
-
asyncio.wait_for(self._client.ping(), timeout=timeout),
|
|
87
|
-
asyncio.wait_for(self._blocking_client.ping(), timeout=timeout),
|
|
86
|
+
asyncio.wait_for(self._client.ping(), timeout=timeout),
|
|
87
|
+
asyncio.wait_for(self._blocking_client.ping(), timeout=timeout),
|
|
88
88
|
)
|
|
89
89
|
return all(results)
|
|
90
90
|
except Exception:
|
|
@@ -107,7 +107,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
107
107
|
Returns:
|
|
108
108
|
Number of fields added (not updated).
|
|
109
109
|
"""
|
|
110
|
-
return await self._client.hset(name, mapping=mapping) # type: ignore[
|
|
110
|
+
return await self._client.hset(name, mapping=mapping) # type: ignore[arg-type]
|
|
111
111
|
|
|
112
112
|
async def hgetall(self, name: str) -> dict[bytes, bytes]:
|
|
113
113
|
"""Get all fields and values in a Redis hash.
|
|
@@ -118,7 +118,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
118
118
|
Returns:
|
|
119
119
|
All field-value pairs as bytes.
|
|
120
120
|
"""
|
|
121
|
-
return await self._client.hgetall(name) # type: ignore[
|
|
121
|
+
return await self._client.hgetall(name) # type: ignore[return-value]
|
|
122
122
|
|
|
123
123
|
async def publish(self, channel: str, message: str | bytes) -> int:
|
|
124
124
|
"""Publish a message to a Redis pub/sub channel.
|
|
@@ -161,7 +161,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
161
161
|
Returns:
|
|
162
162
|
True if Redis responds.
|
|
163
163
|
"""
|
|
164
|
-
return await self._client.ping()
|
|
164
|
+
return await self._client.ping()
|
|
165
165
|
|
|
166
166
|
def pubsub(self) -> aioredis.client.PubSub:
|
|
167
167
|
"""Return a PubSub object for subscribe operations.
|
|
@@ -200,7 +200,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
200
200
|
if maxlen is not None:
|
|
201
201
|
kwargs["maxlen"] = maxlen
|
|
202
202
|
kwargs["approximate"] = True
|
|
203
|
-
return await self._client.xadd(name, fields, **kwargs) # type: ignore[arg-type]
|
|
203
|
+
return await self._client.xadd(name, fields, **kwargs) # type: ignore[arg-type, return-value]
|
|
204
204
|
|
|
205
205
|
async def xread(
|
|
206
206
|
self,
|
|
@@ -222,7 +222,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
222
222
|
Returns:
|
|
223
223
|
List of [stream_key, [(entry_id, fields), ...]] pairs.
|
|
224
224
|
"""
|
|
225
|
-
return await self._blocking_client.xread(streams, count=count, block=block) # type: ignore[arg-type]
|
|
225
|
+
return await self._blocking_client.xread(streams, count=count, block=block) # type: ignore[arg-type, return-value]
|
|
226
226
|
|
|
227
227
|
async def xlen(self, name: str) -> int:
|
|
228
228
|
"""Get the number of entries in a Redis Stream.
|
|
@@ -253,7 +253,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
253
253
|
Returns:
|
|
254
254
|
List of (entry_id, fields) tuples, newest first.
|
|
255
255
|
"""
|
|
256
|
-
return await self._client.xrevrange(name, max=max_id, min=min_id, count=count)
|
|
256
|
+
return await self._client.xrevrange(name, max=max_id, min=min_id, count=count) # type: ignore[return-value]
|
|
257
257
|
|
|
258
258
|
async def zadd(self, name: str, mapping: dict[str, float]) -> int:
|
|
259
259
|
"""Add members to a sorted set with scores.
|
|
@@ -265,7 +265,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
265
265
|
Returns:
|
|
266
266
|
Number of members added.
|
|
267
267
|
"""
|
|
268
|
-
return await self._client.zadd(name, mapping)
|
|
268
|
+
return await self._client.zadd(name, mapping) # type: ignore[return-value]
|
|
269
269
|
|
|
270
270
|
async def zrangebyscore(
|
|
271
271
|
self,
|
|
@@ -283,7 +283,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
283
283
|
Returns:
|
|
284
284
|
List of member values.
|
|
285
285
|
"""
|
|
286
|
-
return await self._client.zrangebyscore(name, min_score, max_score)
|
|
286
|
+
return await self._client.zrangebyscore(name, min_score, max_score) # type: ignore[return-value]
|
|
287
287
|
|
|
288
288
|
async def zrem(self, name: str, *members: str) -> int:
|
|
289
289
|
"""Remove members from a sorted set.
|
|
@@ -319,7 +319,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
319
319
|
Returns:
|
|
320
320
|
Script return value.
|
|
321
321
|
"""
|
|
322
|
-
return await self._client.eval(script, len(keys), *keys, *args)
|
|
322
|
+
return await self._client.eval(script, len(keys), *keys, *args)
|
|
323
323
|
|
|
324
324
|
async def get(self, name: str) -> bytes | None:
|
|
325
325
|
"""Get the value of a key.
|
|
@@ -330,7 +330,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
330
330
|
Returns:
|
|
331
331
|
Value as bytes, or None if key does not exist.
|
|
332
332
|
"""
|
|
333
|
-
return await self._client.get(name)
|
|
333
|
+
return await self._client.get(name) # type: ignore[return-value]
|
|
334
334
|
|
|
335
335
|
async def set(
|
|
336
336
|
self,
|
|
@@ -349,7 +349,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
349
349
|
Returns:
|
|
350
350
|
True if set successfully.
|
|
351
351
|
"""
|
|
352
|
-
return await self._client.set(name, value, ex=ex)
|
|
352
|
+
return await self._client.set(name, value, ex=ex) # type: ignore[return-value]
|
|
353
353
|
|
|
354
354
|
async def sadd(self, name: str, *values: str) -> int:
|
|
355
355
|
"""Add members to a Redis set.
|
|
@@ -361,7 +361,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
361
361
|
Returns:
|
|
362
362
|
Number of members added.
|
|
363
363
|
"""
|
|
364
|
-
return await self._client.sadd(name, *values)
|
|
364
|
+
return await self._client.sadd(name, *values)
|
|
365
365
|
|
|
366
366
|
async def srem(self, name: str, *values: str) -> int:
|
|
367
367
|
"""Remove members from a Redis set.
|
|
@@ -373,7 +373,7 @@ class RedisClient: # noqa: PLR0904
|
|
|
373
373
|
Returns:
|
|
374
374
|
Number of members removed.
|
|
375
375
|
"""
|
|
376
|
-
return await self._client.srem(name, *values)
|
|
376
|
+
return await self._client.srem(name, *values)
|
|
377
377
|
|
|
378
378
|
async def smembers(self, name: str) -> builtins.set[bytes]:
|
|
379
379
|
"""Get all members of a Redis set.
|
|
@@ -384,4 +384,4 @@ class RedisClient: # noqa: PLR0904
|
|
|
384
384
|
Returns:
|
|
385
385
|
Set of member values as bytes.
|
|
386
386
|
"""
|
|
387
|
-
return await self._client.smembers(name) # type: ignore[
|
|
387
|
+
return await self._client.smembers(name) # type: ignore[return-value]
|
|
@@ -59,7 +59,7 @@ class RedisStateManager:
|
|
|
59
59
|
mapping[k] = str(v)
|
|
60
60
|
# Pipeline: HSET + EXPIRE in 1 round-trip instead of 2
|
|
61
61
|
pipe = self._redis_client.pipeline()
|
|
62
|
-
pipe.hset(key, mapping=mapping)
|
|
62
|
+
pipe.hset(key, mapping=mapping) # type: ignore[arg-type]
|
|
63
63
|
pipe.expire(key, get_redis_settings().task_ttl)
|
|
64
64
|
await pipe.execute()
|
|
65
65
|
logger.debug("RedisStateManager.set_status: task_id=%s status=%s", task_id, status)
|
|
@@ -94,7 +94,7 @@ class RedisStateManager:
|
|
|
94
94
|
if exception_traceback is not None:
|
|
95
95
|
mapping["exception_traceback"] = exception_traceback
|
|
96
96
|
pipe = self._redis_client.pipeline()
|
|
97
|
-
pipe.hset(key, mapping=mapping)
|
|
97
|
+
pipe.hset(key, mapping=mapping) # type: ignore[arg-type]
|
|
98
98
|
pipe.expire(key, get_redis_settings().task_ttl)
|
|
99
99
|
await pipe.execute()
|
|
100
100
|
|
{digitalkin-1.0.0.dev17 → digitalkin-1.0.0.dev19}/src/digitalkin/grpc_servers/_base_server.py
RENAMED
|
@@ -28,6 +28,7 @@ from digitalkin.grpc_servers.exceptions import (
|
|
|
28
28
|
ServerStateError,
|
|
29
29
|
ServicerError,
|
|
30
30
|
)
|
|
31
|
+
from digitalkin.grpc_servers.interceptors.request_ids import RequestIdServerInterceptor
|
|
31
32
|
from digitalkin.grpc_servers.utils.grpc_client_wrapper import GrpcClientWrapper
|
|
32
33
|
from digitalkin.logger import logger
|
|
33
34
|
from digitalkin.models.grpc_servers.types import GrpcServer, ServiceDescriptor, T
|
|
@@ -214,7 +215,7 @@ class BaseServer(abc.ABC):
|
|
|
214
215
|
server = grpc_aio.server(
|
|
215
216
|
options=get_server_settings().grpc.options,
|
|
216
217
|
compression=grpc_compression,
|
|
217
|
-
interceptors=self._interceptors
|
|
218
|
+
interceptors=[RequestIdServerInterceptor(), *self._interceptors],
|
|
218
219
|
maximum_concurrent_rpcs=get_server_settings().max_concurrent_rpcs,
|
|
219
220
|
migration_thread_pool=futures.ThreadPoolExecutor(
|
|
220
221
|
max_workers=get_server_settings().thread_pool_workers
|