summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_csv.py18
-rw-r--r--Modules/_csv.c43
2 files changed, 6 insertions, 55 deletions
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
index cdda179..34177cc 100644
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -24,25 +24,12 @@ class Test_Csv(unittest.TestCase):
self.assertRaises(TypeError, ctor, arg, delimiter = 0)
self.assertRaises(TypeError, ctor, arg, delimiter = 'XX')
self.assertRaises(csv.Error, ctor, arg, 'foo')
- self.assertRaises(TypeError, ctor, arg, None)
self.assertRaises(TypeError, ctor, arg, delimiter=None)
self.assertRaises(TypeError, ctor, arg, delimiter=1)
self.assertRaises(TypeError, ctor, arg, quotechar=1)
self.assertRaises(TypeError, ctor, arg, lineterminator=None)
self.assertRaises(TypeError, ctor, arg, lineterminator=1)
self.assertRaises(TypeError, ctor, arg, quoting=None)
-# We now allow this, only raising an exception if quoting is needed.
-# self.assertRaises(TypeError, ctor, arg, quotechar=None)
-# self.assertRaises(TypeError, ctor, arg,
-# quoting=csv.QUOTE_NONE, escapechar=None)
-# No longer complains about dialects with invalid attributes [AM]
-# class BadDialect:
-# bad_attr = 0
-# self.assertRaises(AttributeError, csv.reader, [], BadDialect)
- class BadClass:
- def __init__(self):
- raise IOError
- self.assertRaises(IOError, csv.reader, [], BadClass)
def test_reader_arg_valid(self):
self._test_arg_valid(csv.reader, [])
@@ -258,11 +245,6 @@ class TestDialectRegistry(unittest.TestCase):
self.assertRaises(csv.Error, csv.unregister_dialect, "nonesuch")
self.assertRaises(TypeError, csv.register_dialect, None)
self.assertRaises(TypeError, csv.register_dialect, None, None)
- self.assertRaises(TypeError, csv.register_dialect, "nonesuch", None)
- class bogus:
- def __init__(self):
- raise KeyError
- self.assertRaises(KeyError, csv.register_dialect, "nonesuch", bogus)
def test_registry(self):
class myexceltsv(csv.excel):
diff --git a/Modules/_csv.c b/Modules/_csv.c
index 405bc71..34870fc 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -288,40 +288,6 @@ Dialect_dealloc(DialectObj *self)
self->ob_type->tp_free((PyObject *)self);
}
-/*
- * Return a new reference to a dialect instance
- *
- * If given a string, looks up the name in our dialect registry
- * If given a class, instantiate (which runs python validity checks)
- * If given an instance, return a new reference to the instance
- */
-static PyObject *
-dialect_instantiate(PyObject *dialect)
-{
- Py_INCREF(dialect);
- /* If dialect is a string, look it up in our registry */
- if (IS_BASESTRING(dialect)) {
- PyObject * new_dia;
- new_dia = get_dialect_from_registry(dialect);
- Py_DECREF(dialect);
- return new_dia;
- }
- /* A class rather than an instance? Instantiate */
- if (PyObject_TypeCheck(dialect, &PyClass_Type)) {
- PyObject * new_dia;
- new_dia = PyObject_CallFunction(dialect, "");
- Py_DECREF(dialect);
- return new_dia;
- }
- /* Make sure we finally have an instance */
- if (!PyInstance_Check(dialect)) {
- PyErr_SetString(PyExc_TypeError, "dialect must be an instance");
- Py_DECREF(dialect);
- return NULL;
- }
- return dialect;
-}
-
static char *dialect_kws[] = {
"dialect",
"delimiter",
@@ -371,9 +337,12 @@ dialect_init(DialectObj * self, PyObject * args, PyObject * kwargs)
Py_XINCREF(skipinitialspace);
Py_XINCREF(strict);
if (dialect != NULL) {
- dialect = dialect_instantiate(dialect);
- if (dialect == NULL)
- goto err;
+ if (IS_BASESTRING(dialect)) {
+ dialect = get_dialect_from_registry(dialect);
+ if (dialect == NULL)
+ goto err;
+ } else
+ Py_INCREF(dialect);
#define DIALECT_GETATTR(v, n) \
if (v == NULL) \
v = PyObject_GetAttrString(dialect, n)