Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion poetry/core/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ def create_poetry(
self, cwd=None, with_dev=True
): # type: (Optional[Path]. bool) -> Poetry
poetry_file = self.locate(cwd)
local_config = PyProjectTOML(path=poetry_file).poetry_config
config = PyProjectTOML(path=poetry_file)
local_config = config.poetry_config

# Checking validity
check_result = self.validate(local_config)
Expand Down Expand Up @@ -114,6 +115,10 @@ def create_poetry(
)
)

if with_dev:
for dep in config.build_system.dependencies:
package.add_dependency(dep)

extras = local_config.get("extras", {})
for extra_name, requirements in extras.items():
package.extras[extra_name] = []
Expand Down
37 changes: 27 additions & 10 deletions poetry/core/packages/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ def _make_file_or_dir_dep(
path, # type: Path
base=None, # type: Optional[Path]
extras=None, # type: Optional[List[str]]
category="main", # type: str
): # type: (...) -> Optional[Union[FileDependency, DirectoryDependency]]
"""
Helper function to create a file or directoru dependency with the given arguments. If
Expand All @@ -45,15 +46,17 @@ def _make_file_or_dir_dep(
_path = Path(base) / path

if _path.is_file():
return FileDependency(name, path, base=base, extras=extras)
return FileDependency(name, path, base=base, extras=extras, category=category)
elif _path.is_dir():
return DirectoryDependency(name, path, base=base, extras=extras)
return DirectoryDependency(
name, path, base=base, extras=extras, category=category
)

return None


def dependency_from_pep_508(
name, relative_to=None
name, relative_to=None, category="main"
): # type: (str, Optional[Path]) -> Dependency
"""
Resolve a PEP-508 requirement string to a `Dependency` instance. If a `relative_to`
Expand Down Expand Up @@ -124,30 +127,44 @@ def dependency_from_pep_508(

if link.scheme.startswith("git+"):
url = ParsedUrl.parse(link.url)
dep = VCSDependency(name, "git", url.url, rev=url.rev, extras=req.extras)
dep = VCSDependency(
name, "git", url.url, rev=url.rev, extras=req.extras, category=category
)
elif link.scheme == "git":
dep = VCSDependency(
name, "git", link.url_without_fragment, extras=req.extras
name,
"git",
link.url_without_fragment,
extras=req.extras,
category=category,
)
elif link.scheme in ["http", "https"]:
dep = URLDependency(name, link.url)
dep = URLDependency(name, link.url, category=category)
elif is_file_uri:
# handle RFC 8089 references
path = url_to_path(req.url)
dep = _make_file_or_dir_dep(
name=name, path=path, base=relative_to, extras=req.extras
name=name,
path=path,
base=relative_to,
extras=req.extras,
category=category,
)
else:
try:
# this is a local path not using the file URI scheme
dep = _make_file_or_dir_dep(
name=name, path=Path(req.url), base=relative_to, extras=req.extras,
name=name,
path=Path(req.url),
base=relative_to,
extras=req.extras,
category=category,
)
except ValueError:
pass

if dep is None:
dep = Dependency(name, version or "*", extras=req.extras)
dep = Dependency(name, version or "*", extras=req.extras, category=category)

if version:
dep._constraint = parse_constraint(version)
Expand All @@ -157,7 +174,7 @@ def dependency_from_pep_508(
else:
constraint = "*"

dep = Dependency(name, constraint, extras=req.extras)
dep = Dependency(name, constraint, extras=req.extras, category=category)

if "extra" in markers:
# If we have extras, the dependency is optional
Expand Down
10 changes: 7 additions & 3 deletions poetry/core/pyproject/tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,22 @@ def dependencies(self):
for requirement in self.requires:
dependency = None
try:
dependency = dependency_from_pep_508(requirement)
dependency = dependency_from_pep_508(requirement, category="dev")
except ValueError:
# PEP 517 requires can be path if not PEP 508
path = Path(requirement)
try:
if path.is_file():
dependency = FileDependency(
name=canonicalize_name(path.name), path=path
name=canonicalize_name(path.name),
path=path,
category="dev",
)
elif path.is_dir():
dependency = DirectoryDependency(
name=canonicalize_name(path.name), path=path
name=canonicalize_name(path.name),
path=path,
category="dev",
)
except OSError:
# compatibility Python < 3.8
Expand Down