123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import glob
- import os
- from pathlib import Path
- import platform
- import subprocess
- from zipfile import ZipFile
- import pytest
- from testpath import assert_isfile, assert_isdir, assert_not_path_exists
- from nsist.wheels import WheelGetter, extract_wheel
- # To exclude tests requiring network on an unplugged machine, use: pytest -m "not network"
- @pytest.mark.network
- def test_matching_one_pattern(tmpdir):
- td1 = str(tmpdir.mkdir('wheels'))
- td2 = str(tmpdir.mkdir('pkgs'))
- subprocess.call(['pip', 'wheel', 'requests==2.19.1', '-w', str(td1)])
- wg = WheelGetter([], [os.path.join(td1, '*.whl')], td2, platform.python_version(), 64)
- wg.get_globs()
- assert_isdir(os.path.join(td2, 'requests'))
- assert_isfile(os.path.join(td2, 'requests-2.19.1.dist-info', 'METADATA'))
- assert_isdir(os.path.join(td2, 'urllib3'))
- assert glob.glob(os.path.join(td2, 'urllib3*.dist-info'))
- @pytest.mark.network
- def test_duplicate_wheel_files_raise(tmpdir):
- td1 = str(tmpdir.mkdir('wheels'))
- td2 = str(tmpdir.mkdir('pkgs'))
- subprocess.call(['pip', 'wheel', 'requests==2.19.1', '-w', str(td1)])
- wg = WheelGetter(['requests==2.19.1'], [os.path.join(td1, '*.whl')], td2,
- platform.python_version(), 64)
- with pytest.raises(ValueError, match='Multiple wheels specified'):
- wg.get_all()
- def test_invalid_wheel_file_raise(tmpdir):
- td1 = str(tmpdir.mkdir('wheels'))
- td2 = str(tmpdir.mkdir('pkgs'))
- open(os.path.join(td1, 'notawheel.txt'), 'w+')
- wg = WheelGetter([], [os.path.join(td1, '*')], td2,
- platform.python_version(), 64)
- with pytest.raises(ValueError, match='notawheel.txt'):
- wg.get_globs()
- def test_incompatible_platform_wheel_file_raise(tmpdir):
- td1 = str(tmpdir.mkdir('wheels'))
- td2 = str(tmpdir.mkdir('pkgs'))
- Path(td1, 'incompatiblewheel-1.0.0-py2.py3-none-linux_x86_64.whl').touch()
- wg = WheelGetter([], [os.path.join(td1, '*.whl')], td2,
- platform.python_version(), 64)
- with pytest.raises(ValueError, match='not compatible with .* win_amd64'):
- wg.get_globs()
- def test_incompatible_python_wheel_file_raise(tmpdir):
- td1 = str(tmpdir.mkdir('wheels'))
- td2 = str(tmpdir.mkdir('pkgs'))
- Path(td1, 'incompatiblewheel-1.0.0-py26-none-any.whl').touch()
- wg = WheelGetter([], [os.path.join(td1, '*.whl')], td2,
- platform.python_version(), 64)
- with pytest.raises(ValueError, match='not compatible with Python {}'
- .format(platform.python_version())):
- wg.get_globs()
- def test_useless_wheel_glob_path_raise(tmpdir):
- td1 = str(tmpdir.mkdir('wheels'))
- td2 = str(tmpdir.mkdir('pkgs'))
- wg = WheelGetter([], [os.path.join(td1, '*.whl')], td2, '3.6', 64)
- with pytest.raises(ValueError, match='does not match any files'):
- wg.get_globs()
- def test_extract_exclude_folder(tmpdir):
- whl_file = str(tmpdir / 'foo.whl')
- pkgs = tmpdir.mkdir('pkgs')
- with ZipFile(whl_file, 'w') as zf:
- zf.writestr('foo/bar.txt', b'blah')
- zf.writestr('foo/bar/abc.txt', b'blah')
- extract_wheel(whl_file, str(pkgs), exclude=['pkgs/foo/bar'])
- assert_isfile(str(pkgs / 'foo' / 'bar.txt'))
- assert_not_path_exists(str(pkgs / 'foo' / 'bar'))
- def test_extract_data_lib_sitepkg(tmpdir):
- whl_file = str(tmpdir / 'foo.whl')
- pkgs = tmpdir.mkdir('pkgs')
- with ZipFile(whl_file, 'w') as zf:
- zf.writestr('osgeo/bar.txt', b'blah')
- # The case of 'Lib/site-packages' shouldn't matter
- zf.writestr('foo-1.0.data/data/Lib/siTE-packages/osgeo/abc.txt', b'a')
- zf.writestr('foo-1.0.data/data/lib/site-packages/osgeo/def.txt', b'd')
- extract_wheel(whl_file, str(pkgs), exclude=['pkgs/foo/bar'])
- assert_isfile(str(pkgs / 'osgeo' / 'bar.txt'))
- assert_isfile(str(pkgs / 'osgeo' / 'abc.txt'))
- assert_isfile(str(pkgs / 'osgeo' / 'def.txt'))
|