def test_allowlist_sqlalchemy(self, tmpdir, osutils, pip_runner): reqs = ["sqlalchemy==1.1.18"] pip, runner = pip_runner appdir, builder = self._make_appdir_and_dependency_builder( reqs, tmpdir, runner) requirements_file = os.path.join(appdir, "requirements.txt") pip.packages_to_download( expected_args=["-r", requirements_file, "--dest", mock.ANY], packages=["SQLAlchemy-1.1.18-cp36-cp36m-macosx_10_11_x86_64.whl"], ) pip.packages_to_download( expected_args=[ "--only-binary=:all:", "--no-deps", "--platform", "manylinux2014_x86_64", "--implementation", "cp", "--abi", get_lambda_abi(builder.runtime), "--dest", mock.ANY, "sqlalchemy==1.1.18", ], packages=["SQLAlchemy-1.1.18-cp36-cp36m-macosx_10_11_x86_64.whl"], ) site_packages = os.path.join(appdir, ".chalice.", "site-packages") with osutils.tempdir() as scratch_dir: builder.build_site_packages(requirements_file, site_packages, scratch_dir) installed_packages = os.listdir(site_packages) pip.validate() assert installed_packages == ["SQLAlchemy"]
def test_can_replace_incompat_whl(self, tmpdir, osutils, pip_runner): reqs = ["foo", "bar"] pip, runner = pip_runner appdir, builder = self._make_appdir_and_dependency_builder(reqs, tmpdir, runner) requirements_file = os.path.join(appdir, "requirements.txt") pip.packages_to_download( expected_args=["-r", requirements_file, "--dest", mock.ANY, "--exists-action", "i"], packages=["foo-1.0-cp36-none-any.whl", "bar-1.2-cp36-cp36m-macosx_10_6_intel.whl"], ) # Once the initial download has 1 incompatible whl file. The second, # more targeted download, finds manylinux1_x86_64 and downloads that. pip.packages_to_download( expected_args=[ "--only-binary=:all:", "--no-deps", "--platform", "manylinux2014_x86_64", "--implementation", "cp", "--abi", get_lambda_abi(builder.runtime), "--dest", mock.ANY, "bar==1.2", ], packages=["bar-1.2-cp36-cp36m-manylinux1_x86_64.whl"], ) site_packages = os.path.join(appdir, ".chalice.", "site-packages") with osutils.tempdir() as scratch_dir: builder.build_site_packages(requirements_file, site_packages, scratch_dir) installed_packages = os.listdir(site_packages) pip.validate() for req in reqs: assert req in installed_packages
def test_whitelist_sqlalchemy(self, tmpdir, osutils, pip_runner): reqs = ['sqlalchemy==1.1.18'] pip, runner = pip_runner appdir, builder = self._make_appdir_and_dependency_builder( reqs, tmpdir, runner) requirements_file = os.path.join(appdir, 'requirements.txt') pip.packages_to_download( expected_args=['-r', requirements_file, '--dest', mock.ANY], packages=['SQLAlchemy-1.1.18-cp36-cp36m-macosx_10_11_x86_64.whl']) pip.packages_to_download( expected_args=[ '--only-binary=:all:', '--no-deps', '--platform', 'manylinux1_x86_64', '--implementation', 'cp', '--abi', get_lambda_abi(builder.runtime), '--dest', mock.ANY, 'sqlalchemy==1.1.18' ], packages=['SQLAlchemy-1.1.18-cp36-cp36m-macosx_10_11_x86_64.whl']) site_packages = os.path.join(appdir, '.chalice.', 'site-packages') with osutils.tempdir() as scratch_dir: builder.build_site_packages(requirements_file, site_packages, scratch_dir) installed_packages = os.listdir(site_packages) pip.validate() assert installed_packages == ['SQLAlchemy']
def test_can_replace_incompat_whl(self, tmpdir, osutils, pip_runner): reqs = ['foo', 'bar'] pip, runner = pip_runner appdir, builder = self._make_appdir_and_dependency_builder( reqs, tmpdir, runner) requirements_file = os.path.join(appdir, 'requirements.txt') pip.packages_to_download( expected_args=['-r', requirements_file, '--dest', mock.ANY], packages=[ 'foo-1.0-cp36-none-any.whl', 'bar-1.2-cp36-cp36m-macosx_10_6_intel.whl' ]) # Once the initial download has 1 incompatible whl file. The second, # more targeted download, finds manylinux1_x86_64 and downloads that. pip.packages_to_download( expected_args=[ '--only-binary=:all:', '--no-deps', '--platform', 'manylinux1_x86_64', '--implementation', 'cp', '--abi', get_lambda_abi(builder.runtime), '--dest', mock.ANY, 'bar==1.2' ], packages=['bar-1.2-cp36-cp36m-manylinux1_x86_64.whl']) site_packages = os.path.join(appdir, '.chalice.', 'site-packages') with osutils.tempdir() as scratch_dir: builder.build_site_packages(requirements_file, site_packages, scratch_dir) installed_packages = os.listdir(site_packages) pip.validate() for req in reqs: assert req in installed_packages
def test_build_into_existing_dir_with_preinstalled_packages( self, tmpdir, osutils, pip_runner): # Same test as above so we should get foo failing and bar succeeding # but in this test we started with a .chalice/site-packages directory # with both foo and bar already installed. It should still fail since # they may be there by happenstance, or from an incompatible version # of python. reqs = ["foo", "bar"] pip, runner = pip_runner appdir, builder = self._make_appdir_and_dependency_builder( reqs, tmpdir, runner) requirements_file = os.path.join(appdir, "requirements.txt") pip.packages_to_download( expected_args=["-r", requirements_file, "--dest", mock.ANY], packages=[ "foo-1.2.zip", "bar-1.2-cp36-cp36m-manylinux1_x86_64.whl" ], ) pip.packages_to_download( expected_args=[ "--only-binary=:all:", "--no-deps", "--platform", "manylinux2014_x86_64", "--implementation", "cp", "--abi", get_lambda_abi(builder.runtime), "--dest", mock.ANY, "foo==1.2", ], packages=["foo-1.2-cp36-cp36m-macosx_10_6_intel.whl"], ) # Add two fake packages foo and bar that have previously been # installed in the site-packages directory. site_packages = os.path.join(appdir, ".chalice", "site-packages") foo = os.path.join(site_packages, "foo") os.makedirs(foo) bar = os.path.join(site_packages, "bar") os.makedirs(bar) with osutils.tempdir() as scratch_dir: with pytest.raises(MissingDependencyError) as e: builder.build_site_packages(requirements_file, site_packages, scratch_dir) installed_packages = os.listdir(site_packages) # bar should succeed and foo should failed. missing_packages = list(e.value.missing) pip.validate() assert len(missing_packages) == 1 assert missing_packages[0].identifier == "foo==1.2" assert installed_packages == ["bar"]
def test_get_lambda_abi_python37(self): assert "cp37m" == get_lambda_abi("python3.7")
def test_get_lambda_abi_python36(self): assert "cp36m" == get_lambda_abi("python3.6")
def test_get_lambda_abi_python27(self): assert "cp27mu" == get_lambda_abi("python2.7")
def test_get_lambda_abi_python38(self): assert "cp38" == get_lambda_abi("python3.8")
def test_get_lambda_abi_python39(self): assert "cp39" == get_lambda_abi("python3.9")