]> granicus.if.org Git - python/commitdiff
**kwds arg was missing from __init__ for Dict{Reader,Writer} classes.
authorSkip Montanaro <skip@pobox.com>
Sat, 6 Sep 2003 19:52:12 +0000 (19:52 +0000)
committerSkip Montanaro <skip@pobox.com>
Sat, 6 Sep 2003 19:52:12 +0000 (19:52 +0000)
will backport.

Lib/csv.py
Lib/test/test_csv.py
Misc/NEWS

index fcb8a8fedcea790cb4c1759d80142a691d8fedfc..096badc7bbc25923c241dc3636056ca34632f2ee 100644 (file)
@@ -93,11 +93,11 @@ register_dialect("excel-tab", excel_tab)
 
 class DictReader:
     def __init__(self, f, fieldnames, restkey=None, restval=None,
-                 dialect="excel", *args):
+                 dialect="excel", *args, **kwds):
         self.fieldnames = fieldnames    # list of keys for the dict
         self.restkey = restkey          # key to catch long rows
         self.restval = restval          # default value for short rows
-        self.reader = reader(f, dialect, *args)
+        self.reader = reader(f, dialect, *args, **kwds)
 
     def __iter__(self):
         return self
@@ -122,7 +122,7 @@ class DictReader:
 
 class DictWriter:
     def __init__(self, f, fieldnames, restval="", extrasaction="raise",
-                 dialect="excel", *args):
+                 dialect="excel", *args, **kwds):
         self.fieldnames = fieldnames    # list of keys for the dict
         self.restval = restval          # for writing short dicts
         if extrasaction.lower() not in ("raise", "ignore"):
@@ -130,7 +130,7 @@ class DictWriter:
                   ("extrasaction (%s) must be 'raise' or 'ignore'" %
                    extrasaction)
         self.extrasaction = extrasaction
-        self.writer = writer(f, dialect, *args)
+        self.writer = writer(f, dialect, *args, **kwds)
 
     def _dict_to_list(self, rowdict):
         if self.extrasaction == "raise":
index ba7cc091b1c6ec92a2e609fd78684bcc3751da09..d85c5b6cb39d487b0da333236f409cd26b9f025c 100644 (file)
@@ -447,6 +447,13 @@ class TestDictFields(unittest.TestCase):
         self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
                                          "4": '4', "5": '5', "6": '6'})
 
+    def test_read_semi_sep(self):
+        reader = csv.DictReader(["1;2;abc;4;5;6\r\n"],
+                                fieldnames="1 2 3 4 5 6".split(),
+                                delimiter=';')
+        self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
+                                         "4": '4', "5": '5', "6": '6'})
+
 class TestArrayWrites(unittest.TestCase):
     def test_int_write(self):
         import array
index b016161a7c801d161382ddff1c957441eeb6fd7e..a3b3a6c1e542a30bcaa5fc813e744d8453f5bb97 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -33,6 +33,9 @@ Extension modules
 Library
 -------
 
+- The csv module's DictReader and DictWriter classes now accept keyword
+  arguments.  This was an omission in the initial implementation.
+
 - The email package handles some RFC 2231 parameters with missing
   CHARSET fields better.  It also includes a patch to parameter
   parsing when semicolons appear inside quotes.