[Python-checkins] python/nondist/sandbox/csv _csv.c,1.15,1.16

davecole@users.sourceforge.net davecole@users.sourceforge.net
Wed, 05 Feb 2003 02:30:09 -0800


Update of /cvsroot/python/python/nondist/sandbox/csv
In directory sc8-pr-cvs1:/tmp/cvs-serv30447

Modified Files:
	_csv.c 
Log Message:
Replace the cut & paste QUOTE_* code in module init with a loop.
Removed the have_quotechar attribute and use quoting == QUOTE_NONE instead.


Index: _csv.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/csv/_csv.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** _csv.c	5 Feb 2003 03:20:51 -0000	1.15
--- _csv.c	5 Feb 2003 10:30:06 -0000	1.16
***************
*** 50,58 ****
  
  typedef struct {
  	PyObject_HEAD
  
  	int doublequote;	/* is " represented by ""? */
  	char delimiter;		/* field separator */
- 	int have_quotechar;	/* is a quotechar defined */
  	char quotechar;		/* quote character */
  	int have_escapechar;	/* is an escapechar defined */
--- 50,70 ----
  
  typedef struct {
+ 	QuoteStyle style;
+ 	char *name;
+ } StyleDesc;
+ 
+ static StyleDesc quote_styles[] = {
+ 	{ QUOTE_MINIMAL,    "QUOTE_MINIMAL" },
+ 	{ QUOTE_ALL,        "QUOTE_ALL" },
+ 	{ QUOTE_NONNUMERIC, "QUOTE_NONNUMERIC" },
+ 	{ QUOTE_NONE,       "QUOTE_NONE" },
+ 	{ 0 }
+ };
+ 
+ typedef struct {
  	PyObject_HEAD
  
  	int doublequote;	/* is " represented by ""? */
  	char delimiter;		/* field separator */
  	char quotechar;		/* quote character */
  	int have_escapechar;	/* is an escapechar defined */
***************
*** 262,266 ****
  	case QUOTE_IN_QUOTED_FIELD:
  		/* doublequote - seen a quote in an quoted field */
! 		if (self->have_quotechar && c == self->quotechar) {
  			/* save "" as " */
  			parse_add_char(self, c);
--- 274,278 ----
  	case QUOTE_IN_QUOTED_FIELD:
  		/* doublequote - seen a quote in an quoted field */
! 		if (self->quoting != QUOTE_NONE && c == self->quotechar) {
  			/* save "" as " */
  			parse_add_char(self, c);
***************
*** 447,451 ****
  		 * quote.
  		 */
! 		if (self->have_quotechar
  		    && c == self->quotechar && self->doublequote) {
  			if (copy_phase)
--- 459,463 ----
  		 * quote.
  		 */
! 		if (self->quoting != QUOTE_NONE
  		    && c == self->quotechar && self->doublequote) {
  			if (copy_phase)
***************
*** 464,469 ****
  		    && (c == self->delimiter || c == self->escapechar
  			|| c == '\n' || c == '\r')) {
! 			if (self->have_quotechar
! 			    && self->quoting != QUOTE_NONE)
  				*quoted = 1;
  			else if (self->escapechar) {
--- 476,480 ----
  		    && (c == self->delimiter || c == self->escapechar
  			|| c == '\n' || c == '\r')) {
! 			if (self->quoting != QUOTE_NONE)
  				*quoted = 1;
  			else if (self->escapechar) {
***************
*** 486,491 ****
  	/* If field is empty check if it needs to be quoted.
  	 */
! 	if (i == 0 && quote_empty && self->have_quotechar)
! 		*quoted = 1;
  
  	/* Handle final quote character on field.
--- 497,507 ----
  	/* If field is empty check if it needs to be quoted.
  	 */
! 	if (i == 0 && quote_empty) {
! 		if (self->quoting == QUOTE_NONE) {
! 			raise_exception("single empty field record must be quoted");
! 			return -1;
! 		} else
! 			*quoted = 1;
! 	}
  
  	/* Handle final quote character on field.
***************
*** 679,684 ****
  	PyObject *rv;
  
! 	if ((strcmp(name, "quotechar") == 0 && !self->have_quotechar)
! 	    || (strcmp(name, "escapechar") == 0 && !self->have_escapechar)) {
  		Py_INCREF(Py_None);
  		return Py_None;
--- 695,699 ----
  	PyObject *rv;
  
! 	if (strcmp(name, "escapechar") == 0 && !self->have_escapechar) {
  		Py_INCREF(Py_None);
  		return Py_None;
***************
*** 723,730 ****
  		return -1;
  	}
! 	if (strcmp(name, "quotechar") == 0)
! 		return _set_char_attr(&self->quotechar,
! 				      &self->have_quotechar, v);
! 	else if (strcmp(name, "escapechar") == 0)
  		return _set_char_attr(&self->escapechar,
  				      &self->have_escapechar, v);
--- 738,742 ----
  		return -1;
  	}
! 	if (strcmp(name, "escapechar") == 0)
  		return _set_char_attr(&self->escapechar,
  				      &self->have_escapechar, v);
***************
*** 736,745 ****
  			return -1;
  		}
-                 if (!self->have_quotechar && n != QUOTE_NONE) {
-                     PyErr_BadArgument();
-                     return -1;
-                 }
- 		if (n == QUOTE_NONE)
- 			self->have_quotechar = 0;
  		self->quoting = n;
  		return 0;
--- 748,751 ----
***************
*** 834,838 ****
  		NULL
  	};
! 	PyObject *quotechar, *escapechar;
  	ParserObj *self = PyObject_NEW(ParserObj, &Parser_Type);
  
--- 840,844 ----
  		NULL
  	};
! 	PyObject *escapechar;
  	ParserObj *self = PyObject_NEW(ParserObj, &Parser_Type);
  
***************
*** 841,845 ****
  
  	self->quotechar = '"';
- 	self->have_quotechar = 1;
  	self->delimiter = ',';
  	self->escapechar = '\0';
--- 847,850 ----
***************
*** 869,882 ****
  	self->num_fields = 0;
  
! 	quotechar = escapechar = NULL;
! 	if (PyArg_ParseTupleAndKeywords(args, keyword_args, "|OcOiSiiii",
  					keywords,
! 					&quotechar, &self->delimiter,
  					&escapechar, &self->skipinitialspace,
  					&self->lineterminator, &self->quoting,
  					&self->doublequote,
  					&self->autoclear, &self->strict)
- 	    && !_set_char_attr(&self->quotechar,
- 			       &self->have_quotechar, quotechar)
  	    && !_set_char_attr(&self->escapechar,
  			       &self->have_escapechar, escapechar)) {
--- 874,885 ----
  	self->num_fields = 0;
  
! 	escapechar = NULL;
! 	if (PyArg_ParseTupleAndKeywords(args, keyword_args, "|ccOiSiiii",
  					keywords,
! 					&self->quotechar, &self->delimiter,
  					&escapechar, &self->skipinitialspace,
  					&self->lineterminator, &self->quoting,
  					&self->doublequote,
  					&self->autoclear, &self->strict)
  	    && !_set_char_attr(&self->escapechar,
  			       &self->have_escapechar, escapechar)) {
***************
*** 889,899 ****
  		if (self->quoting < 0 || self->quoting > QUOTE_NONE)
  			PyErr_SetString(PyExc_ValueError, "bad quoting value");
! 		else {
! 			if (self->quoting == QUOTE_NONE)
! 				self->have_quotechar = 0;
! 			else if (!self->have_quotechar)
! 				self->quoting = QUOTE_NONE;
  			return (PyObject*)self;
- 		}
  	}
  
--- 892,897 ----
  		if (self->quoting < 0 || self->quoting > QUOTE_NONE)
  			PyErr_SetString(PyExc_ValueError, "bad quoting value");
! 		else
  			return (PyObject*)self;
  	}
  
***************
*** 948,951 ****
--- 946,950 ----
  	PyObject *v;
  	int res;
+ 	StyleDesc *style;
  
  	if (PyType_Ready(&Parser_Type) < 0)
***************
*** 967,1001 ****
  		return;
  
! 	v = PyInt_FromLong(QUOTE_MINIMAL);
! 	if (v == NULL)
! 		return;
! 	res = PyDict_SetItemString(dict, "QUOTE_MINIMAL", v);
! 	Py_DECREF(v);
! 	if (res < 0)
! 		return;
! 
! 	v = PyInt_FromLong(QUOTE_ALL);
! 	if (v == NULL)
! 		return;
! 	res = PyDict_SetItemString(dict, "QUOTE_ALL", v);
! 	Py_DECREF(v);
! 	if (res < 0)
! 		return;
! 
! 	v = PyInt_FromLong(QUOTE_NONNUMERIC);
! 	if (v == NULL)
! 		return;
! 	res = PyDict_SetItemString(dict, "QUOTE_NONNUMERIC", v);
! 	Py_DECREF(v);
! 	if (res < 0)
! 		return;
! 
! 	v = PyInt_FromLong(QUOTE_NONE);
! 	if (v == NULL)
! 		return;
! 	res = PyDict_SetItemString(dict, "QUOTE_NONE", v);
! 	Py_DECREF(v);
! 	if (res < 0)
! 		return;
  
  	/* Add the CSV exception object to the module. */
--- 966,979 ----
  		return;
  
! 	/* Add quote styles into disctionary */
! 	for (style = quote_styles; style->name; style++) {
! 		v = PyInt_FromLong(style->style);
! 		if (v == NULL)
! 			return;
! 		res = PyDict_SetItemString(dict, style->name, v);
! 		Py_DECREF(v);
! 		if (res < 0)
! 			return;
! 	}
  
  	/* Add the CSV exception object to the module. */