Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: tox-dev/tox
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 4.3.4
Choose a base ref
...
head repository: tox-dev/tox
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 4.3.5
Choose a head ref
  • 2 commits
  • 4 files changed
  • 2 contributors

Commits on Jan 18, 2023

  1. Copy the full SHA
    8323aaa View commit details
  2. release 4.3.5

    gaborbernat committed Jan 18, 2023
    Copy the full SHA
    7eec025 View commit details
Showing with 44 additions and 11 deletions.
  1. +17 −0 docs/changelog.rst
  2. +1 −1 pyproject.toml
  3. +9 −1 src/tox/tox_env/python/virtual_env/package/pyproject.py
  4. +17 −9 tests/demo_pkg_inline/build.py
17 changes: 17 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
@@ -4,6 +4,23 @@ Release History

.. towncrier release notes start
v4.3.5 (2023-01-18)
-------------------

Bugfixes - 4.3.5
~~~~~~~~~~~~~~~~
- When building a ``wheel`` or ``editable`` package with a PEP 517 backend, no
longer pass an empty ``metadata_directory`` to the backend ``build_wheel`` or
``build_editable`` endpoint.

Some backends, such as PDM and poetry, will not generate package metadata in
the presence of a ``metadata_directory``, even if it is empty.

Prior to this change, attempting to install a wheel created by tox using PDM or
poetry would return an error like "There is no item named
'my-package.0.1.dist-info/WHEEL' in the archive" - by :user:`masenf`. (:issue:`2880`)


v4.3.4 (2023-01-17)
-------------------

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -29,7 +29,7 @@ dependencies = [
"packaging>=23",
"platformdirs>=2.6.2",
"pluggy>=1",
"pyproject-api>=1.4",
"pyproject-api>=1.5",
'tomli>=2.0.1; python_version < "3.11"',
"virtualenv>=20.17.1",
"filelock>=3.9",
10 changes: 9 additions & 1 deletion src/tox/tox_env/python/virtual_env/package/pyproject.py
Original file line number Diff line number Diff line change
@@ -137,6 +137,14 @@ def meta_folder(self) -> Path:
meta_folder.mkdir(exist_ok=True)
return meta_folder

@property
def meta_folder_if_populated(self) -> Path | None:
"""Return the metadata directory if it contains any files, otherwise None."""
meta_folder = self.meta_folder
if meta_folder.exists() and tuple(meta_folder.iterdir()):
return meta_folder
return None

def register_run_env(self, run_env: RunToxEnv) -> Generator[tuple[str, str], PackageToxEnv, None]:
yield from super().register_run_env(run_env)
build_type = run_env.conf["package"]
@@ -210,7 +218,7 @@ def perform_packaging(self, for_env: EnvConfigSet) -> list[Package]:
with self._pkg_lock:
wheel = getattr(self._frontend, method)(
wheel_directory=self.pkg_dir,
metadata_directory=self.meta_folder,
metadata_directory=self.meta_folder_if_populated,
config_settings=self._wheel_config_settings,
).wheel
wheel = create_session_view(wheel, self._package_temp_path)
26 changes: 17 additions & 9 deletions tests/demo_pkg_inline/build.py
Original file line number Diff line number Diff line change
@@ -21,8 +21,7 @@
record = "{}/RECORD".format(dist_info)
content = {
logic: "def do():\n print('greetings from {}')".format(name),
plugin: dedent(
"""
plugin: """
try:
from tox.plugin import impl
from tox.tox_env.python.virtual_env.runner import VirtualEnvRunner
@@ -37,14 +36,13 @@ def id() -> str:
@impl
def tox_register_tox_env(register: ToxEnvRegister) -> None:
register.add_run_env(ExampleVirtualEnvRunner)
""",
),
entry_points: dedent(
"""
""",
}
metadata_files = {
entry_points: """
[tox]
example = {}.example_plugin""".format(
name,
),
name,
),
metadata: """
Metadata-Version: 2.1
@@ -88,12 +86,22 @@ def tox_register_tox_env(register: ToxEnvRegister) -> None:
}


def build_wheel(wheel_directory, metadata_directory=None, config_settings=None): # noqa: U100
def build_wheel(wheel_directory, config_settings=None, metadata_directory=None): # noqa: U100
base_name = "{}-{}-py{}-none-any.whl".format(name, version, sys.version_info[0])
path = os.path.join(wheel_directory, base_name)
with ZipFile(path, "w") as zip_file_handler:
for arc_name, data in content.items(): # pragma: no branch
zip_file_handler.writestr(arc_name, dedent(data).strip())
if metadata_directory is not None:
for sub_directory, _, filenames in os.walk(metadata_directory):
for filename in filenames:
zip_file_handler.write(
os.path.join(metadata_directory, sub_directory, filename),
os.path.join(sub_directory, filename),
)
else:
for arc_name, data in metadata_files.items(): # pragma: no branch
zip_file_handler.writestr(arc_name, dedent(data).strip())
print("created wheel {}".format(path))
return base_name