From 2068ac08e6851b8413f6a9466e56aa875cb38339 Mon Sep 17 00:00:00 2001 From: Stefan Toma Date: Mon, 22 Jun 2026 15:02:22 +0000 Subject: [PATCH] Add preview warning for Python 3.15 --- awslambdaric/bootstrap.py | 15 +++++++++++++++ awslambdaric/lambda_config.py | 1 + awslambdaric/lambda_literals.py | 23 +++++++++++++++++++++++ awslambdaric/lambda_runtime_marshaller.py | 1 + tests/test_lambda_runtime_marshaller.py | 2 ++ 5 files changed, 42 insertions(+) diff --git a/awslambdaric/bootstrap.py b/awslambdaric/bootstrap.py index d90f2a3..f54ca1a 100644 --- a/awslambdaric/bootstrap.py +++ b/awslambdaric/bootstrap.py @@ -33,6 +33,7 @@ ) AWS_LAMBDA_INITIALIZATION_TYPE = "AWS_LAMBDA_INITIALIZATION_TYPE" INIT_TYPE_SNAP_START = "snap-start" +PREVIEW_RUNTIME_ENVS = {"AWS_Lambda_python3.15"} def _get_handler(handler): @@ -477,6 +478,18 @@ def _setup_logging(log_format, log_level, log_sink): logger.addHandler(logger_handler) +def _log_preview_runtime_warning(): + """Emit a warning if the runtime version is a preview.""" + if os.environ.get("LAMBDA_DISABLE_PREVIEW_WARN", ""): + return + + from .lambda_literals import get_lambda_preview_runtime_warning_message + + execution_env = os.environ.get("AWS_EXECUTION_ENV", "") + if execution_env in PREVIEW_RUNTIME_ENVS: + logging.warning(get_lambda_preview_runtime_warning_message()) + + def run(handler, lambda_runtime_client): sys.stdout = Unbuffered(sys.stdout) sys.stderr = Unbuffered(sys.stderr) @@ -488,6 +501,8 @@ def run(handler, lambda_runtime_client): _setup_logging(_AWS_LAMBDA_LOG_FORMAT, _AWS_LAMBDA_LOG_LEVEL, log_sink) global _GLOBAL_AWS_REQUEST_ID, _GLOBAL_TENANT_ID + _log_preview_runtime_warning() + request_handler = _get_handler(handler) except FaultException as e: error_result = make_error( diff --git a/awslambdaric/lambda_config.py b/awslambdaric/lambda_config.py index c9922d8..b4e19f7 100644 --- a/awslambdaric/lambda_config.py +++ b/awslambdaric/lambda_config.py @@ -10,6 +10,7 @@ class LambdaConfigProvider: "AWS_Lambda_python3.12", "AWS_Lambda_python3.13", "AWS_Lambda_python3.14", + "AWS_Lambda_python3.15", } SOCKET_PATH_ENV = "_LAMBDA_TELEMETRY_LOG_FD_PROVIDER_SOCKET" AWS_LAMBDA_RUNTIME_API = "AWS_LAMBDA_RUNTIME_API" diff --git a/awslambdaric/lambda_literals.py b/awslambdaric/lambda_literals.py index 2585b89..e7de1a3 100644 --- a/awslambdaric/lambda_literals.py +++ b/awslambdaric/lambda_literals.py @@ -4,6 +4,29 @@ lambda_warning = "LAMBDA_WARNING" +_PREVIEW_DOC_LINK = "https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html" +_PREVIEW_DOC_LINK_CN = "https://docs.amazonaws.cn/lambda/latest/dg/lambda-runtimes.html" + + +def _get_preview_doc_link(): + import os + + region = os.environ.get("AWS_REGION", "") + if region.startswith("cn-"): + return _PREVIEW_DOC_LINK_CN + return _PREVIEW_DOC_LINK + + +# Holds warning message that is emitted when the runtime is a preview version. +def get_lambda_preview_runtime_warning_message(): + return str( + f"{lambda_warning}: " + "This is a preview runtime version and should not be used for production workloads. " + "For further information and to provide feedback, see " + f"{_get_preview_doc_link()}\r" + ) + + # Holds warning message that is emitted when an unhandled exception is raised during function invocation. lambda_unhandled_exception_warning_message = str( f"{lambda_warning}: " diff --git a/awslambdaric/lambda_runtime_marshaller.py b/awslambdaric/lambda_runtime_marshaller.py index a527674..28de56f 100644 --- a/awslambdaric/lambda_runtime_marshaller.py +++ b/awslambdaric/lambda_runtime_marshaller.py @@ -19,6 +19,7 @@ def __init__(self): "AWS_Lambda_python3.12", "AWS_Lambda_python3.13", "AWS_Lambda_python3.14", + "AWS_Lambda_python3.15", }: super().__init__(use_decimal=False, ensure_ascii=False, allow_nan=True) else: diff --git a/tests/test_lambda_runtime_marshaller.py b/tests/test_lambda_runtime_marshaller.py index 118d535..6c84632 100644 --- a/tests/test_lambda_runtime_marshaller.py +++ b/tests/test_lambda_runtime_marshaller.py @@ -11,6 +11,7 @@ class TestLambdaRuntimeMarshaller(unittest.TestCase): execution_envs = ( + "AWS_Lambda_python3.15", "AWS_Lambda_python3.14", "AWS_Lambda_python3.13", "AWS_Lambda_python3.12", @@ -23,6 +24,7 @@ class TestLambdaRuntimeMarshaller(unittest.TestCase): "AWS_Lambda_python3.12", "AWS_Lambda_python3.13", "AWS_Lambda_python3.14", + "AWS_Lambda_python3.15", } execution_envs_lambda_marshaller_ensure_ascii_true = tuple(