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
37eb2562
Unverified
Commit
37eb2562
authored
May 30, 2018
by
Sébastien Eustace
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix Python requirements not properly set when resolving dependencies
parent
4871b627
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
146 additions
and
152 deletions
+146
-152
CHANGELOG.md
+1
-0
poetry/packages/dependency.py
+10
-2
poetry/packages/locker.py
+1
-1
poetry/puzzle/provider.py
+2
-2
poetry/puzzle/solver.py
+84
-136
tests/installation/fixtures/with-optional-dependencies.test
+6
-3
tests/installation/fixtures/with-platform-dependencies.test
+3
-0
tests/installation/test_installer.py
+2
-0
tests/puzzle/test_solver.py
+37
-8
No files found.
CHANGELOG.md
View file @
37eb2562
...
...
@@ -6,6 +6,7 @@
-
Fixed handling of
`in`
environment markers with commas.
-
Fixed a
`UnicodeDecodeError`
when an error occurs in venv.
-
Fixed Python requirements not properly set when resolving dependencies.
## [0.10.1] - 2018-05-28
...
...
poetry/packages/dependency.py
View file @
37eb2562
...
...
@@ -44,6 +44,8 @@ class Dependency(object):
self
.
_extras
=
[]
self
.
_in_extras
=
[]
self
.
_activated
=
not
self
.
_optional
self
.
is_root
=
False
@property
...
...
@@ -106,6 +108,9 @@ class Dependency(object):
def
is_optional
(
self
):
return
self
.
_optional
def
is_activated
(
self
):
return
self
.
_activated
def
is_vcs
(
self
):
return
False
...
...
@@ -244,13 +249,16 @@ class Dependency(object):
"""
Set the dependency as mandatory.
"""
self
.
_
optional
=
Fals
e
self
.
_
activated
=
Tru
e
def
deactivate
(
self
):
"""
Set the dependency as optional.
"""
self
.
_optional
=
True
if
not
self
.
_optional
:
self
.
_optional
=
True
self
.
_activated
=
False
def
with_constraint
(
self
,
constraint
):
new
=
Dependency
(
...
...
poetry/packages/locker.py
View file @
37eb2562
...
...
@@ -171,7 +171,7 @@ class Locker:
def
_dump_package
(
self
,
package
):
# type: (poetry.packages.Package) -> dict
dependencies
=
{}
for
dependency
in
package
.
requires
:
if
dependency
.
is_optional
():
if
dependency
.
is_optional
()
and
not
dependency
.
is_activated
()
:
continue
dependencies
[
dependency
.
pretty_name
]
=
str
(
dependency
.
pretty_constraint
)
...
...
poetry/puzzle/provider.py
View file @
37eb2562
...
...
@@ -303,7 +303,7 @@ class Provider:
return
[
r
for
r
in
package
.
requires
if
not
r
.
is_
optional
()
and
r
.
name
not
in
self
.
UNSAFE_PACKAGES
if
not
r
.
is_
activated
()
and
r
.
name
not
in
self
.
UNSAFE_PACKAGES
]
else
:
return
Dependencies
(
package
,
self
)
...
...
@@ -324,7 +324,7 @@ class Provider:
return
[
r
for
r
in
package
.
requires
if
not
r
.
is_optional
()
if
r
.
is_activated
()
and
self
.
_package
.
python_constraint
.
allows_any
(
r
.
python_constraint
)
and
self
.
_package
.
platform_constraint
.
matches
(
package
.
platform_constraint
)
and
r
.
name
not
in
self
.
UNSAFE_PACKAGES
...
...
poetry/puzzle/solver.py
View file @
37eb2562
This diff is collapsed.
Click to expand it.
tests/installation/fixtures/with-optional-dependencies.test
View file @
37eb2562
...
...
@@ -17,7 +17,7 @@ python-versions = "*"
platform
=
"*"
[
package
.
requirements
]
python
=
"
>=2.4,<2.5
"
python
=
"
~2.4
"
[[
package
]]
name
=
"C"
...
...
@@ -32,7 +32,7 @@ platform = "*"
D
=
"^1.2"
[
package
.
requirements
]
python
=
"
>=2.7,<2.8 || >=3.4,<4.0
"
python
=
"
~2.7 || ^3.4
"
[[
package
]]
name
=
"D"
...
...
@@ -44,7 +44,10 @@ python-versions = "*"
platform
=
"*"
[
package
.
requirements
]
python
=
">=2.7,<2.8 || >=3.4,<4.0"
python
=
"~2.7 || ^3.4"
[
extras
]
foo
=
[
"A"
]
[
metadata
]
python
-
versions
=
"~2.7 || ^3.4"
...
...
tests/installation/fixtures/with-platform-dependencies.test
View file @
37eb2562
...
...
@@ -46,6 +46,9 @@ platform = "*"
[
package
.
requirements
]
platform
=
"darwin"
[
extras
]
foo
=
[
"A"
]
[
metadata
]
python
-
versions
=
"*"
platform
=
"*"
...
...
tests/installation/test_installer.py
View file @
37eb2562
...
...
@@ -316,6 +316,7 @@ def test_run_with_optional_and_python_restricted_dependencies(
repo
.
add_package
(
package_c13
)
repo
.
add_package
(
package_d
)
package
.
extras
=
{
"foo"
:
[
get_dependency
(
"A"
,
"~1.0"
)]}
package
.
add_dependency
(
"A"
,
{
"version"
:
"~1.0"
,
"optional"
:
True
})
package
.
add_dependency
(
"B"
,
{
"version"
:
"^1.0"
,
"python"
:
"~2.4"
})
package
.
add_dependency
(
"C"
,
{
"version"
:
"^1.0"
,
"python"
:
"~2.7 || ^3.4"
})
...
...
@@ -350,6 +351,7 @@ def test_run_with_optional_and_platform_restricted_dependencies(
repo
.
add_package
(
package_c13
)
repo
.
add_package
(
package_d
)
package
.
extras
=
{
"foo"
:
[
get_dependency
(
"A"
,
"~1.0"
)]}
package
.
add_dependency
(
"A"
,
{
"version"
:
"~1.0"
,
"optional"
:
True
})
package
.
add_dependency
(
"B"
,
{
"version"
:
"^1.0"
,
"platform"
:
"custom"
})
package
.
add_dependency
(
"C"
,
{
"version"
:
"^1.0"
,
"platform"
:
"darwin"
})
...
...
tests/puzzle/test_solver.py
View file @
37eb2562
...
...
@@ -540,9 +540,9 @@ def test_solver_sub_dependencies_with_requirements(solver, repo, package):
def
test_solver_sub_dependencies_with_requirements_complex
(
solver
,
repo
,
package
):
package
.
add_dependency
(
"A"
)
package
.
add_dependency
(
"B"
)
package
.
add_dependency
(
"C"
)
package
.
add_dependency
(
"A"
,
{
"version"
:
"^1.0"
,
"python"
:
"<5.0"
}
)
package
.
add_dependency
(
"B"
,
{
"version"
:
"^1.0"
,
"python"
:
"<5.0"
}
)
package
.
add_dependency
(
"C"
,
{
"version"
:
"^1.0"
,
"python"
:
"<4.0"
}
)
package_a
=
get_package
(
"A"
,
"1.0"
)
package_b
=
get_package
(
"B"
,
"1.0"
)
...
...
@@ -551,11 +551,11 @@ def test_solver_sub_dependencies_with_requirements_complex(solver, repo, package
package_e
=
get_package
(
"E"
,
"1.0"
)
package_f
=
get_package
(
"F"
,
"1.0"
)
package_a
.
add_dependency
(
"B"
,
"^1.0"
)
package_a
.
add_dependency
(
"B"
,
{
"version"
:
"^1.0"
,
"python"
:
"<4.0"
}
)
package_a
.
add_dependency
(
"D"
,
{
"version"
:
"^1.0"
,
"python"
:
"<4.0"
})
package_b
.
add_dependency
(
"E"
,
{
"version"
:
"^1.0"
,
"platform"
:
"win32"
})
package_b
.
add_dependency
(
"F"
)
package_c
.
add_dependency
(
"F"
,
"^1.0"
)
package_b
.
add_dependency
(
"F"
,
{
"version"
:
"^1.0"
,
"python"
:
"<5.0"
}
)
package_c
.
add_dependency
(
"F"
,
{
"version"
:
"^1.0"
,
"python"
:
"<4.0"
}
)
package_d
.
add_dependency
(
"F"
)
repo
.
add_package
(
package_a
)
...
...
@@ -579,11 +579,17 @@ def test_solver_sub_dependencies_with_requirements_complex(solver, repo, package
],
)
op
=
ops
[
0
]
assert
op
.
package
.
requirements
==
{
"python"
:
"<4.0"
}
op
=
ops
[
1
]
assert
op
.
package
.
requirements
==
{
"platform"
:
"win32"
}
assert
op
.
package
.
requirements
==
{
"platform"
:
"win32"
,
"python"
:
"<5.0"
}
op
=
ops
[
2
]
assert
op
.
package
.
requirements
==
{}
assert
op
.
package
.
requirements
==
{
"python"
:
"<5.0"
}
op
=
ops
[
4
]
assert
op
.
package
.
requirements
==
{
"python"
:
"<5.0"
}
def
test_solver_sub_dependencies_with_not_supported_python_version
(
...
...
@@ -730,3 +736,26 @@ def test_solver_with_dependency_and_prerelease_sub_dependencies(solver, repo, pa
{
"job"
:
"install"
,
"package"
:
package_a
},
],
)
def
test_solver_circular_dependency
(
solver
,
repo
,
package
):
package
.
add_dependency
(
"A"
)
package_a
=
get_package
(
"A"
,
"1.0"
)
package_a
.
add_dependency
(
"B"
,
"^1.0"
)
package_b
=
get_package
(
"B"
,
"1.0"
)
package_b
.
add_dependency
(
"A"
,
"^1.0"
)
repo
.
add_package
(
package_a
)
repo
.
add_package
(
package_b
)
ops
=
solver
.
solve
()
check_solver_result
(
ops
,
[
{
"job"
:
"install"
,
"package"
:
package_b
},
{
"job"
:
"install"
,
"package"
:
package_a
},
],
)
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