[Python-checkins] python/nondist/sandbox/datetime datetime.c,1.68,1.69 obj_datetimetz.c,1.8,1.9 obj_timetz.c,1.25,1.26 test_both.py,1.77,1.78 test_datetime.py,1.66,1.67

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
Fri, 13 Dec 2002 21:45:51 -0800


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

Modified Files:
	datetime.c obj_datetimetz.c obj_timetz.c test_both.py 
	test_datetime.py 
Log Message:
str, repr, and isoformat for datetimetz.


Index: datetime.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -C2 -d -r1.68 -r1.69
*** datetime.c	13 Dec 2002 21:26:55 -0000	1.68
--- datetime.c	14 Dec 2002 05:45:49 -0000	1.69
***************
*** 669,672 ****
--- 669,706 ----
  }
  
+ /* repr is like "someclass(arg1, arg2)".  If tzinfo isn't None,
+  * stuff
+  *     ", tzinfo=" + repr(tzinfo)
+  * before the closing ")".
+  */
+ static PyObject *
+ append_keyword_tzinfo(PyObject *repr, PyObject *tzinfo)
+ {
+ 	PyObject *temp;
+ 
+ 	assert(PyString_Check(repr));
+ 	assert(tzinfo);
+ 	if (tzinfo == Py_None)
+ 		return repr;
+ 	/* Get rid of the trailing ')'. */
+ 	assert(PyString_AsString(repr)[PyString_Size(repr)-1] == ')');
+ 	temp = PyString_FromStringAndSize(PyString_AsString(repr),
+ 					  PyString_Size(repr) - 1);
+ 	Py_DECREF(repr);
+ 	if (temp == NULL)
+ 		return NULL;
+ 	repr = temp;
+ 
+ 	/* Append ", tzinfo=". */
+ 	PyString_ConcatAndDel(&repr, PyString_FromString(", tzinfo="));
+ 
+ 	/* Append repr(tzinfo). */
+ 	PyString_ConcatAndDel(&repr, PyObject_Repr(tzinfo));
+ 
+ 	/* Add a closing paren. */
+ 	PyString_ConcatAndDel(&repr, PyString_FromString(")"));
+ 	return repr;
+ }
+ 
  /* ---------------------------------------------------------------------------
   * String format helpers.

Index: obj_datetimetz.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_datetimetz.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** obj_datetimetz.c	14 Dec 2002 01:14:00 -0000	1.8
--- obj_datetimetz.c	14 Dec 2002 05:45:49 -0000	1.9
***************
*** 376,434 ****
  datetimetz_repr(PyDateTime_DateTimeTZ *self)
  {
! 	char buffer[1000];
! 	char *typename = self->ob_type->tp_name;
  
! 	if (DATE_GET_MICROSECOND(self)) {
! 		PyOS_snprintf(buffer, sizeof(buffer),
! 			      "%s(%d, %d, %d, %d, %d, %d, %d)",
! 			      typename,
! 			      GET_YEAR(self), GET_MONTH(self), GET_DAY(self),
! 			      DATE_GET_HOUR(self), DATE_GET_MINUTE(self),
! 			      DATE_GET_SECOND(self),
! 			      DATE_GET_MICROSECOND(self));
! 	}
! 	else if (DATE_GET_SECOND(self)) {
! 		PyOS_snprintf(buffer, sizeof(buffer),
! 			      "%s(%d, %d, %d, %d, %d, %d)",
! 			      typename,
! 			      GET_YEAR(self), GET_MONTH(self), GET_DAY(self),
! 			      DATE_GET_HOUR(self), DATE_GET_MINUTE(self),
! 			      DATE_GET_SECOND(self));
! 	}
! 	else {
! 		PyOS_snprintf(buffer, sizeof(buffer),
! 			      "%s(%d, %d, %d, %d, %d)",
! 			      typename,
! 			      GET_YEAR(self), GET_MONTH(self), GET_DAY(self),
! 			      DATE_GET_HOUR(self), DATE_GET_MINUTE(self));
! 	}
! 	return PyString_FromString(buffer);
  }
  
! static PyObject *
! datetimetz_str(PyDateTime_DateTimeTZ *self)
! {
! 	return PyObject_CallMethod((PyObject *)self, "isoformat", "(s)", " ");
! }
  
  static PyObject *
  datetimetz_isoformat(PyDateTime_DateTimeTZ *self,
!                    PyObject *args, PyObject *kw)
  {
! 	char sep = 'T';
! 	static char *keywords[] = {"sep", NULL};
! 	char buffer[100];
! 	char *cp;
  
! 	if (!PyArg_ParseTupleAndKeywords(args, kw, "|c:isoformat", keywords,
! 					 &sep))
  		return NULL;
! 	cp = isoformat_date((PyDateTime_Date *)self, buffer, sizeof(buffer));
! 	assert(cp != NULL);
! 	*cp++ = sep;
! 	isoformat_time((PyDateTime_DateTime *)self,
! 		       cp,
! 		       sizeof(buffer) - (cp - buffer));
! 	return PyString_FromString(buffer);
  }
  
--- 376,407 ----
  datetimetz_repr(PyDateTime_DateTimeTZ *self)
  {
! 	PyObject *baserepr = datetime_repr((PyDateTime_DateTime *)self);
  
! 	if (baserepr == NULL)
! 		return NULL;
! 	return append_keyword_tzinfo(baserepr, self->tzinfo);
  }
  
! /* Note:  tp_str is inherited from datetime. */
  
  static PyObject *
  datetimetz_isoformat(PyDateTime_DateTimeTZ *self,
! 		     PyObject *args, PyObject *kw)
  {
! 	char buf[100];
! 	PyObject *result = datetime_isoformat((PyDateTime_DateTime *)self,
! 					      args, kw);
  
! 	if (result == NULL || self->tzinfo == Py_None)
! 		return result;
! 
! 	/* We need to append the UTC offset. */
! 	if (format_utcoffset(buf, sizeof(buf), ":", self->tzinfo,
! 			     (PyObject *)self) < 0) {
! 		Py_DECREF(result);
  		return NULL;
! 	}
! 	PyString_ConcatAndDel(&result, PyString_FromString(buf));
! 	return result;
  }
  
***************
*** 663,667 ****
  	0,					/* tp_hash */
  	0,              			/* tp_call */
! 	(reprfunc)datetimetz_str,		/* tp_str */
  	PyObject_GenericGetAttr,		/* tp_getattro */
  	0,					/* tp_setattro */
--- 636,640 ----
  	0,					/* tp_hash */
  	0,              			/* tp_call */
! 	0,					/* tp_str */
  	PyObject_GenericGetAttr,		/* tp_getattro */
  	0,					/* tp_setattro */

Index: obj_timetz.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_timetz.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** obj_timetz.c	14 Dec 2002 01:09:45 -0000	1.25
--- obj_timetz.c	14 Dec 2002 05:45:49 -0000	1.26
***************
*** 102,132 ****
  timetz_repr(PyDateTime_TimeTZ *self)
  {
! 	PyObject *r;
! 	PyObject *result = time_repr((PyDateTime_Time *)self);
  
! 	if (result == NULL)
! 		return NULL;
! 	if (self->tzinfo == Py_None)
! 		return result;
! 	/* We have to append  tzinfo=repr(tzinfo). */
! 	/* Get rid of the trailing ')'. */
! 	assert(PyString_AsString(result)[PyString_Size(result)-1] == ')');
! 	r = PyString_FromStringAndSize(PyString_AsString(result),
! 				       PyString_Size(result) - 1);
! 	Py_DECREF(result);
! 	if (r == NULL)
  		return NULL;
! 	result = r;
! 
! 	/* Append ", tzinfo=". */
! 	PyString_ConcatAndDel(&result, PyString_FromString(", tzinfo="));
! 
! 	/* Append repr(tzinfo). */
! 	PyString_ConcatAndDel(&result, PyObject_Repr(self->tzinfo));
! 
! 	/* Add a closing paren. */
! 	PyString_ConcatAndDel(&result, PyString_FromString(")"));
! 	return result;
!  }
  
  /* Note:  tp_str is inherited from time. */
--- 102,111 ----
  timetz_repr(PyDateTime_TimeTZ *self)
  {
! 	PyObject *baserepr = time_repr((PyDateTime_Time *)self);
  
! 	if (baserepr == NULL)
  		return NULL;
! 	return append_keyword_tzinfo(baserepr, self->tzinfo);
! }
  
  /* Note:  tp_str is inherited from time. */
***************
*** 138,144 ****
  	PyObject *result = time_isoformat((PyDateTime_Time *)self);
  
! 	if (result == NULL)
! 		return NULL;
! 	if (self->tzinfo == Py_None)
  		return result;
  
--- 117,121 ----
  	PyObject *result = time_isoformat((PyDateTime_Time *)self);
  
! 	if (result == NULL || self->tzinfo == Py_None)
  		return result;
  

Index: test_both.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/test_both.py,v
retrieving revision 1.77
retrieving revision 1.78
diff -C2 -d -r1.77 -r1.78
*** test_both.py	14 Dec 2002 01:41:56 -0000	1.77
--- test_both.py	14 Dec 2002 05:45:49 -0000	1.78
***************
*** 1896,1899 ****
--- 1896,1936 ----
          self.assertRaises(ValueError, hash, t)
  
+     def test_zones(self):
+         est = FixedOffset(-300, "EST")
+         utc = FixedOffset(0, "UTC")
+         met = FixedOffset(60, "MET")
+         t1 = datetimetz(2002, 3, 19,  7, 47, tzinfo=est)
+         t2 = datetimetz(2002, 3, 19, 12, 47, tzinfo=utc)
+         t3 = datetimetz(2002, 3, 19, 13, 47, tzinfo=met)
+         self.assertEqual(t1.tzinfo, est)
+         self.assertEqual(t2.tzinfo, utc)
+         self.assertEqual(t3.tzinfo, met)
+         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), "2002-03-19 07:47:00-05:00")
+         self.assertEqual(str(t2), "2002-03-19 12:47:00+00:00")
+         self.assertEqual(str(t3), "2002-03-19 13:47:00+01:00")
+         if TESTING_C:
+             d = "_datetime."
+         else:
+             d = ""
+         self.assertEqual(repr(t1),
+                          d + "datetimetz(2002, 3, 19, 7, 47, tzinfo=est)")
+         self.assertEqual(repr(t2),
+                          d + "datetimetz(2002, 3, 19, 12, 47, tzinfo=utc)")
+         self.assertEqual(repr(t3),
+                          d + "datetimetz(2002, 3, 19, 13, 47, tzinfo=met)")
+ 
+ 
  def test_suite():
      allsuites = [unittest.makeSuite(klass, 'test')

Index: test_datetime.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/test_datetime.py,v
retrieving revision 1.66
retrieving revision 1.67
diff -C2 -d -r1.66 -r1.67
*** test_datetime.py	12 Dec 2002 04:03:47 -0000	1.66
--- test_datetime.py	14 Dec 2002 05:45:49 -0000	1.67
***************
*** 75,109 ****
      theclass = datetimetz
  
!     def test_zones(self):
!         est = FixedOffset(-300, "EST")
!         utc = FixedOffset(0, "UTC")
!         met = FixedOffset(60, "MET")
!         t1 = datetimetz(2002, 3, 19,  7, 47, tzinfo=est)
!         t2 = datetimetz(2002, 3, 19, 12, 47, tzinfo=utc)
!         t3 = datetimetz(2002, 3, 19, 13, 47, tzinfo=met)
!         self.assertEqual(t1.tzinfo, est)
!         self.assertEqual(t2.tzinfo, utc)
!         self.assertEqual(t3.tzinfo, met)
!         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), "2002-03-19 07:47:00-05:00")
!         self.assertEqual(str(t2), "2002-03-19 12:47:00+00:00")
!         self.assertEqual(str(t3), "2002-03-19 13:47:00+01:00")
!         self.assertEqual(repr(t1),
!                          "datetimetz(2002, 3, 19, 7, 47, tzinfo=est)")
!         self.assertEqual(repr(t2),
!                          "datetimetz(2002, 3, 19, 12, 47, tzinfo=utc)")
!         self.assertEqual(repr(t3),
!                          "datetimetz(2002, 3, 19, 13, 47, tzinfo=met)")
  
      def test_combine(self):
--- 75,79 ----
      theclass = datetimetz
  
!     # XXX Most of the tests here have moved into test_both.py.
  
      def test_combine(self):