Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

bpo-43510: Implement PEP 597 opt-in EncodingWarning.#19481

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
methane merged 51 commits intopython:masterfrommethane:open-encoding
Mar 29, 2021
Merged
Show file tree
Hide file tree
Changes from1 commit
Commits
Show all changes
51 commits
Select commitHold shift + click to select a range
a3c014b
Raise a warning when encoding is omitted
methaneApr 7, 2020
050bd1b
add test
methaneApr 12, 2020
939f4a0
wrap encoding=None with text_encoding.
methaneApr 12, 2020
3c99777
Add io.LOCALE_ENCODING = "locale"
methaneJan 29, 2021
4016278
Add EncodingWarning.
methaneJan 29, 2021
c5c556c
Add sys.warn_default_encoding
methaneJan 29, 2021
d9a08c2
shorten option names
methaneJan 30, 2021
772648e
EncodingWarning extends Warning
methaneJan 30, 2021
1a8e305
make clinic
methaneJan 30, 2021
20966cd
fix test
methaneJan 30, 2021
2b80f42
remove wrong test case
methaneJan 30, 2021
760308c
fix exception_hierarchy.txt
methaneJan 30, 2021
a95dff2
Make sys.flags.encoding_warning int
methaneJan 31, 2021
31fb411
Fix text_embed.
methaneJan 31, 2021
096a0a3
Fix test_pickle
methaneJan 31, 2021
99fc938
configparser: use io.text_encoding()
methaneFeb 13, 2021
6fdbcbc
Rename option names
methaneFeb 22, 2021
3f362bc
Merge remote-tracking branch 'upstream/master' into open-encoding
methaneMar 16, 2021
674feff
Update docs
methaneMar 16, 2021
d9d850f
Add NEWS entry
methaneMar 16, 2021
16463ea
Add document for text_encoding and encoding="locale".
methaneMar 17, 2021
412d633
Suppress EncodingWarning from site.py
methaneMar 17, 2021
ee883d1
Remove io.LOCALE_ENCODING
methaneMar 18, 2021
6a15e2a
text_encoding() first argument is mandatory.
methaneMar 18, 2021
5d474b4
Apply suggestions from code review
methaneMar 18, 2021
c17016f
Simplify _PyPreCmdline and PyConfig
methaneMar 18, 2021
03f971c
Update EncodingWarning doc
methaneMar 18, 2021
9d26b7a
Update document
methaneMar 19, 2021
60e74cf
tweak warning message
methaneMar 19, 2021
a505b5f
Use stacklevel=2 for text_encoding() default
methaneMar 19, 2021
cbe22e2
fixup
methaneMar 19, 2021
a9f9f04
tweak for readability
methaneMar 19, 2021
3bea88f
make clinic
methaneMar 19, 2021
d260a4c
fix doc build error
methaneMar 19, 2021
049a269
tweak warning message
methaneMar 19, 2021
018ba64
fixup
methaneMar 19, 2021
3a9623e
Fix subprocess
methaneMar 23, 2021
737059e
Update Doc/library/io.rst
methaneMar 23, 2021
6a62211
Update Doc/library/io.rst
methaneMar 23, 2021
54c7dc6
Update Doc/library/io.rst
methaneMar 23, 2021
5b2830b
Update Doc/library/io.rst
methaneMar 23, 2021
14f2a6e
Apply suggestions from code review
methaneMar 23, 2021
06e2a32
Move EncodingWarnings
methaneMar 23, 2021
27d49d2
fix comment
methaneMar 23, 2021
80f4644
fix text_encoding() docstring
methaneMar 23, 2021
6ad0e7f
update what's new
methaneMar 23, 2021
73b27f1
fix doc build
methaneMar 23, 2021
c149d65
Update Doc/library/io.rst
methaneMar 24, 2021
4eb7655
Apply suggestions from code review
methaneMar 24, 2021
e3bce76
Apply suggestions from code review
methaneMar 24, 2021
c089fd7
Update Doc/library/io.rst
methaneMar 24, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
PrevPrevious commit
NextNext commit
Rename option names
sys.flags.encoding_warning -> warn_default_encoding-X warn_encoding -> warn_default_encodingPYTHONWARNENCODING -> PYTHONWARNDEFAULTENCODING
  • Loading branch information
@methane
methane committedFeb 22, 2021
commit6fdbcbc842eebedcf3acd60f2bf3d02c647b2a3e
7 changes: 7 additions & 0 deletionsDoc/c-api/init_config.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -583,6 +583,13 @@ PyConfig

Default: ``0``.

.. c:member:: int warn_default_encoding

If equals to 1, emit a ``EncodingWarning`` when ``TextIOWrapper``
used its default encoding. See :pep:`597` for detail.

.. versionadded:: 3.10

.. c:member:: wchar_t* check_hash_pycs_mode

Control the validation behavior of hash-based ``.pyc`` files:
Expand Down
2 changes: 1 addition & 1 deletionInclude/cpython/initconfig.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -153,7 +153,7 @@ typedef struct PyConfig {
PyWideStringList warnoptions;
int site_import;
int bytes_warning;
intencoding_warning;
intwarn_default_encoding;
int inspect;
int interactive;
int optimization_level;
Expand Down
4 changes: 2 additions & 2 deletionsInclude/internal/pycore_initconfig.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -102,15 +102,15 @@ typedef struct {
int isolated; /* -I option */
int use_environment; /* -E option */
int dev_mode; /* -X dev and PYTHONDEVMODE */
intencoding_warning; /* -Xwarn_encoding andPYTHONWARNENCODING */
intwarn_default_encoding; /* -Xwarn_default_encoding andPYTHONWARNDEFAULTENCODING */
} _PyPreCmdline;

#define _PyPreCmdline_INIT \
(_PyPreCmdline){ \
.use_environment = -1, \
.isolated = -1, \
.dev_mode = -1, \
.encoding_warning = -1}
.warn_default_encoding = -1}
/* Note: _PyPreCmdline_INIT sets other fields to 0/NULL */

extern void _PyPreCmdline_Clear(_PyPreCmdline *cmdline);
Expand Down
10 changes: 4 additions & 6 deletionsLib/_pyio.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -48,18 +48,16 @@ def text_encoding(encoding, stacklevel=1):
Otherwise, return the default text encoding (i.e. "locale").

This function emits EncodingWarning if *encoding* is None and
sys.flags.encoding_warning is true.
sys.flags.warn_default_encoding is true.

This function can be used in APIs having encoding=None option.
But please consider encoding="utf-8" for new APIs.
"""
if encoding is None:
if sys.flags.encoding_warning:
if sys.flags.warn_default_encoding:
import warnings
warnings.warn(
"'encoding' option is not specified. The default encoding "
"will be changed to 'utf-8' in the future",
EncodingWarning, stacklevel + 2)
warnings.warn("'encoding' option is not specified.",
EncodingWarning, stacklevel + 2)
encoding = "locale"
return encoding

Expand Down
2 changes: 1 addition & 1 deletionLib/test/test_embed.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -389,7 +389,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):

'site_import': 1,
'bytes_warning': 0,
'encoding_warning': 0,
'warn_default_encoding': 0,
'inspect': 0,
'interactive': 0,
'optimization_level': 0,
Expand Down
2 changes: 1 addition & 1 deletionLib/test/test_io.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -4237,7 +4237,7 @@ def test_check_encoding_warning(self):

pathlib.Path({filename!r}).read_text() # line 8
''')
proc = assert_python_ok('-X', 'warn_encoding', '-c', code)
proc = assert_python_ok('-X', 'warn_default_encoding', '-c', code)
warnings = proc.err.splitlines()
self.assertEqual(len(warnings), 2)
self.assertTrue(
Expand Down
2 changes: 1 addition & 1 deletionLib/test/test_sys.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -592,7 +592,7 @@ def test_sys_flags(self):
"dont_write_bytecode", "no_user_site", "no_site",
"ignore_environment", "verbose", "bytes_warning", "quiet",
"hash_randomization", "isolated", "dev_mode", "utf8_mode",
"encoding_warning")
"warn_default_encoding")
for attr in attrs:
self.assertTrue(hasattr(sys.flags, attr), attr)
attr_type = bool if attr == "dev_mode" else int
Expand Down
6 changes: 3 additions & 3 deletionsModules/_io/_iomodule.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -519,19 +519,19 @@ When encoding is not None, just return it.
Otherwise, return the default text encoding (i.e. "locale").

This function emits EncodingWarning if *encoding* is None and
sys.flags.encoding_warning is true.
sys.flags.warn_default_encoding is true.

This function can be used in APIs having encoding=None option.
But please consider encoding="utf-8" for new APIs.
[clinic start generated code]*/

static PyObject *
_io_text_encoding_impl(PyObject *module, PyObject *encoding, int stacklevel)
/*[clinic end generated code: output=91b2cfea6934cc0c input=fd956a85976afd07]*/
/*[clinic end generated code: output=91b2cfea6934cc0c input=31cd163789637f39]*/
{
if (encoding == NULL || encoding == Py_None) {
PyInterpreterState *interp = _PyInterpreterState_GET();
if (_PyInterpreterState_GetConfig(interp)->encoding_warning) {
if (_PyInterpreterState_GetConfig(interp)->warn_default_encoding) {
PyErr_WarnEx(PyExc_EncodingWarning,
"'encoding' option is omitted", stacklevel + 1);
}
Expand Down
4 changes: 2 additions & 2 deletionsModules/_io/clinic/_iomodule.c.h
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -282,7 +282,7 @@ PyDoc_STRVAR(_io_text_encoding__doc__,
"Otherwise, return the default text encoding (i.e. \"locale\").\n"
"\n"
"This function emits EncodingWarning if *encoding* is None and\n"
"sys.flags.encoding_warning is true.\n"
"sys.flags.warn_default_encoding is true.\n"
"\n"
"This function can be used in APIs having encoding=None option.\n"
"But please consider encoding=\"utf-8\" for new APIs.");
Expand DownExpand Up@@ -362,4 +362,4 @@ _io_open_code(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObjec
exit:
return return_value;
}
/*[clinic end generated code: output=f8081ebe49134854 input=a9049054013a1b77]*/
/*[clinic end generated code: output=c8b593b834aeff7b input=a9049054013a1b77]*/
2 changes: 1 addition & 1 deletionModules/_io/textio.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -1125,7 +1125,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer,

if (encoding == NULL) {
PyInterpreterState *interp = _PyInterpreterState_GET();
if (_PyInterpreterState_GetConfig(interp)->encoding_warning) {
if (_PyInterpreterState_GetConfig(interp)->warn_default_encoding) {
PyErr_WarnEx(PyExc_EncodingWarning,
"'encoding' option is omitted", 1);
}
Expand Down
20 changes: 10 additions & 10 deletionsPython/initconfig.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -94,7 +94,7 @@ static const char usage_3[] = "\
otherwise activate automatically)\n\
-X pycache_prefix=PATH: enable writing .pyc files to a parallel tree rooted at the\n\
given directory instead of to the code tree\n\
-Xwarn_encoding: enable opt-in EncodingWarning for 'encoding=None'\n\
-Xwarn_default_encoding: enable opt-in EncodingWarning for 'encoding=None'\n\
\n\
--check-hash-based-pycs always|default|never:\n\
control how Python invalidates hash-based .pyc files\n\
Expand DownExpand Up@@ -131,7 +131,7 @@ static const char usage_6[] =
" debugger. It can be set to the callable of your debugger of choice.\n"
"PYTHONDEVMODE: enable the development mode.\n"
"PYTHONPYCACHEPREFIX: root directory for bytecode cache (pyc) files.\n"
"PYTHONWARNENCODING: enable opt-in EncodingWarning for 'encoding=None'.\n";
"PYTHONWARNDEFAULTENCODING: enable opt-in EncodingWarning for 'encoding=None'.\n";

#if defined(MS_WINDOWS)
# define PYTHONHOMEHELP "<prefix>\\python{major}{minor}"
Expand DownExpand Up@@ -602,7 +602,7 @@ config_check_consistency(const PyConfig *config)
assert(config->malloc_stats >= 0);
assert(config->site_import >= 0);
assert(config->bytes_warning >= 0);
assert(config->encoding_warning >= 0);
assert(config->warn_default_encoding >= 0);
assert(config->inspect >= 0);
assert(config->interactive >= 0);
assert(config->optimization_level >= 0);
Expand DownExpand Up@@ -701,7 +701,7 @@ _PyConfig_InitCompatConfig(PyConfig *config)
config->parse_argv = 0;
config->site_import = -1;
config->bytes_warning = -1;
config->encoding_warning = -1;
config->warn_default_encoding = -1;
config->inspect = -1;
config->interactive = -1;
config->optimization_level = -1;
Expand DownExpand Up@@ -732,7 +732,7 @@ config_init_defaults(PyConfig *config)
config->use_environment = 1;
config->site_import = 1;
config->bytes_warning = 0;
config->encoding_warning = 0;
config->warn_default_encoding = 0;
config->inspect = 0;
config->interactive = 0;
config->optimization_level = 0;
Expand DownExpand Up@@ -911,7 +911,7 @@ _PyConfig_Copy(PyConfig *config, const PyConfig *config2)

COPY_ATTR(site_import);
COPY_ATTR(bytes_warning);
COPY_ATTR(encoding_warning);
COPY_ATTR(warn_default_encoding);
COPY_ATTR(inspect);
COPY_ATTR(interactive);
COPY_ATTR(optimization_level);
Expand DownExpand Up@@ -1013,7 +1013,7 @@ _PyConfig_AsDict(const PyConfig *config)
SET_ITEM_WSTR(platlibdir);
SET_ITEM_INT(site_import);
SET_ITEM_INT(bytes_warning);
SET_ITEM_INT(encoding_warning);
SET_ITEM_INT(warn_default_encoding);
SET_ITEM_INT(inspect);
SET_ITEM_INT(interactive);
SET_ITEM_INT(optimization_level);
Expand DownExpand Up@@ -1278,7 +1278,7 @@ _PyConfig_FromDict(PyConfig *config, PyObject *dict)
GET_WSTRLIST(warnoptions);
GET_UINT(site_import);
GET_UINT(bytes_warning);
GET_UINT(encoding_warning);
GET_UINT(warn_default_encoding);
GET_UINT(inspect);
GET_UINT(interactive);
GET_UINT(optimization_level);
Expand DownExpand Up@@ -2144,8 +2144,8 @@ config_read(PyConfig *config, int compute_path_config)
config->parse_argv = 2;
}

if (config->encoding_warning < 0) {
config->encoding_warning = 0;
if (config->warn_default_encoding < 0) {
config->warn_default_encoding = 0;
}

return _PyStatus_OK();
Expand Down
18 changes: 9 additions & 9 deletionsPython/preconfig.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -169,7 +169,7 @@ _PyPreCmdline_SetConfig(const _PyPreCmdline *cmdline, PyConfig *config)
COPY_ATTR(isolated);
COPY_ATTR(use_environment);
COPY_ATTR(dev_mode);
COPY_ATTR(encoding_warning);
COPY_ATTR(warn_default_encoding);
return _PyStatus_OK();

#undef COPY_ATTR
Expand DownExpand Up@@ -258,21 +258,21 @@ _PyPreCmdline_Read(_PyPreCmdline *cmdline, const PyPreConfig *preconfig)
cmdline->dev_mode = 0;
}

//encoding_warning
if ((cmdline->encoding_warning < 0)
&& (_Py_get_xoption(&cmdline->xoptions, L"warn_encoding")
|| _Py_GetEnv(cmdline->use_environment, "PYTHONWARNENCODING")))
//warn_default_encoding
if ((cmdline->warn_default_encoding < 0)
&& (_Py_get_xoption(&cmdline->xoptions, L"warn_default_encoding")
|| _Py_GetEnv(cmdline->use_environment, "PYTHONWARNDEFAULTENCODING")))
{
cmdline->encoding_warning = 1;
cmdline->warn_default_encoding = 1;
}
if (cmdline->encoding_warning < 0) {
cmdline->encoding_warning = 0;
if (cmdline->warn_default_encoding < 0) {
cmdline->warn_default_encoding = 0;
}

assert(cmdline->use_environment >= 0);
assert(cmdline->isolated >= 0);
assert(cmdline->dev_mode >= 0);
assert(cmdline->encoding_warning >= 0);
assert(cmdline->warn_default_encoding >= 0);

return _PyStatus_OK();
}
Expand Down
4 changes: 2 additions & 2 deletionsPython/sysmodule.c
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2506,7 +2506,7 @@ static PyStructSequence_Field flags_fields[] = {
{"isolated", "-I"},
{"dev_mode", "-X dev"},
{"utf8_mode", "-X utf8"},
{"encoding_warning","-Xwarn_encoding"},
{"warn_default_encoding", "-Xwarn_default_encoding"},
{0}
};

Expand DownExpand Up@@ -2554,7 +2554,7 @@ set_flags_from_config(PyObject *flags, PyThreadState *tstate)
SetFlag(config->isolated);
SetFlagObj(PyBool_FromLong(config->dev_mode));
SetFlag(preconfig->utf8_mode);
SetFlag(config->encoding_warning);
SetFlag(config->warn_default_encoding);
#undef SetFlagObj
#undef SetFlag
return 0;
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp