diff --git a/poetry/core/packages/__init__.py b/poetry/core/packages/__init__.py index f86a24b96..16854c530 100644 --- a/poetry/core/packages/__init__.py +++ b/poetry/core/packages/__init__.py @@ -63,8 +63,8 @@ def dependency_from_pep_508( name = parts[0].strip() if len(parts) > 1: rest = parts[1] - if ";" in rest: - name += ";" + rest.split(";", 1)[1] + if " ;" in rest: + name += " ;" + rest.split(" ;", 1)[1] req = Requirement(name) diff --git a/poetry/core/utils/helpers.py b/poetry/core/utils/helpers.py index c3e13f558..c4fe56741 100644 --- a/poetry/core/utils/helpers.py +++ b/poetry/core/utils/helpers.py @@ -81,7 +81,7 @@ def parse_requires(requires): # type: (str) -> List[str] continue if current_marker: - line = "{}; {}".format(line, current_marker) + line = "{} ; {}".format(line, current_marker) requires_dist.append(line) diff --git a/tests/conftest.py b/tests/conftest.py index 1269d5bab..b70a906b4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,7 +3,7 @@ import pytest from poetry.core.utils._compat import Path -from tests.utils import tempfile +from tests.testutils import tempfile def pytest_addoption(parser): diff --git a/tests/integration/test_pep517.py b/tests/integration/test_pep517.py index 0ef13e21d..568c1004a 100644 --- a/tests/integration/test_pep517.py +++ b/tests/integration/test_pep517.py @@ -6,8 +6,8 @@ from pep517.check import check from poetry.core.utils._compat import PY35 from poetry.core.utils._compat import Path -from tests.utils import subprocess_run -from tests.utils import temporary_project_directory +from tests.testutils import subprocess_run +from tests.testutils import temporary_project_directory pytestmark = pytest.mark.integration diff --git a/tests/packages/test_main.py b/tests/packages/test_main.py index 238f8c497..92731b187 100644 --- a/tests/packages/test_main.py +++ b/tests/packages/test_main.py @@ -183,6 +183,22 @@ def test_dependency_from_pep_508_with_git_url(): assert "1.2" == dep.reference +def test_dependency_from_pep_508_with_git_url_and_comment_and_extra(): + name = ( + "poetry @ git+https://github.com/python-poetry/poetry.git@b;ar;#egg=poetry" + ' ; extra == "foo;"' + ) + + dep = dependency_from_pep_508(name) + + assert "poetry" == dep.name + assert dep.is_vcs() + assert "git" == dep.vcs + assert "https://github.com/python-poetry/poetry.git" == dep.source + assert "b;ar;" == dep.reference + assert dep.in_extras == ["foo;"] + + def test_dependency_from_pep_508_with_url(): name = "django-utils @ https://example.com/django-utils-1.0.0.tar.gz" diff --git a/tests/utils.py b/tests/testutils.py similarity index 100% rename from tests/utils.py rename to tests/testutils.py diff --git a/tests/utils/__init__.py b/tests/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/utils/test_helpers.py b/tests/utils/test_helpers.py new file mode 100644 index 000000000..a2e423c1d --- /dev/null +++ b/tests/utils/test_helpers.py @@ -0,0 +1,54 @@ +from poetry.core.utils.helpers import parse_requires + + +def test_parse_requires(): + requires = """\ +jsonschema>=2.6.0.0,<3.0.0.0 +lockfile>=0.12.0.0,<0.13.0.0 +pip-tools>=1.11.0.0,<2.0.0.0 +pkginfo>=1.4.0.0,<2.0.0.0 +pyrsistent>=0.14.2.0,<0.15.0.0 +toml>=0.9.0.0,<0.10.0.0 +cleo>=0.6.0.0,<0.7.0.0 +cachy>=0.1.1.0,<0.2.0.0 +cachecontrol>=0.12.4.0,<0.13.0.0 +requests>=2.18.0.0,<3.0.0.0 +msgpack-python>=0.5.0.0,<0.6.0.0 +pyparsing>=2.2.0.0,<3.0.0.0 +requests-toolbelt>=0.8.0.0,<0.9.0.0 + +[:(python_version >= "2.7.0.0" and python_version < "2.8.0.0") or (python_version >= "3.4.0.0" and python_version < "3.5.0.0")] +typing>=3.6.0.0,<4.0.0.0 + +[:python_version >= "2.7.0.0" and python_version < "2.8.0.0"] +virtualenv>=15.2.0.0,<16.0.0.0 +pathlib2>=2.3.0.0,<3.0.0.0 + +[:python_version >= "3.4.0.0" and python_version < "3.6.0.0"] +zipfile36>=0.1.0.0,<0.2.0.0 + +[dev] +isort@ git+git://github.com/timothycrosley/isort.git@e63ae06ec7d70b06df9e528357650281a3d3ec22#egg=isort +""" + result = parse_requires(requires) + expected = [ + "jsonschema>=2.6.0.0,<3.0.0.0", + "lockfile>=0.12.0.0,<0.13.0.0", + "pip-tools>=1.11.0.0,<2.0.0.0", + "pkginfo>=1.4.0.0,<2.0.0.0", + "pyrsistent>=0.14.2.0,<0.15.0.0", + "toml>=0.9.0.0,<0.10.0.0", + "cleo>=0.6.0.0,<0.7.0.0", + "cachy>=0.1.1.0,<0.2.0.0", + "cachecontrol>=0.12.4.0,<0.13.0.0", + "requests>=2.18.0.0,<3.0.0.0", + "msgpack-python>=0.5.0.0,<0.6.0.0", + "pyparsing>=2.2.0.0,<3.0.0.0", + "requests-toolbelt>=0.8.0.0,<0.9.0.0", + 'typing>=3.6.0.0,<4.0.0.0 ; (python_version >= "2.7.0.0" and python_version < "2.8.0.0") or (python_version >= "3.4.0.0" and python_version < "3.5.0.0")', + 'virtualenv>=15.2.0.0,<16.0.0.0 ; python_version >= "2.7.0.0" and python_version < "2.8.0.0"', + 'pathlib2>=2.3.0.0,<3.0.0.0 ; python_version >= "2.7.0.0" and python_version < "2.8.0.0"', + 'zipfile36>=0.1.0.0,<0.2.0.0 ; python_version >= "3.4.0.0" and python_version < "3.6.0.0"', + 'isort@ git+git://github.com/timothycrosley/isort.git@e63ae06ec7d70b06df9e528357650281a3d3ec22#egg=isort ; extra == "dev"', + ] + assert result == expected