def test_package_raise_missing_values(): with pytest.raises(ValueError): Package(Path('/home'), None, 'pkg', 'url') with pytest.raises(ValueError): Package(Path('/home'), 'repo', None, 'url') with pytest.raises(ValueError): Package(Path('/home'), 'repo', 'pkg', None)
def test_package_has_url_changed(git_url, package_url, expected_result): is_dir_local = True if git_url is None else False OutProces = namedtuple('OutProcess', ['stdout']) def _run_bash(command, **kwargs): if 'config' in command: return OutProces(git_url) elif 'rev-parse' in command: return OutProces('false') if is_dir_local else OutProces('true') pkg = Package(Path('/home'), 'repo', 'pkg1', package_url, 'pkg1 descr') with mock.patch(_MODULE_UNDER_TEST + ".run_bash") as run_mock: run_mock.side_effect = _run_bash assert pkg.has_url_changed() == expected_result
def test_required_by(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 requires = pearl_env.required_by( Package(home_dir, "repo-test", "pkg-test2", "/blah")) assert requires[0].full_name == 'repo-test/pkg-test'
def build_package(self, repo_name: str, package_name: str, packages_info: Dict[str, Dict[str, Dict[str, Any]]], packages: Dict[str, Dict[str, Package]]): if repo_name in packages and package_name in packages[repo_name]: return packages[repo_name][package_name] package_info = dict(packages_info[repo_name][package_name]) os_list = tuple( [OS.from_code(os) for os in package_info.get('os', tuple())]) package_info['os'] = os_list depends = package_info.get('depends', tuple()) if 'depends' in package_info: del package_info['depends'] if repo_name not in packages: packages[repo_name] = {} packages[repo_name][package_name] = Package( self.pearl_home, **package_info, ) for package_dep_full_name in depends: package_dep_repo_name, package_dep_name = package_dep_full_name.split( '/') self.build_package(package_dep_repo_name, package_dep_name, packages_info, packages) package_dep = packages[package_dep_repo_name][package_dep_name] packages[repo_name][package_name].add_depend(package_dep)
def test_package_default_values(): pkg = Package(Path('/home'), 'repo', 'pkg', 'https://pkg.com') assert pkg.description == "None" assert pkg.homepage == "None" assert pkg.author == "None" assert pkg.license == "None" assert pkg.os == () assert pkg.depends == () assert pkg.keywords == ()
def test_package(): pkg = Package(Path('/home'), 'repo', 'pkg1', 'https://pkg1', 'pkg1 descr') assert pkg.name == 'pkg1' assert pkg.repo_name == 'repo' assert pkg.full_name == 'repo/pkg1' assert pkg.url == 'https://pkg1' assert pkg.description == 'pkg1 descr' assert pkg.dir == Path('/home/packages/repo/pkg1') assert pkg.vardir == Path('/home/var/repo/pkg1') assert not pkg.is_local() pkg = Package(Path('/home'), 'repo', 'pkg1', '/pkg1', 'pkg1 descr') assert pkg.is_local()
def infer_package(self, package_name: str) -> Package: """Builds a package by looking at the file structure.""" if '/' in package_name: repo_name, short_package_name = package_name.split('/') package = Package(self.home, repo_name, short_package_name, "None") if package.is_installed(): return package else: packages_path = self.home / 'packages' for repo_path in packages_path.iterdir(): repo_name = repo_path.name package = Package(self.home, repo_name, package_name, "None") if package.is_installed(): return package raise PackageNotInstalledError( f'{package_name} package has not been installed.')