Commit e8b6e15e by Sébastien Eustace Committed by GitHub

Fix PEP 508 url dependency handling (#1620)

parent 863e2714
...@@ -25,6 +25,8 @@ from .vcs_dependency import VCSDependency ...@@ -25,6 +25,8 @@ from .vcs_dependency import VCSDependency
def dependency_from_pep_508(name): def dependency_from_pep_508(name):
from poetry.vcs.git import ParsedUrl
# Removing comments # Removing comments
parts = name.split("#", 1) parts = name.split("#", 1)
name = parts[0].strip() name = parts[0].strip()
...@@ -46,6 +48,8 @@ def dependency_from_pep_508(name): ...@@ -46,6 +48,8 @@ def dependency_from_pep_508(name):
if is_url(name): if is_url(name):
link = Link(name) link = Link(name)
elif req.url:
link = Link(req.url)
else: else:
p, extras = strip_extras(path) p, extras = strip_extras(path)
if os.path.isdir(p) and (os.path.sep in name or name.startswith(".")): if os.path.isdir(p) and (os.path.sep in name or name.startswith(".")):
...@@ -74,10 +78,15 @@ def dependency_from_pep_508(name): ...@@ -74,10 +78,15 @@ def dependency_from_pep_508(name):
version = m.group("ver") version = m.group("ver")
dep = Dependency(name, version) dep = Dependency(name, version)
else: else:
name = link.egg_fragment name = req.name or link.egg_fragment
if link.scheme == "git": if link.scheme.startswith("git+"):
url = ParsedUrl.parse(link.url)
dep = VCSDependency(name, "git", url.url, rev=url.rev)
elif link.scheme == "git":
dep = VCSDependency(name, "git", link.url_without_fragment) dep = VCSDependency(name, "git", link.url_without_fragment)
elif link.scheme in ["http", "https"]:
dep = URLDependency(name, link.url_without_fragment)
else: else:
dep = Dependency(name, "*") dep = Dependency(name, "*")
else: else:
......
...@@ -78,16 +78,19 @@ class ParsedUrl: ...@@ -78,16 +78,19 @@ class ParsedUrl:
raise ValueError('Invalid git url "{}"'.format(url)) raise ValueError('Invalid git url "{}"'.format(url))
def format(self): @property
def url(self): # type: () -> str
return "{}{}{}{}{}".format( return "{}{}{}{}{}".format(
"{}://".format(self.protocol) if self.protocol else "", "{}://".format(self.protocol) if self.protocol else "",
"{}@".format(self.user) if self.user else "", "{}@".format(self.user) if self.user else "",
self.resource, self.resource,
":{}".format(self.port) if self.port else "", ":{}".format(self.port) if self.port else "",
"/" + self.pathname if self.pathname.startswith(":") else self.pathname, "/" + self.pathname if self.pathname.startswith(":") else self.pathname,
"#{}".format(self.rev) if self.rev else "",
) )
def format(self):
return "{}".format(self.url, "#{}".format(self.rev) if self.rev else "",)
def __str__(self): # type: () -> str def __str__(self): # type: () -> str
return self.format() return self.format()
......
...@@ -28,7 +28,7 @@ from .markers import parse_marker ...@@ -28,7 +28,7 @@ from .markers import parse_marker
try: try:
import urllib.parse as urlparse import urllib.parse as urlparse
except ImportError: except ImportError:
from urlparse import urlparse import urlparse
LEGACY_REGEX = r""" LEGACY_REGEX = r"""
......
...@@ -169,3 +169,25 @@ def test_dependency_from_pep_508_with_not_in_op_marker(): ...@@ -169,3 +169,25 @@ def test_dependency_from_pep_508_with_not_in_op_marker():
assert ( assert (
str(dep.marker) == 'python_version not in "3.0,3.1,3.2" and extra == "export"' str(dep.marker) == 'python_version not in "3.0,3.1,3.2" and extra == "export"'
) )
def test_dependency_from_pep_508_with_git_url():
name = "django-utils @ git+ssh://git@corp-gitlab.com/corp-utils.git@1.2"
dep = dependency_from_pep_508(name)
assert "django-utils" == dep.name
assert dep.is_vcs()
assert "git" == dep.vcs
assert "ssh://git@corp-gitlab.com/corp-utils.git" == dep.source
assert "1.2" == dep.reference
def test_dependency_from_pep_508_with_url():
name = "django-utils @ https://example.com/django-utils-1.0.0.tar.gz"
dep = dependency_from_pep_508(name)
assert "django-utils" == dep.name
assert dep.is_url()
assert "https://example.com/django-utils-1.0.0.tar.gz" == dep.url
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment