def test_invalid(self): # given egg_name = "nono" # When with self.assertRaises(ValueError): egg_name_to_name_version(egg_name)
def test_invalid(self): # given egg_name = "nono" # When with self.assertRaises(ValueError): egg_name_to_name_version(egg_name)
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)
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)
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)
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)
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])
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
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
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
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
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")
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 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")
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)
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)
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
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
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)
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
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
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