[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):