]> granicus.if.org Git - python/commitdiff
bpo-27497: Add return value to csv.DictWriter.writeheader (GH-12306)
authorRémi Lapeyre <remi.lapeyre@henki.fr>
Fri, 10 May 2019 01:50:11 +0000 (03:50 +0200)
committerVictor Stinner <vstinner@redhat.com>
Fri, 10 May 2019 01:50:11 +0000 (03:50 +0200)
csv.DictWriter.writeheader() now returns the return value of the
underlying csv.Writer.writerow() method.

Patch contributed by Ashish Nitin Patil.

Doc/library/csv.rst
Lib/csv.py
Lib/test/test_csv.py
Misc/NEWS.d/next/Library/2019-03-13-10-57-41.bpo-27497.JDmIe_.rst [new file with mode: 0644]

index 17534fcc4615dc5c5d72cc4cbf725d5917edf1e3..49e22fa73ed2655ad2887c934b09aa48936754bd 100644 (file)
@@ -443,7 +443,8 @@ read CSV files (assuming they support complex numbers at all).
 .. method:: csvwriter.writerow(row)
 
    Write the *row* parameter to the writer's file object, formatted according to
-   the current dialect.
+   the current dialect. Return the return value of the call to the *write* method
+   of the underlying file object.
 
    .. versionchanged:: 3.5
       Added support of arbitrary iterables.
@@ -467,9 +468,14 @@ DictWriter objects have the following public method:
 
 .. method:: DictWriter.writeheader()
 
-   Write a row with the field names (as specified in the constructor).
+   Write a row with the field names (as specified in the constructor) to
+   the writer's file object, formatted according to the current dialect. Return
+   the return value of the :meth:`csvwriter.writerow` call used internally.
 
    .. versionadded:: 3.2
+   .. versionchanged:: 3.8
+      :meth:`writeheader` now also returns the value returned by
+      the :meth:`csvwriter.writerow` method it uses internally.
 
 
 .. _csv-examples:
index eeeedabc6bb8a223ede2b783058172a44bd9678c..dc85077f3ec663642d315a1ff1311d71e20f0169 100644 (file)
@@ -140,7 +140,7 @@ class DictWriter:
 
     def writeheader(self):
         header = dict(zip(self.fieldnames, self.fieldnames))
-        self.writerow(header)
+        return self.writerow(header)
 
     def _dict_to_list(self, rowdict):
         if self.extrasaction == "raise":
index 7a333139b5ea2c6b5df8a530c2d134f738ba057e..a16d14019f341f6bd0a6afba037d2fb6f6deb6b4 100644 (file)
@@ -608,6 +608,12 @@ class TestQuotedEscapedExcel(TestCsvBase):
 class TestDictFields(unittest.TestCase):
     ### "long" means the row is longer than the number of fieldnames
     ### "short" means there are fewer elements in the row than fieldnames
+    def test_writeheader_return_value(self):
+        with TemporaryFile("w+", newline='') as fileobj:
+            writer = csv.DictWriter(fileobj, fieldnames = ["f1", "f2", "f3"])
+            writeheader_return_value = writer.writeheader()
+            self.assertEqual(writeheader_return_value, 10)
+
     def test_write_simple_dict(self):
         with TemporaryFile("w+", newline='') as fileobj:
             writer = csv.DictWriter(fileobj, fieldnames = ["f1", "f2", "f3"])
diff --git a/Misc/NEWS.d/next/Library/2019-03-13-10-57-41.bpo-27497.JDmIe_.rst b/Misc/NEWS.d/next/Library/2019-03-13-10-57-41.bpo-27497.JDmIe_.rst
new file mode 100644 (file)
index 0000000..f6da114
--- /dev/null
@@ -0,0 +1,3 @@
+:meth:`csv.DictWriter.writeheader` now returns the return value of the
+underlying :meth:`csv.Writer.writerow` method. Patch contributed by Ashish
+Nitin Patil.