bpo-1635741: Port time module to multiphase initialization (PEP 489) (GH-19107)

This commit is contained in:
Paulo Henrique Silva 2020-03-23 15:58:23 -03:00 committed by GitHub
parent 9a81ab107a
commit bd409bb5b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 51 deletions

View File

@ -0,0 +1,2 @@
Port time module to multiphase initialization (:pep:`489`).
Patch by Paulo Henrique Silva.

View File

@ -1736,82 +1736,64 @@ if it is 1, the time is given in the DST time zone;\n\
if it is -1, mktime() should guess based on the date and time.\n"); if it is -1, mktime() should guess based on the date and time.\n");
static int
static struct PyModuleDef timemodule = { time_exec(PyObject *module)
PyModuleDef_HEAD_INIT,
"time",
module_doc,
-1,
time_methods,
NULL,
NULL,
NULL,
NULL
};
PyMODINIT_FUNC
PyInit_time(void)
{ {
PyObject *m;
m = PyModule_Create(&timemodule);
if (m == NULL)
return NULL;
/* Set, or reset, module variables like time.timezone */ /* Set, or reset, module variables like time.timezone */
if (init_timezone(m) < 0) { if (init_timezone(module) < 0) {
goto error; return -1;
} }
#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_SETTIME) || defined(HAVE_CLOCK_GETRES) #if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_SETTIME) || defined(HAVE_CLOCK_GETRES)
#ifdef CLOCK_REALTIME #ifdef CLOCK_REALTIME
if (PyModule_AddIntMacro(m, CLOCK_REALTIME) < 0) { if (PyModule_AddIntMacro(module, CLOCK_REALTIME) < 0) {
goto error; return -1;
} }
#endif #endif
#ifdef CLOCK_MONOTONIC #ifdef CLOCK_MONOTONIC
if (PyModule_AddIntMacro(m, CLOCK_MONOTONIC) < 0) { if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC) < 0) {
goto error; return -1;
} }
#endif #endif
#ifdef CLOCK_MONOTONIC_RAW #ifdef CLOCK_MONOTONIC_RAW
if (PyModule_AddIntMacro(m, CLOCK_MONOTONIC_RAW) < 0) { if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC_RAW) < 0) {
goto error; return -1;
} }
#endif #endif
#ifdef CLOCK_HIGHRES #ifdef CLOCK_HIGHRES
if (PyModule_AddIntMacro(m, CLOCK_HIGHRES) < 0) { if (PyModule_AddIntMacro(module, CLOCK_HIGHRES) < 0) {
goto error; return -1;
} }
#endif #endif
#ifdef CLOCK_PROCESS_CPUTIME_ID #ifdef CLOCK_PROCESS_CPUTIME_ID
if (PyModule_AddIntMacro(m, CLOCK_PROCESS_CPUTIME_ID) < 0) { if (PyModule_AddIntMacro(module, CLOCK_PROCESS_CPUTIME_ID) < 0) {
goto error; return -1;
} }
#endif #endif
#ifdef CLOCK_THREAD_CPUTIME_ID #ifdef CLOCK_THREAD_CPUTIME_ID
if (PyModule_AddIntMacro(m, CLOCK_THREAD_CPUTIME_ID) < 0) { if (PyModule_AddIntMacro(module, CLOCK_THREAD_CPUTIME_ID) < 0) {
goto error; return -1;
} }
#endif #endif
#ifdef CLOCK_PROF #ifdef CLOCK_PROF
if (PyModule_AddIntMacro(m, CLOCK_PROF) < 0) { if (PyModule_AddIntMacro(module, CLOCK_PROF) < 0) {
goto error; return -1;
} }
#endif #endif
#ifdef CLOCK_BOOTTIME #ifdef CLOCK_BOOTTIME
if (PyModule_AddIntMacro(m, CLOCK_BOOTTIME) < 0) { if (PyModule_AddIntMacro(module, CLOCK_BOOTTIME) < 0) {
goto error; return -1;
} }
#endif #endif
#ifdef CLOCK_UPTIME #ifdef CLOCK_UPTIME
if (PyModule_AddIntMacro(m, CLOCK_UPTIME) < 0) { if (PyModule_AddIntMacro(module, CLOCK_UPTIME) < 0) {
goto error; return -1;
} }
#endif #endif
#ifdef CLOCK_UPTIME_RAW #ifdef CLOCK_UPTIME_RAW
if (PyModule_AddIntMacro(m, CLOCK_UPTIME_RAW) < 0) { if (PyModule_AddIntMacro(module, CLOCK_UPTIME_RAW) < 0) {
goto error; return -1;
} }
#endif #endif
@ -1820,16 +1802,16 @@ PyInit_time(void)
if (!initialized) { if (!initialized) {
if (PyStructSequence_InitType2(&StructTimeType, if (PyStructSequence_InitType2(&StructTimeType,
&struct_time_type_desc) < 0) { &struct_time_type_desc) < 0) {
goto error; return -1;
} }
} }
if (PyModule_AddIntConstant(m, "_STRUCT_TM_ITEMS", 11)) { if (PyModule_AddIntConstant(module, "_STRUCT_TM_ITEMS", 11)) {
goto error; return -1;
} }
Py_INCREF(&StructTimeType); Py_INCREF(&StructTimeType);
if (PyModule_AddObject(m, "struct_time", (PyObject*) &StructTimeType)) { if (PyModule_AddObject(module, "struct_time", (PyObject*) &StructTimeType)) {
Py_DECREF(&StructTimeType); Py_DECREF(&StructTimeType);
goto error; return -1;
} }
initialized = 1; initialized = 1;
@ -1840,11 +1822,30 @@ PyInit_time(void)
utc_string = tm.tm_zone; utc_string = tm.tm_zone;
#endif #endif
return m; return 0;
}
error: static struct PyModuleDef_Slot time_slots[] = {
Py_DECREF(m); {Py_mod_exec, time_exec},
return NULL; {0, NULL}
};
static struct PyModuleDef timemodule = {
PyModuleDef_HEAD_INIT,
"time",
module_doc,
0,
time_methods,
time_slots,
NULL,
NULL,
NULL
};
PyMODINIT_FUNC
PyInit_time(void)
{
return PyModuleDef_Init(&timemodule);
} }
/* Implement pysleep() for various platforms. /* Implement pysleep() for various platforms.