def test_find_packages_sorting(self): # Given entries = [ dummy_installed_package_factory("numpy", "1.6.1", 1), dummy_installed_package_factory("numpy", "1.8.0", 2), dummy_installed_package_factory("numpy", "1.7.1", 1), ] repository = Repository() for entry in entries: repository.add_package(entry) r_versions = [ EnpkgVersion.from_string(v) for v in ("1.6.1-1", "1.7.1-1", "1.8.0-2") ] # When packages = repository.find_packages("numpy") # Then self.assertEqual(len(packages), 3) self.assertEqual([p.version for p in packages], r_versions) with self.assertWarns(DeprecationWarning): deprecated_packages = repository.find_sorted_packages("numpy") self.assertEqual([p.version for p in deprecated_packages], r_versions)
def repository_factory(session, indices, quiet=False, raise_on_error=False): unavailables = [] full_repository = Repository() _write_and_flush("Fetching indices: ", quiet) with ThreadPoolExecutor(max_workers=4) as executor: tasks = [] for url, store_location in indices: task = executor.submit(_fetch_repository, session, url, store_location, raise_on_error) tasks.append(task) for task in as_completed(tasks): repository_or_none = task.result() if repository_or_none is None: unavailables.append(store_location) else: for package in repository_or_none.iter_packages(): full_repository.add_package(package) _write_and_flush(".", quiet) _write_and_flush("\n\n", quiet) if len(unavailables) > 0 and not quiet: _print_unavailables_warning(unavailables) return full_repository
def repository_factory(session, repository_infos, quiet=False, raise_on_error=False): unavailables = [] full_repository = Repository() _write_and_flush("Fetching indices: ", quiet) with ThreadPoolExecutor(max_workers=4) as executor: tasks = {} for repository_info in repository_infos: task = executor.submit(_fetch_repository, session, repository_info, raise_on_error) tasks[task] = repository_info for task in as_completed(tasks): repository_or_none = task.result() if repository_or_none is None: unavailables.append(tasks[task]) else: for package in repository_or_none.iter_packages(): full_repository.add_package(package) _write_and_flush(".", quiet) _write_and_flush("\n\n", quiet) if len(unavailables) > 0 and not quiet: _print_unavailables_warning(unavailables) return full_repository
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)
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 repository_factory(session, indices): """ Create a repository from legacy indices. Parameters ---------- session : Session A :py:class:`~enstaller.session.Session` instance. indices : list Sequence of (index_url, store_name) pairs, e.g. the indices property of :py:class:`~enstaller.config.Configuration` instances. Note ---- This does not use etag caching nor write anything in sys.stdout. If you want to use etag caching, simply do:: with session.etag(): repository = repository_factory(session, ...) """ repository = Repository() for url, store_location in indices: resp = session.fetch(url) json_data = resp.json() for package in parse_index(json_data, store_location): repository.add_package(package) return repository
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)
def repository_factory_from_egg(filenames): repository = Repository() for filename in filenames: path = os.path.join(_EGGINST_COMMON_DATA, filename) package = RemotePackageMetadata.from_egg(path) repository.add_package(package) return repository
def repository_factory(package_names, repository_info, reference_packages): repository = Repository() for package_name in package_names: package = reference_packages[package_name] package = RepositoryPackageMetadata.from_package(package, repository_info) repository.add_package(package) return repository
def _downloader_factory(self, paths): repository = Repository() for path in paths: package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) return (_DownloadManager(Session(DummyAuthenticator(), self.tempdir), repository), repository)
def _create_store_and_repository(self, eggs): repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) return repository
def _create_repositories(self, entries, installed_entries): repository = Repository() for entry in entries: repository.add_package(entry) installed_repository = Repository() for entry in installed_entries: installed_repository.add_package(entry) return repository, installed_repository
def _create_repositories(self, entries, installed_entries): repository = Repository() for entry in entries: repository.add_package(entry) installed_repository = Repository() for entry in installed_entries: installed_repository.add_package(entry) return repository, installed_repository
def _install_eggs(self, paths): repository = Repository() for path in paths: package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) for path in paths: action = InstallAction(path, self.top_prefix, repository, self.top_installed_repository, self.installed_repository, os.path.dirname(path)) action.execute()
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")])
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
def create_repositories(remote_entries=None, installed_entries=None): if remote_entries is None: remote_entries = [] if installed_entries is None: installed_entries = [] remote_repository = Repository() for remote_entry in remote_entries: remote_repository.add_package(remote_entry) installed_repository = Repository() for installed_entry in installed_entries: installed_repository.add_package(installed_entry) return remote_repository, installed_repository
def create_repositories(remote_entries=None, installed_entries=None): if remote_entries is None: remote_entries = [] if installed_entries is None: installed_entries = [] remote_repository = Repository() for remote_entry in remote_entries: remote_repository.add_package(remote_entry) installed_repository = Repository() for installed_entry in installed_entries: installed_repository.add_package(installed_entry) return remote_repository, installed_repository
def test_fetch_invalid_md5(self): # Given filename = "nose-1.3.0-1.egg" path = os.path.join(_EGGINST_COMMON_DATA, filename) repository = Repository() package = RepositoryPackageMetadata.from_egg(path) package.md5 = "a" * 32 repository.add_package(package) downloader = _DownloadManager(mocked_session_factory(self.tempdir), repository) with self.assertRaises(InvalidChecksum): downloader.fetch(filename)
def _retry_common_setup(self): store_url = "http://acme.com" repository_info = OldstyleRepositoryInfo(store_url) filename = "nose-1.3.0-1.egg" path = os.path.join(_EGGINST_COMMON_DATA, filename) repository = Repository() package = RemotePackageMetadata.from_egg(path, repository_info) repository.add_package(package) downloader = _DownloadManager(mocked_session_factory(self.tempdir), repository) return path, downloader, repository
def _retry_common_setup(self): store_location = "http://acme.com/" filename = "nose-1.3.0-1.egg" path = os.path.join(_EGGINST_COMMON_DATA, filename) repository = Repository() package = RepositoryPackageMetadata.from_egg(path, store_location=store_location) repository.add_package(package) downloader = _DownloadManager(mocked_session_factory(self.tempdir), repository) return path, downloader, repository
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)] )
def test_print_install_time(self): with mkdtemp(): installed_entries = [ dummy_installed_package_factory("dummy", "1.0.1", 1) ] installed_repository = Repository() for package in installed_entries: installed_repository.add_package(package) self.assertRegexpMatches( install_time_string(installed_repository, "dummy"), "dummy-1.0.1-1.egg was installed on:") self.assertEqual( install_time_string(installed_repository, "ddummy"), "")
def test_print_install_time(self): with mkdtemp(): installed_entries = [dummy_installed_package_factory("dummy", "1.0.1", 1)] installed_repository = Repository() for package in installed_entries: installed_repository.add_package(package) self.assertRegexpMatches(install_time_string(installed_repository, "dummy"), "dummy-1.0.1-1.egg was installed on:") self.assertEqual(install_time_string(installed_repository, "ddummy"), "")
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")])
def test_iter_most_recent_packages(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) # When metadata = list(repository.iter_most_recent_packages()) # Then self.assertEqual(len(metadata), 1) self.assertEqual(metadata[0].version, EnpkgVersion.from_string("1.3.0-1"))
def test_find_packages_invalid_versions(self): # Given entries = [ dummy_installed_package_factory("numpy", "1.6.1", 1), dummy_installed_package_factory("numpy", "1.8k", 2), ] repository = Repository() for entry in entries: repository.add_package(entry) # When packages = repository.find_packages("numpy") # Then self.assertEqual(len(packages), 2) assertCountEqual(self, packages, entries)
def test_find_packages_invalid_versions(self): # Given entries = [ dummy_installed_package_factory("numpy", "1.6.1", 1), dummy_installed_package_factory("numpy", "1.8k", 2), ] repository = Repository() for entry in entries: repository.add_package(entry) # When packages = repository.find_packages("numpy") # Then self.assertEqual(len(packages), 2) assertCountEqual(self, packages, entries)
def test_iter_most_recent_packages(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) # When metadata = list(repository.iter_most_recent_packages()) # Then self.assertEqual(len(metadata), 1) self.assertEqual(metadata[0].version, EnpkgVersion.from_string("1.3.0-1"))
def test_sorted_insertion(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() # When for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RemotePackageMetadata.from_egg(path) repository.add_package(package) # Then self.assertEqual([m.version for m in repository._name_to_packages["nose"]], [EnpkgVersion.from_string("1.2.1-1"), EnpkgVersion.from_string("1.3.0-1")])
def test_iter_protocol(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RemotePackageMetadata.from_egg(path) repository.add_package(package) # When metadata = list(iter(repository)) # Then self.assertEqual(len(metadata), 2) self.assertEqual(set(m.version for m in metadata), set([EnpkgVersion.from_string("1.2.1-1"), EnpkgVersion.from_string("1.3.0-1")]))
def test_delete_simple(self): # Given eggs = ["flake8-2.0.0-2.egg", "nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") to_remove = PackageMetadata.from_egg(path) # When repository.delete_package(to_remove) # Then assertCountEqual(self, [p.key for p in repository.iter_packages()], ["flake8-2.0.0-2.egg", "nose-1.2.1-1.egg"])
def test_sorted_packages_invalid(self): # Given entries = [ dummy_installed_package_factory("numpy", "1.6.1", 1), dummy_installed_package_factory("numpy", "1.8k", 2), ] repository = Repository() for entry in entries: repository.add_package(entry) # When packages = repository.find_sorted_packages("numpy") # Then self.assertEqual(len(packages), 2) assertCountEqual( self, [p.version for p in packages], [EnpkgVersion.from_string(v) for v in ("1.6.1-1", "1.8k-2")])
def test_delete_simple(self): # Given eggs = ["flake8-2.0.0-2.egg", "nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") to_remove = PackageMetadata.from_egg(path) # When repository.delete_package(to_remove) # Then assertCountEqual(self, [p.key for p in repository.iter_packages()], ["flake8-2.0.0-2.egg", "nose-1.2.1-1.egg"])
def test_sorted_packages_invalid(self): # Given entries = [ dummy_installed_package_factory("numpy", "1.6.1", 1), dummy_installed_package_factory("numpy", "1.8k", 2), ] repository = Repository() for entry in entries: repository.add_package(entry) # When packages = repository.find_sorted_packages("numpy") # Then self.assertEqual(len(packages), 2) assertCountEqual(self, [p.version for p in packages], [EnpkgVersion.from_string(v) for v in ("1.6.1-1", "1.8k-2")])
def test_imports_option_sys_only(self): # Given r_output = textwrap.dedent("""\ Name Version Location ============================================================ dummy 1.0.1-1 sys """) repository = Repository() metadata = InstalledPackageMetadata.from_egg(DUMMY_EGG, "random string", sys.prefix) repository.add_package(metadata) # When with mock_print() as m: imports_option(repository) # Then self.assertMultiLineEqual(m.value, r_output)
def test_fetch_unauthorized(self): # Given filename = "nose-1.3.0-1.egg" url = "http://api.enthought.com/eggs/yoyo/" repository = Repository() path = os.path.join(_EGGINST_COMMON_DATA, filename) package = RepositoryPackageMetadata.from_egg(path, url) repository.add_package(package) responses.add(responses.GET, url + filename, body='{"error": "forbidden"}', status=403) downloader = _DownloadManager(mocked_session_factory(self.tempdir), repository) # When/Then with self.assertRaises(requests.exceptions.HTTPError): downloader.fetch(filename)
def test_imports_option_sys_only(self): # Given r_output = textwrap.dedent("""\ Name Version Location ============================================================ dummy 1.0.1-1 sys """) repository = Repository() metadata = InstalledPackageMetadata.from_egg(DUMMY_EGG, "random string", sys.prefix) repository.add_package(metadata) # When with mock_print() as m: imports_option(repository) # Then self.assertMultiLineEqual(m.value, r_output)
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)
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)
class TestRepository(unittest.TestCase): def setUp(self): eggs = [ "dummy-1.0.1-1.egg", "dummy_with_appinst-1.0.0-1.egg", "dummy_with_entry_points-1.0.0-1.egg", "dummy_with_proxy-1.3.40-3.egg", "dummy_with_proxy_scripts-1.0.0-1.egg", "dummy_with_proxy_softlink-1.0.0-1.egg", "nose-1.2.1-1.egg", "nose-1.3.0-1.egg", "nose-1.3.0-2.egg", ] self.repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) self.repository.add_package(package) def test_ctor(self): # When repository = Repository() # Then self.assertEqual(len(repository), 0) # Given eggs = [ "dummy-1.0.1-1.egg", "dummy_with_appinst-1.0.0-1.egg", "dummy_with_entry_points-1.0.0-1.egg", "dummy_with_proxy-1.3.40-3.egg", "dummy_with_proxy_scripts-1.0.0-1.egg", "dummy_with_proxy_softlink-1.0.0-1.egg", "nose-1.2.1-1.egg", "nose-1.3.0-1.egg", "nose-1.3.0-2.egg", ] paths = (os.path.join(_EGGINST_COMMON_DATA, egg) for egg in eggs) packages = [RepositoryPackageMetadata.from_egg(path) for path in paths] # When repository = Repository(packages) # Then self.assertEqual(len(repository), len(eggs)) def test_find_package(self): # Given path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") # When metadata = self.repository.find_package("nose", "1.3.0-1") # Then self.assertEqual(metadata.key, "nose-1.3.0-1.egg") self.assertEqual(metadata.name, "nose") self.assertEqual(metadata.version, EnpkgVersion.from_string("1.3.0-1")) self.assertEqual(metadata.packages, []) self.assertEqual(metadata.python, "2.7") self.assertEqual(metadata.available, True) self.assertEqual(metadata.store_location, "{0}/".format(path_to_uri(_EGGINST_COMMON_DATA))) self.assertEqual(metadata.size, os.path.getsize(path)) self.assertEqual(metadata.md5, compute_md5(path)) # Given path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-2.egg") # When metadata = self.repository.find_package("nose", "1.3.0-2") # Then self.assertEqual(metadata.key, "nose-1.3.0-2.egg") self.assertEqual(metadata.name, "nose") self.assertEqual(metadata.version, EnpkgVersion.from_string("1.3.0-2")) def test_find_unavailable_package(self): # Given/When/Then with self.assertRaises(NoSuchPackage): self.repository.find_package("nono", "1.4.0-1") def test_find_packages(self): V = EnpkgVersion.from_string # Given/When metadata = list(self.repository.find_packages("nose")) metadata = sorted(metadata, key=operator.attrgetter("version")) # Then self.assertEqual(len(metadata), 3) self.assertEqual(metadata[0].version, V("1.2.1-1")) self.assertEqual(metadata[1].version, V("1.3.0-1")) self.assertEqual(metadata[2].version, V("1.3.0-2")) def test_find_packages_with_version(self): # Given/When metadata = list(self.repository.find_packages("nose", "1.3.0-1")) # Then self.assertEqual(len(metadata), 1) self.assertEqual(metadata[0].version, EnpkgVersion.from_string("1.3.0-1")) def test_has_package(self): # Given version = EnpkgVersion.from_string("1.3.0-1") available_package = PackageMetadata("nose-1.3.0-1.egg", "nose", version, [], "2.7") version = EnpkgVersion.from_string("1.4.0-1") unavailable_package = PackageMetadata("nose-1.4.0-1.egg", "nose", version, [], "2.7") # When/Then self.assertTrue(self.repository.has_package(available_package)) self.assertFalse(self.repository.has_package(unavailable_package)) def test_iter_most_recent_packages(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) # When metadata = list(repository.iter_most_recent_packages()) # Then self.assertEqual(len(metadata), 1) self.assertEqual(metadata[0].version, EnpkgVersion.from_string("1.3.0-1")) def test_iter_packages(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) # When metadata = list(repository.iter_packages()) # Then self.assertEqual(len(metadata), 2) self.assertEqual( set(m.version for m in metadata), set([ EnpkgVersion.from_string("1.2.1-1"), EnpkgVersion.from_string("1.3.0-1") ])) @slow def test_from_prefix(self): # Given path = DUMMY_EGG with mkdtemp() as tempdir: create_venv(tempdir) installer = EggInst(path, prefix=tempdir) installer.install() # When repository = Repository._from_prefixes([tempdir]) # Then packages = repository.find_packages("dummy") self.assertEqual(len(packages), 1) self.assertEqual(packages[0].name, "dummy") def test_from_empty_prefix(self): # Given with mkdtemp() as tempdir: # When repository = Repository._from_prefixes([tempdir]) # Then self.assertEqual(len(list(repository.iter_packages())), 0) def test_delete_non_existing(self): # Given path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") to_remove = PackageMetadata.from_egg(path) repository = Repository() # When/Then with self.assertRaises(NoSuchPackage): repository.delete_package(to_remove) def test_delete_simple(self): # Given eggs = ["flake8-2.0.0-2.egg", "nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") to_remove = PackageMetadata.from_egg(path) # When repository.delete_package(to_remove) # Then assertCountEqual(self, [p.key for p in repository.iter_packages()], ["flake8-2.0.0-2.egg", "nose-1.2.1-1.egg"]) def test_find_package_from_requirement_name_only(self): # Given requirement = Requirement.from_anything("nose") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.3.0-2") def test_find_package_from_requirement_name_and_version(self): # Given requirement = Requirement.from_anything("nose 1.3.0") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.3.0-2") # Given requirement = Requirement.from_anything("nose 1.2.1") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.2.1-1") def test_find_package_from_requirement_missing(self): # Given requirement_strings = ["fubar", "nose 1.3.1"] # When for requirement_string in requirement_strings: requirement = Requirement.from_anything(requirement_string) with self.assertRaises(NoSuchPackage): self.repository.find_package_from_requirement(requirement) def test_find_package_from_requirement_all(self): # Given requirement = Requirement.from_anything("nose 1.3.0-1") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.3.0-1") # Given requirement = Requirement.from_anything("nose 1.2.1-1") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.2.1-1")
def _repository_factory(self, packages): repository = Repository() for p in packages: repository.add_package(p) return repository
def _old_style_indices_to_repository(indices, python_version=PY_VER): repository = Repository() for index in indices: for package in _old_style_index_to_packages(index, python_version): repository.add_package(package) return repository
def repository_factory(entries): repository = Repository() for entry in entries: repository.add_package(entry) return repository
class TestRepository(unittest.TestCase): def setUp(self): eggs = [ "dummy-1.0.1-1.egg", "dummy_with_appinst-1.0.0-1.egg", "dummy_with_entry_points-1.0.0-1.egg", "dummy_with_proxy-1.3.40-3.egg", "dummy_with_proxy_scripts-1.0.0-1.egg", "dummy_with_proxy_softlink-1.0.0-1.egg", "nose-1.2.1-1.egg", "nose-1.3.0-1.egg", "nose-1.3.0-2.egg", ] self.repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) self.repository.add_package(package) def test_ctor(self): # When repository = Repository() # Then self.assertEqual(len(repository), 0) # Given eggs = [ "dummy-1.0.1-1.egg", "dummy_with_appinst-1.0.0-1.egg", "dummy_with_entry_points-1.0.0-1.egg", "dummy_with_proxy-1.3.40-3.egg", "dummy_with_proxy_scripts-1.0.0-1.egg", "dummy_with_proxy_softlink-1.0.0-1.egg", "nose-1.2.1-1.egg", "nose-1.3.0-1.egg", "nose-1.3.0-2.egg", ] paths = (os.path.join(_EGGINST_COMMON_DATA, egg) for egg in eggs) packages = [RepositoryPackageMetadata.from_egg(path) for path in paths] # When repository = Repository(packages) # Then self.assertEqual(len(repository), len(eggs)) def test_find_package(self): # Given path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") # When metadata = self.repository.find_package("nose", "1.3.0-1") # Then self.assertEqual(metadata.key, "nose-1.3.0-1.egg") self.assertEqual(metadata.name, "nose") self.assertEqual(metadata.version, EnpkgVersion.from_string("1.3.0-1")) self.assertEqual(metadata.packages, []) self.assertEqual(metadata.python, "2.7") self.assertEqual(metadata.available, True) self.assertEqual(metadata.store_location, "{0}/".format(path_to_uri(_EGGINST_COMMON_DATA))) self.assertEqual(metadata.size, os.path.getsize(path)) self.assertEqual(metadata.md5, compute_md5(path)) # Given path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-2.egg") # When metadata = self.repository.find_package("nose", "1.3.0-2") # Then self.assertEqual(metadata.key, "nose-1.3.0-2.egg") self.assertEqual(metadata.name, "nose") self.assertEqual(metadata.version, EnpkgVersion.from_string("1.3.0-2")) def test_find_unavailable_package(self): # Given/When/Then with self.assertRaises(NoSuchPackage): self.repository.find_package("nono", "1.4.0-1") def test_find_packages(self): V = EnpkgVersion.from_string # Given/When metadata = list(self.repository.find_packages("nose")) metadata = sorted(metadata, key=operator.attrgetter("version")) # Then self.assertEqual(len(metadata), 3) self.assertEqual(metadata[0].version, V("1.2.1-1")) self.assertEqual(metadata[1].version, V("1.3.0-1")) self.assertEqual(metadata[2].version, V("1.3.0-2")) def test_find_packages_with_version(self): # Given/When metadata = list(self.repository.find_packages("nose", "1.3.0-1")) # Then self.assertEqual(len(metadata), 1) self.assertEqual(metadata[0].version, EnpkgVersion.from_string("1.3.0-1")) def test_has_package(self): # Given version = EnpkgVersion.from_string("1.3.0-1") available_package = PackageMetadata("nose-1.3.0-1.egg", "nose", version, [], "2.7") version = EnpkgVersion.from_string("1.4.0-1") unavailable_package = PackageMetadata("nose-1.4.0-1.egg", "nose", version, [], "2.7") # When/Then self.assertTrue(self.repository.has_package(available_package)) self.assertFalse(self.repository.has_package(unavailable_package)) def test_iter_most_recent_packages(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) # When metadata = list(repository.iter_most_recent_packages()) # Then self.assertEqual(len(metadata), 1) self.assertEqual(metadata[0].version, EnpkgVersion.from_string("1.3.0-1")) def test_iter_packages(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) # When metadata = list(repository.iter_packages()) # Then self.assertEqual(len(metadata), 2) self.assertEqual(set(m.version for m in metadata), set([EnpkgVersion.from_string("1.2.1-1"), EnpkgVersion.from_string("1.3.0-1")])) @slow def test_from_prefix(self): # Given path = DUMMY_EGG with mkdtemp() as tempdir: create_venv(tempdir) installer = EggInst(path, prefix=tempdir) installer.install() # When repository = Repository._from_prefixes([tempdir]) # Then packages = repository.find_packages("dummy") self.assertEqual(len(packages), 1) self.assertEqual(packages[0].name, "dummy") def test_from_empty_prefix(self): # Given with mkdtemp() as tempdir: # When repository = Repository._from_prefixes([tempdir]) # Then self.assertEqual(len(list(repository.iter_packages())), 0) def test_delete_non_existing(self): # Given path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") to_remove = PackageMetadata.from_egg(path) repository = Repository() # When/Then with self.assertRaises(NoSuchPackage): repository.delete_package(to_remove) def test_delete_simple(self): # Given eggs = ["flake8-2.0.0-2.egg", "nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RepositoryPackageMetadata.from_egg(path) repository.add_package(package) path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") to_remove = PackageMetadata.from_egg(path) # When repository.delete_package(to_remove) # Then assertCountEqual(self, [p.key for p in repository.iter_packages()], ["flake8-2.0.0-2.egg", "nose-1.2.1-1.egg"]) def test_find_package_from_requirement_name_only(self): # Given requirement = Requirement.from_anything("nose") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.3.0-2") def test_find_package_from_requirement_name_and_version(self): # Given requirement = Requirement.from_anything("nose 1.3.0") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.3.0-2") # Given requirement = Requirement.from_anything("nose 1.2.1") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.2.1-1") def test_find_package_from_requirement_missing(self): # Given requirement_strings = ["fubar", "nose 1.3.1"] # When for requirement_string in requirement_strings: requirement = Requirement.from_anything(requirement_string) with self.assertRaises(NoSuchPackage): self.repository.find_package_from_requirement(requirement) def test_find_package_from_requirement_all(self): # Given requirement = Requirement.from_anything("nose 1.3.0-1") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.3.0-1") # Given requirement = Requirement.from_anything("nose 1.2.1-1") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.2.1-1")
class TestRepository(unittest.TestCase): def setUp(self): eggs = [ "dummy-1.0.1-1.egg", "dummy_with_appinst-1.0.0-1.egg", "dummy_with_entry_points-1.0.0-1.egg", "dummy_with_proxy-1.3.40-3.egg", "dummy_with_proxy_scripts-1.0.0-1.egg", "dummy_with_proxy_softlink-1.0.0-1.egg", "nose-1.2.1-1.egg", "nose-1.3.0-1.egg", "nose-1.3.0-2.egg", ] self.repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RemotePackageMetadata.from_egg(path) self.repository.add_package(package) @mock_brood_repository_indices({}, ["enthought/free"]) def test_from_repository_infos_empty(self): # Given repository_info = BroodRepositoryInfo("https://api.enthought.com", "enthought/free") config = Configuration(use_webservice=False, auth=("nono", "password")) config._store_kind = STORE_KIND_BROOD session = Session.authenticated_from_configuration(config) # When repository = Repository.from_repository_infos( session, (repository_info,) ) # Then self.assertEqual(len(repository), 0) @mock_brood_repository_indices( SIMPLE_INDEX, ["enthought/free", "enthought/commercial"] ) def test_from_repository_infos_nonempty(self): # Given repository_infos = ( BroodRepositoryInfo("https://api.enthought.com", "enthought/free"), BroodRepositoryInfo( "https://api.enthought.com", "enthought/commercial" ), ) config = Configuration(use_webservice=False, auth=("nono", "password")) config._store_kind = STORE_KIND_BROOD session = Session.authenticated_from_configuration(config) # When repository = Repository.from_repository_infos(session, repository_infos) # Then self.assertEqual(len(repository), 2) self.assertEqual(len(repository.find_packages("nose")), 2) def test_ctor(self): # When repository = Repository() # Then self.assertEqual(len(repository), 0) # Given eggs = [ "dummy-1.0.1-1.egg", "dummy_with_appinst-1.0.0-1.egg", "dummy_with_entry_points-1.0.0-1.egg", "dummy_with_proxy-1.3.40-3.egg", "dummy_with_proxy_scripts-1.0.0-1.egg", "dummy_with_proxy_softlink-1.0.0-1.egg", "nose-1.2.1-1.egg", "nose-1.3.0-1.egg", "nose-1.3.0-2.egg", ] paths = (os.path.join(_EGGINST_COMMON_DATA, egg) for egg in eggs) packages = [RemotePackageMetadata.from_egg(path) for path in paths] # When repository = Repository(packages) # Then self.assertEqual(len(repository), len(eggs)) def test_find_package(self): # Given path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") # When metadata = self.repository.find_package("nose", "1.3.0-1") # Then self.assertEqual(metadata.key, "nose-1.3.0-1.egg") self.assertEqual(metadata.name, "nose") self.assertEqual(metadata.version, EnpkgVersion.from_string("1.3.0-1")) self.assertEqual(metadata.dependencies, frozenset()) self.assertEqual(metadata.python, "2.7") self.assertEqual(metadata.available, True) self.assertEqual(metadata.repository_info, FSRepositoryInfo(path_to_uri(_EGGINST_COMMON_DATA))) self.assertEqual(metadata.size, os.path.getsize(path)) self.assertEqual(metadata.md5, compute_md5(path)) # Given path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-2.egg") # When metadata = self.repository.find_package("nose", "1.3.0-2") # Then self.assertEqual(metadata.key, "nose-1.3.0-2.egg") self.assertEqual(metadata.name, "nose") self.assertEqual(metadata.version, EnpkgVersion.from_string("1.3.0-2")) def test_find_unavailable_package(self): # Given/When/Then with self.assertRaises(NoSuchPackage): self.repository.find_package("nono", "1.4.0-1") def test_find_packages(self): V = EnpkgVersion.from_string # Given/When metadata = list(self.repository.find_packages("nose")) metadata = sorted(metadata, key=operator.attrgetter("version")) # Then self.assertEqual(len(metadata), 3) self.assertEqual(metadata[0].version, V("1.2.1-1")) self.assertEqual(metadata[1].version, V("1.3.0-1")) self.assertEqual(metadata[2].version, V("1.3.0-2")) def test_find_packages_with_version(self): # Given/When metadata = list(self.repository.find_packages("nose", "1.3.0-1")) # Then self.assertEqual(len(metadata), 1) self.assertEqual(metadata[0].version, EnpkgVersion.from_string("1.3.0-1")) def test_has_package(self): # Given python = RUNNING_PYTHON version = EnpkgVersion.from_string("1.3.0-1") available_package = PackageMetadata("nose-1.3.0-1.egg", "nose", version, [], python) version = EnpkgVersion.from_string("1.4.0-1") unavailable_package = PackageMetadata("nose-1.4.0-1.egg", "nose", version, [], python) # When/Then self.assertTrue(self.repository.has_package(available_package)) self.assertFalse(self.repository.has_package(unavailable_package)) def test_iter_most_recent_packages(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RemotePackageMetadata.from_egg(path) repository.add_package(package) # When metadata = list(repository.iter_most_recent_packages()) # Then self.assertEqual(len(metadata), 1) self.assertEqual(metadata[0].version, EnpkgVersion.from_string("1.3.0-1")) def test_iter_protocol(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RemotePackageMetadata.from_egg(path) repository.add_package(package) # When metadata = list(iter(repository)) # Then self.assertEqual(len(metadata), 2) self.assertEqual(set(m.version for m in metadata), set([EnpkgVersion.from_string("1.2.1-1"), EnpkgVersion.from_string("1.3.0-1")])) def test_iter_packages(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RemotePackageMetadata.from_egg(path) repository.add_package(package) # When metadata = list(repository.iter_packages()) # Then self.assertEqual(len(metadata), 2) self.assertEqual(set(m.version for m in metadata), set([EnpkgVersion.from_string("1.2.1-1"), EnpkgVersion.from_string("1.3.0-1")])) @slow def test_from_prefix(self): # Given path = DUMMY_EGG with mkdtemp() as tempdir: create_venv(tempdir) installer = EggInst(path, prefix=tempdir) installer.install() # When repository = Repository._from_prefixes([tempdir]) # Then packages = repository.find_packages("dummy") self.assertEqual(len(packages), 1) self.assertEqual(packages[0].name, "dummy") def test_from_prefix_normalization(self): # Given r_installed_metadata = { "PyYAML-3.11-1.egg": { "arch": "amd64", "build": 1, "key": "PyYAML-3.11-1.egg", "md5": "4d1df29c87bb101747b5a774b720f543", "name": "pyyaml", "osdist": "RedHat_5", "packages": [ "libYAML 0.1.4" ], "platform": "linux2", "product": "free", "python": "2.7", "size": 183069, "type": "egg", "version": "3.11" }, "libYAML-0.1.4-1.egg": { "arch": "amd64", "build": 1, "key": "libYAML-0.1.4-1.egg", "md5": "3679f8a4f6c852ed65a3b9809bbecd13", "name": "libyaml", "osdist": "RedHat_5", "packages": [], "platform": "linux2", "python": None, "version": "0.1.4" } } def info_from_metadir(meta_dir): if meta_dir == os.path.join("dummy_prefix", "EGG-INFO", "libyaml"): return r_installed_metadata["libYAML-0.1.4-1.egg"] elif meta_dir == os.path.join("dummy_prefix", "EGG-INFO", "pyyaml"): return r_installed_metadata["PyYAML-3.11-1.egg"] else: return None def _valid_meta_dir_iterator(prefixes): for prefix in prefixes: egg_info_root = os.path.join(prefix, "EGG-INFO") for info in six.itervalues(r_installed_metadata): yield ( prefix, egg_info_root, os.path.join(egg_info_root, info["name"]) ) # When with mock.patch( "enstaller.repository._valid_meta_dir_iterator", _valid_meta_dir_iterator ): with mock.patch( "enstaller.repository.info_from_metadir", info_from_metadir ): repository = Repository._from_prefixes(["dummy_prefix"]) # Then packages = repository.find_packages("pyyaml") self.assertEqual(len(packages), 1) self.assertEqual(packages[0].name, "pyyaml") self.assertEqual(packages[0].dependencies, frozenset(["libyaml 0.1.4",])) def test_from_empty_prefix(self): # Given with mkdtemp() as tempdir: # When repository = Repository._from_prefixes([tempdir]) # Then self.assertEqual(len(list(repository.iter_packages())), 0) def test_delete_non_existing(self): # Given path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") to_remove = PackageMetadata.from_egg(path) repository = Repository() # When/Then with self.assertRaises(NoSuchPackage): repository.delete_package(to_remove) def test_delete_simple(self): # Given eggs = ["flake8-2.0.0-2.egg", "nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RemotePackageMetadata.from_egg(path) repository.add_package(package) path = os.path.join(_EGGINST_COMMON_DATA, "nose-1.3.0-1.egg") to_remove = PackageMetadata.from_egg(path) # When repository.delete_package(to_remove) # Then assertCountEqual(self, [p.key for p in repository.iter_packages()], ["flake8-2.0.0-2.egg", "nose-1.2.1-1.egg"]) def test_find_package_from_requirement_name_only(self): # Given requirement = Requirement.from_legacy_requirement_string("nose") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.3.0-2") def test_find_package_from_requirement_name_and_version(self): # Given requirement = Requirement.from_legacy_requirement_string("nose 1.3.0") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.3.0-2") # Given requirement = Requirement.from_legacy_requirement_string("nose 1.2.1") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.2.1-1") def test_find_package_from_requirement_missing(self): # Given requirement_strings = ["fubar", "nose 1.3.1"] # When for requirement_string in requirement_strings: requirement = Requirement.from_legacy_requirement_string(requirement_string) with self.assertRaises(NoSuchPackage): self.repository.find_package_from_requirement(requirement) def test_find_package_from_requirement_all(self): # Given requirement = Requirement.from_legacy_requirement_string("nose 1.3.0-1") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.3.0-1") # Given requirement = Requirement.from_legacy_requirement_string("nose 1.2.1-1") # When package = self.repository.find_package_from_requirement(requirement) # Then self.assertEqual(package.full_version, "1.2.1-1") def test_sorted_insertion(self): # Given eggs = ["nose-1.3.0-1.egg", "nose-1.2.1-1.egg"] repository = Repository() # When for egg in eggs: path = os.path.join(_EGGINST_COMMON_DATA, egg) package = RemotePackageMetadata.from_egg(path) repository.add_package(package) # Then self.assertEqual([m.version for m in repository._name_to_packages["nose"]], [EnpkgVersion.from_string("1.2.1-1"), EnpkgVersion.from_string("1.3.0-1")]) def test_update(self): # Given def repository_factory_from_egg(filenames): repository = Repository() for filename in filenames: path = os.path.join(_EGGINST_COMMON_DATA, filename) package = RemotePackageMetadata.from_egg(path) repository.add_package(package) return repository egg_set1 = ( "dummy-1.0.1-1.egg", "dummy_with_appinst-1.0.0-1.egg", "dummy_with_entry_points-1.0.0-1.egg", "dummy_with_proxy-1.3.40-3.egg", ) egg_set2 = ( "dummy_with_proxy_scripts-1.0.0-1.egg", "dummy_with_proxy_softlink-1.0.0-1.egg", "nose-1.2.1-1.egg", "nose-1.3.0-1.egg", "nose-1.3.0-2.egg", ) repository = Repository() repository1 = repository_factory_from_egg(egg_set1) repository2 = repository_factory_from_egg(egg_set2) # When repository.update(repository1) # Then assertCountEqual(self, iter(repository), iter(repository1)) # When repository.update(repository2) # Then assertCountEqual( self, iter(repository), itertools.chain(iter(repository1), iter(repository2)) )
def _repository_factory(self, packages): repository = Repository() for p in packages: repository.add_package(p) return repository