From 3452e878a77ec17efd9deb3ae5ec8a4e86d91706 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Fri, 29 May 2026 20:51:04 -0700 Subject: [PATCH] parameterized_class: fix class name (#38109) * fix class name * comment --- common/parameterized.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/common/parameterized.py b/common/parameterized.py index 7cd21bb9c..f36d649da 100644 --- a/common/parameterized.py +++ b/common/parameterized.py @@ -1,8 +1,13 @@ +import re import sys import pytest import inspect +def _to_safe_name(s): + return re.sub(r"[^a-zA-Z0-9_]+", "_", str(s)).strip("_") + + class parameterized: @staticmethod def expand(cases): @@ -34,7 +39,9 @@ def parameterized_class(attrs, input_list=None): def decorator(cls): globs = sys._getframe(1).f_globals for i, params in enumerate(params_list): - name = f"{cls.__name__}_{i}" + # append sanitized string param values so pytest -k can filter by them + suffix = "_".join(filter(None, (_to_safe_name(v) for v in params.values() if isinstance(v, str)))) + name = f"{cls.__name__}_{i}" + (f"_{suffix}" if suffix else "") new_cls = type(name, (cls,), dict(params)) new_cls.__module__ = cls.__module__ new_cls.__test__ = True # override inherited False so pytest collects this subclass