Skip to content

Commit 7130ff5

Browse files
committed
Replace python-coded validation of csv dialect with a call to the C
dialect type (which has a better idea of what is and isn't valid).
1 parent 8c94b42 commit 7130ff5

2 files changed

Lines changed: 7 additions & 44 deletions

File tree

Lib/csv.py

Lines changed: 7 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
unregister_dialect, get_dialect, list_dialects, \
99
QUOTE_MINIMAL, QUOTE_ALL, QUOTE_NONNUMERIC, QUOTE_NONE, \
1010
__doc__
11+
from _csv import Dialect as _Dialect
1112

1213
try:
1314
from cStringIO import StringIO
@@ -41,48 +42,14 @@ class Dialect:
4142
def __init__(self):
4243
if self.__class__ != Dialect:
4344
self._valid = True
44-
errors = self._validate()
45-
if errors != []:
46-
raise Error, "Dialect did not validate: %s" % ", ".join(errors)
45+
self._validate()
4746

4847
def _validate(self):
49-
errors = []
50-
if not self._valid:
51-
errors.append("can't directly instantiate Dialect class")
52-
53-
if self.delimiter is None:
54-
errors.append("delimiter character not set")
55-
elif (not isinstance(self.delimiter, str) or
56-
len(self.delimiter) > 1):
57-
errors.append("delimiter must be one-character string")
58-
59-
if self.quotechar is None:
60-
if self.quoting != QUOTE_NONE:
61-
errors.append("quotechar not set")
62-
elif (not isinstance(self.quotechar, str) or
63-
len(self.quotechar) > 1):
64-
errors.append("quotechar must be one-character string")
65-
66-
if self.lineterminator is None:
67-
errors.append("lineterminator not set")
68-
elif not isinstance(self.lineterminator, str):
69-
errors.append("lineterminator must be a string")
70-
71-
if self.doublequote not in (True, False) and self.quoting != QUOTE_NONE:
72-
errors.append("doublequote parameter must be True or False")
73-
74-
if self.skipinitialspace not in (True, False):
75-
errors.append("skipinitialspace parameter must be True or False")
76-
77-
if self.quoting is None:
78-
errors.append("quoting parameter not set")
79-
80-
if self.quoting is QUOTE_NONE:
81-
if (not isinstance(self.escapechar, (unicode, str)) or
82-
len(self.escapechar) > 1):
83-
errors.append("escapechar must be a one-character string or unicode object")
84-
85-
return errors
48+
try:
49+
_Dialect(self)
50+
except TypeError, e:
51+
# We do this for compatibility with py2.3
52+
raise Error(str(e))
8653

8754
class excel(Dialect):
8855
"""Describe the usual properties of Excel-generated CSV files."""

Lib/test/test_csv.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -727,10 +727,6 @@ class mydialect(csv.Dialect):
727727
mydialect.quoting = None
728728
self.assertRaises(csv.Error, mydialect)
729729

730-
mydialect.quoting = csv.QUOTE_NONE
731-
mydialect.escapechar = None
732-
self.assertRaises(csv.Error, mydialect)
733-
734730
mydialect.doublequote = True
735731
mydialect.quoting = csv.QUOTE_ALL
736732
mydialect.quotechar = '"'

0 commit comments

Comments
 (0)