https://github.com/python/cpython/commit/b423ae6b0879ab1b53c6f517274c0d9e0f235d78
commit: b423ae6b0879ab1b53c6f517274c0d9e0f235d78
branch: main
author: Victor Stinner <[email protected]>
committer: vstinner <[email protected]>
date: 2024-09-04T10:58:32Z
summary:
gh-107954, PEP 741: Adjust Python initialization config (#123663)
Setting dev_mode to 1 in an isolated configuration now enables also
faulthandler.
Moreover, setting "module_search_paths" option with
PyInitConfig_SetStrList() now sets "module_search_paths_set" to 1.
files:
M Lib/test/test_embed.py
M Programs/_testembed.c
M Python/initconfig.c
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index 17656d7b3d7fb4..aaffd3c1339404 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -1766,7 +1766,6 @@ def test_initconfig_api(self):
'use_hash_seed': True,
}
config_dev_mode(preconfig, config)
- config['faulthandler'] = 0
self.check_all_configs("test_initconfig_api", config, preconfig,
api=API_ISOLATED)
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
index 13f1db1cc708b5..778da2ff9588ef 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -1806,6 +1806,16 @@ static int test_init_set_config(void)
}
+static int initconfig_getint(PyInitConfig *config, const char *name)
+{
+ int64_t value;
+ int res = PyInitConfig_GetInt(config, name, &value);
+ assert(res == 0);
+ assert(INT_MIN <= value && value <= INT_MAX);
+ return (int)value;
+}
+
+
static int test_initconfig_api(void)
{
PyInitConfig *config = PyInitConfig_Create();
@@ -1844,7 +1854,6 @@ static int test_initconfig_api(void)
goto error;
}
-
if (Py_InitializeFromInitConfig(config) < 0) {
goto error;
}
@@ -1876,38 +1885,51 @@ static int test_initconfig_get_api(void)
assert(PyInitConfig_HasOption(config, "non-existent") == 0);
// test PyInitConfig_GetInt()
- int64_t value;
- assert(PyInitConfig_GetInt(config, "dev_mode", &value) == 0);
- assert(value == 0);
+ assert(initconfig_getint(config, "dev_mode") == 0);
assert(PyInitConfig_SetInt(config, "dev_mode", 1) == 0);
- assert(PyInitConfig_GetInt(config, "dev_mode", &value) == 0);
- assert(value == 1);
+ assert(initconfig_getint(config, "dev_mode") == 1);
// test PyInitConfig_GetInt() on a PyPreConfig option
- assert(PyInitConfig_GetInt(config, "utf8_mode", &value) == 0);
- assert(value == 0);
+ assert(initconfig_getint(config, "utf8_mode") == 0);
assert(PyInitConfig_SetInt(config, "utf8_mode", 1) == 0);
- assert(PyInitConfig_GetInt(config, "utf8_mode", &value) == 0);
- assert(value == 1);
+ assert(initconfig_getint(config, "utf8_mode") == 1);
// test PyInitConfig_GetStr()
char *str;
+ assert(PyInitConfig_GetStr(config, "program_name", &str) == 0);
+ assert(str == NULL);
assert(PyInitConfig_SetStr(config, "program_name", PROGRAM_NAME_UTF8) ==
0);
assert(PyInitConfig_GetStr(config, "program_name", &str) == 0);
assert(strcmp(str, PROGRAM_NAME_UTF8) == 0);
free(str);
// test PyInitConfig_GetStrList() and PyInitConfig_FreeStrList()
+ size_t length;
+ char **items;
+ assert(PyInitConfig_GetStrList(config, "xoptions", &length, &items) == 0);
+ assert(length == 0);
+
char* xoptions[] = {"faulthandler"};
assert(PyInitConfig_SetStrList(config, "xoptions",
Py_ARRAY_LENGTH(xoptions), xoptions) == 0);
- size_t length;
- char **items;
+
assert(PyInitConfig_GetStrList(config, "xoptions", &length, &items) == 0);
assert(length == 1);
assert(strcmp(items[0], "faulthandler") == 0);
PyInitConfig_FreeStrList(length, items);
+ // Setting hash_seed sets use_hash_seed
+ assert(initconfig_getint(config, "use_hash_seed") == 0);
+ assert(PyInitConfig_SetInt(config, "hash_seed", 123) == 0);
+ assert(initconfig_getint(config, "use_hash_seed") == 1);
+
+ // Setting module_search_paths sets module_search_paths_set
+ assert(initconfig_getint(config, "module_search_paths_set") == 0);
+ char* paths[] = {"search", "path"};
+ assert(PyInitConfig_SetStrList(config, "module_search_paths",
+ Py_ARRAY_LENGTH(paths), paths) == 0);
+ assert(initconfig_getint(config, "module_search_paths_set") == 1);
+
return 0;
}
diff --git a/Python/initconfig.c b/Python/initconfig.c
index d2bb46062209da..cc4b5b26eae311 100644
--- a/Python/initconfig.c
+++ b/Python/initconfig.c
@@ -1031,7 +1031,6 @@ PyConfig_InitIsolatedConfig(PyConfig *config)
config->dev_mode = 0;
config->install_signal_handlers = 0;
config->use_hash_seed = 0;
- config->faulthandler = 0;
config->tracemalloc = 0;
config->perf_profiling = 0;
config->int_max_str_digits = _PY_LONG_DEFAULT_MAX_STR_DIGITS;
@@ -3753,7 +3752,7 @@ PyInitConfig_SetInt(PyInitConfig *config, const char
*name, int64_t value)
return -1;
}
- if (strcmp(name, "hash_seed")) {
+ if (strcmp(name, "hash_seed") == 0) {
config->config.use_hash_seed = 1;
}
@@ -3863,7 +3862,14 @@ PyInitConfig_SetStrList(PyInitConfig *config, const char
*name,
return -1;
}
PyWideStringList *list = raw_member;
- return _PyWideStringList_FromUTF8(config, list, length, items);
+ if (_PyWideStringList_FromUTF8(config, list, length, items) < 0) {
+ return -1;
+ }
+
+ if (strcmp(name, "module_search_paths") == 0) {
+ config->config.module_search_paths_set = 1;
+ }
+ return 0;
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]