summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew McNamara <andrewm@object-craft.com.au>2005-01-11 02:18:36 (GMT)
committerAndrew McNamara <andrewm@object-craft.com.au>2005-01-11 02:18:36 (GMT)
commit8c94b42f31515ca6b552cb427aea0cd446098dd9 (patch)
tree949203c2afb74e80f46dc9124cfee0401c64c0d0
parent86625972a1e330e200a3ae34f414a6caf12c6502 (diff)
downloadcpython-8c94b42f31515ca6b552cb427aea0cd446098dd9.zip
cpython-8c94b42f31515ca6b552cb427aea0cd446098dd9.tar.gz
cpython-8c94b42f31515ca6b552cb427aea0cd446098dd9.tar.bz2
No longer attempt to instantiate python classes describing dialects. This
was done because we were previously performing validation of the dialect from python, but this is now down within the C module. Also, the method we were using to detect classes did not work with new-style classes.
-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)