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.
This commit is contained in:
Nicolas Graves 2026-01-24 17:07:10 +01:00
parent 425e0973c8
commit b09ad239bc
No known key found for this signature in database
2 changed files with 18 additions and 21 deletions

View file

@ -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)

View file

@ -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"