**kwds arg was missing from __init__ for Dict{Reader,Writer} classes.

will backport.
This commit is contained in:
Skip Montanaro 2003-09-06 19:52:12 +00:00
parent 60e868abd2
commit 3f7a94824e
3 changed files with 14 additions and 4 deletions

View File

@ -93,11 +93,11 @@ register_dialect("excel-tab", excel_tab)
class DictReader: class DictReader:
def __init__(self, f, fieldnames, restkey=None, restval=None, 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.fieldnames = fieldnames # list of keys for the dict
self.restkey = restkey # key to catch long rows self.restkey = restkey # key to catch long rows
self.restval = restval # default value for short 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): def __iter__(self):
return self return self
@ -122,7 +122,7 @@ class DictReader:
class DictWriter: class DictWriter:
def __init__(self, f, fieldnames, restval="", extrasaction="raise", 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.fieldnames = fieldnames # list of keys for the dict
self.restval = restval # for writing short dicts self.restval = restval # for writing short dicts
if extrasaction.lower() not in ("raise", "ignore"): if extrasaction.lower() not in ("raise", "ignore"):
@ -130,7 +130,7 @@ class DictWriter:
("extrasaction (%s) must be 'raise' or 'ignore'" % ("extrasaction (%s) must be 'raise' or 'ignore'" %
extrasaction) extrasaction)
self.extrasaction = extrasaction self.extrasaction = extrasaction
self.writer = writer(f, dialect, *args) self.writer = writer(f, dialect, *args, **kwds)
def _dict_to_list(self, rowdict): def _dict_to_list(self, rowdict):
if self.extrasaction == "raise": if self.extrasaction == "raise":

View File

@ -447,6 +447,13 @@ class TestDictFields(unittest.TestCase):
self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc', self.assertEqual(reader.next(), {"1": '1', "2": '2', "3": 'abc',
"4": '4', "5": '5', "6": '6'}) "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): class TestArrayWrites(unittest.TestCase):
def test_int_write(self): def test_int_write(self):
import array import array

View File

@ -33,6 +33,9 @@ Extension modules
Library 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 - The email package handles some RFC 2231 parameters with missing
CHARSET fields better. It also includes a patch to parameter CHARSET fields better. It also includes a patch to parameter
parsing when semicolons appear inside quotes. parsing when semicolons appear inside quotes.