Пример #1
0
    def test_invalid(self):
        # given
        egg_name = "nono"

        # When
        with self.assertRaises(ValueError):
            egg_name_to_name_version(egg_name)
Пример #2
0
    def test_invalid(self):
        # given
        egg_name = "nono"

        # When
        with self.assertRaises(ValueError):
            egg_name_to_name_version(egg_name)
Пример #3
0
    def iter_fetch(self, egg, force=False):
        """ Fetch the given egg using streaming.

        Parameters
        ----------
        egg : str
            An egg filename (e.g. 'numpy-1.8.0-1.egg')
        force : bool
            If force is True, will download even if the file is already in the
            download cache.

        Example
        -------
        Simple usage::

            downloader = DownloadManager(...)
            response = downloader.iter_fetch(egg)
            for chunk in response:
                pass

        Note
        ----
        Iterating over the response already writes the file at the usual
        location. This is mostly useful when you want to control cancellation
        and/or follow download progress.
        """
        name, version = egg_name_to_name_version(egg)
        package_metadata = self._repository.find_package(name, version)

        path = self._path(package_metadata.key)

        return _CancelableResponse(path, package_metadata, self._fetcher,
                                   force)
Пример #4
0
 def _dependencies_from_egg(self, egg):
     """
     return the set of requirement objects listed by the given egg
     """
     name, version = egg_name_to_name_version(egg)
     package = self.repository.find_package(name, version)
     return set(Requirement(s) for s in package.dependencies)
Пример #5
0
    def _post_install(self):
        name, _ = egg_name_to_name_version(self._egg_path)
        meta_dir = meta_dir_from_prefix(self._top_prefix, name)
        package = InstalledPackageMetadata.from_meta_dir(meta_dir)

        self._top_installed_repository.add_package(package)
        self._installed_repository.add_package(package)
Пример #6
0
 def _dependencies_from_egg(self, egg):
     """
     return the set of requirement objects listed by the given egg
     """
     name, version = egg_name_to_name_version(egg)
     package = self.repository.find_package(name, version)
     return set(Requirement(s) for s in package.dependencies)
Пример #7
0
    def test_simple_scenario(self):
        egg = DUMMY_EGG
        r_actions = {1: [], 0: [("remove", os.path.basename(egg))]}
        config = Configuration()

        repository = Repository()
        package = RepositoryPackageMetadata.from_egg(egg)
        package.python = PY_VER
        repository.add_package(package)

        with open(egg, "rb") as fp:
            responses.add(responses.GET, package.source_url,
                          body=fp.read(), status=200,
                          content_type='application/json')

        session = Session(DummyAuthenticator(), config.repository_cache)

        enpkg = Enpkg(repository, session, prefixes=self.prefixes)
        actions = [("fetch", os.path.basename(egg)),
                   ("install", os.path.basename(egg))]
        enpkg.execute(actions)

        name, version = egg_name_to_name_version(egg)
        enpkg._installed_repository.find_package(name, version)

        for state in [0, 1]:
            actions = enpkg.revert_actions(state)
            self.assertEqual(actions, r_actions[state])
Пример #8
0
def _is_any_package_unavailable(remote_repository, actions):
    unavailables = []
    for opcode, egg in actions:
        if opcode == "install":
            name, version = egg_name_to_name_version(egg)
            package = remote_repository.find_package(name, version)
            if not package.available:
                unavailables.append(egg)
    return len(unavailables) > 0
Пример #9
0
 def _get_unsupported_packages(actions):
     ret = []
     for opcode, egg in actions:
         if opcode == "install":
             name, version = egg_name_to_name_version(egg)
             package = enpkg._remote_repository.find_package(name, version)
             if package.product == "pypi":
                 ret.append(package)
     return ret
Пример #10
0
 def _get_unsupported_packages(actions):
     ret = []
     for opcode, egg in actions:
         if opcode == "install":
             name, version = egg_name_to_name_version(egg)
             package = enpkg._remote_repository.find_package(name, version)
             if package.product == "pypi":
                 ret.append(package)
     return ret
Пример #11
0
def _is_any_package_unavailable(remote_repository, actions):
    unavailables = []
    for opcode, egg in actions:
        if opcode == "install":
            name, version = egg_name_to_name_version(egg)
            package = remote_repository.find_package(name, version)
            if not package.available:
                unavailables.append(egg)
    return len(unavailables) > 0
Пример #12
0
    def test_simple_uppercase(self):
        # given
        egg_name = "MKL-10.3-1.egg"

        # When
        name, version = egg_name_to_name_version(egg_name)

        # Then
        self.assertEqual(name, "mkl")
        self.assertEqual(version, "10.3-1")
Пример #13
0
    def test_simple(self):
        # given
        egg_name = "numpy-1.8.0-1.egg"

        # When
        name, version = egg_name_to_name_version(egg_name)

        # Then
        self.assertEqual(name, "numpy")
        self.assertEqual(version, "1.8.0-1")
Пример #14
0
    def test_simple_uppercase(self):
        # given
        egg_name = "MKL-10.3-1.egg"

        # When
        name, version = egg_name_to_name_version(egg_name)

        # Then
        self.assertEqual(name, "mkl")
        self.assertEqual(version, "10.3-1")
Пример #15
0
    def test_simple(self):
        # given
        egg_name = "numpy-1.8.0-1.egg"

        # When
        name, version = egg_name_to_name_version(egg_name)

        # Then
        self.assertEqual(name, "numpy")
        self.assertEqual(version, "1.8.0-1")
    def fetch_egg(self, egg, force=False, execution_aborted=None):
        """
        fetch an egg, i.e. copy or download the distribution into local dir
        force: force download or copy if MD5 mismatches
        execution_aborted: a threading.Event object which signals when the execution
            needs to be aborted, or None, if we don't want to abort the fetching at all.
        """
        name, version = egg_name_to_name_version(egg)
        package_metadata = self._repository.find_package(name, version)

        if self._needs_to_download(package_metadata, force):
            self._fetch(package_metadata, execution_aborted)
Пример #17
0
    def iter_execute(self):
        context = self._downloader.iter_fetch(self._egg, self._force)
        if not context.needs_to_download:
            return

        self._current_context = context

        name, version = egg_name_to_name_version(self._egg)
        package_metadata = self._remote_repository.find_package(name, version)
        progress = self._progress_bar_factory(package_metadata.key,
                                              package_metadata.size)

        with progress:
            self._progress = progress
            for chunk_size in context.iter_content():
                yield len(chunk_size)
Пример #18
0
    def _filter_installed_eggs(self, eggs):
        """ Filter out already installed eggs from the given egg list.

        Parameters
        ----------
        eggs: seq
            List of egg filenames
        """
        filtered_eggs = []
        for egg in eggs:
            name, _ = egg_name_to_name_version(egg)
            for installed in self._top_installed_repository.find_packages(
                    name):
                if installed.key == egg:
                    break
            else:
                filtered_eggs.append(egg)
        return filtered_eggs
Пример #19
0
    def revert_actions(self, arg):
        """
        Calculate the actions necessary to revert to a given state, the
        argument may be one of:
          * complete set of eggs, i.e. a set of egg file names
          * revision number (negative numbers allowed)
        """
        h = History(self.top_prefix)
        h.update()
        if isinstance(arg, set):
            state = arg
        else:
            try:
                rev = int(arg)
            except (TypeError, ValueError):
                raise EnpkgError("Invalid argument: integer expected, "
                                 "got: {0!r}".format(arg))
            try:
                state = h.get_state(rev)
            except IndexError:
                raise EnpkgError("Error: no such revision: %r" % arg)

        curr = h.get_state()
        if state == curr:
            return []

        res = []
        for egg in curr - state:
            if egg.startswith('enstaller'):
                continue
            res.append(('remove', egg))

        for egg in state - curr:
            if egg.startswith('enstaller'):
                continue
            if not isfile(join(self._downloader.cache_directory, egg)):
                eggname, version = egg_name_to_name_version(egg)
                try:
                    self._remote_repository.find_package(eggname, version)
                    res.append(('fetch_0', egg))
                except NoSuchPackage:
                    raise EnpkgError("cannot revert -- missing %r" % egg)
            res.append(('install', egg))
        return res
Пример #20
0
    def iter_execute(self):
        installer = EggInst(self._egg, self._top_prefix, False)
        remover = installer._egginst_remover
        if not remover.is_installed:
            logger.error("Error: can't find meta data for: %r", remover.cname)
            return
        name, version = egg_name_to_name_version(self._egg)
        package = self._top_installed_repository.find_package(name, version)

        self._progress = self._progress_factory(installer.fn,
                                                remover.installed_size,
                                                len(remover.files))

        with self._progress:
            for filename in remover.remove_iterator():
                yield 1

        self._top_installed_repository.delete_package(package)
        self._installed_repository.delete_package(package)
Пример #21
0
 def _name_from_egg(self, egg):
     """
     return the project name for a given egg (from it's meta data)
     """
     name, version = egg_name_to_name_version(egg)
     return self.repository.find_package(name, version).name
Пример #22
0
 def _extract_extra_info(self):
     name, version = egg_name_to_name_version(self._egg)
     package = self._remote_repository.find_package(name, version)
     return package.s3index_data
Пример #23
0
 def _name_from_egg(self, egg):
     """
     return the project name for a given egg (from it's meta data)
     """
     name, version = egg_name_to_name_version(egg)
     return self.repository.find_package(name, version).name