]> granicus.if.org Git - python/commitdiff
time.get_clock_info() uses a namespace instead of structseq
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 12 Jun 2012 20:11:44 +0000 (22:11 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 12 Jun 2012 20:11:44 +0000 (22:11 +0200)
Doc/library/time.rst
Modules/timemodule.c

index a8c70b33aebc6e4f5a05e4bd7aeb909087c12a4d..ba6b176e8e624b8a2a8a48412a9b6cdec813e3fc 100644 (file)
@@ -160,30 +160,6 @@ The module defines the following functions and data items:
    .. versionadded:: 3.3
 
 
-.. class:: clock_info
-
-   Clock information object returned by :func:`get_clock_info`.
-
-   .. attribute:: implementation
-
-      The name of the underlying C function used to get the clock value.
-
-   .. attribute::  monotonic
-
-      ``True`` if the clock cannot go backward, ``False`` otherwise.
-
-   .. attribute:: adjusted
-
-      ``True`` if the clock can be adjusted (e.g. by a NTP daemon), ``False``
-      otherwise.
-
-   .. attribute:: resolution
-
-      The resolution of the clock in seconds (:class:`float`).
-
-   .. versionadded:: 3.3
-
-
 .. function:: clock_settime(clk_id, time)
 
    Set the time of the specified clock *clk_id*.
@@ -267,7 +243,7 @@ The module defines the following functions and data items:
 
 .. function:: get_clock_info(name)
 
-   Get information on the specified clock as a :class:`clock_info` object.
+   Get information on the specified clock as a namespace object.
    Supported clock names and the corresponding functions to read their value
    are:
 
@@ -277,6 +253,16 @@ The module defines the following functions and data items:
    * ``'process_time'``: :func:`time.process_time`
    * ``'time'``: :func:`time.time`
 
+   The result has the following attributes:
+
+   - *adjusted*: ``True`` if the clock can be adjusted (e.g. by a NTP daemon),
+     ``False`` otherwise
+   - *implementation*: The name of the underlying C function used to get
+     the clock value
+   - *monotonic*: ``True`` if the clock cannot go backward,
+     ``False`` otherwise
+   - *resolution*: The resolution of the clock in seconds (:class:`float`)
+
    .. versionadded:: 3.3
 
 
index a80cb4b82f0a499ba7ab51da831e21a3fb2f02eb..d844bc38f318b51009be9de020998f58cdfb8716 100644 (file)
@@ -1124,35 +1124,12 @@ PyDoc_STRVAR(process_time_doc,
 Process time for profiling: sum of the kernel and user-space CPU time.");
 
 
-static PyTypeObject ClockInfoType;
-
-PyDoc_STRVAR(ClockInfo_docstring,
-    "Clock information");
-
-static PyStructSequence_Field ClockInfo_fields[] = {
-    {"implementation", "name of the underlying C function "
-                       "used to get the clock value"},
-    {"monotonic", "True if the clock cannot go backward, False otherwise"},
-    {"adjusted", "True if the clock can be adjusted "
-                    "(e.g. by a NTP daemon), False otherwise"},
-    {"resolution", "resolution of the clock in seconds"},
-    {NULL, NULL}
-};
-
-static PyStructSequence_Desc ClockInfo_desc = {
-    "time.clock_info",
-    ClockInfo_docstring,
-    ClockInfo_fields,
-    4,
-};
-
 static PyObject *
 time_get_clock_info(PyObject *self, PyObject *args)
 {
     char *name;
-    PyObject *obj;
     _Py_clock_info_t info;
-    PyObject *result;
+    PyObject *obj = NULL, *dict, *ns;
 
     if (!PyArg_ParseTuple(args, "s:get_clock_info", &name))
         return NULL;
@@ -1191,39 +1168,50 @@ time_get_clock_info(PyObject *self, PyObject *args)
         return NULL;
     Py_DECREF(obj);
 
-    result = PyStructSequence_New(&ClockInfoType);
-    if (result == NULL)
+    dict = PyDict_New();
+    if (dict == NULL)
         return NULL;
 
     assert(info.implementation != NULL);
     obj = PyUnicode_FromString(info.implementation);
     if (obj == NULL)
         goto error;
-    PyStructSequence_SET_ITEM(result, 0, obj);
+    if (PyDict_SetItemString(dict, "implementation", obj) == -1)
+        goto error;
+    Py_CLEAR(obj);
 
     assert(info.monotonic != -1);
     obj = PyBool_FromLong(info.monotonic);
     if (obj == NULL)
         goto error;
-    PyStructSequence_SET_ITEM(result, 1, obj);
+    if (PyDict_SetItemString(dict, "monotonic", obj) == -1)
+        goto error;
+    Py_CLEAR(obj);
 
     assert(info.adjusted != -1);
     obj = PyBool_FromLong(info.adjusted);
     if (obj == NULL)
         goto error;
-    PyStructSequence_SET_ITEM(result, 2, obj);
+    if (PyDict_SetItemString(dict, "adjusted", obj) == -1)
+        goto error;
+    Py_CLEAR(obj);
 
     assert(info.resolution > 0.0);
     assert(info.resolution <= 1.0);
     obj = PyFloat_FromDouble(info.resolution);
     if (obj == NULL)
         goto error;
-    PyStructSequence_SET_ITEM(result, 3, obj);
+    if (PyDict_SetItemString(dict, "resolution", obj) == -1)
+        goto error;
+    Py_CLEAR(obj);
 
-    return result;
+    ns = _PyNamespace_New(dict);
+    Py_DECREF(dict);
+    return ns;
 
 error:
-    Py_DECREF(result);
+    Py_DECREF(dict);
+    Py_XDECREF(obj);
     return NULL;
 }
 
@@ -1451,11 +1439,6 @@ PyInit_time(void)
         PyStructSequence_InitType(&StructTimeType,
                                   &struct_time_type_desc);
 
-        /* initialize ClockInfoType */
-        PyStructSequence_InitType(&ClockInfoType, &ClockInfo_desc);
-        Py_INCREF(&ClockInfoType);
-        PyModule_AddObject(m, "clock_info", (PyObject*)&ClockInfoType);
-
 #ifdef MS_WINDOWS
         winver.dwOSVersionInfoSize = sizeof(winver);
         if (!GetVersionEx((OSVERSIONINFO*)&winver)) {