summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew McNamara <andrewm@object-craft.com.au>2005-01-11 01:07:23 (GMT)
committerAndrew McNamara <andrewm@object-craft.com.au>2005-01-11 01:07:23 (GMT)
commit91b97463cdbf9012a95633591545974a267a1ed7 (patch)
tree510dc23705cd954c4114240527b738753ce572d1
parentdbce2618b1c6dcd76a5ae68ee0bc4464b8faecb3 (diff)
downloadcpython-91b97463cdbf9012a95633591545974a267a1ed7.zip
cpython-91b97463cdbf9012a95633591545974a267a1ed7.tar.gz
cpython-91b97463cdbf9012a95633591545974a267a1ed7.tar.bz2
Factor out the code for making a dialect instance.
-rw-r--r--Modules/_csv.c40
1 files changed, 22 insertions, 18 deletions
diff --git a/Modules/_csv.c b/Modules/_csv.c
index 9f715e4..3876cd7 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -496,6 +496,24 @@ static PyTypeObject Dialect_Type = {
0, /* tp_free */
};
+/*
+ * Return an instance of the dialect type, given a Python instance or kwarg
+ * description of the dialect
+ */
+static PyObject *
+_call_dialect(PyObject *dialect_inst, PyObject *kwargs)
+{
+ PyObject *ctor_args;
+ PyObject *dialect;
+
+ ctor_args = Py_BuildValue(dialect_inst ? "(O)" : "()", dialect_inst);
+ if (ctor_args == NULL)
+ return NULL;
+ dialect = PyObject_Call((PyObject *)&Dialect_Type, ctor_args, kwargs);
+ Py_DECREF(ctor_args);
+ return dialect;
+}
+
static void
parse_save_field(ReaderObj *self)
{
@@ -862,7 +880,7 @@ static PyTypeObject Reader_Type = {
static PyObject *
csv_reader(PyObject *module, PyObject *args, PyObject *keyword_args)
{
- PyObject * iterator, * dialect = NULL, *ctor_args;
+ PyObject * iterator, * dialect = NULL;
ReaderObj * self = PyObject_GC_New(ReaderObj, &Reader_Type);
if (!self)
@@ -890,14 +908,7 @@ csv_reader(PyObject *module, PyObject *args, PyObject *keyword_args)
Py_DECREF(self);
return NULL;
}
- ctor_args = Py_BuildValue(dialect ? "(O)" : "()", dialect);
- if (ctor_args == NULL) {
- Py_DECREF(self);
- return NULL;
- }
- self->dialect = (DialectObj *)PyObject_Call((PyObject *)&Dialect_Type,
- ctor_args, keyword_args);
- Py_DECREF(ctor_args);
+ self->dialect = (DialectObj *)_call_dialect(dialect, keyword_args);
if (self->dialect == NULL) {
Py_DECREF(self);
return NULL;
@@ -1313,7 +1324,7 @@ static PyTypeObject Writer_Type = {
static PyObject *
csv_writer(PyObject *module, PyObject *args, PyObject *keyword_args)
{
- PyObject * output_file, * dialect = NULL, *ctor_args;
+ PyObject * output_file, * dialect = NULL;
WriterObj * self = PyObject_GC_New(WriterObj, &Writer_Type);
if (!self)
@@ -1338,14 +1349,7 @@ csv_writer(PyObject *module, PyObject *args, PyObject *keyword_args)
Py_DECREF(self);
return NULL;
}
- ctor_args = Py_BuildValue(dialect ? "(O)" : "()", dialect);
- if (ctor_args == NULL) {
- Py_DECREF(self);
- return NULL;
- }
- self->dialect = (DialectObj *)PyObject_Call((PyObject *)&Dialect_Type,
- ctor_args, keyword_args);
- Py_DECREF(ctor_args);
+ self->dialect = (DialectObj *)_call_dialect(dialect, keyword_args);
if (self->dialect == NULL) {
Py_DECREF(self);
return NULL;