From 74f201498ee664de4498c4c5491b7364a992344b Mon Sep 17 00:00:00 2001 From: Dominic Davis-Foster Date: Mon, 1 Mar 2021 22:54:42 +0000 Subject: [PATCH 1/5] Use UTF-8 encoding when parsing pyproject.toml --- src/tox/config/__init__.py | 2 +- tests/unit/config/test_config.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/tox/config/__init__.py b/src/tox/config/__init__.py index 10bc9bef4..aba5e76f7 100644 --- a/src/tox/config/__init__.py +++ b/src/tox/config/__init__.py @@ -302,7 +302,7 @@ def parseconfig(args, plugins=()): def get_py_project_toml(path): - with open(str(path)) as file_handler: + with open(str(path), encoding="UTF-8") as file_handler: config_data = toml.load(file_handler) return config_data diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py index fe11224c2..4c27f46ba 100644 --- a/tests/unit/config/test_config.py +++ b/tests/unit/config/test_config.py @@ -3557,6 +3557,9 @@ def test_config_via_pyproject_legacy(initproj): "config_via_pyproject_legacy-0.5", filedefs={ "pyproject.toml": ''' + [project] + description = "Factory ⸻ A code generator 🏭" + authors = [{name = "Łukasz Langa"}] [tool.tox] legacy_tox_ini = """ [tox] From be287e5397697b7ee31746c1f81ce5aee1147723 Mon Sep 17 00:00:00 2001 From: Dominic Davis-Foster Date: Tue, 2 Mar 2021 07:31:27 +0000 Subject: [PATCH 2/5] Use UTF-8 encoding when writing files in tests --- src/tox/_pytestplugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tox/_pytestplugin.py b/src/tox/_pytestplugin.py index c91763484..2140cb4ee 100644 --- a/src/tox/_pytestplugin.py +++ b/src/tox/_pytestplugin.py @@ -491,7 +491,7 @@ def create_files(base, filedefs): create_files(base.ensure(key, dir=1), value) elif isinstance(value, six.string_types): s = textwrap.dedent(value) - base.join(key).write(s) + base.join(key).write_text(s, encoding="UTF-8") @pytest.fixture() From af23a05032ede2c85cd6f000bb22f4016eeefbac Mon Sep 17 00:00:00 2001 From: Dominic Davis-Foster Date: Tue, 2 Mar 2021 07:31:54 +0000 Subject: [PATCH 3/5] Specify encoding of test_config.py --- tests/unit/config/test_config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py index 4c27f46ba..001862add 100644 --- a/tests/unit/config/test_config.py +++ b/tests/unit/config/test_config.py @@ -1,3 +1,4 @@ +# coding=utf-8 import os import re import sys From b5d25df2f93809e9887f1a51a1cdff12831a2ae8 Mon Sep 17 00:00:00 2001 From: Dominic Davis-Foster Date: Tue, 2 Mar 2021 08:30:26 +0000 Subject: [PATCH 4/5] Use io.open in "get_py_project_toml" to support encoding argument on Python2 --- src/tox/config/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tox/config/__init__.py b/src/tox/config/__init__.py index aba5e76f7..c858d092e 100644 --- a/src/tox/config/__init__.py +++ b/src/tox/config/__init__.py @@ -1,6 +1,7 @@ from __future__ import print_function import argparse +import io import itertools import os import random @@ -302,7 +303,7 @@ def parseconfig(args, plugins=()): def get_py_project_toml(path): - with open(str(path), encoding="UTF-8") as file_handler: + with io.open(str(path), encoding="UTF-8") as file_handler: config_data = toml.load(file_handler) return config_data From 8bbbd324981cd27a0ec538227884b499d9ca7f33 Mon Sep 17 00:00:00 2001 From: Dominic Davis-Foster Date: Tue, 2 Mar 2021 12:31:53 +0000 Subject: [PATCH 5/5] Ensure example pyproject.toml can be correctly written on Python 2 --- src/tox/_pytestplugin.py | 7 +++++++ tests/unit/config/test_config.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/tox/_pytestplugin.py b/src/tox/_pytestplugin.py index 2140cb4ee..d0c870335 100644 --- a/src/tox/_pytestplugin.py +++ b/src/tox/_pytestplugin.py @@ -491,6 +491,13 @@ def create_files(base, filedefs): create_files(base.ensure(key, dir=1), value) elif isinstance(value, six.string_types): s = textwrap.dedent(value) + + if not isinstance(s, six.text_type): + if not isinstance(s, six.binary_type): + s = str(s) + else: + s = six.ensure_text(s) + base.join(key).write_text(s, encoding="UTF-8") diff --git a/tests/unit/config/test_config.py b/tests/unit/config/test_config.py index 001862add..b4bd24fb5 100644 --- a/tests/unit/config/test_config.py +++ b/tests/unit/config/test_config.py @@ -3557,7 +3557,7 @@ def test_config_via_pyproject_legacy(initproj): initproj( "config_via_pyproject_legacy-0.5", filedefs={ - "pyproject.toml": ''' + "pyproject.toml": u''' [project] description = "Factory ⸻ A code generator 🏭" authors = [{name = "Łukasz Langa"}]