PEP 418: Rename adjusted attribute to adjustable in time.get_clock_info() result
Fix also its value on Windows and Linux according to its documentation: "adjustable" indicates if the clock *can be* adjusted, not if it is or was adjusted. In most cases, it is not possible to indicate if a clock is or was adjusted.
This commit is contained in:
parent
bda4b8802c
commit
2b89fdf7eb
|
@ -255,8 +255,8 @@ The module defines the following functions and data items:
|
|||
|
||||
The result has the following attributes:
|
||||
|
||||
- *adjusted*: ``True`` if the clock can be adjusted (e.g. by a NTP daemon),
|
||||
``False`` otherwise
|
||||
- *adjustable*: ``True`` if the clock can be changed automatically (e.g. by
|
||||
a NTP daemon) or manually by the system administrator, ``False`` otherwise
|
||||
- *implementation*: The name of the underlying C function used to get
|
||||
the clock value
|
||||
- *monotonic*: ``True`` if the clock cannot go backward,
|
||||
|
|
|
@ -26,7 +26,7 @@ typedef struct {
|
|||
typedef struct {
|
||||
const char *implementation;
|
||||
int monotonic;
|
||||
int adjusted;
|
||||
int adjustable;
|
||||
double resolution;
|
||||
} _Py_clock_info_t;
|
||||
|
||||
|
|
|
@ -32,14 +32,14 @@ class TimeTestCase(unittest.TestCase):
|
|||
info = time.get_clock_info('time')
|
||||
self.assertFalse(info.monotonic)
|
||||
if sys.platform != 'win32':
|
||||
self.assertTrue(info.adjusted)
|
||||
self.assertTrue(info.adjustable)
|
||||
|
||||
def test_clock(self):
|
||||
time.clock()
|
||||
|
||||
info = time.get_clock_info('clock')
|
||||
self.assertTrue(info.monotonic)
|
||||
self.assertFalse(info.adjusted)
|
||||
self.assertFalse(info.adjustable)
|
||||
|
||||
@unittest.skipUnless(hasattr(time, 'clock_gettime'),
|
||||
'need time.clock_gettime()')
|
||||
|
@ -372,9 +372,9 @@ class TimeTestCase(unittest.TestCase):
|
|||
info = time.get_clock_info('monotonic')
|
||||
self.assertTrue(info.monotonic)
|
||||
if sys.platform == 'linux':
|
||||
self.assertTrue(info.adjusted)
|
||||
self.assertTrue(info.adjustable)
|
||||
else:
|
||||
self.assertFalse(info.adjusted)
|
||||
self.assertFalse(info.adjustable)
|
||||
|
||||
def test_perf_counter(self):
|
||||
time.perf_counter()
|
||||
|
@ -390,7 +390,7 @@ class TimeTestCase(unittest.TestCase):
|
|||
|
||||
info = time.get_clock_info('process_time')
|
||||
self.assertTrue(info.monotonic)
|
||||
self.assertFalse(info.adjusted)
|
||||
self.assertFalse(info.adjustable)
|
||||
|
||||
@unittest.skipUnless(hasattr(time, 'monotonic'),
|
||||
'need time.monotonic')
|
||||
|
@ -441,7 +441,7 @@ class TimeTestCase(unittest.TestCase):
|
|||
# 0.0 < resolution <= 1.0
|
||||
self.assertGreater(info.resolution, 0.0)
|
||||
self.assertLessEqual(info.resolution, 1.0)
|
||||
self.assertIsInstance(info.adjusted, bool)
|
||||
self.assertIsInstance(info.adjustable, bool)
|
||||
|
||||
self.assertRaises(ValueError, time.get_clock_info, 'xxx')
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Rename adjusted attribute to adjustable in time.get_clock_info() result.
|
||||
|
||||
- Issue #3518: Remove references to non-existent BaseManager.from_address()
|
||||
method.
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ floatclock(_Py_clock_info_t *info)
|
|||
info->implementation = "clock()";
|
||||
info->resolution = 1.0 / (double)CLOCKS_PER_SEC;
|
||||
info->monotonic = 1;
|
||||
info->adjusted = 0;
|
||||
info->adjustable = 0;
|
||||
}
|
||||
return PyFloat_FromDouble((double)value / CLOCKS_PER_SEC);
|
||||
}
|
||||
|
@ -132,7 +132,7 @@ win_perf_counter(_Py_clock_info_t *info, PyObject **result)
|
|||
info->implementation = "QueryPerformanceCounter()";
|
||||
info->resolution = 1.0 / (double)cpu_frequency;
|
||||
info->monotonic = 1;
|
||||
info->adjusted = 0;
|
||||
info->adjustable = 0;
|
||||
}
|
||||
*result = PyFloat_FromDouble(diff / (double)cpu_frequency);
|
||||
return 0;
|
||||
|
@ -882,7 +882,7 @@ pymonotonic(_Py_clock_info_t *info)
|
|||
return NULL;
|
||||
}
|
||||
info->resolution = timeIncrement * 1e-7;
|
||||
info->adjusted = 0;
|
||||
info->adjustable = 0;
|
||||
}
|
||||
return PyFloat_FromDouble(result);
|
||||
|
||||
|
@ -903,7 +903,7 @@ pymonotonic(_Py_clock_info_t *info)
|
|||
info->implementation = "mach_absolute_time()";
|
||||
info->resolution = (double)timebase.numer / timebase.denom * 1e-9;
|
||||
info->monotonic = 1;
|
||||
info->adjusted = 0;
|
||||
info->adjustable = 0;
|
||||
}
|
||||
return PyFloat_FromDouble(secs);
|
||||
|
||||
|
@ -926,13 +926,7 @@ pymonotonic(_Py_clock_info_t *info)
|
|||
struct timespec res;
|
||||
info->monotonic = 1;
|
||||
info->implementation = function;
|
||||
#if (defined(linux) || defined(__linux) || defined(__linux__)) \
|
||||
&& !defined(CLOCK_HIGHRES)
|
||||
/* CLOCK_MONOTONIC is adjusted on Linux */
|
||||
info->adjusted = 1;
|
||||
#else
|
||||
info->adjusted = 0;
|
||||
#endif
|
||||
info->adjustable = 0;
|
||||
if (clock_getres(clk_id, &res) == 0)
|
||||
info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
|
||||
else
|
||||
|
@ -1024,7 +1018,7 @@ py_process_time(_Py_clock_info_t *info)
|
|||
info->implementation = "GetProcessTimes()";
|
||||
info->resolution = 1e-7;
|
||||
info->monotonic = 1;
|
||||
info->adjusted = 0;
|
||||
info->adjustable = 0;
|
||||
}
|
||||
return PyFloat_FromDouble(total * 1e-7);
|
||||
#else
|
||||
|
@ -1053,7 +1047,7 @@ py_process_time(_Py_clock_info_t *info)
|
|||
struct timespec res;
|
||||
info->implementation = function;
|
||||
info->monotonic = 1;
|
||||
info->adjusted = 0;
|
||||
info->adjustable = 0;
|
||||
if (clock_getres(clk_id, &res) == 0)
|
||||
info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
|
||||
else
|
||||
|
@ -1071,7 +1065,7 @@ py_process_time(_Py_clock_info_t *info)
|
|||
if (info) {
|
||||
info->implementation = "getrusage(RUSAGE_SELF)";
|
||||
info->monotonic = 1;
|
||||
info->adjusted = 0;
|
||||
info->adjustable = 0;
|
||||
info->resolution = 1e-6;
|
||||
}
|
||||
return PyFloat_FromDouble(total);
|
||||
|
@ -1100,7 +1094,7 @@ py_process_time(_Py_clock_info_t *info)
|
|||
if (info) {
|
||||
info->implementation = "times()";
|
||||
info->monotonic = 1;
|
||||
info->adjusted = 0;
|
||||
info->adjustable = 0;
|
||||
info->resolution = 1.0 / ticks_per_second;
|
||||
}
|
||||
return PyFloat_FromDouble(total);
|
||||
|
@ -1137,12 +1131,12 @@ time_get_clock_info(PyObject *self, PyObject *args)
|
|||
#ifdef Py_DEBUG
|
||||
info.implementation = NULL;
|
||||
info.monotonic = -1;
|
||||
info.adjusted = -1;
|
||||
info.adjustable = -1;
|
||||
info.resolution = -1.0;
|
||||
#else
|
||||
info.implementation = "";
|
||||
info.monotonic = 0;
|
||||
info.adjusted = 0;
|
||||
info.adjustable = 0;
|
||||
info.resolution = 1.0;
|
||||
#endif
|
||||
|
||||
|
@ -1188,11 +1182,11 @@ time_get_clock_info(PyObject *self, PyObject *args)
|
|||
goto error;
|
||||
Py_CLEAR(obj);
|
||||
|
||||
assert(info.adjusted != -1);
|
||||
obj = PyBool_FromLong(info.adjusted);
|
||||
assert(info.adjustable != -1);
|
||||
obj = PyBool_FromLong(info.adjustable);
|
||||
if (obj == NULL)
|
||||
goto error;
|
||||
if (PyDict_SetItemString(dict, "adjusted", obj) == -1)
|
||||
if (PyDict_SetItemString(dict, "adjustable", obj) == -1)
|
||||
goto error;
|
||||
Py_CLEAR(obj);
|
||||
|
||||
|
@ -1471,7 +1465,7 @@ floattime(_Py_clock_info_t *info)
|
|||
struct timespec res;
|
||||
info->implementation = "clock_gettime(CLOCK_REALTIME)";
|
||||
info->monotonic = 0;
|
||||
info->adjusted = 1;
|
||||
info->adjustable = 1;
|
||||
if (clock_getres(CLOCK_REALTIME, &res) == 0)
|
||||
info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
|
||||
else
|
||||
|
|
|
@ -44,10 +44,7 @@ pygettimeofday(_PyTime_timeval *tp, _Py_clock_info_t *info)
|
|||
(void) GetSystemTimeAdjustment(&timeAdjustment, &timeIncrement,
|
||||
&isTimeAdjustmentDisabled);
|
||||
info->resolution = timeIncrement * 1e-7;
|
||||
if (isTimeAdjustmentDisabled)
|
||||
info->adjusted = 0;
|
||||
else
|
||||
info->adjusted = 1;
|
||||
info->adjustable = 1;
|
||||
}
|
||||
#else
|
||||
/* There are three ways to get the time:
|
||||
|
@ -71,7 +68,7 @@ pygettimeofday(_PyTime_timeval *tp, _Py_clock_info_t *info)
|
|||
info->implementation = "gettimeofday()";
|
||||
info->resolution = 1e-6;
|
||||
info->monotonic = 0;
|
||||
info->adjusted = 1;
|
||||
info->adjustable = 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -87,7 +84,7 @@ pygettimeofday(_PyTime_timeval *tp, _Py_clock_info_t *info)
|
|||
info->implementation = "ftime()";
|
||||
info->resolution = 1e-3;
|
||||
info->monotonic = 0;
|
||||
info->adjusted = 1;
|
||||
info->adjustable = 1;
|
||||
}
|
||||
}
|
||||
#else /* !HAVE_FTIME */
|
||||
|
@ -97,7 +94,7 @@ pygettimeofday(_PyTime_timeval *tp, _Py_clock_info_t *info)
|
|||
info->implementation = "time()";
|
||||
info->resolution = 1.0;
|
||||
info->monotonic = 0;
|
||||
info->adjusted = 1;
|
||||
info->adjustable = 1;
|
||||
}
|
||||
#endif /* !HAVE_FTIME */
|
||||
|
||||
|
|
Loading…
Reference in New Issue