2323 (3 , 12 ),
2424 (3 , 13 ),
2525 (3 , 14 ),
26+ (3 , 15 ),
2627]
2728
2829
@@ -41,6 +42,8 @@ def version_to_str(version: tuple[int, int]) -> str:
4142 '3.13'
4243 >>> version_to_str((3, 14))
4344 '3.14'
45+ >>> version_to_str((3, 15))
46+ '3.15'
4447 >>> version_to_str((3, ))
4548 '3'
4649 """
@@ -62,14 +65,19 @@ def str_to_version(version: str) -> tuple[int, int]:
6265 (3, 13)
6366 >>> str_to_version("3.14")
6467 (3, 14)
68+ >>> str_to_version("3.15")
69+ (3, 15)
6570 >>> str_to_version("3")
6671 (3,)
6772 """
6873 return tuple (int (p ) for p in version .split ("." ))
6974
7075
7176MIN_PYTHON_VERSION = version_to_str (min (SUPPORTED_PYTHON_VERSIONS ))
72- MAX_PYTHON_VERSION = version_to_str (max (SUPPORTED_PYTHON_VERSIONS ))
77+ # 3.15 is listed so select_pys(max_version="3.15") can opt in. Default stays
78+ # 3.14: 3.15 hashes share riot jobs with 3.9-3.14 under --exitfirst, wrap()
79+ # still raises (#17849), and pip install -e . fails until #19904.
80+ MAX_PYTHON_VERSION = "3.14"
7381
7482
7583def select_pys (min_version : str = MIN_PYTHON_VERSION , max_version : str = MAX_PYTHON_VERSION ) -> list [str ]:
@@ -83,6 +91,8 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT
8391 []
8492 >>> select_pys(min_version='3.9', max_version='3.10')
8593 ['3.9', '3.10']
94+ >>> select_pys(max_version='3.15')
95+ ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14', '3.15']
8696 """
8797 min_version = str_to_version (min_version )
8898 max_version = str_to_version (max_version )
@@ -571,7 +581,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT
571581 ),
572582 Venv (
573583 name = "detect_global_locks" ,
574- pys = select_pys (),
584+ pys = select_pys (max_version = "3.15" ),
575585 command = "python -X importtime scripts/global-lock-detection.py" ,
576586 env = {
577587 "DD_TRACE_PY_ENABLE_ITR_FOR_JOB" : "false" ,
@@ -754,7 +764,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT
754764 Venv (
755765 name = "smoke_test" ,
756766 command = "python tests/smoke_test.py {cmdargs}" ,
757- pys = select_pys (),
767+ pys = select_pys (max_version = "3.15" ),
758768 ),
759769 Venv (
760770 name = "ddtracerun" ,
@@ -851,7 +861,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT
851861 pkgs = {
852862 "pytest-randomly" : latest ,
853863 },
854- pys = select_pys (),
864+ pys = select_pys (max_version = "3.15" ),
855865 ),
856866 Venv (
857867 name = "logging" ,
@@ -2782,7 +2792,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT
27822792 pkgs = {
27832793 "pytest-randomly" : latest ,
27842794 },
2785- pys = select_pys (),
2795+ pys = select_pys (max_version = "3.15" ),
27862796 env = {
27872797 "DD_CIVISIBILITY_ITR_ENABLED" : "0" ,
27882798 "DD_IAST_REQUEST_SAMPLING" : "100" , # Override default 30% to analyze all IAST requests
@@ -3643,7 +3653,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT
36433653 "DD_TRACE_PY_ENABLE_ITR_TEST_SKIPPING_FOR_JOB" : "true" ,
36443654 },
36453655 command = "pytest {cmdargs} tests/sourcecode" ,
3646- pys = select_pys (),
3656+ pys = select_pys (max_version = "3.15" ),
36473657 pkgs = {
36483658 "setuptools" : latest ,
36493659 "pytest-randomly" : latest ,
@@ -3689,7 +3699,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT
36893699 pkgs = {
36903700 "pytest-randomly" : latest ,
36913701 },
3692- pys = select_pys (),
3702+ pys = select_pys (max_version = "3.15" ),
36933703 ),
36943704 Venv (
36953705 name = "integration_registry" ,
0 commit comments