Skip to content

Commit 95fb06c

Browse files
committed
Keep Python 2 compatibility and allow escape prepare
Signed-off-by: Bernát Gábor <[email protected]>
1 parent ba388d9 commit 95fb06c

File tree

10 files changed

+37
-26
lines changed

10 files changed

+37
-26
lines changed

.pre-commit-config.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ repos:
1717
- id: pyupgrade
1818
args: ["--py37-plus"]
1919
exclude: "^(src/pyproject_api/_backend.py|tests/demo_pkg_inline/build.py)$"
20-
- id: pyupgrade
21-
files: "^(src/pyproject_api/_backend.py|tests/demo_pkg_inline/build.py)$"
2220
- repo: https://github.com/PyCQA/isort
2321
rev: 5.10.1
2422
hooks:

docs/changelog.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
Release History
22
===============
33

4+
v1.2.1 - (2022-12-04)
5+
---------------------
6+
- Fix Python 2 incompatibility on the backend
7+
- Allow skipping prepare metadata for the full build by returning None as basename
8+
49
v1.2.0 - (2022-12-04)
510
---------------------
611
- Expose which optional hooks are present or missing via :meth:`pyproject_api.Frontend.optional_hooks`

pyproject.toml

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,18 @@ urls.Homepage = "http://pyproject_api.readthedocs.org"
1313
urls.Source = "https://github.com/tox-dev/pyproject-api"
1414
urls.Tracker = "https://github.com/tox-dev/pyproject-api/issues"
1515
authors = [{ name = "Bernát Gábor", email = "[email protected]" }]
16-
maintainers = [
17-
{ name = "Bernát Gábor", email = "[email protected]" },
18-
]
16+
maintainers = [{ name = "Bernát Gábor", email = "[email protected]" }]
1917
requires-python = ">=3.7"
20-
dependencies = [
21-
"packaging>=21.3", 'tomli>=2.0.1; python_version < "3.11"',
22-
]
23-
optional-dependencies.docs = [
24-
"furo>=2022.9.29",
25-
"sphinx>=5.3",
26-
"sphinx-autodoc-typehints>=1.19.5",
27-
]
18+
dependencies = ["packaging>=21.3", 'tomli>=2.0.1; python_version < "3.11"']
19+
optional-dependencies.docs = ["furo>=2022.9.29", "sphinx>=5.3", "sphinx-autodoc-typehints>=1.19.5"]
2820
optional-dependencies.testing = [
2921
"covdefaults>=2.2.2",
30-
"pytest>=7.2",
31-
"pytest-cov>=4",
32-
"pytest-mock>=3.10",
33-
'importlib-metadata>=5.1; python_version < "3.8"',
34-
"wheel>=0.38.4",
22+
"pytest>=7.2",
23+
"pytest-cov>=4",
24+
"pytest-mock>=3.10",
25+
'importlib-metadata>=5.1; python_version < "3.8"',
26+
"wheel>=0.38.4",
27+
"virtualenv>=20.17",
3528
]
3629
dynamic = ["version"]
3730
classifiers = [
@@ -86,6 +79,7 @@ line_length = 120
8679
python_version = "3.11"
8780
show_error_codes = true
8881
strict = true
82+
overrides = [{ module = ["virtualenv.*"], ignore_missing_imports = true }]
8983

9084
[tool.pep8]
9185
max-line-length = "120"
@@ -96,5 +90,3 @@ max-line-length = 120
9690
unused-arguments-ignore-abstract-functions = true
9791
noqa-require-code = true
9892
dictionaries = ["en_US", "python", "technical", "django"]
99-
ignore = [
100-
]

src/pyproject_api/_backend.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
Please keep this file Python 2.7 compatible.
44
See https://tox.readthedocs.io/en/rewrite/development.html#code-style-guide
55
"""
6+
from __future__ import print_function
67

78
import importlib
89
import json

src/pyproject_api/_frontend.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,13 +326,14 @@ def prepare_metadata_for_build_wheel(
326326
:return: metadata generation result
327327
"""
328328
self._check_metadata_dir(metadata_directory)
329+
basename: str | None = None
329330
if self.optional_hooks["prepare_metadata_for_build_wheel"]:
330331
basename, out, err = self._send(
331332
cmd="prepare_metadata_for_build_wheel",
332333
metadata_directory=metadata_directory,
333334
config_settings=config_settings,
334335
)
335-
else:
336+
if basename is None:
336337
# if backend does not provide it acquire it from the wheel
337338
basename, err, out = self._metadata_from_built_wheel(config_settings, metadata_directory, "build_wheel")
338339
if not isinstance(basename, str):
@@ -358,13 +359,14 @@ def prepare_metadata_for_build_editable(
358359
:return: metadata generation result
359360
"""
360361
self._check_metadata_dir(metadata_directory)
362+
basename = None
361363
if self.optional_hooks["prepare_metadata_for_build_editable"]:
362364
basename, out, err = self._send(
363365
cmd="prepare_metadata_for_build_editable",
364366
metadata_directory=metadata_directory,
365367
config_settings=config_settings,
366368
)
367-
else:
369+
if basename is None:
368370
# if backend does not provide it acquire it from the wheel
369371
basename, err, out = self._metadata_from_built_wheel(config_settings, metadata_directory, "build_editable")
370372
if not isinstance(basename, str):

src/pyproject_api/_via_fresh_subprocess.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def __init__(
5050
:param requires: seed requirements for the backend
5151
"""
5252
super().__init__(root, backend_paths, backend_module, backend_obj, requires, reuse_backend=False)
53+
self.executable = sys.executable
5354

5455
@contextmanager
5556
def _send_msg(self, cmd: str, result_file: Path, msg: str) -> Iterator[SubprocessCmdStatus]: # noqa: U100
@@ -58,7 +59,7 @@ def _send_msg(self, cmd: str, result_file: Path, msg: str) -> Iterator[Subproces
5859
if backend:
5960
env["PYTHONPATH"] = backend
6061
process = Popen(
61-
args=[sys.executable] + self.backend_args,
62+
args=[self.executable] + self.backend_args,
6263
stdout=PIPE,
6364
stderr=PIPE,
6465
stdin=PIPE,

tests/_build_sdist.py

Whitespace-only changes.

tests/demo_pkg_inline/build.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,13 @@ def get_requires_for_build_sdist(config_settings=None): # noqa: U100
8585

8686
if "HAS_REQUIRES_EDITABLE" in os.environ:
8787

88-
def get_requires_for_build_editable(config_settings=...): # noqa: U100
88+
def get_requires_for_build_editable(config_settings=None): # noqa: U100
8989
return [1] if "REQUIRES_EDITABLE_BAD_RETURN" in os.environ else ["editables"]
9090

9191

9292
if "HAS_PREPARE_EDITABLE" in os.environ:
9393

94-
def prepare_metadata_for_build_editable(metadata_directory: str, config_settings=None) -> str: # noqa: U100
94+
def prepare_metadata_for_build_editable(metadata_directory, config_settings=None): # noqa: U100
9595
dest = os.path.join(metadata_directory, dist_info)
9696
os.mkdir(dest)
9797
for arc_name, data in content.items():
@@ -104,7 +104,7 @@ def prepare_metadata_for_build_editable(metadata_directory: str, config_settings
104104
return dist_info
105105

106106

107-
def build_editable(wheel_directory, metadata_directory=None, config_settings=None) -> str:
107+
def build_editable(wheel_directory, metadata_directory=None, config_settings=None):
108108
if "BUILD_EDITABLE_BAD" in os.environ:
109109
return 1 # type: ignore # checking bad type on purpose
110110
return build_wheel(wheel_directory, metadata_directory, config_settings)

tests/test_fronted.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import pytest
88
from packaging.requirements import Requirement
9+
from virtualenv import session_via_cli
910

1011
from pyproject_api._frontend import BackendFailed
1112
from pyproject_api._via_fresh_subprocess import SubprocessFrontend
@@ -306,3 +307,12 @@ def test_backend_build_editable_bad(tmp_path: Path, demo_pkg_inline: Path, monke
306307
assert not exc.args
307308
assert exc.exc_type == "TypeError"
308309
assert exc.exc_msg == "'build_editable' on 'build' returned 1 but expected type <class 'str'>"
310+
311+
312+
def test_can_build_on_python_2(demo_pkg_inline: Path, tmp_path: Path) -> None:
313+
fronted = SubprocessFrontend(*SubprocessFrontend.create_args_from_folder(demo_pkg_inline)[:-1])
314+
env = session_via_cli(["-p", "2.7", str(tmp_path / "venv")])
315+
env.run()
316+
fronted.executable = str(env.creator.exe)
317+
318+
fronted.build_sdist(tmp_path)

whitelist.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ autoclass
22
autodoc
33
cfg
44
delenv
5+
exe
56
extlinks
67
intersphinx
78
iterdir
@@ -24,4 +25,5 @@ tomli
2425
tomllib
2526
typehints
2627
unbuffered
28+
virtualenv
2729
win32

0 commit comments

Comments
 (0)