Ejemplo n.º 1
0
    def test_simple_installed(self):
        # Given
        entries = [
            dummy_repository_package_factory("MKL", "10.3", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 2,
                                             dependencies=["MKL 10.3"]),
        ]

        repository = repository_factory(entries)
        installed_repository = Repository()
        installed_repository.add_package(
            dummy_installed_package_factory("MKL", "10.3", 1)
        )

        expected_actions = [
            ('install', "numpy-1.8.0-2.egg"),
        ]

        # When
        request = Request()
        request.install(Requirement("numpy"))

        solver = Solver(repository, installed_repository)
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions, expected_actions)
Ejemplo n.º 2
0
    def test_whats_new_no_new_epd(self):
        # Given
        r_output = textwrap.dedent("""\
            Name                 installed            available
            ============================================================
            scipy                0.12.0-1             0.13.0-1
            numpy                1.7.1-1              1.7.1-2
            """)
        installed_entries = [
            dummy_installed_package_factory("numpy", "1.7.1", 1),
            dummy_installed_package_factory("scipy", "0.12.0", 1)
        ]
        remote_entries = [
            dummy_repository_package_factory("numpy", "1.7.1", 2),
            dummy_repository_package_factory("scipy", "0.13.0", 1)
        ]

        remote, installed = create_repositories(remote_entries,
                                                installed_entries)

        # When
        with mock_print() as m:
            whats_new(remote, installed)

        # Then

        # FIXME: we splitlines and compared wo caring about order, as
        # the actual line order depends on dict ordering from
        # EggCollection.query_installed.
        assertCountEqual(self, m.value.splitlines(), r_output.splitlines())
Ejemplo n.º 3
0
    def test_install_from_requirements(self):
        # Given
        remote_entries = [
            dummy_repository_package_factory("numpy", "1.8.0", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 2),
            dummy_repository_package_factory("nose", "1.2.1", 2),
            dummy_repository_package_factory("nose", "1.3.0", 1)
        ]

        requirements_file = os.path.join(self.prefix, "requirements.txt")
        with open(requirements_file, "w") as fp:
            fp.write("numpy 1.8.0-1\nnose 1.2.1-1")

        config = Configuration()
        enpkg = create_prefix_with_eggs(config, self.prefix, [],
                                        remote_entries)
        args = FakeOptions()
        args.requirements = requirements_file

        # When
        with mock.patch(
                "enstaller.cli.commands.install_req") as mocked_install_req:
            install_from_requirements(enpkg, config, args)

        # Then
        mocked_install_req.assert_has_calls([
            mock.call(enpkg, config, "numpy 1.8.0-1", args),
            mock.call(enpkg, config, "nose 1.2.1-1", args)
        ])
Ejemplo n.º 4
0
    def test_another_platform(self, config):
        # Given
        self._mock_auth()
        entries = [
            dummy_repository_package_factory("MKL", "10.3", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 1,
                                             dependencies=["MKL 10.3"]),
        ]
        _mock_index(entries, "rh5-64")
        _mock_index([], "rh5-32")
        r_output = textwrap.dedent("""\
            Resolving dependencies for numpy: numpy-1.8.0-1.egg
                mkl 10.3
        """)

        # When
        with mock_print() as m:
            main(["numpy", "--platform=rh5-32"])

        # Then
        self.assertMultiLineEqual(m.value,
                                  "No egg found for requirement numpy\n")

        # When
        with mock_print() as m:
            main(["numpy", "--platform=rh5-64"])

        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 5
0
    def test_recursive_install_unavailable_dependency(self):
        config = Configuration()
        session = Session(DummyAuthenticator(), self.prefix)

        auth = ("nono", "le gros robot")
        session.authenticate(auth)
        config.update(auth=auth)

        r_output = textwrap.dedent("""
        Cannot install 'scipy', as this package (or some of its requirements) are not
        available at your subscription level 'Canopy / EPD Free' (You are logged in as
        'nono').
        """)

        self.maxDiff = None
        numpy = dummy_repository_package_factory("numpy", "1.7.1", 1)
        numpy.available = False
        scipy = dummy_repository_package_factory("scipy", "0.12.0", 1)
        scipy.packages = ["numpy 1.7.1"]

        remote_entries = [numpy, scipy]

        with mock.patch("enstaller.main.Enpkg.execute"):
            enpkg = create_prefix_with_eggs(config, self.prefix, [],
                                            remote_entries)
            with mock_print() as m:
                with self.assertRaises(SystemExit):
                    install_req(enpkg, config, "scipy", FakeOptions())
                self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 6
0
    def test_update_all_epd_updates(self):
        r_output = textwrap.dedent("""\
        EPD 7.3-2 is available. To update to it (with confirmation warning), run 'enpkg epd'.
        The following updates and their dependencies will be installed
        Name                 installed            available
        ============================================================
        scipy                0.13.0-1             0.13.2-1
        """)
        config = Configuration()

        installed_entries = [
            dummy_installed_package_factory("numpy", "1.7.1", 2),
            dummy_installed_package_factory("scipy", "0.13.0", 1),
            dummy_installed_package_factory("epd", "7.3", 1),
        ]
        remote_entries = [
            dummy_repository_package_factory("numpy", "1.7.1", 1),
            dummy_repository_package_factory("scipy", "0.13.2", 1),
            dummy_repository_package_factory("epd", "7.3", 2),
        ]

        with mkdtemp() as d:
            enpkg = create_prefix_with_eggs(config, d, installed_entries,
                                            remote_entries)
            with mock.patch("enstaller.cli.commands.install_req"
                            ) as mocked_install_req:
                with mock_print() as m:
                    update_all(enpkg, config, FakeOptions())
                    self.assertMultiLineEqual(m.value, r_output)
                    mocked_install_req.assert_called()
Ejemplo n.º 7
0
    def test_recursive_install_unavailable_dependency(self):
        config = Configuration()
        session = Session(DummyAuthenticator(), self.prefix)

        auth = ("nono", "le gros robot")
        session.authenticate(auth)
        config.update(auth=auth)

        r_output = textwrap.dedent("""
        Cannot install 'scipy', as this package (or some of its requirements) are not
        available at your subscription level 'Canopy / EPD Free' (You are logged in as
        'nono').
        """)

        self.maxDiff = None
        numpy = dummy_repository_package_factory("numpy", "1.7.1", 1)
        numpy.available = False
        scipy = dummy_repository_package_factory("scipy", "0.12.0", 1)
        scipy.packages = ["numpy 1.7.1"]

        remote_entries = [numpy, scipy]

        with mock.patch("enstaller.main.Enpkg.execute"):
            enpkg = create_prefix_with_eggs(config, self.prefix, [], remote_entries)
            with mock_print() as m:
                with self.assertRaises(SystemExit):
                    install_req(enpkg, config, "scipy", FakeOptions())
                self.assertMultiLineEqual(m.value, r_output)
    def test_simple_installed(self):
        # Given
        entries = [
            dummy_repository_package_factory("MKL", "10.3", 1),
            dummy_repository_package_factory("numpy",
                                             "1.8.0",
                                             2,
                                             dependencies=["MKL 10.3"]),
        ]

        repository = repository_factory(entries)
        installed_repository = Repository()
        installed_repository.add_package(
            dummy_installed_package_factory("MKL", "10.3", 1))

        expected_actions = [
            ('install', "numpy-1.8.0-2.egg"),
        ]

        # When
        request = Request()
        request.install(Requirement("numpy"))

        solver = Solver(repository, installed_repository)
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions, expected_actions)
Ejemplo n.º 9
0
    def test_update_all_epd_updates(self):
        r_output = textwrap.dedent("""\
        EPD 7.3-2 is available. To update to it (with confirmation warning), run 'enpkg epd'.
        The following updates and their dependencies will be installed
        Name                 installed            available
        ============================================================
        scipy                0.13.0-1             0.13.2-1
        """)
        config = Configuration()

        installed_entries = [
            dummy_installed_package_factory("numpy", "1.7.1", 2),
            dummy_installed_package_factory("scipy", "0.13.0", 1),
            dummy_installed_package_factory("epd", "7.3", 1),
        ]
        remote_entries = [
            dummy_repository_package_factory("numpy", "1.7.1", 1),
            dummy_repository_package_factory("scipy", "0.13.2", 1),
            dummy_repository_package_factory("epd", "7.3", 2),
        ]

        with mkdtemp() as d:
            enpkg = create_prefix_with_eggs(config, d, installed_entries, remote_entries)
            with mock.patch("enstaller.cli.commands.install_req") as mocked_install_req:
                with mock_print() as m:
                    update_all(enpkg, config, FakeOptions())
                    self.assertMultiLineEqual(m.value, r_output)
                    mocked_install_req.assert_called()
Ejemplo n.º 10
0
    def test_install_from_requirements(self):
        # Given
        remote_entries = [
            dummy_repository_package_factory("numpy", "1.8.0", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 2),
            dummy_repository_package_factory("nose", "1.2.1", 2),
            dummy_repository_package_factory("nose", "1.3.0", 1)
        ]

        requirements_file = os.path.join(self.prefix, "requirements.txt")
        with open(requirements_file, "w") as fp:
            fp.write("numpy 1.8.0-1\nnose 1.2.1-1")

        config = Configuration()
        enpkg = create_prefix_with_eggs(config, self.prefix, [], remote_entries)
        args = FakeOptions()
        args.requirements = requirements_file

        # When
        with mock.patch("enstaller.cli.commands.install_req") as mocked_install_req:
            install_from_requirements(enpkg, config, args)

        # Then
        mocked_install_req.assert_has_calls(
            [mock.call(enpkg, config, "numpy 1.8.0-1", args),
             mock.call(enpkg, config, "nose 1.2.1-1", args)])
Ejemplo n.º 11
0
    def test_whats_new_no_new_epd(self):
        # Given
        r_output = textwrap.dedent("""\
            Name                 installed            available
            ============================================================
            scipy                0.12.0-1             0.13.0-1
            numpy                1.7.1-1              1.7.1-2
            """)
        installed_entries = [
            dummy_installed_package_factory("numpy", "1.7.1", 1),
            dummy_installed_package_factory("scipy", "0.12.0", 1)
        ]
        remote_entries = [
            dummy_repository_package_factory("numpy", "1.7.1", 2),
            dummy_repository_package_factory("scipy", "0.13.0", 1)
        ]

        remote, installed = create_repositories(remote_entries,
                                                installed_entries)

        # When
        with mock_print() as m:
            whats_new(remote, installed)

        # Then

        # FIXME: we splitlines and compared wo caring about order, as
        # the actual line order depends on dict ordering from
        # EggCollection.query_installed.
        assertCountEqual(self, m.value.splitlines(), r_output.splitlines())
Ejemplo n.º 12
0
    def test_another_platform(self, config):
        # Given
        self._mock_auth()
        entries = [
            dummy_repository_package_factory("MKL", "10.3", 1),
            dummy_repository_package_factory("numpy",
                                             "1.8.0",
                                             1,
                                             dependencies=["MKL 10.3"]),
        ]
        _mock_index(entries, "rh5-64")
        _mock_index([], "rh5-32")
        r_output = textwrap.dedent("""\
            Resolving dependencies for numpy: numpy-1.8.0-1.egg
                mkl 10.3
        """)

        # When
        with mock_print() as m:
            main(["numpy", "--platform=rh5-32"])

        # Then
        self.assertMultiLineEqual(m.value,
                                  "No egg found for requirement numpy\n")

        # When
        with mock_print() as m:
            main(["numpy", "--platform=rh5-64"])

        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 13
0
    def test__latest_package_simple(self):
        # Given
        packages = [
            dummy_repository_package_factory("swig", "1.3.40", 1),
            dummy_repository_package_factory("swig", "1.3.40", 2),
            dummy_repository_package_factory("swig", "2.0.1", 1),
        ]
        repository = self._repository_factory(packages)

        # When
        resolver = Resolve(repository)
        latest = resolver._latest_package(
            _LegacyRequirement.from_requirement_string("swig")
        )

        # Then
        self.assertEqual(latest.key, "swig-2.0.1-1.egg")

        # When
        resolver = Resolve(repository)
        latest = resolver._latest_package(
            _LegacyRequirement.from_requirement_string("swigg")
        )

        # Then
        self.assertIsNone(latest)
Ejemplo n.º 14
0
def _index_provider(store_location):
    entries = [
        dummy_repository_package_factory("numpy", "1.8.0", 1,
                                         store_location=store_location),
        dummy_repository_package_factory("scipy", "0.14.0", 1,
                                         store_location=store_location)
    ]
    return json.dumps(dict((entry.key, entry.s3index_data) for entry in entries))
Ejemplo n.º 15
0
def _index_provider(repository_info):
    entries = [
        dummy_repository_package_factory("numpy", "1.8.0", 1,
                                         repository_info=repository_info),
        dummy_repository_package_factory("scipy", "0.14.0", 1,
                                         repository_info=repository_info)
    ]
    return json.dumps(dict((entry.key, entry.s3index_data) for entry in entries))
Ejemplo n.º 16
0
def _index_provider(store_location):
    entries = [
        dummy_repository_package_factory("numpy",
                                         "1.8.0",
                                         1,
                                         store_location=store_location),
        dummy_repository_package_factory("scipy",
                                         "0.14.0",
                                         1,
                                         store_location=store_location)
    ]
    return json.dumps(
        dict((entry.key, entry.s3index_data) for entry in entries))
    def test_simple_all_installed(self):
        # Given
        entries = [
            dummy_repository_package_factory("MKL", "10.3", 1),
            dummy_repository_package_factory("numpy",
                                             "1.8.0",
                                             2,
                                             dependencies=["MKL 10.3"]),
        ]

        repository = repository_factory(entries)

        installed_entries = [
            dummy_installed_package_factory("MKL", "10.3", 1),
            dummy_installed_package_factory("numpy", "1.8.0", 2)
        ]
        installed_repository = Repository()
        for package in installed_entries:
            installed_repository.add_package(package)

        # When
        request = Request()
        request.install(Requirement("numpy"))

        solver = Solver(repository, installed_repository)
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions, [])

        # When
        solver = Solver(repository, installed_repository, force=True)
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions, [("remove", "numpy-1.8.0-2.egg"),
                                       ("install", "numpy-1.8.0-2.egg")])

        # When
        solver = Solver(repository,
                        installed_repository,
                        force=True,
                        forceall=True)
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions, [("remove", "numpy-1.8.0-2.egg"),
                                       ("remove", "MKL-10.3-1.egg"),
                                       ("install", "MKL-10.3-1.egg"),
                                       ("install", "numpy-1.8.0-2.egg")])
Ejemplo n.º 18
0
    def test_simple_all_installed(self):
        # Given
        remote_mkl = dummy_repository_package_factory("MKL", "10.3", 1)
        remote_numpy = dummy_repository_package_factory(
            "numpy", "1.8.0", 2, dependencies=["MKL 10.3"]
        )
        entries = [remote_mkl, remote_numpy]

        repository = repository_factory(entries)

        installed_mkl = dummy_installed_package_factory("MKL", "10.3", 1)
        installed_numpy = dummy_installed_package_factory("numpy", "1.8.0", 2)
        installed_entries = [installed_mkl, installed_numpy]

        installed_repository = Repository()
        for package in installed_entries:
            installed_repository.add_package(package)

        # When
        request = Request()
        request.install(Requirement("numpy"))

        solver = Solver(repository, installed_repository)
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions, [])

        # When
        solver = Solver(
            repository, installed_repository, force=ForceMode.MAIN_ONLY
        )
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(
            actions, [("remove", installed_numpy), ("install", remote_numpy)]
        )

        # When
        solver = Solver(repository, installed_repository, force=ForceMode.ALL)
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(
            actions,
            [("remove", installed_numpy), ("remove", installed_mkl),
             ("install", remote_mkl), ("install", remote_numpy)]
        )
Ejemplo n.º 19
0
    def test__latest_egg_multiple_python_versions(self):
        # Given
        packages = [
            dummy_repository_package_factory("swig", "1.3.40", 1),
            dummy_repository_package_factory("swig", "1.3.40", 2),
            dummy_repository_package_factory("swig", "2.0.1", 1)
        ]
        repository = self._repository_factory(packages)

        # When
        resolver = Resolve(repository)
        latest = resolver._latest_egg(Requirement("swig"))

        # Then
        self.assertEqual(latest, "swig-2.0.1-1.egg")
Ejemplo n.º 20
0
    def test_simple_all_installed(self):
        # Given
        entries = [
            dummy_repository_package_factory("MKL", "10.3", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 2,
                                             dependencies=["MKL 10.3"]),
        ]

        repository = repository_factory(entries)

        installed_entries = [
            dummy_installed_package_factory("MKL", "10.3", 1),
            dummy_installed_package_factory("numpy", "1.8.0", 2)
        ]
        installed_repository = Repository()
        for package in installed_entries:
            installed_repository.add_package(package)

        # When
        request = Request()
        request.install(Requirement("numpy"))

        solver = Solver(repository, installed_repository)
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions, [])

        # When
        solver = Solver(repository, installed_repository, force=True)
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions,
                             [("remove", "numpy-1.8.0-2.egg"),
                              ("install", "numpy-1.8.0-2.egg")])

        # When
        solver = Solver(repository, installed_repository, force=True,
                        forceall=True)
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions,
                             [("remove", "numpy-1.8.0-2.egg"),
                              ("remove", "MKL-10.3-1.egg"),
                              ("install", "MKL-10.3-1.egg"),
                              ("install", "numpy-1.8.0-2.egg")])
Ejemplo n.º 21
0
    def test_remove_non_existing(self):
        # Given
        entries = [
            dummy_repository_package_factory("numpy", "1.6.1", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 2),
        ]

        repository = repository_factory(entries)
        solver = Solver(repository, Repository._from_prefixes([self.prefix]))

        request = Request()
        request.remove(Requirement("numpy"))

        # When/Then
        with self.assertRaises(EnpkgError):
            solver.resolve(request)
    def test_remove_non_existing(self):
        # Given
        entries = [
            dummy_repository_package_factory("numpy", "1.6.1", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 2),
        ]

        repository = repository_factory(entries)
        solver = Solver(repository, Repository._from_prefixes([self.prefix]))

        request = Request()
        request.remove(Requirement("numpy"))

        # When/Then
        with self.assertRaises(EnpkgError):
            solver.resolve(request)
    def test_install_no_egg_entry(self):
        # Given
        entries = [
            dummy_repository_package_factory("numpy", "1.6.1", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 2),
        ]

        repository = repository_factory(entries)
        installed_repository = Repository._from_prefixes([self.prefix])
        solver = Solver(repository, installed_repository)

        request = Request()
        request.install(Requirement("scipy"))

        # When/Then
        with self.assertRaises(NoPackageFound):
            solver.resolve(request)
Ejemplo n.º 24
0
    def test_install_no_egg_entry(self):
        # Given
        entries = [
            dummy_repository_package_factory("numpy", "1.6.1", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 2),
        ]

        repository = repository_factory(entries)
        installed_repository = Repository._from_prefixes([self.prefix])
        solver = Solver(repository, installed_repository)

        request = Request()
        request.install(Requirement("scipy"))

        # When/Then
        with self.assertRaises(NoPackageFound):
            solver.resolve(request)
Ejemplo n.º 25
0
    def test_simple_install(self):
        remote_entries = [dummy_repository_package_factory("nose", "1.3.0", 1)]

        with mock.patch("enstaller.main.Enpkg.execute") as m:
            enpkg = create_prefix_with_eggs(Configuration(), self.prefix, [],
                                            remote_entries)
            install_req(enpkg, Configuration(), "nose", FakeOptions())
            m.assert_called_with([('fetch', 'nose-1.3.0-1.egg'),
                                  ('install', 'nose-1.3.0-1.egg')])
    def test_install_simple(self):
        entries = [
            dummy_repository_package_factory("numpy", "1.6.1", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 2),
            dummy_repository_package_factory("numpy", "1.7.1", 2),
        ]

        r_actions = [('install', 'numpy-1.8.0-2.egg')]

        repository = repository_factory(entries)
        installed_repository = Repository._from_prefixes([self.prefix])
        solver = Solver(repository, installed_repository)

        request = Request()
        request.install(Requirement("numpy"))
        actions = solver.resolve(request)

        self.assertEqual(actions, r_actions)
Ejemplo n.º 27
0
    def test_info_option(self):
        self.maxDiff = None

        # Given
        entries = [dummy_repository_package_factory("enstaller", "4.6.2", 1),
                   dummy_repository_package_factory("enstaller", "4.6.3", 1)]

        mtime = 0.0
        r_output = textwrap.dedent("""\
        Package: enstaller

        Version: 4.6.2-1
            Product: commercial
            Available: True
            Python version: {python_version}
            Store location: {store_location_1}
            Last modified: {last_modified}
            MD5: {md5}
            Size: {size}
            Requirements: None
        Version: 4.6.3-1
            Product: commercial
            Available: True
            Python version: {python_version}
            Store location: {store_location_2}
            Last modified: {last_modified}
            MD5: {md5}
            Size: {size}
            Requirements: None
        """.format(md5=FAKE_MD5, size=FAKE_SIZE, python_version=PY_VER,
                   store_location_1=entries[0].source_url,
                   store_location_2=entries[1].source_url,
                   last_modified=datetime.datetime.fromtimestamp(mtime)))

        remote_repository, installed_repository = \
            create_repositories(remote_entries=entries)

        # When
        with mock_print() as m:
            info_option(remote_repository, installed_repository,
                        "enstaller")
        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 28
0
    def test_update_all_no_updates(self):
        r_output = "No new version of any installed package is available\n"
        config = Configuration()

        installed_entries = [
            dummy_installed_package_factory("numpy", "1.7.1", 2),
            dummy_installed_package_factory("scipy", "0.13.0", 1)
        ]
        remote_entries = [
            dummy_repository_package_factory("numpy", "1.7.1", 1),
            dummy_repository_package_factory("scipy", "0.12.0", 1)
        ]

        with mkdtemp() as d:
            enpkg = create_prefix_with_eggs(config, d, installed_entries,
                                            remote_entries)
            with mock_print() as m:
                update_all(enpkg, config, FakeOptions())
                self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 29
0
    def test_update_all_no_updates(self):
        r_output = "No new version of any installed package is available\n"
        config = Configuration()

        installed_entries = [
            dummy_installed_package_factory("numpy", "1.7.1", 2),
            dummy_installed_package_factory("scipy", "0.13.0", 1)
        ]
        remote_entries = [
            dummy_repository_package_factory("numpy", "1.7.1", 1),
            dummy_repository_package_factory("scipy", "0.12.0", 1)
        ]

        with mkdtemp() as d:
            enpkg = create_prefix_with_eggs(config, d,
                                            installed_entries, remote_entries)
            with mock_print() as m:
                update_all(enpkg, config, FakeOptions())
                self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 30
0
    def test_install_simple(self):
        numpy_1_8_0 = dummy_repository_package_factory("numpy", "1.8.0", 2)
        entries = [
            dummy_repository_package_factory("numpy", "1.6.1", 1),
            numpy_1_8_0,
            dummy_repository_package_factory("numpy", "1.7.1", 2),
        ]

        r_actions = [('install', numpy_1_8_0)]

        repository = repository_factory(entries)
        installed_repository = Repository._from_prefixes([self.prefix])
        solver = Solver(repository, installed_repository)

        request = Request()
        request.install(Requirement("numpy"))
        actions = solver.resolve(request)

        self.assertEqual(actions, r_actions)
Ejemplo n.º 31
0
    def test_info_option(self):
        self.maxDiff = None

        # Given
        mtime = 0.0
        r_output = textwrap.dedent("""\
        Package: enstaller

        Version: 4.6.2-1
            Product: commercial
            Available: True
            Python version: {2}
            Store location: {3}
            Last modified: {4}
            MD5: {0}
            Size: {1}
            Requirements: None
        Version: 4.6.3-1
            Product: commercial
            Available: True
            Python version: {2}
            Store location: {3}
            Last modified: {4}
            MD5: {0}
            Size: {1}
            Requirements: None
        """.format(FAKE_MD5, FAKE_SIZE, PY_VER, "",
                   datetime.datetime.fromtimestamp(mtime)))

        entries = [
            dummy_repository_package_factory("enstaller", "4.6.2", 1),
            dummy_repository_package_factory("enstaller", "4.6.3", 1)
        ]

        remote_repository, installed_repository = \
            create_repositories(remote_entries=entries)

        # When
        with mock_print() as m:
            info_option(remote_repository, installed_repository, "enstaller")
        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 32
0
    def test_update_check_no_new_available(self):
        # Given
        remote_entries = [
            dummy_repository_package_factory("dummy", "1.0.0", 1),
            dummy_repository_package_factory("dummy", "0.9.8", 1)
        ]
        installed_entries = [
            dummy_installed_package_factory("dummy", "1.0.1", 1)
        ]

        remote_repository, installed_repository = \
            self._create_repositories(remote_entries, installed_entries)

        # When
        updates, EPD_update = updates_check(remote_repository,
                                            installed_repository)

        # Then
        self.assertEqual(EPD_update, [])
        self.assertEqual(updates, [])
Ejemplo n.º 33
0
    def test_update_check_no_new_available(self):
        # Given
        remote_entries = [
            dummy_repository_package_factory("dummy", "1.0.0", 1),
            dummy_repository_package_factory("dummy", "0.9.8", 1)
        ]
        installed_entries = [
            dummy_installed_package_factory("dummy", "1.0.1", 1)
        ]

        remote_repository, installed_repository = \
            self._create_repositories(remote_entries, installed_entries)

        # When
        updates, EPD_update = updates_check(remote_repository,
                                            installed_repository)

        # Then
        self.assertEqual(EPD_update, [])
        self.assertEqual(updates, [])
Ejemplo n.º 34
0
    def test_simple(self, config):
        # Given
        self._mock_auth()
        entries = [
            dummy_repository_package_factory("MKL", "10.3", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 1,
                                             dependencies=["MKL 10.3"]),
        ]
        _mock_index(entries)
        r_output = textwrap.dedent("""\
            Resolving dependencies for numpy: numpy-1.8.0-1.egg
                mkl 10.3
        """)

        # When
        with mock_print() as m:
            main(["numpy"])

        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 35
0
    def test_simple_install(self):
        remote_entries = [
            dummy_repository_package_factory("nose", "1.3.0", 1)
        ]

        with mock.patch("enstaller.main.Enpkg.execute") as m:
            enpkg = create_prefix_with_eggs(Configuration(), self.prefix, [],
                                            remote_entries)
            install_req(enpkg, Configuration(), "nose", FakeOptions())
            m.assert_called_with([('fetch', 'nose-1.3.0-1.egg'),
                                  ('install', 'nose-1.3.0-1.egg')])
Ejemplo n.º 36
0
    def test_info_option(self):
        self.maxDiff = None

        # Given
        mtime = 0.0
        r_output = textwrap.dedent("""\
        Package: enstaller

        Version: 4.6.2-1
            Product: commercial
            Available: True
            Python version: {2}
            Store location: {3}
            Last modified: {4}
            MD5: {0}
            Size: {1}
            Requirements: None
        Version: 4.6.3-1
            Product: commercial
            Available: True
            Python version: {2}
            Store location: {3}
            Last modified: {4}
            MD5: {0}
            Size: {1}
            Requirements: None
        """.format(FAKE_MD5, FAKE_SIZE, PY_VER, "",
                   datetime.datetime.fromtimestamp(mtime)))

        entries = [dummy_repository_package_factory("enstaller", "4.6.2", 1),
                   dummy_repository_package_factory("enstaller", "4.6.3", 1)]

        remote_repository, installed_repository = \
            create_repositories(remote_entries=entries)

        # When
        with mock_print() as m:
            info_option(remote_repository, installed_repository,
                        "enstaller")
        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 37
0
    def test_simple_no_install_needed(self):
        installed_entries = [
            dummy_installed_package_factory("nose", "1.3.0", 1)
        ]
        remote_entries = [dummy_repository_package_factory("nose", "1.3.0", 1)]
        config = Configuration()

        with mock.patch("enstaller.main.Enpkg.execute") as m:
            enpkg = create_prefix_with_eggs(config, self.prefix,
                                            installed_entries, remote_entries)
            install_req(enpkg, config, "nose", FakeOptions())
            m.assert_called_with([])
Ejemplo n.º 38
0
    def test_simple(self):
        # Given
        config = Configuration()
        session = Session.from_configuration(config)
        entries = [
            dummy_repository_package_factory("MKL", "10.3", 1),
            dummy_repository_package_factory("numpy", "1.8.0", 1,
                                             dependencies=["MKL 10.3"]),
        ]
        _mock_index(entries)
        r_output = textwrap.dedent("""\
            Resolving dependencies for numpy: numpy-1.8.0-1.egg
                mkl 10.3
        """)

        # When
        with mock_print() as m:
            query_platform(session, config.repositories, "numpy", custom_plat)

        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 39
0
    def test_simple(self, config):
        # Given
        self._mock_auth()
        entries = [
            dummy_repository_package_factory("MKL", "10.3", 1),
            dummy_repository_package_factory("numpy",
                                             "1.8.0",
                                             1,
                                             dependencies=["MKL 10.3"]),
        ]
        _mock_index(entries)
        r_output = textwrap.dedent("""\
            Resolving dependencies for numpy: numpy-1.8.0-1.egg
                mkl 10.3
        """)

        # When
        with mock_print() as m:
            main(["numpy"])

        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 40
0
    def test_whats_new_no_updates(self):
        # Given
        r_output = "No new version of any installed package is available\n"

        installed_entries = [
            dummy_installed_package_factory("numpy", "1.7.1", 2),
            dummy_installed_package_factory("scipy", "0.13.0", 1)
        ]
        remote_entries = [
            dummy_repository_package_factory("numpy", "1.7.1", 1),
            dummy_repository_package_factory("scipy", "0.12.0", 1)
        ]

        remote, installed = create_repositories(remote_entries,
                                                installed_entries)

        # When
        with mock_print() as m:
            whats_new(remote, installed)

        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 41
0
    def test_whats_new_no_updates(self):
        # Given
        r_output = "No new version of any installed package is available\n"

        installed_entries = [
            dummy_installed_package_factory("numpy", "1.7.1", 2),
            dummy_installed_package_factory("scipy", "0.13.0", 1)
        ]
        remote_entries = [
            dummy_repository_package_factory("numpy", "1.7.1", 1),
            dummy_repository_package_factory("scipy", "0.12.0", 1)
        ]

        remote, installed = create_repositories(remote_entries,
                                                installed_entries)

        # When
        with mock_print() as m:
            whats_new(remote, installed)

        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 42
0
    def test__latest_egg_simple(self):
        # Given
        packages = [
            dummy_repository_package_factory("swig", "1.3.40", 1),
            dummy_repository_package_factory("swig", "1.3.40", 2),
            dummy_repository_package_factory("swig", "2.0.1", 1),
        ]
        repository = self._repository_factory(packages)

        # When
        resolver = Resolve(repository)
        latest = resolver._latest_egg(Requirement("swig"))

        # Then
        self.assertEqual(latest, "swig-2.0.1-1.egg")

        # When
        resolver = Resolve(repository)
        latest = resolver._latest_egg(Requirement("swigg"))

        # Then
        self.assertIsNone(latest)
Ejemplo n.º 43
0
def remote_enstaller_available(versions):
    repository = Repository()
    for version in versions:
        package = dummy_repository_package_factory("enstaller", version, build=1)
        repository.add_package(package)

    def dec(f):
        @functools.wraps(f)
        def wrapper(*a, **kw):
            with mock.patch("enstaller.main.repository_factory",
                            return_value=repository):
                return f(*a, **kw)
        return wrapper
    return dec
Ejemplo n.º 44
0
    def test_simple(self):
        # Given
        config = Configuration()
        session = Session.from_configuration(config)
        entries = [
            dummy_repository_package_factory("MKL", "10.3", 1),
            dummy_repository_package_factory("numpy",
                                             "1.8.0",
                                             1,
                                             dependencies=["MKL 10.3"]),
        ]
        _mock_index(entries)
        r_output = textwrap.dedent("""\
            Resolving dependencies for numpy: numpy-1.8.0-1.egg
                mkl 10.3
        """)

        # When
        with mock_print() as m:
            query_platform(session, config.indices, "numpy", custom_plat)

        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 45
0
    def test_simple_no_install_needed(self):
        installed_entries = [
            dummy_installed_package_factory("nose", "1.3.0", 1)
        ]
        remote_entries = [
            dummy_repository_package_factory("nose", "1.3.0", 1)
        ]
        config = Configuration()

        with mock.patch("enstaller.main.Enpkg.execute") as m:
            enpkg = create_prefix_with_eggs(config, self.prefix,
                                            installed_entries, remote_entries)
            install_req(enpkg, config, "nose", FakeOptions())
            m.assert_called_with([])
Ejemplo n.º 46
0
    def test_update_check_new_available(self):
        # Given
        remote_entries = [
            dummy_repository_package_factory("dummy", "1.2.0", 1),
            dummy_repository_package_factory("dummy", "0.9.8", 1)
        ]
        installed_entries = [
            dummy_installed_package_factory("dummy", "1.0.1", 1)
        ]

        remote_repository, installed_repository = \
            self._create_repositories(remote_entries, installed_entries)

        # When
        updates, EPD_update = updates_check(remote_repository,
                                            installed_repository)

        # Then
        self.assertEqual(EPD_update, [])
        self.assertEqual(len(updates), 1)
        update0 = updates[0]
        assertCountEqual(self, update0.keys(), ["current", "update"])
        self.assertEqual(update0["current"].version, V("1.0.1-1"))
        self.assertEqual(update0["update"].version, V("1.2.0-1"))
Ejemplo n.º 47
0
    def test_update_check_new_available(self):
        # Given
        remote_entries = [
            dummy_repository_package_factory("dummy", "1.2.0", 1),
            dummy_repository_package_factory("dummy", "0.9.8", 1)
        ]
        installed_entries = [
            dummy_installed_package_factory("dummy", "1.0.1", 1)
        ]

        remote_repository, installed_repository = \
            self._create_repositories(remote_entries, installed_entries)

        # When
        updates, EPD_update = updates_check(remote_repository,
                                            installed_repository)

        # Then
        self.assertEqual(EPD_update, [])
        self.assertEqual(len(updates), 1)
        update0 = updates[0]
        assertCountEqual(self, update0.keys(), ["current", "update"])
        self.assertEqual(update0["current"].version, V("1.0.1-1"))
        self.assertEqual(update0["update"].version, V("1.2.0-1"))
Ejemplo n.º 48
0
    def test_install_missing_dependency(self):
        # Given
        entries = [
            dummy_repository_package_factory("numpy", "1.8.0", 2,
                                             dependencies=["MKL 10.3"]),
        ]

        repository = repository_factory(entries)
        installed_repository = Repository._from_prefixes([self.prefix])
        solver = Solver(repository, installed_repository)

        request = Request()
        request.install(Requirement("numpy"))

        # When/Then
        with self.assertRaises(MissingDependency):
            solver.resolve(request)
Ejemplo n.º 49
0
    def test_chained_override_update(self):
        """ Test update to package with latest version in lower prefix
        but an older version in primary prefix.
        """
        # Given
        l0_egg = NOSE_1_3_0
        l1_egg = NOSE_1_2_1

        nose = dummy_repository_package_factory(
            *split_eggname(os.path.basename(l0_egg))
        )

        repository = repository_factory([nose])

        l0 = os.path.join(self.prefix, 'l0')
        l1 = os.path.join(self.prefix, 'l1')
        makedirs(l0)
        makedirs(l1)

        l1_egg_meta_dir = os.path.join(l1, EGG_INFO, "nose")

        # Install latest version in l0
        EggInst(l0_egg, l0).install()

        # Install older version in l1
        EggInst(l1_egg, l1).install()

        installed_nose = InstalledPackageMetadata.from_meta_dir(
            l1_egg_meta_dir, prefix=l1
        )
        expected_actions = [('remove', installed_nose), ('install', nose)]

        installed_repository = Repository._from_prefixes([l1])
        solver = Solver(repository, installed_repository)

        request = Request()
        request.install(Requirement("nose"))

        # When
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions, expected_actions)
    def test_install_missing_dependency(self):
        # Given
        entries = [
            dummy_repository_package_factory("numpy",
                                             "1.8.0",
                                             2,
                                             dependencies=["MKL 10.3"]),
        ]

        repository = repository_factory(entries)
        installed_repository = Repository._from_prefixes([self.prefix])
        solver = Solver(repository, installed_repository)

        request = Request()
        request.install(Requirement("numpy"))

        # When/Then
        with self.assertRaises(MissingDependency):
            solver.resolve(request)
    def test_chained_override_update(self):
        """ Test update to package with latest version in lower prefix
        but an older version in primary prefix.
        """
        # Given
        l0_egg = NOSE_1_3_0
        l1_egg = NOSE_1_2_1

        expected_actions = [
            ('remove', os.path.basename(l1_egg)),
            ('install', os.path.basename(l0_egg)),
        ]

        entries = [
            dummy_repository_package_factory(
                *split_eggname(os.path.basename(l0_egg))),
        ]

        repository = repository_factory(entries)

        l0 = os.path.join(self.prefix, 'l0')
        l1 = os.path.join(self.prefix, 'l1')
        makedirs(l0)
        makedirs(l1)

        # Install latest version in l0
        EggInst(l0_egg, l0).install()
        # Install older version in l1
        EggInst(l1_egg, l1).install()

        repository = repository_factory(entries)
        installed_repository = Repository._from_prefixes([l1])
        solver = Solver(repository, installed_repository)

        request = Request()
        request.install(Requirement("nose"))

        # When
        actions = solver.resolve(request)

        # Then
        self.assertListEqual(actions, expected_actions)
Ejemplo n.º 52
0
    def test_update_check_epd(self):
        # Given
        remote_entries = [dummy_repository_package_factory("EPD", "7.3", 1)]
        installed_entries = [dummy_installed_package_factory("EPD", "7.2", 1)]

        remote_repository, installed_repository = \
            self._create_repositories(remote_entries, installed_entries)

        # When
        updates, EPD_update = updates_check(remote_repository,
                                            installed_repository)

        # Then
        self.assertEqual(updates, [])
        self.assertEqual(len(EPD_update), 1)

        epd_update0 = EPD_update[0]
        assertCountEqual(self, epd_update0.keys(), ["current", "update"])
        self.assertEqual(epd_update0["current"].version, V("7.2-1"))
        self.assertEqual(epd_update0["update"].version, V("7.3-1"))
Ejemplo n.º 53
0
    def test_whats_new_new_epd(self):
        # Given
        r_output = "EPD 7.3-2 is available. To update to it (with " \
                   "confirmation warning), run 'enpkg epd'.\n"
        installed_entries = [
            dummy_installed_package_factory("EPD", "7.2", 1),
        ]
        remote_entries = [
            dummy_repository_package_factory("EPD", "7.3", 2),
        ]

        remote, installed = create_repositories(remote_entries,
                                                installed_entries)

        # When
        with mock_print() as m:
            whats_new(remote, installed)

        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 54
0
    def test_whats_new_new_epd(self):
        # Given
        r_output = "EPD 7.3-2 is available. To update to it (with " \
                   "confirmation warning), run 'enpkg epd'.\n"
        installed_entries = [
            dummy_installed_package_factory("EPD", "7.2", 1),
        ]
        remote_entries = [
            dummy_repository_package_factory("EPD", "7.3", 2),
        ]

        remote, installed = create_repositories(remote_entries,
                                                installed_entries)

        # When
        with mock_print() as m:
            whats_new(remote, installed)

        # Then
        self.assertMultiLineEqual(m.value, r_output)
Ejemplo n.º 55
0
    def test_update_check_epd(self):
        # Given
        remote_entries = [dummy_repository_package_factory("EPD", "7.3", 1)]
        installed_entries = [dummy_installed_package_factory("EPD", "7.2", 1)]

        remote_repository, installed_repository = \
            self._create_repositories(remote_entries, installed_entries)

        # When
        updates, EPD_update = updates_check(remote_repository,
                                            installed_repository)

        # Then
        self.assertEqual(updates, [])
        self.assertEqual(len(EPD_update), 1)

        epd_update0 = EPD_update[0]
        assertCountEqual(self, epd_update0.keys(), ["current", "update"])
        self.assertEqual(epd_update0["current"].version, V("7.2-1"))
        self.assertEqual(epd_update0["update"].version, V("7.3-1"))
Ejemplo n.º 56
0
    def test_install_not_available(self):
        # Given
        config = Configuration()
        config.update(auth=FAKE_AUTH)

        nose = dummy_repository_package_factory("nose", "1.3.0", 1)
        nose.available = False
        repository = Repository()
        repository.add_package(nose)

        enpkg = Enpkg(repository,
                      mocked_session_factory(config.repository_cache),
                      [self.prefix])
        enpkg.execute = mock.Mock()

        # When/Then
        with mock.patch("enstaller.config.subscription_message") as \
                subscription_message:
            with self.assertRaises(SystemExit) as e:
                install_req(enpkg, config, "nose", FakeOptions())
            subscription_message.assert_called()
            self.assertEqual(e.exception.code, 1)