From bffcc4351aa49bc9196a2e24ea9aaf93eb06426b Mon Sep 17 00:00:00 2001 From: Max Muoto Date: Sat, 10 May 2025 02:43:55 -0500 Subject: [PATCH 1/3] Update _csv.pyi to use Literal for _QuotingType based on Python version. Adjust type aliasing for better type safety in CSV quoting options. --- stdlib/_csv.pyi | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/stdlib/_csv.pyi b/stdlib/_csv.pyi index aa9fc538417e..ecea4878907c 100644 --- a/stdlib/_csv.pyi +++ b/stdlib/_csv.pyi @@ -2,7 +2,7 @@ import csv import sys from _typeshed import SupportsWrite from collections.abc import Iterable -from typing import Any, Final, type_check_only +from typing import Any, Final, Literal, type_check_only from typing_extensions import Self, TypeAlias __version__: Final[str] @@ -15,9 +15,10 @@ if sys.version_info >= (3, 12): QUOTE_STRINGS: Final = 4 QUOTE_NOTNULL: Final = 5 -# Ideally this would be `QUOTE_ALL | QUOTE_MINIMAL | QUOTE_NONE | QUOTE_NONNUMERIC` -# However, using literals in situations like these can cause false-positives (see #7258) -_QuotingType: TypeAlias = int +if sys.version_info >= (3, 12): + _QuotingType: TypeAlias = Literal[0, 1, 2, 3, 4, 5] +else: + _QuotingType: TypeAlias = Literal[0, 1, 2, 3] class Error(Exception): ... From b1d62836826a613b605b25bb94ccd557adffc007 Mon Sep 17 00:00:00 2001 From: Max Muoto Date: Sat, 10 May 2025 02:48:12 -0500 Subject: [PATCH 2/3] Add test --- stdlib/@tests/test_cases/check_csv.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 stdlib/@tests/test_cases/check_csv.py diff --git a/stdlib/@tests/test_cases/check_csv.py b/stdlib/@tests/test_cases/check_csv.py new file mode 100644 index 000000000000..729a4491deb2 --- /dev/null +++ b/stdlib/@tests/test_cases/check_csv.py @@ -0,0 +1,14 @@ +import csv +import sys + +csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_ALL) +csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_MINIMAL) +csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_NONE) +csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_NONNUMERIC) + +if sys.version_info >= (3, 12): + csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_STRINGS) + csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_NOTNULL) + + +csv.reader(open("test.csv", "r"), quoting=20) # type: ignore From 95d040d609e31c7e868ac0d421816ab137e19bd6 Mon Sep 17 00:00:00 2001 From: Max Muoto Date: Sat, 10 May 2025 12:05:16 -0500 Subject: [PATCH 3/3] Remove tests --- stdlib/@tests/test_cases/check_csv.py | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 stdlib/@tests/test_cases/check_csv.py diff --git a/stdlib/@tests/test_cases/check_csv.py b/stdlib/@tests/test_cases/check_csv.py deleted file mode 100644 index 729a4491deb2..000000000000 --- a/stdlib/@tests/test_cases/check_csv.py +++ /dev/null @@ -1,14 +0,0 @@ -import csv -import sys - -csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_ALL) -csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_MINIMAL) -csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_NONE) -csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_NONNUMERIC) - -if sys.version_info >= (3, 12): - csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_STRINGS) - csv.writer(open("test.csv", "w"), quoting=csv.QUOTE_NOTNULL) - - -csv.reader(open("test.csv", "r"), quoting=20) # type: ignore