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).
diff --git a/Lib/csv.py b/Lib/csv.py
index d08a86b..37bdba5 100644
--- a/Lib/csv.py
+++ b/Lib/csv.py
@@ -8,6 +8,7 @@
                  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 @@
     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 34177cc..ff45b61 100644
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -727,10 +727,6 @@
         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 = '"'