From c01f4dc6b26c1dc38e1f78015df8be2b58a70740 Mon Sep 17 00:00:00 2001 From: ddelange <14880945+ddelange@users.noreply.github.com> Date: Thu, 30 Nov 2023 20:54:49 +0200 Subject: [PATCH] :bug: Fix package reports on Google Colab (#132) * :bug: Fix package reports on Google Colab * :white_check_mark: Fix test --- src/pipgrip/pipper.py | 17 +++++++++++++---- tests/test_pipper.py | 5 ++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/pipgrip/pipper.py b/src/pipgrip/pipper.py index 8a2d738..0e50758 100644 --- a/src/pipgrip/pipper.py +++ b/src/pipgrip/pipper.py @@ -309,9 +309,15 @@ def _get_package_report( "--trusted-host", urlparse(extra_index_url).hostname, ] - args += ["--report", "-", package] + + # Windows disallows opening fp a second time (within the pip subprocess) + # So close it here, and delete it manually + with NamedTemporaryFile(delete=False, mode="w+") as fp: + report_file = fp.name + + args += ["--report", report_file, package] try: - out = stream_bash_command(args) + stream_bash_command(args) except subprocess.CalledProcessError as err: output = getattr(err, "output") or "" logger.error( @@ -320,8 +326,11 @@ def _get_package_report( ) ) raise RuntimeError("Failed to get report for {}".format(package)) - report = json.loads(out) - return report + else: + with io.open(report_file, "r", encoding="utf-8") as fp: + return json.load(fp) + finally: + os.remove(report_file) def _download_wheel( diff --git a/tests/test_pipper.py b/tests/test_pipper.py index 13e5b40..6bf53bb 100644 --- a/tests/test_pipper.py +++ b/tests/test_pipper.py @@ -1,3 +1,4 @@ +import json import os import subprocess @@ -258,7 +259,9 @@ def patch_getcwd(): ) def test_get_package_report(package, pip_output, expected, monkeypatch): def patch_pip_output(*args, **kwargs): - return pip_output + file_path = args[0][-2] + with open(file_path, "w") as fp: + json.dump(json.loads(pip_output), fp) def patch_getcwd(): return os.path.expanduser("~")