[Python-checkins] python/nondist/sandbox/datetime datetime.c,1.75,1.76 obj_date.c,1.55,1.56 obj_time.c,1.18,1.19

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
2002年12月15日 16:50:13 -0800


Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory sc8-pr-cvs1:/tmp/cvs-serv14054
Modified Files:
	datetime.c obj_date.c obj_time.c 
Log Message:
Rearranged C strftime() implemenatations so it's *possible* to fix all of
them in one place. Made them keyword functions since they should have
been all along.
Index: datetime.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -C2 -d -r1.75 -r1.76
*** datetime.c	15 Dec 2002 18:30:49 -0000	1.75
--- datetime.c	16 Dec 2002 00:50:10 -0000	1.76
***************
*** 767,783 ****
 
 /* I sure don't want to reproduce the strftime code from the time module,
! * so this imports the module and calls it.
 */
 static PyObject *
! format_strftime(PyObject *format, PyObject *tuple)
 {
 	PyObject *time;
 	PyObject *result;
 
 	time = PyImport_ImportModule("time");
 	if (time == NULL)
 		return NULL;
 
! 	result = PyObject_CallMethod(time, "strftime", "OO", format, tuple);
 	Py_DECREF(time);
 	return result;
--- 767,789 ----
 
 /* I sure don't want to reproduce the strftime code from the time module,
! * so this imports the module and calls it. Most of the hair is due to
! * giving special meanings to the %z and %Z format codes via a preprocessing
! * step on the format string.
 */
 static PyObject *
! wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple)
 {
 	PyObject *time;
 	PyObject *result;
 
+ 	assert(object && format && timetuple);
+ 	assert(PyString_Check(format));
+ 
 	time = PyImport_ImportModule("time");
 	if (time == NULL)
 		return NULL;
 
! 	result = PyObject_CallMethod(time, "strftime", "OO",
! 				 format, timetuple);
 	Py_DECREF(time);
 	return result;
Index: obj_date.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_date.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -C2 -d -r1.55 -r1.56
*** obj_date.c	15 Dec 2002 03:55:43 -0000	1.55
--- obj_date.c	16 Dec 2002 00:50:10 -0000	1.56
***************
*** 259,263 ****
 
 static PyObject *
! date_strftime(PyDateTime_Date *self, PyObject *format)
 {
 	/* This method can be inherited, and needs to call the
--- 259,263 ----
 
 static PyObject *
! date_strftime(PyDateTime_Date *self, PyObject *args, PyObject *kw)
 {
 	/* This method can be inherited, and needs to call the
***************
*** 265,274 ****
 	 */
 	PyObject *result;
! 	PyObject *tuple = PyObject_CallMethod((PyObject *)self,
! 					 "timetuple", "()");
 
 	if (tuple == NULL)
 		return NULL;
! 	result = format_strftime(format, tuple);
 	Py_DECREF(tuple);
 	return result;
--- 265,280 ----
 	 */
 	PyObject *result;
! 	PyObject *format;
! 	PyObject *tuple;
! 	static char *keywords[] = {"format", NULL};
! 
! 	if (! PyArg_ParseTupleAndKeywords(args, kw, "O!:strftime", keywords,
! 					 &PyString_Type, &format))
! 		return NULL;
 
+ 	tuple = PyObject_CallMethod((PyObject *)self, "timetuple", "()");
 	if (tuple == NULL)
 		return NULL;
! 	result = wrap_strftime((PyObject *)self, format, tuple);
 	Py_DECREF(tuple);
 	return result;
***************
*** 461,465 ****
 	 PyDoc_STR("Return ctime() style string.")},
 
! 	{"strftime", 	(PyCFunction)date_strftime,	METH_O,
 	 PyDoc_STR("format -> strftime() style string.")},
 
--- 467,471 ----
 	 PyDoc_STR("Return ctime() style string.")},
 
! 	{"strftime", 	(PyCFunction)date_strftime,	METH_KEYWORDS,
 	 PyDoc_STR("format -> strftime() style string.")},
 
Index: obj_time.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_time.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** obj_time.c	14 Dec 2002 17:42:09 -0000	1.18
--- obj_time.c	16 Dec 2002 00:50:10 -0000	1.19
***************
*** 109,125 ****
 
 static PyObject *
! time_strftime(PyDateTime_Time *self, PyObject *format)
 {
 	PyObject *result;
! 	PyObject *tuple = Py_BuildValue("iiiiiiiii",
! 				 0, 0, 0, /* year, month, day */
! 				 TIME_GET_HOUR(self),
! 				 TIME_GET_MINUTE(self),
! 				 TIME_GET_SECOND(self),
! 				 0, 0, -1); /* weekday, daynum, dst */
 	if (tuple == NULL)
 		return NULL;
 	assert(PyTuple_Size(tuple) == 9);
! 	result = format_strftime(format, tuple);
 	Py_DECREF(tuple);
 	return result;
--- 109,133 ----
 
 static PyObject *
! time_strftime(PyDateTime_Time *self, PyObject *args, PyObject *kw)
 {
 	PyObject *result;
! 	PyObject *format;
! 	PyObject *tuple;
! 	static char *keywords[] = {"format", NULL};
! 
! 	if (! PyArg_ParseTupleAndKeywords(args, kw, "O!:strftime", keywords,
! 					 &PyString_Type, &format))
! 		return NULL;
! 
! 	tuple = Py_BuildValue("iiiiiiiii",
! 		 0, 0, 0, /* year, month, day */
! 			 TIME_GET_HOUR(self),
! 			 TIME_GET_MINUTE(self),
! 			 TIME_GET_SECOND(self),
! 			 0, 0, -1); /* weekday, daynum, dst */
 	if (tuple == NULL)
 		return NULL;
 	assert(PyTuple_Size(tuple) == 9);
! 	result = wrap_strftime((PyObject *)self, format, tuple);
 	Py_DECREF(tuple);
 	return result;
***************
*** 326,330 ****
 	 PyDoc_STR("Return string in ISO 8601 format, HH:MM:SS[.mmmmmm].")},
 
! 	{"strftime", 	(PyCFunction)time_strftime,	METH_O,
 	 PyDoc_STR("format -> strftime() style string.")},
 
--- 334,338 ----
 	 PyDoc_STR("Return string in ISO 8601 format, HH:MM:SS[.mmmmmm].")},
 
! 	{"strftime", 	(PyCFunction)time_strftime,	METH_KEYWORDS,
 	 PyDoc_STR("format -> strftime() style string.")},
 

AltStyle によって変換されたページ (->オリジナル) /