]> granicus.if.org Git - python/commitdiff
Issue #2432: give DictReader the dialect and line_num attributes
authorGeorg Brandl <georg@python.org>
Fri, 21 Mar 2008 20:01:55 +0000 (20:01 +0000)
committerGeorg Brandl <georg@python.org>
Fri, 21 Mar 2008 20:01:55 +0000 (20:01 +0000)
advertised in the docs.
 (backport from r61712)

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

index f213854783eb67f1483e3abeeb94c70afefa8193..c8e84813965c17318adc283b8cfa8876394562b8 100644 (file)
@@ -75,6 +75,8 @@ class DictReader:
         self.restkey = restkey          # key to catch long rows
         self.restval = restval          # default value for short rows
         self.reader = reader(f, dialect, *args, **kwds)
+        self.dialect = dialect
+        self.line_num = 0
 
     def __iter__(self):
         return self
@@ -84,6 +86,7 @@ class DictReader:
         if self.fieldnames is None:
             self.fieldnames = row
             row = self.reader.next()
+        self.line_num = self.reader.line_num
 
         # unlike the basic reader, we prefer not to return blanks,
         # because we will typically wind up with a dict full of None
index feb6ddf61398dca62be5360a0a458a232f0da892..a7e81744a7aa1c2300d34718184c9702e30666cc 100644 (file)
@@ -269,16 +269,18 @@ class Test_Csv(unittest.TestCase):
             csv.field_size_limit(limit)
 
     def test_read_linenum(self):
-        r = csv.reader(['line,1', 'line,2', 'line,3'])
-        self.assertEqual(r.line_num, 0)
-        r.next()
-        self.assertEqual(r.line_num, 1)
-        r.next()
-        self.assertEqual(r.line_num, 2)
-        r.next()
-        self.assertEqual(r.line_num, 3)
-        self.assertRaises(StopIteration, r.next)
-        self.assertEqual(r.line_num, 3)
+        for r in (csv.reader(['line,1', 'line,2', 'line,3']),
+                  csv.DictReader(['line,1', 'line,2', 'line,3'],
+                                 fieldnames=['a', 'b', 'c'])):
+            self.assertEqual(r.line_num, 0)
+            r.next()
+            self.assertEqual(r.line_num, 1)
+            r.next()
+            self.assertEqual(r.line_num, 2)
+            r.next()
+            self.assertEqual(r.line_num, 3)
+            self.assertRaises(StopIteration, r.next)
+            self.assertEqual(r.line_num, 3)
 
 class TestDialectRegistry(unittest.TestCase):
     def test_registry_badargs(self):
index f8f8735e03a30c50c0a3fc967c8c86bd8abd1ad7..a97fa52b2601516f089e8b46350fa18b8236e7cb 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -20,6 +20,9 @@ Core and builtins
 Library
 -------
 
+- Issue #2432: give DictReader the dialect and line_num attributes
+  advertised in the docs.
+
 - Issue #1747858: Fix chown to work with large uid's and gid's on 64-bit
   platforms.