Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
python-poetry
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
python-poetry
Commits
c497a5d8
Unverified
Commit
c497a5d8
authored
Nov 07, 2018
by
Sébastien Eustace
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix extras being selected even when not required.
parent
4bc442ff
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
505 additions
and
266 deletions
+505
-266
CHANGELOG.md
+1
-0
poetry/packages/directory_dependency.py
+5
-130
poetry/packages/file_dependency.py
+2
-17
poetry/packages/package.py
+7
-2
poetry/puzzle/provider.py
+0
-0
tests/console/commands/debug/test_resolve.py
+0
-4
tests/fixtures/distributions/demo-0.1.0-py2.py3-none-any.whl
+0
-0
tests/fixtures/distributions/demo-0.1.0.tar.gz
+0
-0
tests/fixtures/git/github.com/demo/demo/setup.py
+1
-1
tests/installation/fixtures/with-directory-dependency-poetry-transitive.test
+1
-19
tests/installation/fixtures/with-directory-dependency-poetry.test
+0
-9
tests/installation/fixtures/with-file-dependency.test
+3
-3
tests/installation/test_installer.py
+8
-5
tests/packages/test_directory_dependency.py
+3
-37
tests/packages/test_file_dependency.py
+2
-26
tests/puzzle/test_provider.py
+267
-2
tests/puzzle/test_solver.py
+202
-4
tests/test_poetry.py
+3
-7
No files found.
CHANGELOG.md
View file @
c497a5d8
...
...
@@ -7,6 +7,7 @@
-
Fixed reading of some
`setup.py`
files.
-
Fixed a
`KeyError`
when getting information for packages which require reading setup files.
-
Fixed the building of wheels with C extensions and an
`src`
layout.
-
Fixed extras being selected when resolving dependencies even when not required.
## [0.12.6] - 2018-11-05
...
...
poetry/packages/directory_dependency.py
View file @
c497a5d8
import
glob
import
os
import
pkginfo
from
pkginfo.distribution
import
HEADER_ATTRS
from
pkginfo.distribution
import
HEADER_ATTRS_2_0
from
poetry.io
import
NullIO
from
poetry.utils._compat
import
PY35
from
poetry.utils._compat
import
Path
from
poetry.utils.helpers
import
parse_requires
from
poetry.utils.toml_file
import
TomlFile
from
poetry.utils.env
import
Env
from
poetry.utils.env
import
EnvCommandError
from
poetry.utils.setup_reader
import
SetupReader
from
.dependency
import
Dependency
...
...
@@ -25,15 +15,13 @@ HEADER_ATTRS.update(
class
DirectoryDependency
(
Dependency
):
def
__init__
(
self
,
name
,
path
,
# type: Path
category
=
"main"
,
# type: str
optional
=
False
,
# type: bool
base
=
None
,
# type: Path
develop
=
True
,
# type: bool
):
from
.
import
dependency_from_pep_508
from
.package
import
Package
self
.
_path
=
path
self
.
_base
=
base
self
.
_full_path
=
path
...
...
@@ -49,7 +37,7 @@ class DirectoryDependency(Dependency):
if
self
.
_full_path
.
is_file
():
raise
ValueError
(
"{} is a file, expected a directory"
.
format
(
self
.
_path
))
# Checking content to de
r
termine actions
# Checking content to determine actions
setup
=
self
.
_full_path
/
"setup.py"
pyproject
=
TomlFile
(
self
.
_full_path
/
"pyproject.toml"
)
if
pyproject
.
exists
():
...
...
@@ -65,121 +53,8 @@ class DirectoryDependency(Dependency):
)
)
if
self
.
_supports_poetry
:
from
poetry.poetry
import
Poetry
poetry
=
Poetry
.
create
(
self
.
_full_path
)
package
=
poetry
.
package
self
.
_package
=
Package
(
package
.
pretty_name
,
package
.
version
)
self
.
_package
.
requires
+=
package
.
requires
self
.
_package
.
dev_requires
+=
package
.
dev_requires
self
.
_package
.
extras
=
package
.
extras
self
.
_package
.
python_versions
=
package
.
python_versions
else
:
# Execute egg_info
current_dir
=
os
.
getcwd
()
os
.
chdir
(
str
(
self
.
_full_path
))
try
:
cwd
=
base
venv
=
Env
.
get
(
NullIO
(),
cwd
=
cwd
)
venv
.
run
(
"python"
,
"setup.py"
,
"egg_info"
)
except
EnvCommandError
:
result
=
SetupReader
.
read_from_directory
(
self
.
_full_path
)
if
not
result
[
"name"
]:
# The name could not be determined
# so we raise an error since it is mandatory
raise
RuntimeError
(
"Unable to retrieve the package name for {}"
.
format
(
path
)
)
if
not
result
[
"version"
]:
# The version could not be determined
# so we raise an error since it is mandatory
raise
RuntimeError
(
"Unable to retrieve the package version for {}"
.
format
(
path
)
)
package_name
=
result
[
"name"
]
package_version
=
result
[
"version"
]
python_requires
=
result
[
"python_requires"
]
if
python_requires
is
None
:
python_requires
=
"*"
package_summary
=
""
requires
=
""
for
dep
in
result
[
"install_requires"
]:
requires
+=
dep
+
"
\n
"
if
result
[
"extras_require"
]:
requires
+=
"
\n
"
for
extra_name
,
deps
in
result
[
"extras_require"
]
.
items
():
requires
+=
"[{}]
\n
"
.
format
(
extra_name
)
for
dep
in
deps
:
requires
+=
dep
+
"
\n
"
requires
+=
"
\n
"
reqs
=
parse_requires
(
requires
)
else
:
os
.
chdir
(
current_dir
)
# Sometimes pathlib will fail on recursive
# symbolic links, so we need to workaround it
# and use the glob module instead.
# Note that this does not happen with pathlib2
# so it's safe to use it for Python < 3.4.
if
PY35
:
egg_info
=
next
(
Path
(
p
)
for
p
in
glob
.
glob
(
os
.
path
.
join
(
str
(
self
.
_full_path
),
"**"
,
"*.egg-info"
),
recursive
=
True
,
)
)
else
:
egg_info
=
next
(
self
.
_full_path
.
glob
(
"**/*.egg-info"
))
meta
=
pkginfo
.
UnpackedSDist
(
str
(
egg_info
))
package_name
=
meta
.
name
package_version
=
meta
.
version
package_summary
=
meta
.
summary
python_requires
=
meta
.
requires_python
if
meta
.
requires_dist
:
reqs
=
list
(
meta
.
requires_dist
)
else
:
reqs
=
[]
requires
=
egg_info
/
"requires.txt"
if
requires
.
exists
():
with
requires
.
open
()
as
f
:
reqs
=
parse_requires
(
f
.
read
())
finally
:
os
.
chdir
(
current_dir
)
package
=
Package
(
package_name
,
package_version
)
package
.
description
=
package_summary
for
req
in
reqs
:
package
.
requires
.
append
(
dependency_from_pep_508
(
req
))
if
python_requires
:
package
.
python_versions
=
python_requires
self
.
_package
=
package
self
.
_package
.
source_type
=
"directory"
self
.
_package
.
source_url
=
self
.
_path
.
as_posix
()
super
(
DirectoryDependency
,
self
)
.
__init__
(
self
.
_package
.
name
,
self
.
_package
.
version
,
category
=
category
,
optional
=
optional
,
allows_prereleases
=
True
,
name
,
"*"
,
category
=
category
,
optional
=
optional
,
allows_prereleases
=
True
)
@property
...
...
@@ -191,8 +66,8 @@ class DirectoryDependency(Dependency):
return
self
.
_full_path
.
resolve
()
@property
def
packag
e
(
self
):
return
self
.
_
packag
e
def
bas
e
(
self
):
return
self
.
_
bas
e
@property
def
develop
(
self
):
...
...
poetry/packages/file_dependency.py
View file @
c497a5d8
import
hashlib
import
io
import
pkginfo
from
pkginfo.distribution
import
HEADER_ATTRS
from
pkginfo.distribution
import
HEADER_ATTRS_2_0
...
...
@@ -19,6 +17,7 @@ HEADER_ATTRS.update(
class
FileDependency
(
Dependency
):
def
__init__
(
self
,
name
,
path
,
# type: Path
category
=
"main"
,
# type: str
optional
=
False
,
# type: bool
...
...
@@ -37,18 +36,8 @@ class FileDependency(Dependency):
if
self
.
_full_path
.
is_dir
():
raise
ValueError
(
"{} is a directory, expected a file"
.
format
(
self
.
_path
))
if
self
.
_path
.
suffix
==
".whl"
:
self
.
_meta
=
pkginfo
.
Wheel
(
str
(
self
.
_full_path
))
else
:
# Assume sdist
self
.
_meta
=
pkginfo
.
SDist
(
str
(
self
.
_full_path
))
super
(
FileDependency
,
self
)
.
__init__
(
self
.
_meta
.
name
,
self
.
_meta
.
version
,
category
=
category
,
optional
=
optional
,
allows_prereleases
=
True
,
name
,
"*"
,
category
=
category
,
optional
=
optional
,
allows_prereleases
=
True
)
@property
...
...
@@ -59,10 +48,6 @@ class FileDependency(Dependency):
def
full_path
(
self
):
return
self
.
_full_path
.
resolve
()
@property
def
metadata
(
self
):
return
self
.
_meta
def
is_file
(
self
):
return
True
...
...
poetry/packages/package.py
View file @
c497a5d8
...
...
@@ -261,7 +261,7 @@ class Package(object):
file_path
=
Path
(
constraint
[
"file"
])
dependency
=
FileDependency
(
file_path
,
category
=
category
,
base
=
self
.
root_dir
name
,
file_path
,
category
=
category
,
base
=
self
.
root_dir
)
elif
"path"
in
constraint
:
path
=
Path
(
constraint
[
"path"
])
...
...
@@ -273,10 +273,15 @@ class Package(object):
if
is_file
:
dependency
=
FileDependency
(
path
,
category
=
category
,
optional
=
optional
,
base
=
self
.
root_dir
name
,
path
,
category
=
category
,
optional
=
optional
,
base
=
self
.
root_dir
,
)
else
:
dependency
=
DirectoryDependency
(
name
,
path
,
category
=
category
,
optional
=
optional
,
...
...
poetry/puzzle/provider.py
View file @
c497a5d8
This diff is collapsed.
Click to expand it.
tests/console/commands/debug/test_resolve.py
View file @
c497a5d8
import
sys
from
cleo.testers
import
CommandTester
from
tests.helpers
import
get_dependency
from
tests.helpers
import
get_package
...
...
@@ -78,7 +75,6 @@ Resolving dependencies...
Resolution results:
- pendulum (2.0.3)
- cleo (0.6.5)
- demo (0.1.2)
"""
...
...
tests/fixtures/distributions/demo-0.1.0-py2.py3-none-any.whl
View file @
c497a5d8
No preview for this file type
tests/fixtures/distributions/demo-0.1.0.tar.gz
View file @
c497a5d8
No preview for this file type
tests/fixtures/git/github.com/demo/demo/setup.py
View file @
c497a5d8
...
...
@@ -12,7 +12,7 @@ kwargs = dict(
url
=
"https://github.com/demo/demo"
,
packages
=
[
"demo"
],
install_requires
=
[
"pendulum>=1.4.4"
],
extras_require
=
{
"foo"
:
[
"cleo"
]},
extras_require
=
{
"foo"
:
[
"cleo"
]
,
"bar"
:
[
"tomlkit"
]
},
)
...
...
tests/installation/fixtures/with-directory-dependency-poetry-transitive.test
View file @
c497a5d8
[[
package
]]
description
=
""
category
=
"dev"
name
=
"cachy"
optional
=
true
python
-
versions
=
"*"
version
=
"0.2.0"
[[
package
]]
description
=
""
category
=
"dev"
name
=
"pendulum"
optional
=
true
python
-
versions
=
"*"
version
=
"1.4.4"
[[
package
]]
category
=
"main"
description
=
""
name
=
"project-with-extras"
...
...
@@ -36,7 +20,7 @@ python-versions = "*"
version
=
"1.2.3"
[
package
.
dependencies
]
project
-
with
-
extras
=
"
1.2.3
"
project
-
with
-
extras
=
"
*
"
[
package
.
source
]
reference
=
""
...
...
@@ -48,7 +32,5 @@ content-hash = "123456789"
python
-
versions
=
"*"
[
metadata
.
hashes
]
cachy
=
[]
project
-
with
-
extras
=
[]
project
-
with
-
transitive
-
directory
-
dependencies
=
[]
pendulum
=
[]
tests/installation/fixtures/with-directory-dependency-poetry.test
View file @
c497a5d8
[[
package
]]
description
=
""
category
=
"main"
name
=
"cachy"
optional
=
true
python
-
versions
=
"*"
version
=
"0.2.0"
[[
package
]]
description
=
""
category
=
"main"
name
=
"pendulum"
optional
=
false
python
-
versions
=
"*"
...
...
@@ -35,6 +27,5 @@ content-hash = "123456789"
python
-
versions
=
"*"
[
metadata
.
hashes
]
cachy
=
[]
project
-
with
-
extras
=
[]
pendulum
=
[]
tests/installation/fixtures/with-file-dependency.test
View file @
c497a5d8
[[
package
]]
name
=
"demo"
version
=
"0.1.0"
description
=
"
Description
"
description
=
""
category
=
"main"
optional
=
false
python
-
versions
=
">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
...
...
@@ -12,7 +12,7 @@ reference = ""
url
=
"tests/fixtures/distributions/demo-0.1.0-py2.py3-none-any.whl"
[
package
.
dependencies
]
pendulum
=
">=1.4.
0.0,<2.0.0.0
"
pendulum
=
">=1.4.
4
"
[[
package
]]
name
=
"pendulum"
...
...
@@ -27,5 +27,5 @@ python-versions = "*"
content
-
hash
=
"123456789"
[
metadata
.
hashes
]
demo
=
[
"
373a7e4bb99653541f35e52738f1b8a8e889c12e5f8b93a88c757d948b0cbe89
"
]
demo
=
[
"
70e704135718fffbcbf61ed1fc45933cfd86951a744b681000eaaa75da31f17a
"
]
pendulum
=
[]
tests/installation/test_installer.py
View file @
c497a5d8
...
...
@@ -678,11 +678,12 @@ def test_run_installs_with_local_file(installer, locker, repo, package):
def
test_run_installs_with_local_poetry_directory_and_extras
(
installer
,
locker
,
repo
,
package
,
tmpdir
):
file_path
=
Path
(
"tests/fixtures/project_with_extras/"
)
package
.
add_dependency
(
"demo"
,
{
"path"
:
str
(
file_path
),
"extras"
:
[
"extras_a"
]})
file_path
=
Path
(
"tests/fixtures/project_with_extras"
)
package
.
add_dependency
(
"project-with-extras"
,
{
"path"
:
str
(
file_path
),
"extras"
:
[
"extras_a"
]}
)
repo
.
add_package
(
get_package
(
"pendulum"
,
"1.4.4"
))
repo
.
add_package
(
get_package
(
"cachy"
,
"0.2.0"
))
installer
.
run
()
...
...
@@ -699,7 +700,9 @@ def test_run_installs_with_local_poetry_directory_transitive(
file_path
=
Path
(
"tests/fixtures/directory/project_with_transitive_directory_dependencies/"
)
package
.
add_dependency
(
"demo"
,
{
"path"
:
str
(
file_path
)})
package
.
add_dependency
(
"project-with-transitive-directory-dependencies"
,
{
"path"
:
str
(
file_path
)}
)
repo
.
add_package
(
get_package
(
"pendulum"
,
"1.4.4"
))
repo
.
add_package
(
get_package
(
"cachy"
,
"0.2.0"
))
...
...
@@ -717,7 +720,7 @@ def test_run_installs_with_local_setuptools_directory(
installer
,
locker
,
repo
,
package
,
tmpdir
):
file_path
=
Path
(
"tests/fixtures/project_with_setup/"
)
package
.
add_dependency
(
"
demo
"
,
{
"path"
:
str
(
file_path
)})
package
.
add_dependency
(
"
my-package
"
,
{
"path"
:
str
(
file_path
)})
repo
.
add_package
(
get_package
(
"pendulum"
,
"1.4.4"
))
repo
.
add_package
(
get_package
(
"cachy"
,
"0.2.0"
))
...
...
tests/packages/test_directory_dependency.py
View file @
c497a5d8
import
pytest
from
poetry.packages.directory_dependency
import
DirectoryDependency
from
poetry.utils._compat
import
PY35
from
poetry.utils._compat
import
Path
from
poetry.utils.env
import
EnvCommandError
from
poetry.utils.env
import
MockEnv
as
BaseMockEnv
...
...
@@ -17,39 +16,6 @@ class MockEnv(BaseMockEnv):
DIST_PATH
=
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"git"
/
"github.com"
/
"demo"
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
==
"*"
@pytest.mark.skipif
(
not
PY35
,
reason
=
"AST parsing does not work for Python <3.4"
)
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_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"
)
def
test_directory_dependency_must_exist
():
with
pytest
.
raises
(
ValueError
):
DirectoryDependency
(
"demo"
,
DIST_PATH
/
"invalid"
)
tests/packages/test_file_dependency.py
View file @
c497a5d8
...
...
@@ -6,35 +6,11 @@ from poetry.utils._compat import Path
DIST_PATH
=
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"distributions"
def
test_file_dependency_wheel
():
dependency
=
FileDependency
(
DIST_PATH
/
"demo-0.1.0-py2.py3-none-any.whl"
)
assert
dependency
.
is_file
()
assert
dependency
.
name
==
"demo"
assert
dependency
.
pretty_constraint
==
"0.1.0"
assert
dependency
.
python_versions
==
"*"
meta
=
dependency
.
metadata
assert
meta
.
requires_dist
==
[
"pendulum (>=1.4.0.0,<2.0.0.0)"
]
def
test_file_dependency_sdist
():
dependency
=
FileDependency
(
DIST_PATH
/
"demo-0.1.0.tar.gz"
)
assert
dependency
.
is_file
()
assert
dependency
.
name
==
"demo"
assert
dependency
.
pretty_constraint
==
"0.1.0"
assert
dependency
.
python_versions
==
"*"
meta
=
dependency
.
metadata
assert
meta
.
requires_dist
==
[
"pendulum (>=1.4.0.0,<2.0.0.0)"
]
def
test_file_dependency_wrong_path
():
with
pytest
.
raises
(
ValueError
):
FileDependency
(
DIST_PATH
/
"demo-0.2.0.tar.gz"
)
FileDependency
(
"demo"
,
DIST_PATH
/
"demo-0.2.0.tar.gz"
)
def
test_file_dependency_dir
():
with
pytest
.
raises
(
ValueError
):
FileDependency
(
DIST_PATH
)
FileDependency
(
"demo"
,
DIST_PATH
)
tests/puzzle/test_provider.py
View file @
c497a5d8
...
...
@@ -2,11 +2,14 @@ import pytest
from
poetry.io
import
NullIO
from
poetry.packages
import
ProjectPackage
from
poetry.packages.directory_dependency
import
DirectoryDependency
from
poetry.packages.file_dependency
import
FileDependency
from
poetry.packages.vcs_dependency
import
VCSDependency
from
poetry.puzzle.provider
import
Provider
from
poetry.repositories.pool
import
Pool
from
poetry.repositories.repository
import
Repository
from
poetry.utils._compat
import
PY35
from
poetry.utils._compat
import
Path
from
poetry.utils.env
import
EnvCommandError
from
poetry.utils.env
import
MockEnv
as
BaseMockEnv
...
...
@@ -50,11 +53,29 @@ def test_search_for_vcs_setup_egg_info(provider):
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"
)],
}
def
test_search_for_vcs_setup_egg_info_with_extras
(
provider
):
dependency
=
VCSDependency
(
"demo"
,
"git"
,
"https://github.com/demo/demo.git"
)
dependency
.
extras
.
append
(
"foo"
)
package
=
provider
.
search_for_vcs
(
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"
)]}
assert
package
.
extras
==
{
"foo"
:
[
get_dependency
(
"cleo"
)],
"bar"
:
[
get_dependency
(
"tomlkit"
)],
}
@pytest.mark.skipif
(
not
PY35
,
reason
=
"AST parsing does not work for Python <3.4"
)
...
...
@@ -67,11 +88,32 @@ def test_search_for_vcs_read_setup(provider, mocker):
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"
)],
}
@pytest.mark.skipif
(
not
PY35
,
reason
=
"AST parsing does not work for Python <3.4"
)
def
test_search_for_vcs_read_setup_with_extras
(
provider
,
mocker
):
mocker
.
patch
(
"poetry.utils.env.Env.get"
,
return_value
=
MockEnv
())
dependency
=
VCSDependency
(
"demo"
,
"git"
,
"https://github.com/demo/demo.git"
)
dependency
.
extras
.
append
(
"foo"
)
package
=
provider
.
search_for_vcs
(
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"
)]}
assert
package
.
extras
==
{
"foo"
:
[
get_dependency
(
"cleo"
)],
"bar"
:
[
get_dependency
(
"tomlkit"
)],
}
def
test_search_for_vcs_read_setup_raises_error_if_no_version
(
provider
,
mocker
):
...
...
@@ -81,3 +123,226 @@ def test_search_for_vcs_read_setup_raises_error_if_no_version(provider, mocker):
with
pytest
.
raises
(
RuntimeError
):
provider
.
search_for_vcs
(
dependency
)
def
test_search_for_directory_setup_egg_info
(
provider
):
dependency
=
DirectoryDependency
(
"demo"
,
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"git"
/
"github.com"
/
"demo"
/
"demo"
,
)
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"
)],
}
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"
)],
}
@pytest.mark.skipif
(
not
PY35
,
reason
=
"AST parsing does not work for Python <3.4"
)
def
test_search_for_directory_setup_read_setup
(
provider
,
mocker
):
mocker
.
patch
(
"poetry.utils.env.Env.get"
,
return_value
=
MockEnv
())
dependency
=
DirectoryDependency
(
"demo"
,
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"git"
/
"github.com"
/
"demo"
/
"demo"
,
)
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"
)],
}
@pytest.mark.skipif
(
not
PY35
,
reason
=
"AST parsing does not work for Python <3.4"
)
def
test_search_for_directory_setup_read_setup_with_extras
(
provider
,
mocker
):
mocker
.
patch
(
"poetry.utils.env.Env.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_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_poetry_with_extras
(
provider
):
dependency
=
DirectoryDependency
(
"demo"
,
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"project_with_extras"
)
dependency
.
extras
.
append
(
"extras_a"
)
package
=
provider
.
search_for_directory
(
dependency
)[
0
]
assert
package
.
name
==
"project-with-extras"
assert
package
.
version
.
text
==
"1.2.3"
assert
package
.
requires
==
[
get_dependency
(
"pendulum"
,
">=1.4.4"
)]
assert
package
.
extras
==
{
"extras_a"
:
[
get_dependency
(
"pendulum"
,
">=1.4.4"
)],
"extras_b"
:
[
get_dependency
(
"cachy"
,
">=0.2.0"
)],
}
def
test_search_for_file_sdist
(
provider
):
dependency
=
FileDependency
(
"demo"
,
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"distributions"
/
"demo-0.1.0.tar.gz"
,
)
package
=
provider
.
search_for_file
(
dependency
)[
0
]
assert
package
.
name
==
"demo"
assert
package
.
version
.
text
==
"0.1.0"
assert
package
.
requires
==
[
get_dependency
(
"pendulum"
,
">=1.4.4"
)]
assert
package
.
extras
==
{
"foo"
:
[
get_dependency
(
"cleo"
)],
"bar"
:
[
get_dependency
(
"tomlkit"
)],
}
def
test_search_for_file_sdist_with_extras
(
provider
):
dependency
=
FileDependency
(
"demo"
,
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"distributions"
/
"demo-0.1.0.tar.gz"
,
)
dependency
.
extras
.
append
(
"foo"
)
package
=
provider
.
search_for_file
(
dependency
)[
0
]
assert
package
.
name
==
"demo"
assert
package
.
version
.
text
==
"0.1.0"
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_file_wheel
(
provider
):
dependency
=
FileDependency
(
"demo"
,
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"distributions"
/
"demo-0.1.0-py2.py3-none-any.whl"
,
)
package
=
provider
.
search_for_file
(
dependency
)[
0
]
assert
package
.
name
==
"demo"
assert
package
.
version
.
text
==
"0.1.0"
assert
package
.
requires
==
[
get_dependency
(
"pendulum"
,
">=1.4.4"
)]
assert
package
.
extras
==
{
"foo"
:
[
get_dependency
(
"cleo"
)],
"bar"
:
[
get_dependency
(
"tomlkit"
)],
}
def
test_search_for_file_wheel_with_extras
(
provider
):
dependency
=
FileDependency
(
"demo"
,
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"distributions"
/
"demo-0.1.0-py2.py3-none-any.whl"
,
)
dependency
.
extras
.
append
(
"foo"
)
package
=
provider
.
search_for_file
(
dependency
)[
0
]
assert
package
.
name
==
"demo"
assert
package
.
version
.
text
==
"0.1.0"
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"
)],
}
tests/puzzle/test_solver.py
View file @
c497a5d8
...
...
@@ -10,6 +10,7 @@ from poetry.repositories.pool import Pool
from
poetry.repositories.repository
import
Repository
from
poetry.puzzle
import
Solver
from
poetry.puzzle.exceptions
import
SolverProblemError
from
poetry.utils._compat
import
Path
from
poetry.version.markers
import
parse_marker
from
tests.helpers
import
get_dependency
...
...
@@ -913,7 +914,6 @@ def test_solver_can_resolve_git_dependencies(solver, repo, package):
ops
,
[
{
"job"
:
"install"
,
"package"
:
pendulum
},
{
"job"
:
"install"
,
"package"
:
cleo
},
{
"job"
:
"install"
,
"package"
:
get_package
(
"demo"
,
"0.1.2"
)},
],
)
...
...
@@ -1246,7 +1246,6 @@ def test_solver_git_dependencies_update(solver, repo, package, installed):
ops
,
[
{
"job"
:
"install"
,
"package"
:
pendulum
},
{
"job"
:
"install"
,
"package"
:
cleo
},
{
"job"
:
"update"
,
"from"
:
get_package
(
"demo"
,
"0.1.2"
),
...
...
@@ -1255,9 +1254,10 @@ def test_solver_git_dependencies_update(solver, repo, package, installed):
],
)
op
=
ops
[
2
]
op
=
ops
[
1
]
assert
op
.
job_type
==
"update"
assert
op
.
package
.
source_type
==
"git"
assert
op
.
package
.
source_reference
.
startswith
(
"9cf87a2"
)
assert
op
.
initial_package
.
source_reference
==
"123456"
...
...
@@ -1282,7 +1282,6 @@ def test_solver_git_dependencies_update_skipped(solver, repo, package, installed
ops
,
[
{
"job"
:
"install"
,
"package"
:
pendulum
},
{
"job"
:
"install"
,
"package"
:
cleo
},
{
"job"
:
"install"
,
"package"
:
get_package
(
"demo"
,
"0.1.2"
),
...
...
@@ -1290,3 +1289,202 @@ def test_solver_git_dependencies_update_skipped(solver, repo, package, installed
},
],
)
def
test_solver_can_resolve_directory_dependencies
(
solver
,
repo
,
package
):
pendulum
=
get_package
(
"pendulum"
,
"2.0.3"
)
repo
.
add_package
(
pendulum
)
path
=
str
(
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"git"
/
"github.com"
/
"demo"
/
"demo"
)
package
.
add_dependency
(
"demo"
,
{
"path"
:
path
})
ops
=
solver
.
solve
()
check_solver_result
(
ops
,
[
{
"job"
:
"install"
,
"package"
:
pendulum
},
{
"job"
:
"install"
,
"package"
:
get_package
(
"demo"
,
"0.1.2"
)},
],
)
op
=
ops
[
1
]
assert
op
.
package
.
name
==
"demo"
assert
op
.
package
.
version
.
text
==
"0.1.2"
assert
op
.
package
.
source_type
==
"directory"
assert
op
.
package
.
source_url
==
path
def
test_solver_can_resolve_directory_dependencies_with_extras
(
solver
,
repo
,
package
):
pendulum
=
get_package
(
"pendulum"
,
"2.0.3"
)
cleo
=
get_package
(
"cleo"
,
"1.0.0"
)
repo
.
add_package
(
pendulum
)
repo
.
add_package
(
cleo
)
path
=
str
(
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"git"
/
"github.com"
/
"demo"
/
"demo"
)
package
.
add_dependency
(
"demo"
,
{
"path"
:
path
,
"extras"
:
[
"foo"
]})
ops
=
solver
.
solve
()
check_solver_result
(
ops
,
[
{
"job"
:
"install"
,
"package"
:
cleo
},
{
"job"
:
"install"
,
"package"
:
pendulum
},
{
"job"
:
"install"
,
"package"
:
get_package
(
"demo"
,
"0.1.2"
)},
],
)
op
=
ops
[
2
]
assert
op
.
package
.
name
==
"demo"
assert
op
.
package
.
version
.
text
==
"0.1.2"
assert
op
.
package
.
source_type
==
"directory"
assert
op
.
package
.
source_url
==
path
def
test_solver_can_resolve_sdist_dependencies
(
solver
,
repo
,
package
):
pendulum
=
get_package
(
"pendulum"
,
"2.0.3"
)
repo
.
add_package
(
pendulum
)
path
=
str
(
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"distributions"
/
"demo-0.1.0.tar.gz"
)
package
.
add_dependency
(
"demo"
,
{
"path"
:
path
})
ops
=
solver
.
solve
()
check_solver_result
(
ops
,
[
{
"job"
:
"install"
,
"package"
:
pendulum
},
{
"job"
:
"install"
,
"package"
:
get_package
(
"demo"
,
"0.1.0"
)},
],
)
op
=
ops
[
1
]
assert
op
.
package
.
name
==
"demo"
assert
op
.
package
.
version
.
text
==
"0.1.0"
assert
op
.
package
.
source_type
==
"file"
assert
op
.
package
.
source_url
==
path
def
test_solver_can_resolve_sdist_dependencies_with_extras
(
solver
,
repo
,
package
):
pendulum
=
get_package
(
"pendulum"
,
"2.0.3"
)
cleo
=
get_package
(
"cleo"
,
"1.0.0"
)
repo
.
add_package
(
pendulum
)
repo
.
add_package
(
cleo
)
path
=
str
(
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"distributions"
/
"demo-0.1.0.tar.gz"
)
package
.
add_dependency
(
"demo"
,
{
"path"
:
path
,
"extras"
:
[
"foo"
]})
ops
=
solver
.
solve
()
check_solver_result
(
ops
,
[
{
"job"
:
"install"
,
"package"
:
cleo
},
{
"job"
:
"install"
,
"package"
:
pendulum
},
{
"job"
:
"install"
,
"package"
:
get_package
(
"demo"
,
"0.1.0"
)},
],
)
op
=
ops
[
2
]
assert
op
.
package
.
name
==
"demo"
assert
op
.
package
.
version
.
text
==
"0.1.0"
assert
op
.
package
.
source_type
==
"file"
assert
op
.
package
.
source_url
==
path
def
test_solver_can_resolve_wheel_dependencies
(
solver
,
repo
,
package
):
pendulum
=
get_package
(
"pendulum"
,
"2.0.3"
)
repo
.
add_package
(
pendulum
)
path
=
str
(
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"distributions"
/
"demo-0.1.0-py2.py3-none-any.whl"
)
package
.
add_dependency
(
"demo"
,
{
"path"
:
path
})
ops
=
solver
.
solve
()
check_solver_result
(
ops
,
[
{
"job"
:
"install"
,
"package"
:
pendulum
},
{
"job"
:
"install"
,
"package"
:
get_package
(
"demo"
,
"0.1.0"
)},
],
)
op
=
ops
[
1
]
assert
op
.
package
.
name
==
"demo"
assert
op
.
package
.
version
.
text
==
"0.1.0"
assert
op
.
package
.
source_type
==
"file"
assert
op
.
package
.
source_url
==
path
def
test_solver_can_resolve_wheel_dependencies_with_extras
(
solver
,
repo
,
package
):
pendulum
=
get_package
(
"pendulum"
,
"2.0.3"
)
cleo
=
get_package
(
"cleo"
,
"1.0.0"
)
repo
.
add_package
(
pendulum
)
repo
.
add_package
(
cleo
)
path
=
str
(
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
/
"distributions"
/
"demo-0.1.0-py2.py3-none-any.whl"
)
package
.
add_dependency
(
"demo"
,
{
"path"
:
path
,
"extras"
:
[
"foo"
]})
ops
=
solver
.
solve
()
check_solver_result
(
ops
,
[
{
"job"
:
"install"
,
"package"
:
cleo
},
{
"job"
:
"install"
,
"package"
:
pendulum
},
{
"job"
:
"install"
,
"package"
:
get_package
(
"demo"
,
"0.1.0"
)},
],
)
op
=
ops
[
2
]
assert
op
.
package
.
name
==
"demo"
assert
op
.
package
.
version
.
text
==
"0.1.0"
assert
op
.
package
.
source_type
==
"file"
assert
op
.
package
.
source_url
==
path
tests/test_poetry.py
View file @
c497a5d8
...
...
@@ -64,25 +64,21 @@ def test_poetry():
assert
demo
.
is_file
()
assert
not
demo
.
is_vcs
()
assert
demo
.
name
==
"demo"
assert
demo
.
pretty_constraint
==
"
0.1.0
"
assert
demo
.
pretty_constraint
==
"
*
"
demo
=
dependencies
[
"my-package"
]
assert
not
demo
.
is_file
()
assert
demo
.
is_directory
()
assert
not
demo
.
is_vcs
()
assert
demo
.
name
==
"my-package"
assert
demo
.
pretty_constraint
==
"0.1.2"
assert
demo
.
package
.
requires
[
0
]
.
name
==
"pendulum"
assert
demo
.
package
.
requires
[
1
]
.
name
==
"cachy"
assert
demo
.
package
.
requires
[
1
]
.
extras
==
[
"msgpack"
]
assert
demo
.
pretty_constraint
==
"*"
simple_project
=
dependencies
[
"simple-project"
]
assert
not
simple_project
.
is_file
()
assert
simple_project
.
is_directory
()
assert
not
simple_project
.
is_vcs
()
assert
simple_project
.
name
==
"simple-project"
assert
simple_project
.
pretty_constraint
==
"1.2.3"
assert
simple_project
.
package
.
requires
==
[]
assert
simple_project
.
pretty_constraint
==
"*"
assert
"db"
in
package
.
extras
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment