def test_directory_dependency_egg_info(): dependency = DirectoryDependency(DIST_PATH / "demo") assert dependency.is_directory() assert dependency.name == "demo" assert dependency.pretty_constraint == "0.1.2" assert dependency.python_versions == "*" package = dependency.package assert package.name == "demo" assert package.pretty_version == "0.1.2" assert package.python_versions == "*"
def test_directory_dependency_no_egg_info(mocker): mocker.patch("poetry.utils.env.Env.get", return_value=MockEnv()) dependency = DirectoryDependency(DIST_PATH / "demo") assert dependency.is_directory() assert dependency.name == "demo" assert dependency.pretty_constraint == "0.1.2" assert dependency.python_versions == "*" package = dependency.package assert package.name == "demo" assert package.pretty_version == "0.1.2" assert package.python_versions == "*"
def test_search_for_directory_setup_read_setup_with_extras(provider, mocker): mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv()) dependency = DirectoryDependency( "demo", Path(__file__).parent.parent / "fixtures" / "git" / "github.com" / "demo" / "demo", ) dependency.extras.append("foo") package = provider.search_for_directory(dependency)[0] assert package.name == "demo" assert package.version.text == "0.1.2" assert package.requires == [ get_dependency("pendulum", ">=1.4.4"), get_dependency("cleo", optional=True), ] assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], }
def test_search_for_directory_setup_with_base(provider, directory): dependency = DirectoryDependency( "demo", Path(__file__).parent.parent / "fixtures" / "git" / "github.com" / "demo" / directory, base=Path(__file__).parent.parent / "fixtures" / "git" / "github.com" / "demo" / directory, ) package = provider.search_for_directory(dependency)[0] assert package.name == "demo" assert package.version.text == "0.1.2" assert package.requires == [get_dependency("pendulum", ">=1.4.4")] assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], } assert package.root_dir == ( Path(__file__).parent.parent / "fixtures" / "git" / "github.com" / "demo" / directory )
def test_search_for_directory_poetry(provider): dependency = DirectoryDependency( "demo", Path(__file__).parent.parent / "fixtures" / "project_with_extras" ) package = provider.search_for_directory(dependency)[0] assert package.name == "project-with-extras" assert package.version.text == "1.2.3" assert package.requires == [] assert package.extras == { "extras_a": [get_dependency("pendulum", ">=1.4.4")], "extras_b": [get_dependency("cachy", ">=0.2.0")], }
def test_search_for_directory_setup_read_setup_with_no_dependencies( provider, mocker): mocker.patch("poetry.utils.env.EnvManager.get", return_value=MockEnv()) dependency = DirectoryDependency( "demo", Path(__file__).parent.parent / "fixtures" / "git" / "github.com" / "demo" / "no-dependencies", ) package = provider.search_for_directory(dependency)[0] assert package.name == "demo" assert package.version.text == "0.1.2" assert package.requires == [] assert package.extras == {}
def test_search_for_directory_setup_egg_info_with_extras(provider): dependency = DirectoryDependency( "demo", Path(__file__).parent.parent / "fixtures" / "git" / "github.com" / "demo" / "demo", ) dependency.extras.append("foo") package = provider.search_for_directory(dependency)[0] assert package.name == "demo" assert package.version.text == "0.1.2" assert package.requires == [ get_dependency("pendulum", ">=1.4.4"), get_dependency("cleo", optional=True), ] assert package.extras == { "foo": [get_dependency("cleo")], "bar": [get_dependency("tomlkit")], }
def test_directory_dependency_must_exist(): with pytest.raises(ValueError): DirectoryDependency("demo", DIST_PATH / "invalid")
def _export_requirements_txt( self, cwd, output, with_hashes=True, dev=False, extras=None, with_credentials=False, ): # type: (Path, Union[IO, str], bool, bool, bool) -> None indexes = [] content = "" # Generate a list of package names we have opted into via `extras` extras_set = frozenset(extras or ()) extra_package_names = set() if extras: for extra_name, extra_packages in self._poetry.locker.lock_data.get( "extras", {}).items(): if extra_name in extras_set: extra_package_names.update(extra_packages) for package in sorted( self._poetry.locker.locked_repository(dev).packages, key=lambda p: p.name): # If a package is optional and we haven't opted in to it, continue if package.optional and package.name not in extra_package_names: continue if package.source_type == "git": dependency = VCSDependency( package.name, package.source_type, package.source_url, package.source_reference, ) dependency.marker = package.marker line = "-e git+{}@{}#egg={}".format(package.source_url, package.source_reference, package.name) elif package.source_type in ["directory", "file", "url"]: if package.source_type == "file": dependency = FileDependency(package.name, Path(package.source_url)) elif package.source_type == "directory": dependency = DirectoryDependency(package.name, Path(package.source_url)) else: dependency = URLDependency(package.name, package.source_url) dependency.marker = package.marker line = "{}".format(package.source_url) if package.develop: line = "-e " + line else: dependency = package.to_dependency() line = "{}=={}".format(package.name, package.version) requirement = dependency.to_pep_508() if ";" in requirement: line += "; {}".format(requirement.split(";")[1].strip()) if package.source_type == "legacy" and package.source_url: indexes.append(package.source_url) if package.files and with_hashes: hashes = [] for f in package.files: h = f["hash"] algorithm = "sha256" if ":" in h: algorithm, h = h.split(":") if algorithm not in self.ALLOWED_HASH_ALGORITHMS: continue hashes.append("{}:{}".format(algorithm, h)) if hashes: line += " \\\n" for i, h in enumerate(hashes): line += " --hash={}{}".format( h, " \\\n" if i < len(hashes) - 1 else "") line += "\n" content += line if indexes: # If we have extra indexes, we add them to the begin # of the output indexes_header = "" for index in indexes: repository = [ r for r in self._poetry.pool.repositories if r.url == index.rstrip("/") ][0] if (self._poetry.pool.has_default() and repository is self._poetry.pool.repositories[0]): url = (repository.authenticated_url if with_credentials else repository.url) indexes_header = "--index-url {}\n".format(url) continue url = (repository.authenticated_url if with_credentials else repository.url) indexes_header += "--extra-index-url {}\n".format(url) content = indexes_header + "\n" + content self._output(content, cwd, output)
def test_directory_dependency_with_no_version_should_raise_an_error(mocker): mocker.patch("poetry.utils.env.Env.get", return_value=MockEnv()) with pytest.raises(RuntimeError): DirectoryDependency(DIST_PATH / "no-version")