scripts/pythondistdeps: Add tests
The test data download themselves using pip if not present
This commit is contained in:
parent
1634914c2e
commit
89e1676cee
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/tests/data/scripts_pythondistdeps/usr/
|
@ -367,7 +367,8 @@ for name in names:
|
|||||||
if len(spec_list) == 1:
|
if len(spec_list) == 1:
|
||||||
print(spec_list[0])
|
print(spec_list[0])
|
||||||
else:
|
else:
|
||||||
print('({})'.format(' with '.join(spec_list)))
|
# Sort spec_list so that the results can be tested easily
|
||||||
|
print('({})'.format(' with '.join(sorted(spec_list))))
|
||||||
else:
|
else:
|
||||||
# Print out unversioned provides, requires, recommends, conflicts
|
# Print out unversioned provides, requires, recommends, conflicts
|
||||||
print(name)
|
print(name)
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
Metadata-Version: 2.1
|
||||||
|
Name: pyreq2rpm.tests
|
||||||
|
Version: 2020.04.07.024dab0
|
||||||
|
Summary: Test package to verify conversion of dependencies from pip/python to rpm format, data taken from pyreq2rpm
|
||||||
|
Author: Tomas Orsava (author of this metapackage)
|
||||||
|
Home-page: https://github.com/gordonmessmer/pyreq2rpm
|
||||||
|
License: MIT
|
||||||
|
Description: This dist-info is mock metadata for a fictional package pyreq2rpm.tests
|
||||||
|
The important part of its contents is the requires.txt that contains
|
||||||
|
different formats of Python requirements taken from
|
||||||
|
https://github.com/gordonmessmer/pyreq2rpm, that are numbered as to be
|
||||||
|
unique. The metadata is then processed through
|
||||||
|
scripts/pythondistdeps.py and the resulting RPM requires compared to
|
||||||
|
expected results.
|
||||||
|
|
||||||
|
The version of the package contains the date when I converted the test
|
||||||
|
data from upstream to this metapackage, as well as the short hash of
|
||||||
|
the last git commit.
|
||||||
|
|
||||||
|
From the requirements I have omitted those that are incorrect, as they
|
||||||
|
crash the pythondistdeps.py script.
|
@ -0,0 +1,95 @@
|
|||||||
|
# Taken from pyreq2rpm, removed tests that are expected to fail
|
||||||
|
foobar0~=2.4.8
|
||||||
|
foobar1~=2.4.8.0
|
||||||
|
foobar2~=2.4.8.1
|
||||||
|
|
||||||
|
foobar4~=2.0
|
||||||
|
|
||||||
|
|
||||||
|
foobar7~=2.4.8b5
|
||||||
|
foobar8~=2.0.0b5
|
||||||
|
foobar9~=2.4.8.post1
|
||||||
|
foobar10~=2.0.post1
|
||||||
|
foobar11==2.4.8
|
||||||
|
foobar12==2.4.8.0
|
||||||
|
foobar13==2.4.8.1
|
||||||
|
foobar14==2.4.8.*
|
||||||
|
foobar15==2.0
|
||||||
|
foobar16==2
|
||||||
|
foobar17==2.*
|
||||||
|
foobar18==2.4.8b5
|
||||||
|
foobar19==2.0.0b5
|
||||||
|
foobar20==2.4.8.post1
|
||||||
|
foobar21==2.0.post1
|
||||||
|
foobar22===2.4.8
|
||||||
|
foobar23===2.4.8.0
|
||||||
|
foobar24===2.4.8.1
|
||||||
|
|
||||||
|
foobar26===2.0
|
||||||
|
foobar27===2
|
||||||
|
|
||||||
|
foobar29===2.4.8b5
|
||||||
|
foobar30===2.0.0b5
|
||||||
|
foobar31===2.4.8.post1
|
||||||
|
foobar32===2.0.post1
|
||||||
|
foobar33!=2.4.8
|
||||||
|
foobar34!=2.4.8.0
|
||||||
|
foobar35!=2.4.8.1
|
||||||
|
foobar36!=2.4.8.*
|
||||||
|
foobar37!=2.0
|
||||||
|
foobar38!=2
|
||||||
|
foobar39!=2.*
|
||||||
|
foobar40!=2.4.8b5
|
||||||
|
foobar41!=2.0.0b5
|
||||||
|
foobar42!=2.4.8.post1
|
||||||
|
foobar43!=2.0.post1
|
||||||
|
foobar44<=2.4.8
|
||||||
|
foobar45<=2.4.8.0
|
||||||
|
foobar46<=2.4.8.1
|
||||||
|
foobar47<=2.4.8.*
|
||||||
|
foobar48<=2.0
|
||||||
|
foobar49<=2
|
||||||
|
foobar50<=2.*
|
||||||
|
foobar51<=2.4.8b5
|
||||||
|
foobar52<=2.0.0b5
|
||||||
|
foobar53<=2.4.8.post1
|
||||||
|
foobar54<=2.0.post1
|
||||||
|
foobar55<2.4.8
|
||||||
|
foobar56<2.4.8.0
|
||||||
|
foobar57<2.4.8.1
|
||||||
|
foobar58<2.4.8.*
|
||||||
|
foobar59<2.0
|
||||||
|
foobar60<2
|
||||||
|
foobar61<2.*
|
||||||
|
foobar62<2.4.8b5
|
||||||
|
foobar63<2.0.0b5
|
||||||
|
foobar64<2.4.8.post1
|
||||||
|
foobar65<2.0.post1
|
||||||
|
foobar66>=2.4.8
|
||||||
|
foobar67>=2.4.8.0
|
||||||
|
foobar68>=2.4.8.1
|
||||||
|
foobar69>=2.4.8.*
|
||||||
|
foobar70>=2.0
|
||||||
|
foobar71>=2
|
||||||
|
foobar72>=2.*
|
||||||
|
foobar73>=2.4.8b5
|
||||||
|
foobar74>=2.0.0b5
|
||||||
|
foobar75>=2.4.8.post1
|
||||||
|
foobar76>=2.0.post1
|
||||||
|
foobar77>2.4.8
|
||||||
|
foobar78>2.4.8.0
|
||||||
|
foobar79>2.4.8.1
|
||||||
|
foobar80>2.4.8.*
|
||||||
|
foobar81>2.0
|
||||||
|
foobar82>2
|
||||||
|
foobar83>2.*
|
||||||
|
foobar84>2.4.8b5
|
||||||
|
foobar85>2.0.0b5
|
||||||
|
foobar86>2.4.8.post1
|
||||||
|
foobar87>2.0.post1
|
||||||
|
pyparsing0
|
||||||
|
pyparsing1>=2.0.1,!=2.0.4,!=2.1.2,!=2.1.6
|
||||||
|
babel>=1.3,!=2.0
|
||||||
|
|
||||||
|
# Tests for breakages in Fedora
|
||||||
|
fedora-python-nb2plots==0+unknown
|
480
tests/data/scripts_pythondistdeps/test-data.yaml
Normal file
480
tests/data/scripts_pythondistdeps/test-data.yaml
Normal file
@ -0,0 +1,480 @@
|
|||||||
|
--requires:
|
||||||
|
--provides:
|
||||||
|
pyreq2rpm.tests-2020.04.07.024dab0-py3.9.egg-info:
|
||||||
|
provides: python3.9dist(pyreq2rpm.tests) = 2020.04.07.024dab0
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.9
|
||||||
|
((python3.9dist(babel) < 2 or python3.9dist(babel) > 2) with python3.9dist(babel) >= 1.3)
|
||||||
|
python3.9dist(fedora-python-nb2plots) = 0
|
||||||
|
(python3.9dist(foobar0) >= 2.4.8 with python3.9dist(foobar0) < 2.5)
|
||||||
|
(python3.9dist(foobar1) >= 2.4.8 with python3.9dist(foobar1) < 2.4.9)
|
||||||
|
(python3.9dist(foobar10) >= 2^post1 with python3.9dist(foobar10) < 3)
|
||||||
|
python3.9dist(foobar11) = 2.4.8
|
||||||
|
python3.9dist(foobar12) = 2.4.8
|
||||||
|
python3.9dist(foobar13) = 2.4.8.1
|
||||||
|
(python3.9dist(foobar14) >= 2.4.8 with python3.9dist(foobar14) < 2.4.9)
|
||||||
|
python3.9dist(foobar15) = 2
|
||||||
|
python3.9dist(foobar16) = 2
|
||||||
|
(python3.9dist(foobar17) >= 2 with python3.9dist(foobar17) < 3)
|
||||||
|
python3.9dist(foobar18) = 2.4.8~b5
|
||||||
|
python3.9dist(foobar19) = 2~b5
|
||||||
|
(python3.9dist(foobar2) >= 2.4.8.1 with python3.9dist(foobar2) < 2.4.9)
|
||||||
|
python3.9dist(foobar20) = 2.4.8^post1
|
||||||
|
python3.9dist(foobar21) = 2^post1
|
||||||
|
python3.9dist(foobar22) = 2.4.8
|
||||||
|
python3.9dist(foobar23) = 2.4.8
|
||||||
|
python3.9dist(foobar24) = 2.4.8.1
|
||||||
|
python3.9dist(foobar26) = 2
|
||||||
|
python3.9dist(foobar27) = 2
|
||||||
|
python3.9dist(foobar29) = 2.4.8~b5
|
||||||
|
python3.9dist(foobar30) = 2~b5
|
||||||
|
python3.9dist(foobar31) = 2.4.8^post1
|
||||||
|
python3.9dist(foobar32) = 2^post1
|
||||||
|
(python3.9dist(foobar33) < 2.4.8 or python3.9dist(foobar33) > 2.4.8)
|
||||||
|
(python3.9dist(foobar34) < 2.4.8 or python3.9dist(foobar34) > 2.4.8)
|
||||||
|
(python3.9dist(foobar35) < 2.4.8.1 or python3.9dist(foobar35) > 2.4.8.1)
|
||||||
|
(python3.9dist(foobar36) < 2.4.8 or python3.9dist(foobar36) > 2.4.9)
|
||||||
|
(python3.9dist(foobar37) < 2 or python3.9dist(foobar37) > 2)
|
||||||
|
(python3.9dist(foobar38) < 2 or python3.9dist(foobar38) > 2)
|
||||||
|
(python3.9dist(foobar39) < 2 or python3.9dist(foobar39) > 3)
|
||||||
|
(python3.9dist(foobar4) >= 2 with python3.9dist(foobar4) < 3)
|
||||||
|
(python3.9dist(foobar40) < 2.4.8~b5 or python3.9dist(foobar40) > 2.4.8~b5)
|
||||||
|
(python3.9dist(foobar41) < 2~b5 or python3.9dist(foobar41) > 2~b5)
|
||||||
|
(python3.9dist(foobar42) < 2.4.8^post1 or python3.9dist(foobar42) > 2.4.8^post1)
|
||||||
|
(python3.9dist(foobar43) < 2^post1 or python3.9dist(foobar43) > 2^post1)
|
||||||
|
python3.9dist(foobar44) <= 2.4.8
|
||||||
|
python3.9dist(foobar45) <= 2.4.8
|
||||||
|
python3.9dist(foobar46) <= 2.4.8.1
|
||||||
|
python3.9dist(foobar47) <= 2.4.8
|
||||||
|
python3.9dist(foobar48) <= 2
|
||||||
|
python3.9dist(foobar49) <= 2
|
||||||
|
python3.9dist(foobar50) <= 2
|
||||||
|
python3.9dist(foobar51) <= 2.4.8~b5
|
||||||
|
python3.9dist(foobar52) <= 2~b5
|
||||||
|
python3.9dist(foobar53) <= 2.4.8^post1
|
||||||
|
python3.9dist(foobar54) <= 2^post1
|
||||||
|
python3.9dist(foobar55) < 2.4.8
|
||||||
|
python3.9dist(foobar56) < 2.4.8
|
||||||
|
python3.9dist(foobar57) < 2.4.8.1
|
||||||
|
python3.9dist(foobar58) < 2.4.8
|
||||||
|
python3.9dist(foobar59) < 2
|
||||||
|
python3.9dist(foobar60) < 2
|
||||||
|
python3.9dist(foobar61) < 2
|
||||||
|
python3.9dist(foobar62) < 2.4.8~b5
|
||||||
|
python3.9dist(foobar63) < 2~b5
|
||||||
|
python3.9dist(foobar64) < 2.4.8^post1
|
||||||
|
python3.9dist(foobar65) < 2^post1
|
||||||
|
python3.9dist(foobar66) >= 2.4.8
|
||||||
|
python3.9dist(foobar67) >= 2.4.8
|
||||||
|
python3.9dist(foobar68) >= 2.4.8.1
|
||||||
|
python3.9dist(foobar69) >= 2.4.8
|
||||||
|
(python3.9dist(foobar7) >= 2.4.8~b5 with python3.9dist(foobar7) < 2.5)
|
||||||
|
python3.9dist(foobar70) >= 2
|
||||||
|
python3.9dist(foobar71) >= 2
|
||||||
|
python3.9dist(foobar72) >= 2
|
||||||
|
python3.9dist(foobar73) >= 2.4.8~b5
|
||||||
|
python3.9dist(foobar74) >= 2~b5
|
||||||
|
python3.9dist(foobar75) >= 2.4.8^post1
|
||||||
|
python3.9dist(foobar76) >= 2^post1
|
||||||
|
python3.9dist(foobar77) > 2.4.8
|
||||||
|
python3.9dist(foobar78) > 2.4.8
|
||||||
|
python3.9dist(foobar79) > 2.4.8.1
|
||||||
|
(python3.9dist(foobar8) >= 2~b5 with python3.9dist(foobar8) < 2.1)
|
||||||
|
python3.9dist(foobar80) >= 2.4.9
|
||||||
|
python3.9dist(foobar81) > 2
|
||||||
|
python3.9dist(foobar82) > 2
|
||||||
|
python3.9dist(foobar83) >= 3
|
||||||
|
python3.9dist(foobar84) > 2.4.8~b5
|
||||||
|
python3.9dist(foobar85) > 2~b5
|
||||||
|
python3.9dist(foobar86) > 2.4.8^post1
|
||||||
|
python3.9dist(foobar87) > 2^post1
|
||||||
|
(python3.9dist(foobar9) >= 2.4.8^post1 with python3.9dist(foobar9) < 2.5)
|
||||||
|
python3.9dist(pyparsing0)
|
||||||
|
((python3.9dist(pyparsing1) < 2.0.4 or python3.9dist(pyparsing1) > 2.0.4) with (python3.9dist(pyparsing1) < 2.1.2 or python3.9dist(pyparsing1) > 2.1.2) with (python3.9dist(pyparsing1) < 2.1.6 or python3.9dist(pyparsing1) > 2.1.6) with python3.9dist(pyparsing1) >= 2.0.1)
|
||||||
|
--provides --majorver-provides:
|
||||||
|
usr/lib/python2.7/site-packages/attrs-19.1.0-py2.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(attrs) = 19.1
|
||||||
|
python2dist(attrs) = 19.1
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib/python2.7/site-packages/kubernetes-11.0.0b2.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(kubernetes) = 11~b2
|
||||||
|
python2dist(kubernetes) = 11~b2
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 2.7
|
||||||
|
python2.7dist(certifi) >= 14.5.14
|
||||||
|
python2.7dist(google-auth) >= 1.0.1
|
||||||
|
python2.7dist(ipaddress) >= 1.0.17
|
||||||
|
python2.7dist(python-dateutil) >= 2.5.3
|
||||||
|
python2.7dist(pyyaml) >= 3.12
|
||||||
|
python2.7dist(requests)
|
||||||
|
python2.7dist(requests-oauthlib)
|
||||||
|
python2.7dist(setuptools) >= 21
|
||||||
|
python2.7dist(six) >= 1.9
|
||||||
|
python2.7dist(urllib3) >= 1.24.2
|
||||||
|
((python2.7dist(websocket-client) < 0.40 or python2.7dist(websocket-client) > 0.40) with (python2.7dist(websocket-client) < 0.41 or python2.7dist(websocket-client) > 0.42) with (python2.7dist(websocket-client) < 0.42 or python2.7dist(websocket-client) > 0.43) with python2.7dist(websocket-client) >= 0.32)
|
||||||
|
usr/lib/python2.7/site-packages/mistune-0.8.4-py2.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(mistune) = 0.8.4
|
||||||
|
python2dist(mistune) = 0.8.4
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib/python2.7/site-packages/packaging-19.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(packaging) = 19
|
||||||
|
python2dist(packaging) = 19
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 2.7
|
||||||
|
python2.7dist(pyparsing) >= 2.0.2
|
||||||
|
python2.7dist(six)
|
||||||
|
usr/lib/python2.7/site-packages/pip-19.1.1.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(pip) = 19.1.1
|
||||||
|
python2dist(pip) = 19.1.1
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib/python2.7/site-packages/pyparsing-2.4.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(pyparsing) = 2.4
|
||||||
|
python2dist(pyparsing) = 2.4
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib/python2.7/site-packages/setuptools-41.6.0-py2.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(setuptools) = 41.6
|
||||||
|
python2dist(setuptools) = 41.6
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 2.7
|
||||||
|
python2.7dist(setuptools)
|
||||||
|
usr/lib/python2.7/site-packages/setuptools-41.6.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(setuptools) = 41.6
|
||||||
|
python2dist(setuptools) = 41.6
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib/python2.7/site-packages/six-1.12.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(six) = 1.12
|
||||||
|
python2dist(six) = 1.12
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib/python2.7/site-packages/tox-3.14.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(tox) = 3.14
|
||||||
|
python2dist(tox) = 3.14
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 2.7
|
||||||
|
(python2.7dist(filelock) < 4 with python2.7dist(filelock) >= 3)
|
||||||
|
(python2.7dist(importlib-metadata) < 1 with python2.7dist(importlib-metadata) >= 0.12)
|
||||||
|
python2.7dist(packaging) >= 14
|
||||||
|
(python2.7dist(pluggy) < 1 with python2.7dist(pluggy) >= 0.12)
|
||||||
|
(python2.7dist(py) < 2 with python2.7dist(py) >= 1.4.17)
|
||||||
|
(python2.7dist(six) < 2 with python2.7dist(six) >= 1)
|
||||||
|
python2.7dist(toml) >= 0.9.4
|
||||||
|
python2.7dist(virtualenv) >= 14
|
||||||
|
usr/lib/python2.7/site-packages/urllib3-1.25.7-py2.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(urllib3) = 1.25.7
|
||||||
|
python2dist(urllib3) = 1.25.7
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib/python2.7/site-packages/zope.component-4.3.0-py2.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(zope.component) = 4.3
|
||||||
|
python2dist(zope.component) = 4.3
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 2.7
|
||||||
|
python2.7dist(setuptools)
|
||||||
|
python2.7dist(zope.event)
|
||||||
|
python2.7dist(zope.interface) >= 4.1
|
||||||
|
usr/lib/python3.7/site-packages/astroid-2.3.3.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(astroid) = 2.3.3
|
||||||
|
python3dist(astroid) = 2.3.3
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.7
|
||||||
|
(python3.7dist(lazy-object-proxy) >= 1.4 with python3.7dist(lazy-object-proxy) < 1.5)
|
||||||
|
(python3.7dist(six) >= 1.12 with python3.7dist(six) < 2)
|
||||||
|
(python3.7dist(typed-ast) < 1.5 with python3.7dist(typed-ast) >= 1.4)
|
||||||
|
(python3.7dist(wrapt) >= 1.11 with python3.7dist(wrapt) < 1.12)
|
||||||
|
usr/lib/python3.7/site-packages/packaging-19.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(packaging) = 19
|
||||||
|
python3dist(packaging) = 19
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.7
|
||||||
|
python3.7dist(pyparsing) >= 2.0.2
|
||||||
|
python3.7dist(six)
|
||||||
|
usr/lib/python3.7/site-packages/pip-19.1.1.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(pip) = 19.1.1
|
||||||
|
python3dist(pip) = 19.1.1
|
||||||
|
requires: python(abi) = 3.7
|
||||||
|
usr/lib/python3.7/site-packages/pyparsing-2.4.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(pyparsing) = 2.4
|
||||||
|
python3dist(pyparsing) = 2.4
|
||||||
|
requires: python(abi) = 3.7
|
||||||
|
usr/lib/python3.7/site-packages/setuptools-41.6.0-py3.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(setuptools) = 41.6
|
||||||
|
python3dist(setuptools) = 41.6
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.7
|
||||||
|
python3.7dist(setuptools)
|
||||||
|
usr/lib/python3.7/site-packages/setuptools-41.6.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(setuptools) = 41.6
|
||||||
|
python3dist(setuptools) = 41.6
|
||||||
|
requires: python(abi) = 3.7
|
||||||
|
usr/lib/python3.7/site-packages/six-1.12.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(six) = 1.12
|
||||||
|
python3dist(six) = 1.12
|
||||||
|
requires: python(abi) = 3.7
|
||||||
|
usr/lib/python3.7/site-packages/tox-3.14.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(tox) = 3.14
|
||||||
|
python3dist(tox) = 3.14
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.7
|
||||||
|
(python3.7dist(filelock) < 4 with python3.7dist(filelock) >= 3)
|
||||||
|
(python3.7dist(importlib-metadata) < 1 with python3.7dist(importlib-metadata) >= 0.12)
|
||||||
|
python3.7dist(packaging) >= 14
|
||||||
|
(python3.7dist(pluggy) < 1 with python3.7dist(pluggy) >= 0.12)
|
||||||
|
(python3.7dist(py) < 2 with python3.7dist(py) >= 1.4.17)
|
||||||
|
(python3.7dist(six) < 2 with python3.7dist(six) >= 1)
|
||||||
|
python3.7dist(toml) >= 0.9.4
|
||||||
|
python3.7dist(virtualenv) >= 14
|
||||||
|
usr/lib/python3.9/site-packages/astroid-2.3.3.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(astroid) = 2.3.3
|
||||||
|
python3dist(astroid) = 2.3.3
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.9
|
||||||
|
(python3.9dist(lazy-object-proxy) >= 1.4 with python3.9dist(lazy-object-proxy) < 1.5)
|
||||||
|
(python3.9dist(six) >= 1.12 with python3.9dist(six) < 2)
|
||||||
|
(python3.9dist(wrapt) >= 1.11 with python3.9dist(wrapt) < 1.12)
|
||||||
|
usr/lib/python3.9/site-packages/attrs-19.1.0-py3.9.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(attrs) = 19.1
|
||||||
|
python3dist(attrs) = 19.1
|
||||||
|
requires: python(abi) = 3.9
|
||||||
|
usr/lib/python3.9/site-packages/fsleyes-0.32.3.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(fsleyes) = 0.32.3
|
||||||
|
python3dist(fsleyes) = 0.32.3
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.9
|
||||||
|
python3.9dist(fsleyes-props) >= 1.6.7
|
||||||
|
python3.9dist(fsleyes-widgets) >= 0.8.4
|
||||||
|
python3.9dist(fslpy) >= 2.8.4
|
||||||
|
(python3.9dist(jinja2) >= 2 with python3.9dist(jinja2) < 3)
|
||||||
|
python3.9dist(matplotlib) >= 1.5.1
|
||||||
|
python3.9dist(nibabel) >= 2.3
|
||||||
|
python3.9dist(numpy) >= 1.14
|
||||||
|
python3.9dist(pillow) >= 3.2
|
||||||
|
python3.9dist(pyopengl) >= 3.1
|
||||||
|
(python3.9dist(pyparsing) >= 2 with python3.9dist(pyparsing) < 3)
|
||||||
|
python3.9dist(scipy) >= 0.18
|
||||||
|
python3.9dist(setuptools)
|
||||||
|
(python3.9dist(six) >= 1 with python3.9dist(six) < 2)
|
||||||
|
python3.9dist(wxpython) >= 3.0.2
|
||||||
|
usr/lib/python3.9/site-packages/kubernetes-11.0.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(kubernetes) = 11
|
||||||
|
python3dist(kubernetes) = 11
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.9
|
||||||
|
python3.9dist(certifi) >= 14.5.14
|
||||||
|
python3.9dist(google-auth) >= 1.0.1
|
||||||
|
python3.9dist(python-dateutil) >= 2.5.3
|
||||||
|
python3.9dist(pyyaml) >= 3.12
|
||||||
|
python3.9dist(requests)
|
||||||
|
python3.9dist(requests-oauthlib)
|
||||||
|
python3.9dist(setuptools) >= 21
|
||||||
|
python3.9dist(six) >= 1.9
|
||||||
|
python3.9dist(urllib3) >= 1.24.2
|
||||||
|
((python3.9dist(websocket-client) < 0.40 or python3.9dist(websocket-client) > 0.40) with (python3.9dist(websocket-client) < 0.41 or python3.9dist(websocket-client) > 0.42) with (python3.9dist(websocket-client) < 0.42 or python3.9dist(websocket-client) > 0.43) with python3.9dist(websocket-client) >= 0.32)
|
||||||
|
usr/lib/python3.9/site-packages/mistune-0.8.4-py3.9.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(mistune) = 0.8.4
|
||||||
|
python3dist(mistune) = 0.8.4
|
||||||
|
requires: python(abi) = 3.9
|
||||||
|
usr/lib/python3.9/site-packages/packaging-20.1.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(packaging) = 20.1
|
||||||
|
python3dist(packaging) = 20.1
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.9
|
||||||
|
python3.9dist(pyparsing) >= 2.0.2
|
||||||
|
python3.9dist(six)
|
||||||
|
usr/lib/python3.9/site-packages/pip-20.0.2.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(pip) = 20.0.2
|
||||||
|
python3dist(pip) = 20.0.2
|
||||||
|
requires: python(abi) = 3.9
|
||||||
|
usr/lib/python3.9/site-packages/pyparsing-2.4.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(pyparsing) = 2.4
|
||||||
|
python3dist(pyparsing) = 2.4
|
||||||
|
requires: python(abi) = 3.9
|
||||||
|
usr/lib/python3.9/site-packages/setuptools-41.6.0-py3.9.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(setuptools) = 41.6
|
||||||
|
python3dist(setuptools) = 41.6
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.9
|
||||||
|
python3.9dist(setuptools)
|
||||||
|
usr/lib/python3.9/site-packages/setuptools-41.6.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(setuptools) = 41.6
|
||||||
|
python3dist(setuptools) = 41.6
|
||||||
|
requires: python(abi) = 3.9
|
||||||
|
usr/lib/python3.9/site-packages/six-1.12.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(six) = 1.12
|
||||||
|
python3dist(six) = 1.12
|
||||||
|
requires: python(abi) = 3.9
|
||||||
|
usr/lib/python3.9/site-packages/tox-3.14.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(tox) = 3.14
|
||||||
|
python3dist(tox) = 3.14
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.9
|
||||||
|
(python3.9dist(filelock) < 4 with python3.9dist(filelock) >= 3)
|
||||||
|
python3.9dist(packaging) >= 14
|
||||||
|
(python3.9dist(pluggy) < 1 with python3.9dist(pluggy) >= 0.12)
|
||||||
|
(python3.9dist(py) < 2 with python3.9dist(py) >= 1.4.17)
|
||||||
|
(python3.9dist(six) < 2 with python3.9dist(six) >= 1)
|
||||||
|
python3.9dist(toml) >= 0.9.4
|
||||||
|
python3.9dist(virtualenv) >= 14
|
||||||
|
usr/lib/python3.9/site-packages/urllib3-1.25.7-py3.9.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(urllib3) = 1.25.7
|
||||||
|
python3dist(urllib3) = 1.25.7
|
||||||
|
requires: python(abi) = 3.9
|
||||||
|
usr/lib/python3.9/site-packages/zope.schema-4.4.2-py3.9.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(zope.schema) = 4.4.2
|
||||||
|
python3dist(zope.schema) = 4.4.2
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.9
|
||||||
|
python3.9dist(setuptools)
|
||||||
|
python3.9dist(zope.event)
|
||||||
|
python3.9dist(zope.interface) >= 3.6
|
||||||
|
usr/lib64/python2.7/site-packages/MarkupSafe-1.1.1.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(markupsafe) = 1.1.1
|
||||||
|
python2dist(markupsafe) = 1.1.1
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib64/python2.7/site-packages/backports.range-3.7.2-py2.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(backports.range) = 3.7.2
|
||||||
|
python2dist(backports.range) = 3.7.2
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib64/python2.7/site-packages/lxml-4.4.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(lxml) = 4.4
|
||||||
|
python2dist(lxml) = 4.4
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib64/python2.7/site-packages/numpy-1.16.4.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(numpy) = 1.16.4
|
||||||
|
python2dist(numpy) = 1.16.4
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib64/python2.7/site-packages/numpy_stl-2.11.2-py2.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(numpy-stl) = 2.11.2
|
||||||
|
python2dist(numpy-stl) = 2.11.2
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 2.7
|
||||||
|
python2.7dist(numpy)
|
||||||
|
python2.7dist(python-utils) >= 1.6.2
|
||||||
|
python2.7dist(setuptools)
|
||||||
|
usr/lib64/python2.7/site-packages/scipy-1.2.1.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(scipy) = 1.2.1
|
||||||
|
python2dist(scipy) = 1.2.1
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 2.7
|
||||||
|
python2.7dist(numpy) >= 1.8.2
|
||||||
|
usr/lib64/python2.7/site-packages/simplejson-3.16.0-py2.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python2.7dist(simplejson) = 3.16
|
||||||
|
python2dist(simplejson) = 3.16
|
||||||
|
requires: python(abi) = 2.7
|
||||||
|
usr/lib64/python3.7/site-packages/MarkupSafe-1.1.1.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(markupsafe) = 1.1.1
|
||||||
|
python3dist(markupsafe) = 1.1.1
|
||||||
|
requires: python(abi) = 3.7
|
||||||
|
usr/lib64/python3.7/site-packages/PyQt5_sip-4.19.19.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(pyqt5-sip) = 4.19.19
|
||||||
|
python3dist(pyqt5-sip) = 4.19.19
|
||||||
|
requires: python(abi) = 3.7
|
||||||
|
usr/lib64/python3.7/site-packages/PyQtWebEngine-5.12.1.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(pyqtwebengine) = 5.12.1
|
||||||
|
python3dist(pyqtwebengine) = 5.12.1
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.7
|
||||||
|
python3.7dist(pyqt5) >= 5.12
|
||||||
|
usr/lib64/python3.7/site-packages/backports.range-3.7.2-py3.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(backports.range) = 3.7.2
|
||||||
|
python3dist(backports.range) = 3.7.2
|
||||||
|
requires: python(abi) = 3.7
|
||||||
|
usr/lib64/python3.7/site-packages/lxml-4.4.0.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(lxml) = 4.4
|
||||||
|
python3dist(lxml) = 4.4
|
||||||
|
requires: python(abi) = 3.7
|
||||||
|
usr/lib64/python3.7/site-packages/numpy-1.17.4.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(numpy) = 1.17.4
|
||||||
|
python3dist(numpy) = 1.17.4
|
||||||
|
requires: python(abi) = 3.7
|
||||||
|
usr/lib64/python3.7/site-packages/numpy_stl-2.11.2-py3.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(numpy-stl) = 2.11.2
|
||||||
|
python3dist(numpy-stl) = 2.11.2
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.7
|
||||||
|
python3.7dist(numpy)
|
||||||
|
python3.7dist(python-utils) >= 1.6.2
|
||||||
|
python3.7dist(setuptools)
|
||||||
|
usr/lib64/python3.7/site-packages/scipy-1.2.1.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(scipy) = 1.2.1
|
||||||
|
python3dist(scipy) = 1.2.1
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.7
|
||||||
|
python3.7dist(numpy) >= 1.8.2
|
||||||
|
usr/lib64/python3.7/site-packages/simplejson-3.16.0-py3.7.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.7dist(simplejson) = 3.16
|
||||||
|
python3dist(simplejson) = 3.16
|
||||||
|
requires: python(abi) = 3.7
|
||||||
|
usr/lib64/python3.9/site-packages/PyQtWebEngine-5.12.1.dist-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(pyqtwebengine) = 5.12.1
|
||||||
|
python3dist(pyqtwebengine) = 5.12.1
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.9
|
||||||
|
python3.9dist(pyqt5) >= 5.12
|
||||||
|
usr/lib64/python3.9/site-packages/backports.range-3.7.2-py3.9.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(backports.range) = 3.7.2
|
||||||
|
python3dist(backports.range) = 3.7.2
|
||||||
|
requires: python(abi) = 3.9
|
||||||
|
usr/lib64/python3.9/site-packages/numpy_stl-2.11.2-py3.9.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(numpy-stl) = 2.11.2
|
||||||
|
python3dist(numpy-stl) = 2.11.2
|
||||||
|
requires: |-
|
||||||
|
python(abi) = 3.9
|
||||||
|
python3.9dist(numpy)
|
||||||
|
python3.9dist(python-utils) >= 1.6.2
|
||||||
|
python3.9dist(setuptools)
|
||||||
|
usr/lib64/python3.9/site-packages/simplejson-3.16.0-py3.9.egg-info:
|
||||||
|
provides: |-
|
||||||
|
python3.9dist(simplejson) = 3.16
|
||||||
|
python3dist(simplejson) = 3.16
|
||||||
|
requires: python(abi) = 3.9
|
94
tests/data/scripts_pythondistdeps/test-requires.yaml
Normal file
94
tests/data/scripts_pythondistdeps/test-requires.yaml
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
setuptools:
|
||||||
|
wheel:
|
||||||
|
'41.6.0': ['2.7', '3.7', '3.9']
|
||||||
|
sdist:
|
||||||
|
'41.6.0': ['2.7', '3.7', '3.9', '3.10']
|
||||||
|
pip:
|
||||||
|
wheel:
|
||||||
|
'19.1.1': ['2.7', '3.7']
|
||||||
|
'20.0.2': ['3.9']
|
||||||
|
sdist:
|
||||||
|
'20.0.2': ['3.11']
|
||||||
|
packaging:
|
||||||
|
wheel:
|
||||||
|
'19.0': ['2.7', '3.7']
|
||||||
|
'20.1': ['3.9']
|
||||||
|
attrs:
|
||||||
|
sdist:
|
||||||
|
'19.1.0': ['2.7', '3.9']
|
||||||
|
pyparsing:
|
||||||
|
wheel:
|
||||||
|
'2.4.0': ['2.7', '3.7', '3.9']
|
||||||
|
six:
|
||||||
|
wheel:
|
||||||
|
'1.12.0': ['2.7', '3.7', '3.9']
|
||||||
|
tox:
|
||||||
|
wheel:
|
||||||
|
'3.14.0': ['2.7', '3.7', '3.9']
|
||||||
|
urllib3:
|
||||||
|
sdist:
|
||||||
|
'1.25.7': ['2.7', '3.9']
|
||||||
|
zope.component:
|
||||||
|
sdist:
|
||||||
|
'4.3.0': ['2.7', '3.9']
|
||||||
|
zope.event:
|
||||||
|
wheel:
|
||||||
|
'4.2.0': ['2.7', '3.9']
|
||||||
|
zope.schema:
|
||||||
|
sdist:
|
||||||
|
'4.4.2': ['2.7', '3.9']
|
||||||
|
zope.interface:
|
||||||
|
sdist:
|
||||||
|
'5.1.0': ['3.9']
|
||||||
|
wheel:
|
||||||
|
'4.6.0': ['2.7']
|
||||||
|
lxml:
|
||||||
|
lib: lib64
|
||||||
|
wheel:
|
||||||
|
'4.4.0': ['2.7', '3.7']
|
||||||
|
scipy:
|
||||||
|
lib: lib64
|
||||||
|
wheel:
|
||||||
|
'1.2.1': ['2.7', '3.7']
|
||||||
|
numpy:
|
||||||
|
lib: lib64
|
||||||
|
wheel:
|
||||||
|
'1.16.4': ['2.7']
|
||||||
|
'1.17.4': ['3.7']
|
||||||
|
numpy-stl:
|
||||||
|
lib: lib64
|
||||||
|
sdist:
|
||||||
|
'2.11.2': ['2.7', '3.7', '3.9']
|
||||||
|
PyQt5_sip:
|
||||||
|
lib: lib64
|
||||||
|
wheel:
|
||||||
|
'4.19.19': ['3.7']
|
||||||
|
PyQtWebEngine:
|
||||||
|
lib: lib64
|
||||||
|
wheel:
|
||||||
|
'5.12.1': ['3.7', '3.9']
|
||||||
|
MarkupSafe:
|
||||||
|
lib: lib64
|
||||||
|
wheel:
|
||||||
|
'1.1.1': ['2.7', '3.7']
|
||||||
|
simplejson:
|
||||||
|
lib: lib64
|
||||||
|
sdist:
|
||||||
|
'3.16.0': ['2.7', '3.7', '3.9']
|
||||||
|
backports.range:
|
||||||
|
lib: lib64
|
||||||
|
sdist:
|
||||||
|
'3.7.2': ['2.7', '3.7', '3.9']
|
||||||
|
mistune:
|
||||||
|
sdist:
|
||||||
|
'0.8.4': ['2.7', '3.9']
|
||||||
|
astroid:
|
||||||
|
wheel:
|
||||||
|
'2.3.3': ['3.7', '3.9']
|
||||||
|
kubernetes:
|
||||||
|
wheel:
|
||||||
|
'11.0.0b2': ['2.7']
|
||||||
|
'11.0.0': ['3.9']
|
||||||
|
fsleyes:
|
||||||
|
wheel:
|
||||||
|
'0.32.3': ['3.9']
|
242
tests/test_scripts_pythondistdeps.py
Normal file
242
tests/test_scripts_pythondistdeps.py
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
# Run tests using pytest, e.g. from the root directory
|
||||||
|
# $ python3 -m pytest --ignore tests/testing/ -vvv
|
||||||
|
#
|
||||||
|
# If there are any breakags, the best way to see differences is using a diff:
|
||||||
|
# $ diff tests/data/scripts_pythondistdeps/test-data.yaml <(python3 tests/test_scripts_pythondistdeps.py)
|
||||||
|
#
|
||||||
|
# - Test cases and expected results are saved in test-data.yaml inside
|
||||||
|
# TEST_DATA_PATH (currently ./data/scripts_pythondistdeps/)
|
||||||
|
# - To regenerate test-data.yaml file with the current results of
|
||||||
|
# pythondistdeps.py for each test configuration, execute this test file
|
||||||
|
# directly and results will be on stdout
|
||||||
|
# $ python3 test_scripts_pythondistdeps.py
|
||||||
|
#
|
||||||
|
# To add new test-data, add them to the test-requires.yaml: they will be
|
||||||
|
# downloaded automatically. And then add the resulting dist-info/egg-info paths
|
||||||
|
# into test-data.yaml under whichever requires/provides configurations you want
|
||||||
|
# to test
|
||||||
|
# - To find all dist-info/egg-info directories in the test-data directory,
|
||||||
|
# run inside test-data:
|
||||||
|
# $ find . -type d -regex ".*\(dist-info\|egg-info\)" | sort
|
||||||
|
#
|
||||||
|
# Requirements for this script:
|
||||||
|
# - Python >= 3.6
|
||||||
|
# - pip >= 20.0.1
|
||||||
|
# - setuptools
|
||||||
|
# - pytest
|
||||||
|
# - pyyaml
|
||||||
|
# - wheel
|
||||||
|
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
import pytest
|
||||||
|
import shlex
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import tempfile
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
PYTHONDISTDEPS_PATH = Path(__file__).parent / '..' / 'scripts' / 'pythondistdeps.py'
|
||||||
|
TEST_DATA_PATH = Path(__file__).parent / 'data' / 'scripts_pythondistdeps'
|
||||||
|
|
||||||
|
|
||||||
|
def run_pythondistdeps(provides_params, requires_params, dist_egg_info_path):
|
||||||
|
"""Runs pythondistdeps.py on `dits_egg_info_path` with given
|
||||||
|
provides and requires parameters and returns a dict with generated provides and requires"""
|
||||||
|
info_path = TEST_DATA_PATH / dist_egg_info_path
|
||||||
|
files = '\n'.join(map(str, info_path.iterdir()))
|
||||||
|
|
||||||
|
provides = subprocess.check_output((sys.executable, PYTHONDISTDEPS_PATH, *shlex.split(provides_params)),
|
||||||
|
input=files, encoding="utf-8")
|
||||||
|
requires = subprocess.check_output((sys.executable, PYTHONDISTDEPS_PATH, *shlex.split(requires_params)),
|
||||||
|
input=files, encoding="utf-8")
|
||||||
|
|
||||||
|
return {"provides": provides.strip(), "requires": requires.strip()}
|
||||||
|
|
||||||
|
|
||||||
|
def load_test_data():
|
||||||
|
"""Reads the test-data.yaml and loads the test data into a dict."""
|
||||||
|
with TEST_DATA_PATH.joinpath('test-data.yaml').open() as file:
|
||||||
|
return yaml.safe_load(file)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_test_cases(test_data):
|
||||||
|
"""Goes through the test data dict and yields test cases.
|
||||||
|
Test case is a tuple of 4 elements:
|
||||||
|
- provides parameters
|
||||||
|
- requires parameters
|
||||||
|
- path to the dist-info/egg-info directory inside test-data
|
||||||
|
- dict with expected results ("requires" and "provides")"""
|
||||||
|
for requires_params in test_data:
|
||||||
|
for provides_params in test_data[requires_params]:
|
||||||
|
for dist_egg_info_path in test_data[requires_params][provides_params]:
|
||||||
|
expected = test_data[requires_params][provides_params][dist_egg_info_path]
|
||||||
|
yield (provides_params, requires_params, dist_egg_info_path, expected)
|
||||||
|
|
||||||
|
|
||||||
|
def check_and_install_test_data():
|
||||||
|
"""Checks if the appropriate metadata are present in TEST_DATA_PATH, and if
|
||||||
|
not, downloads them through pip from PyPI."""
|
||||||
|
with TEST_DATA_PATH.joinpath('test-requires.yaml').open() as file:
|
||||||
|
test_requires = yaml.safe_load(file)
|
||||||
|
downloaded_anything = False
|
||||||
|
|
||||||
|
for package in test_requires:
|
||||||
|
# To be as close to the real environment, we want some packages saved in /usr/lib64 instead of /usr/lib,
|
||||||
|
# for these we explicitly set lib64 as a parameter, and by default we use /usr/lib.
|
||||||
|
lib = test_requires[package].pop("lib", "lib")
|
||||||
|
|
||||||
|
# type is either `wheel` or `sdist`
|
||||||
|
for type in test_requires[package]:
|
||||||
|
for pkg_version in test_requires[package][type]:
|
||||||
|
for py_version in test_requires[package][type][pkg_version]:
|
||||||
|
py_version_nodots = py_version.replace(".", "")
|
||||||
|
package_underscores = package.replace("-", "_")
|
||||||
|
|
||||||
|
suffix = ".egg-info" if type == "sdist" else ".dist-info"
|
||||||
|
pre_suffix = f"-py{py_version}" if type == "sdist" else ""
|
||||||
|
|
||||||
|
install_path = TEST_DATA_PATH / "usr" / lib / f"python{py_version}" \
|
||||||
|
/ "site-packages" / f"{package_underscores}-{pkg_version}{pre_suffix}{suffix}"
|
||||||
|
|
||||||
|
if install_path.exists():
|
||||||
|
continue
|
||||||
|
|
||||||
|
# If this is the first package we're downloading,
|
||||||
|
# display what's happening
|
||||||
|
if not downloaded_anything:
|
||||||
|
print("=====================")
|
||||||
|
print("Downloading test data")
|
||||||
|
print("=====================\n")
|
||||||
|
downloaded_anything = True
|
||||||
|
|
||||||
|
# We use a temporary directory to unpack/install the
|
||||||
|
# package to, and then we move only the metadata to the
|
||||||
|
# final location
|
||||||
|
with tempfile.TemporaryDirectory() as temp_dir:
|
||||||
|
import runpy
|
||||||
|
backup_argv = sys.argv[:]
|
||||||
|
|
||||||
|
if type == "wheel":
|
||||||
|
from pkg_resources import parse_version
|
||||||
|
abi = f"cp{py_version_nodots}"
|
||||||
|
# The "m" was removed from the abi flag in Python version 3.8
|
||||||
|
if parse_version(py_version) < parse_version('3.8'):
|
||||||
|
abi += "m"
|
||||||
|
|
||||||
|
# Install = download and unpack wheel into our
|
||||||
|
# temporary directory
|
||||||
|
sys.argv[1:] = ["install", "--no-deps",
|
||||||
|
"--only-binary", ":all:",
|
||||||
|
"--platform", "manylinux1_x86_64",
|
||||||
|
"--python-version", py_version,
|
||||||
|
"--implementation", "cp",
|
||||||
|
"--abi", abi,
|
||||||
|
"--target", temp_dir,
|
||||||
|
"--no-build-isolation",
|
||||||
|
f"{package}=={pkg_version}"]
|
||||||
|
else:
|
||||||
|
# Download sdist that we'll unpack later
|
||||||
|
sys.argv[1:] = ["download", "--no-deps",
|
||||||
|
"--no-binary", ":all:",
|
||||||
|
"--dest", temp_dir,
|
||||||
|
"--no-build-isolation",
|
||||||
|
f"{package}=={pkg_version}"]
|
||||||
|
|
||||||
|
try:
|
||||||
|
# run_module() alters sys.modules and sys.argv, but restores them at exit
|
||||||
|
runpy.run_module("pip", run_name="__main__", alter_sys=True)
|
||||||
|
except SystemExit as exc:
|
||||||
|
pass
|
||||||
|
finally:
|
||||||
|
sys.argv[:] = backup_argv
|
||||||
|
|
||||||
|
temp_path = Path(temp_dir)
|
||||||
|
if type == "sdist":
|
||||||
|
# Wheel were already unpacked by pip, sdists we
|
||||||
|
# have to unpack ourselves
|
||||||
|
sdist_path = next(temp_path.glob(f"{package}-{pkg_version}.*"))
|
||||||
|
|
||||||
|
if sdist_path.suffix == ".zip":
|
||||||
|
import zipfile
|
||||||
|
archive = zipfile.ZipFile(sdist_path)
|
||||||
|
else:
|
||||||
|
import tarfile
|
||||||
|
archive = tarfile.open(sdist_path)
|
||||||
|
|
||||||
|
archive.extractall(temp_path)
|
||||||
|
try:
|
||||||
|
info_path = next(temp_path.glob(f"**/*{suffix}"))
|
||||||
|
|
||||||
|
# Let's check the wheel metadata has the
|
||||||
|
# expected directory name. We don't check for
|
||||||
|
# egg-info metadata, because we're pulling them
|
||||||
|
# from sdists where they don't have the proper
|
||||||
|
# directory name
|
||||||
|
if type == "wheel":
|
||||||
|
if info_path.name != install_path.name:
|
||||||
|
print("\nWarning: wheel metadata have unexpected directory name.\n"
|
||||||
|
f"Expected: {install_path.name}\n"
|
||||||
|
f"Actual: {info_path.name}\n"
|
||||||
|
f"Info: package '{package}', version '{pkg_version}'"
|
||||||
|
f" for Python {py_version}\n"
|
||||||
|
f"Possible resolution: Specify the package version with"
|
||||||
|
f" trailing zeros in test-requires.yaml", file=sys.stderr)
|
||||||
|
|
||||||
|
shutil.move(info_path, install_path)
|
||||||
|
|
||||||
|
relative_path = install_path.relative_to(TEST_DATA_PATH)
|
||||||
|
print(f"\nDownloaded metadata to '{relative_path}'" \
|
||||||
|
f" inside test-data directory.\n")
|
||||||
|
except StopIteration:
|
||||||
|
# temp_path.glob() did not find any file and
|
||||||
|
# thus there's been some problem
|
||||||
|
sys.exit(f"Problem occured while getting dist-info/egg-info"
|
||||||
|
f" for package '{package}', version '{pkg_version}'"
|
||||||
|
f" for Python {py_version}")
|
||||||
|
if downloaded_anything:
|
||||||
|
print("\n==============================")
|
||||||
|
print("Finished downloading test data")
|
||||||
|
print("==============================")
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="session", autouse=True)
|
||||||
|
def fixture_check_and_install_test_data():
|
||||||
|
"""Wrapper fixture, because a fixture can't be called as a function."""
|
||||||
|
check_and_install_test_data()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("provides_params, requires_params, dist_egg_info_path, expected",
|
||||||
|
generate_test_cases(load_test_data()))
|
||||||
|
def test_pythondistdeps(provides_params, requires_params, dist_egg_info_path, expected):
|
||||||
|
"""Runs pythondistdeps with the given parameters and dist-info/egg-info
|
||||||
|
path, compares the results with the expected results"""
|
||||||
|
assert expected == run_pythondistdeps(provides_params, requires_params, dist_egg_info_path)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
"""If the script is called directly, we check and install test data if needed,
|
||||||
|
we look up all the test configurations in test-data.yaml, run
|
||||||
|
pythondistdeps for each, save the results and print the resulting YAML file
|
||||||
|
with the updated results."""
|
||||||
|
|
||||||
|
check_and_install_test_data()
|
||||||
|
|
||||||
|
# Set YAML dump style to block style
|
||||||
|
def str_presenter(dumper, data):
|
||||||
|
if len(data.splitlines()) > 1: # check for multiline string
|
||||||
|
return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|')
|
||||||
|
return dumper.represent_scalar('tag:yaml.org,2002:str', data)
|
||||||
|
yaml.add_representer(str, str_presenter)
|
||||||
|
|
||||||
|
# Run pythondistdeps for each test configuration
|
||||||
|
test_data = load_test_data()
|
||||||
|
for provides_params, requires_params, dist_egg_info_path, expected in generate_test_cases(test_data):
|
||||||
|
# Print a dot to stderr for each test run to keep user informed about progress
|
||||||
|
print(".", end="", flush=True, file=sys.stderr)
|
||||||
|
test_data[requires_params][provides_params][dist_egg_info_path] = \
|
||||||
|
run_pythondistdeps(provides_params, requires_params, dist_egg_info_path)
|
||||||
|
|
||||||
|
print(yaml.dump(test_data, indent=4))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user