[Python-checkins] python/nondist/sandbox/datetime doc.txt,1.46,1.47 obj_timetz.c,1.15,1.16 test_both.py,1.63,1.64 test_datetime.py,1.64,1.65

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
Wed, 11 Dec 2002 18:55:19 -0800


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

Modified Files:
	doc.txt obj_timetz.c test_both.py test_datetime.py 
Log Message:
Implemented the timetz tzinfo convenience functions, and beefed up their
tests.


Index: doc.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/doc.txt,v
retrieving revision 1.46
retrieving revision 1.47
diff -C2 -d -r1.46 -r1.47
*** doc.txt	12 Dec 2002 00:30:15 -0000	1.46
--- doc.txt	12 Dec 2002 02:55:16 -0000	1.47
***************
*** 832,835 ****
--- 832,844 ----
      XXX Sheesh.  This needs an example.
  
+   - utcoffset()
+     If self.tzinfo is None, returns None, else self.tzinfo.utcoffset(self).
+ 
+   - tzname():
+     If self.tzinfo is None, returns None, else self.tzinfo.tzname(self).
+ 
+   - dst()
+     If self.tzinfo is None, returns None, else self.tzinfo.dst(self).
+ 
  
  class datetimetz

Index: obj_timetz.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_timetz.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** obj_timetz.c	12 Dec 2002 02:19:43 -0000	1.15
--- obj_timetz.c	12 Dec 2002 02:55:16 -0000	1.16
***************
*** 61,64 ****
--- 61,97 ----
  }
  
+ /* Indirect access to tzinfo methods.  One more "convenience function" and
+  * it won't be possible to find the useful methods anymore <0.5 wink>.
+  */
+ static PyObject *
+ timetz_convienience(PyDateTime_TimeTZ *self, char *name)
+ {
+ 	PyObject *result;
+ 
+ 	if (self->tzinfo == Py_None) {
+ 		result = Py_None;
+ 		Py_INCREF(result);
+ 	}
+ 	else
+ 		result = PyObject_CallMethod(self->tzinfo, name, "O", self);
+ 	return result;
+ }
+ 
+ /* These are all METH_NOARGS, so don't need to check the arglist. */
+ static PyObject *
+ timetz_utcoffset(PyDateTime_TimeTZ *self, PyObject *unused) {
+ 	return timetz_convienience(self, "utcoffset");
+ }
+ 
+ static PyObject *
+ timetz_tzname(PyDateTime_TimeTZ *self, PyObject *unused) {
+ 	return timetz_convienience(self, "tzname");
+ }
+ 
+ static PyObject *
+ timetz_dst(PyDateTime_TimeTZ *self, PyObject *unused) {
+ 	return timetz_convienience(self, "dst");
+ }
+ 
  /* Various ways to turn a timetz into a string. */
  
***************
*** 350,353 ****
--- 383,395 ----
  	 PyDoc_STR("format -> strftime() style string.")},
  
+ 	{"utcoffset",	(PyCFunction)timetz_utcoffset,	METH_NOARGS,
+ 	 PyDoc_STR("Return self.tzinfo.utcoffset(self).")},
+ 
+ 	{"tzname",	(PyCFunction)timetz_tzname,	METH_NOARGS,
+ 	 PyDoc_STR("Return self.tzinfo.tzname(self).")},
+ 
+ 	{"dst",		(PyCFunction)timetz_dst,	METH_NOARGS,
+ 	 PyDoc_STR("Return self.tzinfo.dst(self).")},
+ 
  	{"__setstate__", (PyCFunction)timetz_setstate,	METH_O,
  	 PyDoc_STR("__setstate__(state)")},
***************
*** 356,359 ****
--- 398,402 ----
  	 PyDoc_STR("__getstate__() -> state")},
  	{NULL,	NULL}
+ 
  };
  

Index: test_both.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/test_both.py,v
retrieving revision 1.63
retrieving revision 1.64
diff -C2 -d -r1.63 -r1.64
*** test_both.py	12 Dec 2002 02:19:43 -0000	1.63
--- test_both.py	12 Dec 2002 02:55:16 -0000	1.64
***************
*** 64,70 ****
  
  class FixedOffset(tzinfo):
!     def __init__(self, offset, name):
          self.__offset = offset
          self.__name = name
      def __repr__(self):
          return self.__name.lower()
--- 64,71 ----
  
  class FixedOffset(tzinfo):
!     def __init__(self, offset, name, dstoffset=42):
          self.__offset = offset
          self.__name = name
+         self.__dstoffset = dstoffset
      def __repr__(self):
          return self.__name.lower()
***************
*** 74,78 ****
          return self.__name
      def dst(self, dt):
!         return 0
  
  class TestTZInfo(unittest.TestCase):
--- 75,79 ----
          return self.__name
      def dst(self, dt):
!         return self.__dstoffset
  
  class TestTZInfo(unittest.TestCase):
***************
*** 97,101 ****
              self.assertEqual(fo.utcoffset(dt), 3)
              self.assertEqual(fo.tzname(dt), "Three")
!             self.assertEqual(fo.dst(dt), 0)
  
  #############################################################################
--- 98,102 ----
              self.assertEqual(fo.utcoffset(dt), 3)
              self.assertEqual(fo.tzname(dt), "Three")
!             self.assertEqual(fo.dst(dt), 42)
  
  #############################################################################
***************
*** 1477,1505 ****
  
      def test_zones(self):
!         est = FixedOffset(-300, "EST")
!         utc = FixedOffset(0, "UTC")
!         met = FixedOffset(60, "MET")
          t1 = timetz( 7, 47, tzinfo=est)
          t2 = timetz(12, 47, tzinfo=utc)
          t3 = timetz(13, 47, tzinfo=met)
          self.assertEqual(t1.tzinfo, est)
          self.assertEqual(t2.tzinfo, utc)
          self.assertEqual(t3.tzinfo, met)
!         # XXX The commented-out tests are still in test_datetime.py.
! #        self.assertEqual(t1.utcoffset(), -300)
! #        self.assertEqual(t2.utcoffset(), 0)
! #        self.assertEqual(t3.utcoffset(), 60)
! #        self.assertEqual(t1.tzname(), "EST")
! #        self.assertEqual(t2.tzname(), "UTC")
! #        self.assertEqual(t3.tzname(), "MET")
          self.assertEqual(hash(t1), hash(t2))
          self.assertEqual(hash(t1), hash(t3))
          self.assertEqual(hash(t2), hash(t3))
          self.assertEqual(t1, t2)
          self.assertEqual(t1, t3)
          self.assertEqual(t2, t3)
          self.assertEqual(str(t1), "07:47:00-05:00")
          self.assertEqual(str(t2), "12:47:00+00:00")
          self.assertEqual(str(t3), "13:47:00+01:00")
          if TESTING_C:
              d = '_datetime.'
--- 1478,1534 ----
  
      def test_zones(self):
!         est = FixedOffset(-300, "EST", 1)
!         utc = FixedOffset(0, "UTC", -2)
!         met = FixedOffset(60, "MET", 3)
          t1 = timetz( 7, 47, tzinfo=est)
          t2 = timetz(12, 47, tzinfo=utc)
          t3 = timetz(13, 47, tzinfo=met)
+         t4 = timetz(microsecond=40)
+         t5 = timetz(microsecond=40, tzinfo=utc)
+ 
          self.assertEqual(t1.tzinfo, est)
          self.assertEqual(t2.tzinfo, utc)
          self.assertEqual(t3.tzinfo, met)
!         self.failUnless(t4.tzinfo is None)
!         self.assertEqual(t5.tzinfo, utc)
! 
!         self.assertEqual(t1.utcoffset(), -300)
!         self.assertEqual(t2.utcoffset(), 0)
!         self.assertEqual(t3.utcoffset(), 60)
!         self.failUnless(t4.utcoffset() is None)
!         self.assertRaises(TypeError, t1.utcoffset, "no args")
! 
!         self.assertEqual(t1.tzname(), "EST")
!         self.assertEqual(t2.tzname(), "UTC")
!         self.assertEqual(t3.tzname(), "MET")
!         self.failUnless(t4.tzname() is None)
!         self.assertRaises(TypeError, t1.tzname, "no args")
! 
!         self.assertEqual(t1.dst(), 1)
!         self.assertEqual(t2.dst(), -2)
!         self.assertEqual(t3.dst(), 3)
!         self.failUnless(t4.dst() is None)
!         self.assertRaises(TypeError, t1.dst, "no args")
! 
          self.assertEqual(hash(t1), hash(t2))
          self.assertEqual(hash(t1), hash(t3))
          self.assertEqual(hash(t2), hash(t3))
+ 
          self.assertEqual(t1, t2)
          self.assertEqual(t1, t3)
          self.assertEqual(t2, t3)
+ 
          self.assertEqual(str(t1), "07:47:00-05:00")
          self.assertEqual(str(t2), "12:47:00+00:00")
          self.assertEqual(str(t3), "13:47:00+01:00")
+         self.assertEqual(str(t4), "00:00:00.000040")
+         self.assertEqual(str(t5), "00:00:00.000040+00:00")
+ 
+         self.assertEqual(t1.isoformat(), "07:47:00-05:00")
+         self.assertEqual(t2.isoformat(), "12:47:00+00:00")
+         self.assertEqual(t3.isoformat(), "13:47:00+01:00")
+         self.assertEqual(t4.isoformat(), "00:00:00.000040")
+         self.assertEqual(t5.isoformat(), "00:00:00.000040+00:00")
+ 
          if TESTING_C:
              d = '_datetime.'
***************
*** 1509,1515 ****
          self.assertEqual(repr(t2), d + "timetz(12, 47, tzinfo=utc)")
          self.assertEqual(repr(t3), d + "timetz(13, 47, tzinfo=met)")
!         self.assertEqual(t1.isoformat(), "07:47:00-05:00")
!         self.assertEqual(t2.isoformat(), "12:47:00+00:00")
!         self.assertEqual(t3.isoformat(), "13:47:00+01:00")
  #        self.assertEqual(t1.strftime("%H:%M:%S %Z %z"), "07:47:00 EST -0500")
  #        self.assertEqual(t2.strftime("%H:%M:%S %Z %z"), "12:47:00 UTC +0000")
--- 1538,1545 ----
          self.assertEqual(repr(t2), d + "timetz(12, 47, tzinfo=utc)")
          self.assertEqual(repr(t3), d + "timetz(13, 47, tzinfo=met)")
!         self.assertEqual(repr(t4), d + "timetz(0, 0, 0, 40)")
!         self.assertEqual(repr(t5), d + "timetz(0, 0, 0, 40, tzinfo=utc)")
! 
!         # XXX The commented-out tests are still in test_datetime.py.
  #        self.assertEqual(t1.strftime("%H:%M:%S %Z %z"), "07:47:00 EST -0500")
  #        self.assertEqual(t2.strftime("%H:%M:%S %Z %z"), "12:47:00 UTC +0000")

Index: test_datetime.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/test_datetime.py,v
retrieving revision 1.64
retrieving revision 1.65
diff -C2 -d -r1.64 -r1.65
*** test_datetime.py	12 Dec 2002 02:19:43 -0000	1.64
--- test_datetime.py	12 Dec 2002 02:55:16 -0000	1.65
***************
*** 27,31 ****
          return self.__name
      def dst(self, dt):
!         return 0
  
  
--- 27,31 ----
          return self.__name
      def dst(self, dt):
!         return 42
  
  
***************
*** 42,51 ****
          t3 = timetz(13, 47, tzinfo=met)
          # XXX Most of the tests here have moved into test_both.py.
-         self.assertEqual(t1.utcoffset(), -300)
-         self.assertEqual(t2.utcoffset(), 0)
-         self.assertEqual(t3.utcoffset(), 60)
-         self.assertEqual(t1.tzname(), "EST")
-         self.assertEqual(t2.tzname(), "UTC")
-         self.assertEqual(t3.tzname(), "MET")
          self.assertEqual(t1.strftime("%H:%M:%S %Z %z"), "07:47:00 EST -0500")
          self.assertEqual(t2.strftime("%H:%M:%S %Z %z"), "12:47:00 UTC +0000")
--- 42,45 ----