[Python-checkins] python/nondist/sandbox/datetime obj_datetimetz.c,1.19,1.20 test_both.py,1.84,1.85

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
2002年12月14日 11:11:54 -0800


Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory sc8-pr-cvs1:/tmp/cvs-serv11636
Modified Files:
	obj_datetimetz.c test_both.py 
Log Message:
datetimetz inherits utcfromtimestamp() too. Again this doesn't accept a
tzinfo arg. Added test. Removed more unused code.
Index: obj_datetimetz.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_datetimetz.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -d -r1.19 -r1.20
*** obj_datetimetz.c	14 Dec 2002 19:02:02 -0000	1.19
--- obj_datetimetz.c	14 Dec 2002 19:11:50 -0000	1.20
***************
*** 73,143 ****
 }
 
- /* Internal helper.
- * Build datetime from a time_t and a distinct count of microseconds.
- * Pass localtime or gmtime for f, to control the interpretation of timet.
- */
- static PyObject *
- datetimetz_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us)
- {
- 	struct tm *tm;
- 	PyObject *result = NULL;
- 
- 	tm = f(&timet);
- 	if (tm)
- 		result = PyObject_CallFunction(cls, "iiiiiii",
- 					 tm->tm_year + 1900,
- 					 tm->tm_mon + 1,
- 					 tm->tm_mday,
- 					 tm->tm_hour,
- 					 tm->tm_min,
- 					 tm->tm_sec,
- 					 us);
- 	else
- 		PyErr_SetString(PyExc_ValueError,
- 				"timestamp out of range for "
- 				"platform localtime()/gmtime() function");
- 	return result;
- }
- 
- /* Internal helper.
- * Build datetime from a Python timestamp. Pass localtime or gmtime for f,
- * to control the interpretation of the timestamp. Since a double doesn't
- * have enough bits to cover a datetime's full range of precision, it's
- * better to call datetimetz_from_timet_and_us provided you have a way
- * to get that much precision (e.g., C time() isn't good enough).
- */
- static PyObject *
- datetimetz_from_timestamp(PyObject *cls, TM_FUNC f, double timestamp)
- {
- 	time_t timet = (time_t)timestamp;
- 	int us = (int)((timestamp - (double)timet) * 1e6);
- 
- 	return datetimetz_from_timet_and_us(cls, f, timet, us);
- }
- 
- /* Return new local datetime from timestamp (Python timestamp -- a double). */
- static PyObject *
- datetimetz_fromtimestamp(PyObject *cls, PyObject *args)
- {
- 	double timestamp;
- 	PyObject *result = NULL;
- 
- 	if (PyArg_ParseTuple(args, "d:fromtimestamp", &timestamp))
- 		result = datetimetz_from_timestamp(cls, localtime, timestamp);
- 	return result;
- }
- 
- /* Return new UTC datetime from timestamp (Python timestamp -- a double). */
- static PyObject *
- datetimetz_utcfromtimestamp(PyObject *cls, PyObject *args)
- {
- 	double timestamp;
- 	PyObject *result = NULL;
- 
- 	if (PyArg_ParseTuple(args, "d:utcfromtimestamp", &timestamp))
- 		result = datetimetz_from_timestamp(cls, gmtime, timestamp);
- 	return result;
- }
- 
 /* Return best possible local time -- this isn't constrained by the
 * precision of a timestamp.
--- 73,76 ----
***************
*** 161,165 ****
 }
 
! /* Note: utcnow() is inherited, and doesn't accept tzinfo. */
 
 
--- 94,100 ----
 }
 
! /* Note: utcnow() is inherited, and doesn't accept tzinfo.
! * Ditto utcfromtimestamp().
! */
 
 
***************
*** 469,473 ****
 static PyMethodDef datetimetz_methods[] = {
 	/* Class methods: */
! 	/* Inherited: combine(), utcnow(). */
 
 	{"now", (PyCFunction)datetimetz_now,
--- 404,408 ----
 static PyMethodDef datetimetz_methods[] = {
 	/* Class methods: */
! 	/* Inherited: combine(), utcnow(), utcfromtimestamp() */
 
 	{"now", (PyCFunction)datetimetz_now,
***************
*** 475,479 ****
 	 PyDoc_STR("[tzinfo] -> new datetimetz with local day and time.")},
 
! 	/* XXX Inherited: fromtimestamp(), utcfromtimestamp().
 	 XXX But they shouldn't be: these take a frickin' optional tzinfo
 	 XXX argument in the datetimetz flavors.
--- 410,414 ----
 	 PyDoc_STR("[tzinfo] -> new datetimetz with local day and time.")},
 
! 	/* XXX Inherited: fromtimestamp().
 	 XXX But they shouldn't be: these take a frickin' optional tzinfo
 	 XXX argument in the datetimetz flavors.
***************
*** 482,490 ****
 	 METH_VARARGS | METH_CLASS,
 	 PyDoc_STR("timestamp -> local datetime from a POSIX timestamp "
- 	 	 "(like time.time()).")},
- 
- 	{"utcfromtimestamp", (PyCFunction)datetimetz_utcfromtimestamp,
- 	 METH_VARARGS | METH_CLASS,
- 	 PyDoc_STR("timestamp -> UTC datetime from a POSIX timestamp "
 	 	 "(like time.time()).")},
 	*/
--- 417,420 ----
Index: test_both.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/test_both.py,v
retrieving revision 1.84
retrieving revision 1.85
diff -C2 -d -r1.84 -r1.85
*** test_both.py	14 Dec 2002 19:02:03 -0000	1.84
--- test_both.py	14 Dec 2002 19:11:51 -0000	1.85
***************
*** 1944,1973 ****
 
 def test_tzinfo_now(self):
! now = self.theclass.now
 # Ensure it doesn't require tzinfo (i.e., that this doesn't blow up).
! base = now()
 # Try with and without naming the keyword.
 off42 = FixedOffset(42, "42")
! another = now(off42)
! again = now(tzinfo=off42)
 self.failUnless(another.tzinfo is again.tzinfo)
 self.assertEqual(another.utcoffset(), 42)
 # Bad argument with and w/o naming the keyword.
! self.assertRaises(TypeError, now, 16)
! self.assertRaises(TypeError, now, tzinfo=16)
 # Bad keyword name.
! self.assertRaises(TypeError, now, tinfo=off42)
 # Too many args.
! self.assertRaises(TypeError, now, off42, off42)
 
 def test_tzinfo_utcnow(self):
! utcnow = self.theclass.utcnow
 # Ensure it doesn't require tzinfo (i.e., that this doesn't blow up).
! base = utcnow()
 # Try with and without naming the keyword; for whatever reason,
 # utcnow() doesn't accept a tzinfo argument.
 off42 = FixedOffset(42, "42")
! self.assertRaises(TypeError, utcnow, off42)
! self.assertRaises(TypeError, utcnow, tzinfo=off42)
 
 def test_suite():
--- 1944,1985 ----
 
 def test_tzinfo_now(self):
! meth = self.theclass.now
 # Ensure it doesn't require tzinfo (i.e., that this doesn't blow up).
! base = meth()
 # Try with and without naming the keyword.
 off42 = FixedOffset(42, "42")
! another = meth(off42)
! again = meth(tzinfo=off42)
 self.failUnless(another.tzinfo is again.tzinfo)
 self.assertEqual(another.utcoffset(), 42)
 # Bad argument with and w/o naming the keyword.
! self.assertRaises(TypeError, meth, 16)
! self.assertRaises(TypeError, meth, tzinfo=16)
 # Bad keyword name.
! self.assertRaises(TypeError, meth, tinfo=off42)
 # Too many args.
! self.assertRaises(TypeError, meth, off42, off42)
 
 def test_tzinfo_utcnow(self):
! meth = self.theclass.utcnow
 # Ensure it doesn't require tzinfo (i.e., that this doesn't blow up).
! base = meth()
 # Try with and without naming the keyword; for whatever reason,
 # utcnow() doesn't accept a tzinfo argument.
 off42 = FixedOffset(42, "42")
! self.assertRaises(TypeError, meth, off42)
! self.assertRaises(TypeError, meth, tzinfo=off42)
! 
! def test_tzinfo_utcfromtimestamp(self):
! import time
! meth = self.theclass.utcfromtimestamp
! ts = time.time()
! # Ensure it doesn't require tzinfo (i.e., that this doesn't blow up).
! base = meth(ts)
! # Try with and without naming the keyword; for whatever reason,
! # utcfromtimestamp() doesn't accept a tzinfo argument.
! off42 = FixedOffset(42, "42")
! self.assertRaises(TypeError, meth, ts, off42)
! self.assertRaises(TypeError, meth, ts, tzinfo=off42)
 
 def test_suite():

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