From 7e6c33152e77371a4c62fd2eb5cfd1eb5689d279 Mon Sep 17 00:00:00 2001 From: MegasKomnenos Date: Sun, 26 Mar 2023 18:45:36 +0900 Subject: [PATCH] Add encoding='locale' support for TextIOWrapper --- Lib/test/test_fileinput.py | 4 ---- vm/src/stdlib/io.rs | 12 ++++++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Lib/test/test_fileinput.py b/Lib/test/test_fileinput.py index a988185ec..270e109eb 100644 --- a/Lib/test/test_fileinput.py +++ b/Lib/test/test_fileinput.py @@ -391,8 +391,6 @@ class FileInputTests(BaseTests, unittest.TestCase): retval2 = fi[1] self.assertEqual(retval2, "line2\n") - # TODO: RUSTPYTHON - @unittest.expectedFailure def test__getitem___deprecation(self): t = self.writeTmp("line1\nline2\n") with self.assertWarnsRegex(DeprecationWarning, @@ -914,8 +912,6 @@ class Test_hook_compressed(unittest.TestCase): def test_no_ext(self): self.do_test_use_builtin_open("abcd", 2) - # TODO: RUSTPYTHON - @unittest.expectedFailure @unittest.skipUnless(gzip, "Requires gzip and zlib") def test_gz_ext_fake(self): original_open = gzip.open diff --git a/vm/src/stdlib/io.rs b/vm/src/stdlib/io.rs index 9826c2b1b..bfb7c7bd5 100644 --- a/vm/src/stdlib/io.rs +++ b/vm/src/stdlib/io.rs @@ -2193,10 +2193,14 @@ mod _io { *data = None; let encoding = match args.encoding { - Some(enc) => enc, - None => { - // TODO: try os.device_encoding(fileno) and then locale.getpreferredencoding() - PyStr::from(crate::codecs::DEFAULT_ENCODING).into_ref(&vm.ctx) + None if vm.state.settings.utf8_mode > 0 => PyStr::from("utf-8").into_ref(&vm.ctx), + Some(enc) if enc.as_str() != "locale" => enc, + _ => { + // None without utf8_mode or "locale" encoding + vm.import("locale", None, 0)? + .get_attr("getencoding", vm)? + .call((), vm)? + .try_into_value(vm)? } };