static PyObject * csv_register_dialect(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *name_obj, *dialect_obj = NULL; PyObject *dialect; if (!PyArg_UnpackTuple(args, "", 1, 2, &name_obj, &dialect_obj)) return NULL; if (!PyUnicode_Check(name_obj)) { PyErr_SetString(PyExc_TypeError, "dialect name must be a string"); return NULL; } if (PyUnicode_READY(name_obj) == -1) return NULL; dialect = _call_dialect(dialect_obj, kwargs); if (dialect == NULL) return NULL; if (PyDict_SetItem(_csvstate_global->dialects, name_obj, dialect) < 0) { Py_DECREF(dialect); return NULL; } Py_DECREF(dialect); Py_RETURN_NONE; }
static PyObject * csv_reader(PyObject *module, PyObject *args, PyObject *keyword_args) { PyObject * iterator, * dialect = NULL; ReaderObj * self = PyObject_GC_New(ReaderObj, &Reader_Type); if (!self) return NULL; self->dialect = NULL; self->fields = NULL; self->input_iter = NULL; self->field = NULL; self->field_size = 0; self->line_num = 0; if (parse_reset(self) < 0) { Py_DECREF(self); return NULL; } if (!PyArg_UnpackTuple(args, "", 1, 2, &iterator, &dialect)) { Py_DECREF(self); return NULL; } self->input_iter = PyObject_GetIter(iterator); if (self->input_iter == NULL) { PyErr_SetString(PyExc_TypeError, "argument 1 must be an iterator"); Py_DECREF(self); return NULL; } self->dialect = (DialectObj *)_call_dialect(dialect, keyword_args); if (self->dialect == NULL) { Py_DECREF(self); return NULL; } PyObject_GC_Track(self); return (PyObject *)self; }
static PyObject * csv_writer(PyObject *module, PyObject *args, PyObject *keyword_args) { PyObject * output_file, * dialect = NULL; WriterObj * self = PyObject_GC_New(WriterObj, &Writer_Type); _Py_IDENTIFIER(write); if (!self) return NULL; self->dialect = NULL; self->writeline = NULL; self->rec = NULL; self->rec_size = 0; self->rec_len = 0; self->num_fields = 0; if (!PyArg_UnpackTuple(args, "", 1, 2, &output_file, &dialect)) { Py_DECREF(self); return NULL; } self->writeline = _PyObject_GetAttrId(output_file, &PyId_write); if (self->writeline == NULL || !PyCallable_Check(self->writeline)) { PyErr_SetString(PyExc_TypeError, "argument 1 must have a \"write\" method"); Py_DECREF(self); return NULL; } self->dialect = (DialectObj *)_call_dialect(dialect, keyword_args); if (self->dialect == NULL) { Py_DECREF(self); return NULL; } PyObject_GC_Track(self); return (PyObject *)self; }
static PyObject * csv_register_dialect(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *name_obj, *dialect_obj = NULL; PyObject *dialect; if (!PyArg_UnpackTuple(args, "", 1, 2, &name_obj, &dialect_obj)) return NULL; if (!IS_BASESTRING(name_obj)) { PyErr_SetString(PyExc_TypeError, "dialect name must be a string or unicode"); return NULL; } dialect = _call_dialect(dialect_obj, kwargs); if (dialect == NULL) return NULL; if (PyDict_SetItem(dialects, name_obj, dialect) < 0) { Py_DECREF(dialect); return NULL; } Py_DECREF(dialect); Py_INCREF(Py_None); return Py_None; }