From d2301258d2b8981b6fd75bd59d32376c0fe99b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20H=C3=B6ffner?= Date: Sun, 18 Dec 2022 15:29:29 +0100 Subject: [PATCH 1/2] gh-73138 Add strict attribute to csv.Dialect --- Lib/csv.py | 3 ++- .../next/Library/2022-12-18-21-24-48.gh-issue-73138.9TOxub.rst | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2022-12-18-21-24-48.gh-issue-73138.9TOxub.rst diff --git a/Lib/csv.py b/Lib/csv.py index 75e35b23236795f..6d9827ecd802de2 100644 --- a/Lib/csv.py +++ b/Lib/csv.py @@ -90,7 +90,7 @@ class Dialect: This must be subclassed (see csv.excel). Valid attributes are: delimiter, quotechar, escapechar, doublequote, skipinitialspace, - lineterminator, quoting. + lineterminator, quoting, strict. """ _name = "" @@ -103,6 +103,7 @@ class Dialect: skipinitialspace = None lineterminator = None quoting = None + strict = None def __init__(self): if self.__class__ != Dialect: diff --git a/Misc/NEWS.d/next/Library/2022-12-18-21-24-48.gh-issue-73138.9TOxub.rst b/Misc/NEWS.d/next/Library/2022-12-18-21-24-48.gh-issue-73138.9TOxub.rst new file mode 100644 index 000000000000000..dd86309410bb220 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-12-18-21-24-48.gh-issue-73138.9TOxub.rst @@ -0,0 +1 @@ +Add missing :attr:`Dialect.strict` attribute to :class:`csv.Dialect`. From be5cee2e0825d5add3043e59460a29c485112af8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20H=C3=B6ffner?= Date: Sun, 18 Dec 2022 15:32:05 +0100 Subject: [PATCH 2/2] gh-100335 Use correct default attrs for Dialect --- Lib/csv.py | 14 +++++++------- Lib/test/test_csv.py | 13 +++++++++++++ .../2022-12-18-21-57-36.gh-issue-100335.89i6HX.rst | 2 ++ 3 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2022-12-18-21-57-36.gh-issue-100335.89i6HX.rst diff --git a/Lib/csv.py b/Lib/csv.py index 6d9827ecd802de2..13afbd0055178b4 100644 --- a/Lib/csv.py +++ b/Lib/csv.py @@ -96,14 +96,14 @@ class Dialect: _name = "" _valid = False # placeholders - delimiter = None - quotechar = None + delimiter = ',' + quotechar = '"' escapechar = None - doublequote = None - skipinitialspace = None - lineterminator = None - quoting = None - strict = None + doublequote = True + skipinitialspace = False + lineterminator = '\r\n' + quoting = QUOTE_MINIMAL + strict = False def __init__(self): if self.__class__ != Dialect: diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index d74ab7e016f78c0..ee28d81c44e3581 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -138,6 +138,18 @@ def _test_kw_attrs(self, ctor, *args): self.assertIs(obj.dialect.skipinitialspace, True) self.assertIs(obj.dialect.strict, True) + def test_default_attrs(self): + class dialect(csv.Dialect): + pass + self.assertEqual(dialect.delimiter, ',') + self.assertEqual(dialect.doublequote, True) + self.assertEqual(dialect.escapechar, None) + self.assertEqual(dialect.lineterminator, '\r\n') + self.assertEqual(dialect.quotechar, '"') + self.assertEqual(dialect.quoting, csv.QUOTE_MINIMAL) + self.assertEqual(dialect.skipinitialspace, False) + self.assertEqual(dialect.strict, False) + def test_reader_kw_attrs(self): self._test_kw_attrs(csv.reader, []) @@ -616,6 +628,7 @@ class mydialect(csv.Dialect): def test_incomplete_dialect(self): class myexceltsv(csv.Dialect): delimiter = "\t" + quoting = None self.assertRaises(csv.Error, myexceltsv) def test_space_dialect(self): diff --git a/Misc/NEWS.d/next/Library/2022-12-18-21-57-36.gh-issue-100335.89i6HX.rst b/Misc/NEWS.d/next/Library/2022-12-18-21-57-36.gh-issue-100335.89i6HX.rst new file mode 100644 index 000000000000000..6b74135ed76323a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-12-18-21-57-36.gh-issue-100335.89i6HX.rst @@ -0,0 +1,2 @@ +Set the attribute values of :class:`csv.Dialect` to their documented +defaults, see :ref:`csv-fmt-params`.