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"]
Пример #2
0
    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
Пример #3
0
    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']
Пример #4
0
    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"]
Пример #6
0
 def test_get_lambda_abi_python37(self):
     assert "cp37m" == get_lambda_abi("python3.7")
Пример #7
0
 def test_get_lambda_abi_python36(self):
     assert "cp36m" == get_lambda_abi("python3.6")
Пример #8
0
 def test_get_lambda_abi_python27(self):
     assert "cp27mu" == get_lambda_abi("python2.7")
Пример #9
0
 def test_get_lambda_abi_python38(self):
     assert "cp38" == get_lambda_abi("python3.8")
Пример #10
0
 def test_get_lambda_abi_python39(self):
     assert "cp39" == get_lambda_abi("python3.9")