From 340793b2797d118515a3a86294a3bfb86ae1775d Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Thu, 11 Jun 2026 11:17:29 -0700 Subject: [PATCH] fix: re-enable type checking --- .github/scripts/type-checks.sh | 19 +++++++++++++++++++ .../deterministic_id_generator.py | 4 ++-- .../plugin.py | 4 ++-- .../execution.py | 8 +++++++- pyproject.toml | 11 +++++++++-- 5 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 .github/scripts/type-checks.sh diff --git a/.github/scripts/type-checks.sh b/.github/scripts/type-checks.sh new file mode 100644 index 00000000..8be2ec5f --- /dev/null +++ b/.github/scripts/type-checks.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +set -euo pipefail + +REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)" +cd "$REPO_ROOT" + +mypy --install-types --non-interactive \ + packages/aws-durable-execution-sdk-python/src/aws_durable_execution_sdk_python \ + packages/aws-durable-execution-sdk-python/tests + +mypy --install-types --non-interactive \ + packages/aws-durable-execution-sdk-python-otel/src/aws_durable_execution_sdk_python_otel \ + packages/aws-durable-execution-sdk-python-otel/tests + +# comment out this for now as there are many type check errors in this package +#mypy --install-types --non-interactive \ +# packages/aws-durable-execution-sdk-python-testing/src/aws_durable_execution_sdk_python_testing \ +# packages/aws-durable-execution-sdk-python-testing/tests diff --git a/packages/aws-durable-execution-sdk-python-otel/src/aws_durable_execution_sdk_python_otel/deterministic_id_generator.py b/packages/aws-durable-execution-sdk-python-otel/src/aws_durable_execution_sdk_python_otel/deterministic_id_generator.py index 14753bec..56089303 100644 --- a/packages/aws-durable-execution-sdk-python-otel/src/aws_durable_execution_sdk_python_otel/deterministic_id_generator.py +++ b/packages/aws-durable-execution-sdk-python-otel/src/aws_durable_execution_sdk_python_otel/deterministic_id_generator.py @@ -7,7 +7,7 @@ import re from datetime import datetime, UTC -from opentelemetry.sdk.trace import IdGenerator, RandomIdGenerator +from opentelemetry.sdk.trace import RandomIdGenerator HASH_LENGTH = 16 HASHED_ID_PATTERN = re.compile(r"^[0-9a-f]{16}$") @@ -65,7 +65,7 @@ def operation_id_to_span_id(operation_id: str) -> int: return int(hashed_operation_id, 16) -class DeterministicIdGenerator(IdGenerator): +class DeterministicIdGenerator(RandomIdGenerator): """An ID generator that produces deterministic span IDs when a pending operation ID is set, and random IDs otherwise. diff --git a/packages/aws-durable-execution-sdk-python-otel/src/aws_durable_execution_sdk_python_otel/plugin.py b/packages/aws-durable-execution-sdk-python-otel/src/aws_durable_execution_sdk_python_otel/plugin.py index a2dda254..ecd3895f 100644 --- a/packages/aws-durable-execution-sdk-python-otel/src/aws_durable_execution_sdk_python_otel/plugin.py +++ b/packages/aws-durable-execution-sdk-python-otel/src/aws_durable_execution_sdk_python_otel/plugin.py @@ -9,13 +9,13 @@ from opentelemetry import trace, context from opentelemetry.context import Context +from opentelemetry.sdk.trace import TracerProvider as SdkTracerProvider from opentelemetry.sdk.trace.sampling import TraceIdRatioBased from opentelemetry.trace import ( Tracer, StatusCode, SpanContext, Span, - TracerProvider, Link, TraceFlags, ) @@ -80,7 +80,7 @@ class DurableExecutionOtelPlugin(DurableInstrumentationPlugin): def __init__( self, - trace_provider: TracerProvider, + trace_provider: SdkTracerProvider, context_extractor: ContextExtractor | None = None, sampling_rate: float = 1.0, instrument_name: str = DEFAULT_INSTRUMENT_NAME, diff --git a/packages/aws-durable-execution-sdk-python/src/aws_durable_execution_sdk_python/execution.py b/packages/aws-durable-execution-sdk-python/src/aws_durable_execution_sdk_python/execution.py index afb710e9..b8194247 100644 --- a/packages/aws-durable-execution-sdk-python/src/aws_durable_execution_sdk_python/execution.py +++ b/packages/aws-durable-execution-sdk-python/src/aws_durable_execution_sdk_python/execution.py @@ -280,11 +280,17 @@ def wrapper(event: Any, context: LambdaContext) -> MutableMapping[str, Any]: ) as executor, contextlib.closing(execution_state) as execution_state, ): + execution_operation = execution_state.get_execution_operation() + # execute the plugins plugin_executor.on_invocation_start( execution_arn=invocation_input.durable_execution_arn, lambda_context=context, - execution_start_time=execution_state.get_execution_operation().start_timestamp, + execution_start_time=( + execution_operation.start_timestamp + if execution_operation is not None + else None + ), is_first_invocation=not execution_state.is_replaying(), ) # Thread 1: Run background checkpoint processing diff --git a/pyproject.toml b/pyproject.toml index c744ed5b..6bca74e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,7 @@ requires-python = ">=3.11" workspace.members = ["packages/*"] [tool.hatch.envs.test] +detached = true workspace.members = ["packages/*"] dependencies = [ "coverage[toml]", @@ -38,11 +39,17 @@ markers = [ ] [tool.hatch.envs.types] +detached = true workspace.members = ["packages/*"] -extra-dependencies = ["mypy>=1.0.0", "pytest", "boto3-stubs[lambda]"] +extra-dependencies = [ + "mypy>=1.0.0", + "pytest", + "boto3-stubs[lambda]", + "opentelemetry-sdk>=1.20.0", +] [tool.hatch.envs.types.scripts] -check = "mypy --install-types --non-interactive {args}" +check = "bash .github/scripts/type-checks.sh" [tool.hatch.envs.dev-core] workspace.members = ["packages/aws-durable-execution-sdk-python"]