From 7130ff5eb9ad0edf5cf0c8811ceea155f11194eb Mon Sep 17 00:00:00 2001 From: Andrew McNamara Date: Tue, 11 Jan 2005 02:22:47 +0000 Subject: [PATCH] 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). --- Lib/csv.py | 47 +++++++------------------------------------- Lib/test/test_csv.py | 4 ---- 2 files changed, 7 insertions(+), 44 deletions(-) diff --git a/Lib/csv.py b/Lib/csv.py index d08a86b6be8..37bdba524ad 100644 --- a/Lib/csv.py +++ b/Lib/csv.py @@ -8,6 +8,7 @@ from _csv import Error, __version__, writer, reader, register_dialect, \ unregister_dialect, get_dialect, list_dialects, \ QUOTE_MINIMAL, QUOTE_ALL, QUOTE_NONNUMERIC, QUOTE_NONE, \ __doc__ +from _csv import Dialect as _Dialect try: from cStringIO import StringIO @@ -41,48 +42,14 @@ class Dialect: def __init__(self): if self.__class__ != Dialect: self._valid = True - errors = self._validate() - if errors != []: - raise Error, "Dialect did not validate: %s" % ", ".join(errors) + self._validate() def _validate(self): - errors = [] - if not self._valid: - errors.append("can't directly instantiate Dialect class") - - if self.delimiter is None: - errors.append("delimiter character not set") - elif (not isinstance(self.delimiter, str) or - len(self.delimiter) > 1): - errors.append("delimiter must be one-character string") - - if self.quotechar is None: - if self.quoting != QUOTE_NONE: - errors.append("quotechar not set") - elif (not isinstance(self.quotechar, str) or - len(self.quotechar) > 1): - errors.append("quotechar must be one-character string") - - if self.lineterminator is None: - errors.append("lineterminator not set") - elif not isinstance(self.lineterminator, str): - errors.append("lineterminator must be a string") - - if self.doublequote not in (True, False) and self.quoting != QUOTE_NONE: - errors.append("doublequote parameter must be True or False") - - if self.skipinitialspace not in (True, False): - errors.append("skipinitialspace parameter must be True or False") - - if self.quoting is None: - errors.append("quoting parameter not set") - - if self.quoting is QUOTE_NONE: - if (not isinstance(self.escapechar, (unicode, str)) or - len(self.escapechar) > 1): - errors.append("escapechar must be a one-character string or unicode object") - - return errors + try: + _Dialect(self) + except TypeError, e: + # We do this for compatibility with py2.3 + raise Error(str(e)) class excel(Dialect): """Describe the usual properties of Excel-generated CSV files.""" diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 34177ccec39..ff45b611371 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -727,10 +727,6 @@ class TestDialectValidity(unittest.TestCase): mydialect.quoting = None self.assertRaises(csv.Error, mydialect) - mydialect.quoting = csv.QUOTE_NONE - mydialect.escapechar = None - self.assertRaises(csv.Error, mydialect) - mydialect.doublequote = True mydialect.quoting = csv.QUOTE_ALL mydialect.quotechar = '"'