From b09ad239bc95b75629aea5e621647940cb34e73e Mon Sep 17 00:00:00 2001 From: Nicolas Graves Date: Sat, 24 Jan 2026 17:07:10 +0100 Subject: [PATCH] import: pypi: Fix tests. * guix/import/pypi.scm (unzip-command): Use invoke instead of system*. (read-wheel-metadata): Adapt accordingly. (guess-requirements-from-wheel): Improve readability. * tests/import/pypi.scm (parse-wheel-metadata): Add test (used to isolate the issue in another test). (pypi->guix-package, no wheel): Remove python-wheel from the result. (pypi->guix-package, no usable requirement file, no wheel.): Likewise. (pypi->guix-package, package name contains \"-\" followed by digits): Likewise. (package-latest-release): Likewise. (pypi->guix-package, no requires.txt, but wheel): Likewise. Also improve readability. --- guix/import/pypi.scm | 15 +++++++-------- tests/import/pypi.scm | 24 +++++++++++------------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/guix/import/pypi.scm b/guix/import/pypi.scm index 86766b5d3f6..5cd4cd813d4 100644 --- a/guix/import/pypi.scm +++ b/guix/import/pypi.scm @@ -303,8 +303,9 @@ not succeed." (mlet* %store-monad ((drv (lower-object unzip)) (built (built-derivations (list drv)))) - (return (string-append (derivation->output-path drv) "/bin/unzip")))))))) - (system* (string-append unzip-cmd (string-join args " " 'prefix))))) + (return (string-append (derivation->output-path drv) + "/bin/unzip")))))))) + (apply invoke unzip-cmd args))) (define (parse-requires.txt requires.txt) "Given REQUIRES.TXT, a path to a Setuptools requires.txt file, return a list @@ -414,10 +415,9 @@ be extracted in a temporary directory." (metadata (string-append dirname "/METADATA"))) (call-with-temporary-directory (lambda (dir) - (if (zero? - (parameterize ((current-error-port (%make-void-port "rw+")) - (current-output-port (%make-void-port "rw+"))) - (unzip-command wheel-archive "-d" dir metadata))) + (if (parameterize ((current-error-port (%make-void-port "rw+")) + (current-output-port (%make-void-port "rw+"))) + (unzip-command wheel-archive "-d" dir metadata)) (parse-wheel-metadata (string-append dir "/" metadata)) (begin (warning @@ -430,8 +430,7 @@ be extracted in a temporary directory." (call-with-temporary-output-file (lambda (temp port) (if wheel-url - (and (url-fetch wheel-url temp) - (read-wheel-metadata temp)) + (and=> (url-fetch wheel-url temp) read-wheel-metadata) (list '() '()))))) (define (guess-requirements-from-pyproject.toml dir) diff --git a/tests/import/pypi.scm b/tests/import/pypi.scm index 8da15edcd98..c8f554934b5 100644 --- a/tests/import/pypi.scm +++ b/tests/import/pypi.scm @@ -270,6 +270,12 @@ files specified by SPECS. Return its file name." call-with-input-string) (parse-requires.txt test-requires.txt-beaker))) +(test-equal "parse-wheel-metadata" + (list '("baz" "bar") '("pytest")) + (mock ((ice-9 ports) call-with-input-file + call-with-input-string) + (parse-wheel-metadata test-metadata))) + (test-equal "parse-wheel-metadata, with extras" (list '("wrapt" "bar") '("tox" "bumpversion")) (mock ((ice-9 ports) call-with-input-file @@ -328,8 +334,7 @@ files specified by SPECS. Return its file name." (build-system pyproject-build-system) (propagated-inputs (list python-bar python-foo)) (native-inputs (list python-pytest - python-setuptools - python-wheel)) + python-setuptools)) (home-page "https://example.com") (synopsis "summary") (description "summary.") @@ -431,8 +436,7 @@ files specified by SPECS. Return its file name." (with-pypi `(("/foo-1.0.0.tar.gz" 200 ,(file-dump tarball)) ("/foo-1.0.0-py2.py3-none-any.whl" 200 ,(file-dump wheel)) - ("/foo/json" 200 ,(lambda (port) - (display (foo-json) port)))) + ("/foo/json" 200 ,(cut display (foo-json) <>))) ;; Not clearing the memoization cache here would mean returning the value ;; computed in the previous test. (invalidate-memoization! pypi->guix-package) @@ -448,8 +452,7 @@ files specified by SPECS. Return its file name." (build-system pyproject-build-system) (propagated-inputs (list python-bar python-baz)) (native-inputs (list python-pytest - python-setuptools - python-wheel)) + python-setuptools)) (home-page "https://example.com") (synopsis "summary") (description "summary.") @@ -478,7 +481,7 @@ files specified by SPECS. Return its file name." (sha256 (base32 ,(? string? hash))))) (build-system pyproject-build-system) - (native-inputs (list python-setuptools python-wheel)) + (native-inputs (list python-setuptools)) (home-page "https://example.com") (synopsis "summary") (description "summary.") @@ -509,8 +512,7 @@ files specified by SPECS. Return its file name." (build-system pyproject-build-system) (propagated-inputs (list python-bar python-foo)) (native-inputs (list python-pytest - python-setuptools - python-wheel)) + python-setuptools)) (home-page "https://example.com") (synopsis "summary") (description "summary.") @@ -537,10 +539,6 @@ files specified by SPECS. Return its file name." (upstream-input (name "setuptools") (downstream-name "python-setuptools") - (type 'native)) - (upstream-input - (name "wheel") - (downstream-name "python-wheel") (type 'native)))) (let ((tarball (pypi-tarball "foo-1.0.0"