[Python-checkins] python/nondist/sandbox/datetime datetime.c,1.41,1.42 doc.txt,1.9,1.10 obj_date.c,1.25,1.26 test_both.py,1.35,1.36

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
Wed, 04 Dec 2002 21:04:12 -0800


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

Modified Files:
	datetime.c doc.txt obj_date.c test_both.py 
Log Message:
Implemented, documented, and added a test for date.strftime().


Index: datetime.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -C2 -d -r1.41 -r1.42
*** datetime.c	5 Dec 2002 04:47:16 -0000	1.41
--- datetime.c	5 Dec 2002 05:04:09 -0000	1.42
***************
*** 345,355 ****
  	assert(PyTuple_Size(tuple) == 9);
  
- 	if (! PyString_Check(format)) {
- 		PyErr_Format(PyExc_TypeError,
- 			     "strftime requires a string format, not "
- 			     "type '%s'", format->ob_type->tp_name);
- 		return NULL;
- 	}
- 
  	time = PyImport_ImportModule("time");
  	if (time == NULL)
--- 345,348 ----
***************
*** 361,367 ****
  		return NULL;
  
!    	result = PyObject_CallFunction(time_strftime, "OO",
!     				     	format,
!     				     	tuple);
      	Py_DECREF(time_strftime);
      	return result;
--- 354,358 ----
  		return NULL;
  
!    	result = PyObject_CallFunction(time_strftime, "OO", format, tuple);
      	Py_DECREF(time_strftime);
      	return result;

Index: doc.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/doc.txt,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** doc.txt	5 Dec 2002 04:47:16 -0000	1.9
--- doc.txt	5 Dec 2002 05:04:09 -0000	1.10
***************
*** 299,304 ****
  
    - strftime(format)
!     XXX And the C implementation doesn't have this yet either.
!     XXX And there are no tests for it.
  
  
--- 299,305 ----
  
    - strftime(format)
!     Return a string representing the date, controlled by an explicit
!     format string.  d.strftime(f) is the same as
!     time.strftime(f, d.timetuple()).
  
  

Index: obj_date.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_date.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** obj_date.c	5 Dec 2002 04:49:42 -0000	1.25
--- obj_date.c	5 Dec 2002 05:04:09 -0000	1.26
***************
*** 351,354 ****
--- 351,367 ----
  }
  
+ static PyObject *
+ date_strftime(PyDateTime_Date *self, PyObject *format)
+ {
+ 	PyObject *result;
+ 	PyObject *tuple = date_timetuple(self);
+ 
+ 	if (tuple == NULL)
+ 		return NULL;
+ 	result = format_strftime(format, tuple);
+ 	Py_DECREF(tuple);
+ 	return result;
+ }
+ 
  /* XXX This is much more complicated than date_add.  Why? */
  static PyObject *
***************
*** 492,524 ****
--- 505,552 ----
  							   METH_CLASS,
  	 "timestamp -> local date from a POSIX timestamp (like time.time())."},
+ 
  	{"fromordinal", (PyCFunction)date_fromordinal,	METH_VARARGS |
  							METH_CLASS,
  	 "int -> date corresponding to a proleptic Gregorian ordinal."},
+ 
  	{"today",         (PyCFunction)date_today,	METH_O | METH_CLASS,
  	 "Construct local date corresponing to current day."},
  
  	/* Instance methods: */
+ 
  	{"ctime",       (PyCFunction)date_ctime,        METH_NOARGS,
  	 "Return ctime() style string."},
+ 
+ 	{"strftime",   	(PyCFunction)date_strftime,	METH_O,
+ 	 "format -> strftime() style string."},
+ 
  	{"timetuple",   (PyCFunction)date_timetuple,    METH_NOARGS,
           "Return time tuple, compatible with time.localtime()."},
+ 
  	{"isocalendar", (PyCFunction)date_isocalendar,  METH_NOARGS,
  	 "Return a 3-tuple containing ISO year, week number, and weekday.\n\n"
  	 "The first ISO week of the year is the (Mon-Sun) week containing the\n"
  	 "year's first Thursday; everything else derives from that."},
+ 
  	{"isoformat",   (PyCFunction)date_str,  	METH_NOARGS,
  	 "Return string in ISO 8601 format, YYYY-MM-DD."},
+ 
  	{"isoweekday",  (PyCFunction)date_isoweekday,   METH_NOARGS,
  	 "Return the day of the week represented by the date.\n"
  	 "Monday == 1 ... Sunday == 7"},
+ 
  	{"toordinal",   (PyCFunction)date_toordinal,    METH_NOARGS,
  	 "Return proleptic Gregorian ordinal.  January 1 of year 1 is day 1."},
+ 
  	{"weekday",     (PyCFunction)date_weekday,      METH_NOARGS,
  	 "Return the day of the week represented by the date.\n"
  	 "Monday == 0 ... Sunday == 6"},
+ 
  	{"__setstate__", (PyCFunction)date_setstate,	METH_O,
  	 	PyDoc_STR("__setstate__(state)")},
+ 
  	{"__getstate__", (PyCFunction)date_getstate,	METH_NOARGS,
  	 	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.35
retrieving revision 1.36
diff -C2 -d -r1.35 -r1.36
*** test_both.py	4 Dec 2002 23:08:47 -0000	1.35
--- test_both.py	5 Dec 2002 05:04:09 -0000	1.36
***************
*** 572,575 ****
--- 572,583 ----
          self.assertEqual(t.ctime(), "Sat Mar  2 00:00:00 2002")
  
+     def test_strftime(self):
+         t = self.theclass(2005, 3, 2)
+         self.assertEqual(t.strftime("m:%m d:%d y:%y"), "m:03 d:02 y:05")
+ 
+         self.assertRaises(TypeError, t.strftime) # needs an arg
+         self.assertRaises(TypeError, t.strftime, "one", "two") # too many args
+         self.assertRaises(TypeError, t.strftime, 42) # arg wrong type
+ 
      def test_resolution_info(self):
          self.assert_(isinstance(self.theclass.min, self.theclass))