From 5bc9b6692fbf166bb474da7b53eb51b911c45c20 Mon Sep 17 00:00:00 2001 From: Dominic Davis-Foster Date: Wed, 3 Mar 2021 11:21:35 +0000 Subject: [PATCH] Use UTF-8 encoding when parsing pyproject.toml (#1940) --- src/tox/_pytestplugin.py | 9 ++++++++- src/tox/config/__init__.py | 3 ++- tests/unit/config/test_config.py | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/tox/_pytestplugin.py b/src/tox/_pytestplugin.py index c91763484..d0c870335 100644 --- a/src/tox/_pytestplugin.py +++ b/src/tox/_pytestplugin.py @@ -491,7 +491,14 @@ 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) + + 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") @pytest.fixture() diff --git a/src/tox/config/__init__.py b/src/tox/config/__init__.py index 32fdb8b18..278d4b2b6 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 json import os @@ -303,7 +304,7 @@ def parseconfig(args, plugins=()): def get_py_project_toml(path): - with open(str(path)) as file_handler: + with io.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..b4bd24fb5 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 @@ -3556,7 +3557,10 @@ 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"}] [tool.tox] legacy_tox_ini = """ [tox]