Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion Doc/deprecations/pending-removal-in-3.16.rst
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ Pending removal in Python 3.16

* :mod:`sys`:

* The :func:`~sys._enablelegacywindowsfsencoding` function
* The :func:`!sys._enablelegacywindowsfsencoding` function
has been deprecated since Python 3.13.
Use the :envvar:`PYTHONLEGACYWINDOWSFSENCODING` environment variable instead.

Expand Down
27 changes: 1 addition & 26 deletions Doc/library/sys.rst
Original file line number Diff line number Diff line change
Expand Up @@ -879,7 +879,7 @@ always available. Unless explicitly noted otherwise, all variables are read-only

.. versionchanged:: 3.6
Windows is no longer guaranteed to return ``'mbcs'``. See :pep:`529`
and :func:`_enablelegacywindowsfsencoding` for more information.
for more information.

.. versionchanged:: 3.7
Return ``'utf-8'`` if the :ref:`Python UTF-8 Mode <utf8-mode>` is
Expand Down Expand Up @@ -2107,31 +2107,6 @@ always available. Unless explicitly noted otherwise, all variables are read-only
See :pep:`768` for more details.


.. function:: _enablelegacywindowsfsencoding()

Changes the :term:`filesystem encoding and error handler` to 'mbcs' and
'replace' respectively, for consistency with versions of Python prior to
3.6.

This is equivalent to defining the :envvar:`PYTHONLEGACYWINDOWSFSENCODING`
environment variable before launching Python.

See also :func:`sys.getfilesystemencoding` and
:func:`sys.getfilesystemencodeerrors`.

.. availability:: Windows.

.. note::
Changing the filesystem encoding after Python startup is risky because
the old fsencoding or paths encoded by the old fsencoding may be cached
somewhere. Use :envvar:`PYTHONLEGACYWINDOWSFSENCODING` instead.

.. versionadded:: 3.6
See :pep:`529` for more details.

.. deprecated-removed:: 3.13 3.16
Use :envvar:`PYTHONLEGACYWINDOWSFSENCODING` instead.

.. data:: stdin
stdout
stderr
Expand Down
3 changes: 2 additions & 1 deletion Doc/tools/removed-ids.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ c-api/file.html: deprecated-api
library/asyncio-task.html: terminating-a-task-group

# Removed APIs
library/symtable.html: symtable.Class.get_methods
library/symtable.html: symtable.Class.get_methods
library/sys.html: sys._enablelegacywindowsfsencoding
3 changes: 0 additions & 3 deletions Doc/using/cmdline.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1154,9 +1154,6 @@ conflict.
'replace', respectively. Otherwise, the new defaults 'utf-8' and
'surrogatepass' are used.

This may also be enabled at runtime with
:func:`sys._enablelegacywindowsfsencoding`.

.. availability:: Windows.

.. versionadded:: 3.6
Expand Down
2 changes: 1 addition & 1 deletion Doc/whatsnew/3.13.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1958,7 +1958,7 @@ New Deprecations

* :mod:`sys`:

* Deprecate the :func:`~sys._enablelegacywindowsfsencoding` function,
* Deprecate the :func:`!sys._enablelegacywindowsfsencoding` function,
to be removed in Python 3.16.
Use the :envvar:`PYTHONLEGACYWINDOWSFSENCODING` environment variable instead.
(Contributed by Inada Naoki in :gh:`73427`.)
Expand Down
8 changes: 8 additions & 0 deletions Doc/whatsnew/3.16.rst
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,14 @@ symtable
* The :meth:`!symtable.Class.get_methods` method
which has been deprecated since Python 3.14.

sys
---

* The :func:`!sys._enablelegacywindowsfsencoding` function
which has been deprecated since Python 3.13.
Use the :envvar:`PYTHONLEGACYWINDOWSFSENCODING` environment variable instead.
(Contributed by Stan Ulbrych in :gh:`149595`.)

sysconfig
---------

Expand Down
2 changes: 1 addition & 1 deletion Doc/whatsnew/3.6.rst
Original file line number Diff line number Diff line change
Expand Up @@ -517,7 +517,7 @@ Applications that do not use str to represent paths should use
:func:`os.fsencode` and :func:`os.fsdecode` to ensure their bytes are
correctly encoded. To revert to the previous behaviour, set
:envvar:`PYTHONLEGACYWINDOWSFSENCODING` or call
:func:`sys._enablelegacywindowsfsencoding`.
:func:`!sys._enablelegacywindowsfsencoding`.

See :pep:`529` for more information and discussion of code modifications that
may be required.
Expand Down
3 changes: 0 additions & 3 deletions Include/internal/pycore_pylifecycle.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@ extern int _Py_SetFileSystemEncoding(
const char *errors);
extern void _Py_ClearFileSystemEncoding(void);
extern PyStatus _PyUnicode_InitEncodings(PyThreadState *tstate);
#ifdef MS_WINDOWS
extern int _PyUnicode_EnableLegacyWindowsFSEncoding(void);
#endif

extern int _Py_IsLocaleCoercionTarget(const char *ctype_loc);

Expand Down
10 changes: 0 additions & 10 deletions Lib/test/test_sys.py
Original file line number Diff line number Diff line change
Expand Up @@ -1283,16 +1283,6 @@ def check(tracebacklimit, expected):
def test_no_duplicates_in_meta_path(self):
self.assertEqual(len(sys.meta_path), len(set(sys.meta_path)))

@unittest.skipUnless(hasattr(sys, "_enablelegacywindowsfsencoding"),
'needs sys._enablelegacywindowsfsencoding()')
def test__enablelegacywindowsfsencoding(self):
code = ('import sys',
'sys._enablelegacywindowsfsencoding()',
'print(sys.getfilesystemencoding(), sys.getfilesystemencodeerrors())')
rc, out, err = assert_python_ok('-c', '; '.join(code))
out = out.decode('ascii', 'replace').rstrip()
self.assertEqual(out, 'mbcs replace')

@support.requires_subprocess()
def test_orig_argv(self):
code = textwrap.dedent('''
Expand Down
2 changes: 1 addition & 1 deletion Misc/NEWS.d/3.13.0a3.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2166,7 +2166,7 @@ current user has no permission to the WMI.
.. nonce: WOpiNt
.. section: Windows
Deprecate :func:`sys._enablelegacywindowsfsencoding`. Use
Deprecate :func:`!sys._enablelegacywindowsfsencoding`. Use
:envvar:`PYTHONLEGACYWINDOWSFSENCODING` instead. Patch by Inada Naoki.

..
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Remove the :func:`!sys._enablelegacywindowsfsencoding` function which has
been deprecated since Python 3.13.
27 changes: 0 additions & 27 deletions Objects/unicodeobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -14928,33 +14928,6 @@ _PyUnicode_FiniEncodings(struct _Py_unicode_fs_codec *fs_codec)
}


#ifdef MS_WINDOWS
int
_PyUnicode_EnableLegacyWindowsFSEncoding(void)
{
PyInterpreterState *interp = _PyInterpreterState_GET();
PyConfig *config = (PyConfig *)_PyInterpreterState_GetConfig(interp);

/* Set the filesystem encoding to mbcs/replace (PEP 529) */
wchar_t *encoding = _PyMem_RawWcsdup(L"mbcs");
wchar_t *errors = _PyMem_RawWcsdup(L"replace");
if (encoding == NULL || errors == NULL) {
PyMem_RawFree(encoding);
PyMem_RawFree(errors);
PyErr_NoMemory();
return -1;
}

PyMem_RawFree(config->filesystem_encoding);
config->filesystem_encoding = encoding;
PyMem_RawFree(config->filesystem_errors);
config->filesystem_errors = errors;

return init_fs_codec(interp);
}
#endif


#ifdef Py_DEBUG
static inline int
unicode_is_finalizing(void)
Expand Down
34 changes: 1 addition & 33 deletions Python/clinic/sysmodule.c.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 0 additions & 38 deletions Python/sysmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -1790,36 +1790,6 @@ sys_getwindowsversion_impl(PyObject *module)
}

#pragma warning(pop)

/*[clinic input]
sys._enablelegacywindowsfsencoding

Changes the default filesystem encoding to mbcs:replace.

This is done for consistency with earlier versions of Python. See PEP
529 for more information.

This is equivalent to defining the PYTHONLEGACYWINDOWSFSENCODING
environment variable before launching Python.
[clinic start generated code]*/

static PyObject *
sys__enablelegacywindowsfsencoding_impl(PyObject *module)
/*[clinic end generated code: output=f5c3855b45e24fe9 input=2bfa931a20704492]*/
{
if (PyErr_WarnEx(PyExc_DeprecationWarning,
"sys._enablelegacywindowsfsencoding() is deprecated and will be "
"removed in Python 3.16. Use PYTHONLEGACYWINDOWSFSENCODING "
"instead.", 1))
{
return NULL;
}
if (_PyUnicode_EnableLegacyWindowsFSEncoding() < 0) {
return NULL;
}
Py_RETURN_NONE;
}

#endif /* MS_WINDOWS */

#ifdef HAVE_DLOPEN
Expand Down Expand Up @@ -2941,7 +2911,6 @@ static PyMethodDef sys_methods[] = {
SYS__GETFRAME_METHODDEF
SYS__GETFRAMEMODULENAME_METHODDEF
SYS_GETWINDOWSVERSION_METHODDEF
SYS__ENABLELEGACYWINDOWSFSENCODING_METHODDEF
SYS__IS_IMMORTAL_METHODDEF
SYS_INTERN_METHODDEF
SYS__IS_INTERNED_METHODDEF
Expand Down Expand Up @@ -3436,13 +3405,6 @@ winver -- [Windows only] version number of the Python DLL\n\
"
)
#endif /* MS_COREDLL */
#ifdef MS_WINDOWS
/* concatenating string here */
PyDoc_STR(
"_enablelegacywindowsfsencoding -- [Windows only]\n\
"
)
#endif
PyDoc_STR(
"__stdin__ -- the original stdin; don't touch!\n\
__stdout__ -- the original stdout; don't touch!\n\
Expand Down
Loading