summaryrefslogtreecommitdiffstats
path: root/Modules/datetimemodule.c
diff options
context:
space:
mode:
authorEric Smith <eric@trueblade.com>2008-02-17 19:46:49 (GMT)
committerEric Smith <eric@trueblade.com>2008-02-17 19:46:49 (GMT)
commita9f7d6248032c9572b4d2024a1be8bd2823af09f (patch)
tree5465a1051312055678248db0076d314924ee4ebc /Modules/datetimemodule.c
parente139688d34cc12b23d3a310f10d4f440f75f7d08 (diff)
downloadcpython-a9f7d6248032c9572b4d2024a1be8bd2823af09f.zip
cpython-a9f7d6248032c9572b4d2024a1be8bd2823af09f.tar.gz
cpython-a9f7d6248032c9572b4d2024a1be8bd2823af09f.tar.bz2
Backport of PEP 3101, Advanced String Formatting, from py3k.
Highlights: - Adding PyObject_Format. - Adding string.Format class. - Adding __format__ for str, unicode, int, long, float, datetime. - Adding builtin format. - Adding ''.format and u''.format. - str/unicode fixups for formatters. The files in Objects/stringlib that implement PEP 3101 (stringdefs.h, unicodedefs.h, formatter.h, string_format.h) are identical in trunk and py3k. Any changes from here on should be made to trunk, and changes will propogate to py3k).
Diffstat (limited to 'Modules/datetimemodule.c')
-rw-r--r--Modules/datetimemodule.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c
index 83e547e..fb11e35 100644
--- a/Modules/datetimemodule.c
+++ b/Modules/datetimemodule.c
@@ -2469,6 +2469,32 @@ date_strftime(PyDateTime_Date *self, PyObject *args, PyObject *kw)
return result;
}
+static PyObject *
+date_format(PyDateTime_Date *self, PyObject *args)
+{
+ PyObject *format;
+
+ if (!PyArg_ParseTuple(args, "O:__format__", &format))
+ return NULL;
+
+ /* Check for str or unicode */
+ if (PyString_Check(format)) {
+ /* If format is zero length, return str(self) */
+ if (PyString_GET_SIZE(format) == 0)
+ return PyObject_Str((PyObject *)self);
+ } else if (PyUnicode_Check(format)) {
+ /* If format is zero length, return str(self) */
+ if (PyUnicode_GET_SIZE(format) == 0)
+ return PyObject_Unicode((PyObject *)self);
+ } else {
+ PyErr_Format(PyExc_ValueError,
+ "__format__ expects str or unicode, not %.200s",
+ Py_TYPE(format)->tp_name);
+ return NULL;
+ }
+ return PyObject_CallMethod((PyObject *)self, "strftime", "O", format);
+}
+
/* ISO methods. */
static PyObject *
@@ -2633,6 +2659,9 @@ static PyMethodDef date_methods[] = {
{"strftime", (PyCFunction)date_strftime, METH_VARARGS | METH_KEYWORDS,
PyDoc_STR("format -> strftime() style string.")},
+ {"__format__", (PyCFunction)date_format, METH_VARARGS,
+ PyDoc_STR("Formats self with strftime.")},
+
{"timetuple", (PyCFunction)date_timetuple, METH_NOARGS,
PyDoc_STR("Return time tuple, compatible with time.localtime().")},
@@ -3418,6 +3447,9 @@ static PyMethodDef time_methods[] = {
{"strftime", (PyCFunction)time_strftime, METH_VARARGS | METH_KEYWORDS,
PyDoc_STR("format -> strftime() style string.")},
+ {"__format__", (PyCFunction)date_format, METH_VARARGS,
+ PyDoc_STR("Formats self with strftime.")},
+
{"utcoffset", (PyCFunction)time_utcoffset, METH_NOARGS,
PyDoc_STR("Return self.tzinfo.utcoffset(self).")},