Add __class_getitem__ to csv.DictReader and csv.DictWriter (#92393)

This commit is contained in:
Marc Mueller 2022-05-08 16:24:54 +02:00 committed by GitHub
parent 3680ebed7f
commit 5ed5c56123
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 12 additions and 1 deletions

View file

@ -4,6 +4,7 @@ csv.py - read/write/investigate CSV files
""" """
import re import re
import types
from _csv import Error, __version__, writer, reader, register_dialect, \ from _csv import Error, __version__, writer, reader, register_dialect, \
unregister_dialect, get_dialect, list_dialects, \ unregister_dialect, get_dialect, list_dialects, \
field_size_limit, \ field_size_limit, \
@ -126,6 +127,8 @@ class DictReader:
d[key] = self.restval d[key] = self.restval
return d return d
__class_getitem__ = classmethod(types.GenericAlias)
class DictWriter: class DictWriter:
def __init__(self, f, fieldnames, restval="", extrasaction="raise", def __init__(self, f, fieldnames, restval="", extrasaction="raise",
@ -156,6 +159,8 @@ class DictWriter:
def writerows(self, rowdicts): def writerows(self, rowdicts):
return self.writer.writerows(map(self._dict_to_list, rowdicts)) return self.writer.writerows(map(self._dict_to_list, rowdicts))
__class_getitem__ = classmethod(types.GenericAlias)
# Guard Sniffer's type checking against builds that exclude complex() # Guard Sniffer's type checking against builds that exclude complex()
try: try:
complex complex

View file

@ -11,6 +11,7 @@ from concurrent.futures import Future
from concurrent.futures.thread import _WorkItem from concurrent.futures.thread import _WorkItem
from contextlib import AbstractContextManager, AbstractAsyncContextManager from contextlib import AbstractContextManager, AbstractAsyncContextManager
from contextvars import ContextVar, Token from contextvars import ContextVar, Token
from csv import DictReader, DictWriter
from dataclasses import Field from dataclasses import Field
from functools import partial, partialmethod, cached_property from functools import partial, partialmethod, cached_property
from graphlib import TopologicalSorter from graphlib import TopologicalSorter
@ -122,7 +123,8 @@ class BaseTest(unittest.TestCase):
WeakSet, ReferenceType, ref, WeakSet, ReferenceType, ref,
ShareableList, ShareableList,
Future, _WorkItem, Future, _WorkItem,
Morsel] Morsel,
DictReader, DictWriter]
if ctypes is not None: if ctypes is not None:
generic_types.extend((ctypes.Array, ctypes.LibraryLoader)) generic_types.extend((ctypes.Array, ctypes.LibraryLoader))
if ValueProxy is not None: if ValueProxy is not None:

View file

@ -1228,6 +1228,7 @@ Alessandro Moura
Pablo Mouzo Pablo Mouzo
Mher Movsisyan Mher Movsisyan
Ruslan Mstoi Ruslan Mstoi
Marc Mueller
Valentina Mukhamedzhanova Valentina Mukhamedzhanova
Michael Mulich Michael Mulich
Sape Mullender Sape Mullender

View file

@ -0,0 +1,3 @@
Add :meth:`~object.__class_getitem__` to :class:`csv.DictReader` and
:class:`csv.DictWriter`, allowing them to be parameterized at runtime.
Patch by Marc Mueller.