From b35394aca15a51ff6fb44943c9f9530c68e685c4 Mon Sep 17 00:00:00 2001 From: Julien Palard Date: Tue, 27 Sep 2022 15:56:47 +0200 Subject: expand: Give bytes to ast.parse to let it discover encoding cookie. --- setuptools/config/expand.py | 2 +- setuptools/tests/config/test_expand.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'setuptools') diff --git a/setuptools/config/expand.py b/setuptools/config/expand.py index 384504d8..693b2dbc 100644 --- a/setuptools/config/expand.py +++ b/setuptools/config/expand.py @@ -62,7 +62,7 @@ class StaticModule: """Proxy to a module object that avoids executing arbitrary code.""" def __init__(self, name: str, spec: ModuleSpec): - with open(spec.origin) as strm: # type: ignore + with open(spec.origin, mode='rb') as strm: # type: ignore src = strm.read() module = ast.parse(src) vars(self).update(locals()) diff --git a/setuptools/tests/config/test_expand.py b/setuptools/tests/config/test_expand.py index 523779a8..39f3b7c7 100644 --- a/setuptools/tests/config/test_expand.py +++ b/setuptools/tests/config/test_expand.py @@ -60,6 +60,20 @@ def test_read_files(tmp_path, monkeypatch): class TestReadAttr: + @pytest.mark.parametrize( + "example", + [ + # No cookie means UTF-8: + b"__version__ = '\xc3\xa9'\nraise SystemExit(1)\n", + # If a cookie is present, honor it: + b"# -*- coding: utf-8 -*-\n__version__ = '\xc3\xa9'\nraise SystemExit(1)\n", + b"# -*- coding: latin1 -*-\n__version__ = '\xe9'\nraise SystemExit(1)\n", + ] + ) + def test_read_attr_encoding_cookie(self, example, tmp_path): + (tmp_path / "mod.py").write_bytes(example) + assert expand.read_attr('mod.__version__', root_dir=tmp_path) == 'é' + def test_read_attr(self, tmp_path, monkeypatch): files = { "pkg/__init__.py": "", -- cgit v1.2.1 From fb62784d242fdeb38d06c4d1d8277c25775e7fca Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 29 Sep 2022 19:39:22 -0400 Subject: Use pathlib to open the file --- setuptools/config/expand.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'setuptools') diff --git a/setuptools/config/expand.py b/setuptools/config/expand.py index 693b2dbc..38eb3db7 100644 --- a/setuptools/config/expand.py +++ b/setuptools/config/expand.py @@ -21,6 +21,7 @@ import ast import importlib import io import os +import pathlib import sys import warnings from glob import iglob @@ -62,9 +63,7 @@ class StaticModule: """Proxy to a module object that avoids executing arbitrary code.""" def __init__(self, name: str, spec: ModuleSpec): - with open(spec.origin, mode='rb') as strm: # type: ignore - src = strm.read() - module = ast.parse(src) + module = ast.parse(pathlib.Path(spec.origin).read_bytes()) vars(self).update(locals()) del self.self -- cgit v1.2.1