def test_lookup_package(tmp_path): home_dir = create_pearl_home(tmp_path) packages_info = { "repo-test": { "pkg-test": { "repo_name": "repo-test", "name": "pkg-test", "url": "/blah", "depends": ["repo-test/pkg-test2"] }, "pkg-test2": { "repo_name": "repo-test", "name": "pkg-test2", "url": "/blah", "depends": [] } } } builder = PackageBuilder(home_dir) packages = builder.build_packages(packages_info) pearl_env = PearlEnvironment(home_dir, env_initialized=False) pearl_env._packages = packages actual_package = pearl_env.lookup_package('repo-test/pkg-test') assert actual_package.full_name == 'repo-test/pkg-test' actual_package = pearl_env.lookup_package('pkg-test') assert actual_package.full_name == 'repo-test/pkg-test'
def test_lookup_package_repo_no_exists(tmp_path): home_dir = (tmp_path / 'home') home_dir.mkdir(parents=True) (tmp_path / 'config').mkdir(parents=True) conffile = (tmp_path / 'config/pearl.conf') conffile.touch() with pytest.raises(RepoDoesNotExistError): pearl_env = PearlEnvironment(home_dir, conffile) pearl_env.lookup_package('test/pkg-test')
def test_lookup_package_not_in_repo(tmp_path): home_dir = create_pearl_home(tmp_path) packages_info = { "repo-test": { "pkg-test": { "repo_name": "repo-test", "name": "pkg-test", "url": "/blah", }, } } builder = PackageBuilder(home_dir) packages = builder.build_packages(packages_info) pearl_env = PearlEnvironment(home_dir, env_initialized=False) pearl_env._packages = packages with pytest.raises(PackageNotInRepoError): pearl_env.lookup_package('repo-test/pkg-a-test') with pytest.raises(PackageNotInRepoError): pearl_env.lookup_package('pkg-a-test')
def _extract_packages(pearl_env: PearlEnvironment, command: PearlCommand, args) -> List[Package]: try: return [ pearl_env.lookup_package(package_name) for package_name in args.packages ] except (RepoDoesNotExistError, PackageNotInRepoError): if command != PearlCommand.REMOVE: raise if args.force: # The user can still be able to remove a package even if package does not exist in any repository. return [ pearl_env.infer_package(package_name) for package_name in args.packages ] else: messenger.info("To remove the package, use option --force.") raise