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
26f13f78
Unverified
Commit
26f13f78
authored
Jun 28, 2021
by
Sébastien Eustace
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor dependencies handling to support groups
parent
52788238
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
178 additions
and
154 deletions
+178
-154
poetry.lock
+10
-6
poetry/console/commands/debug/resolve.py
+1
-1
poetry/console/commands/show.py
+14
-8
poetry/console/commands/update.py
+3
-1
poetry/inspection/info.py
+4
-2
poetry/installation/installer.py
+27
-26
poetry/packages/locker.py
+3
-2
poetry/packages/project_package.py
+2
-0
poetry/puzzle/provider.py
+11
-5
poetry/puzzle/solver.py
+18
-7
pyproject.toml
+1
-1
tests/console/commands/test_add.py
+6
-6
tests/console/commands/test_show.py
+2
-2
tests/fixtures/sample_project/pyproject.toml
+1
-1
tests/fixtures/up_to_date_lock/poetry.lock
+1
-1
tests/helpers.py
+11
-9
tests/installation/test_installer.py
+11
-23
tests/installation/test_installer_old.py
+8
-8
tests/packages/test_locker.py
+7
-7
tests/puzzle/test_solver.py
+21
-21
tests/utils/test_exporter.py
+16
-17
No files found.
poetry.lock
View file @
26f13f78
...
...
@@ -397,12 +397,19 @@ version = "1.1.0a5"
description = "Poetry PEP 517 Build Backend"
category = "main"
optional = false
python-versions = ">=3.6,<4.0"
python-versions = "^3.6"
develop = false
[package.dependencies]
dataclasses = {version = ">=0.8", markers = "python_version >= \"3.6\" and python_version < \"3.7\""}
importlib-metadata = {version = ">=1.7.0", markers = "python_version < \"3.8\""}
[package.source]
type = "git"
url = "https://github.com/python-poetry/poetry-core.git"
reference = "master"
resolved_reference = "afaa6903f654b695d9411fb548ad10630287c19f"
[[package]]
name = "pre-commit"
version = "2.12.1"
...
...
@@ -701,7 +708,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pyt
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
content-hash = "
ac67bc6eacbb6b633f9568d69533d80456f632c7bfb9a2aa61aa9dd98e862473
"
content-hash = "
e38d34da68dcd63ef9f9d999f60b8e19d8da7f988031c3a6e6865d51c1fadeda
"
[metadata.files]
appdirs = [
...
...
@@ -967,10 +974,7 @@ pluggy = [
{file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
{file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
]
poetry-core = [
{file = "poetry-core-1.1.0a5.tar.gz", hash = "sha256:1b886de26026865325eae86a5d12eb154b80c0add8067c106eb706757594d85f"},
{file = "poetry_core-1.1.0a5-py3-none-any.whl", hash = "sha256:b347525c1417e9b5c6aee52967eff98c0886853a9e8ab1b9dfb2659913dd37bc"},
]
poetry-core = []
pre-commit = [
{file = "pre_commit-2.12.1-py2.py3-none-any.whl", hash = "sha256:70c5ec1f30406250b706eda35e868b87e3e4ba099af8787e3e8b4b01e84f4712"},
{file = "pre_commit-2.12.1.tar.gz", hash = "sha256:900d3c7e1bf4cf0374bb2893c24c23304952181405b4d88c9c40b72bda1bb8a9"},
...
...
poetry/console/commands/debug/resolve.py
View file @
26f13f78
...
...
@@ -99,7 +99,7 @@ class DebugResolveCommand(InitCommand):
packages
=
[
op
.
package
for
op
in
ops
]
repo
=
Repository
(
packages
)
requires
=
package
.
requires
+
package
.
dev
_requires
requires
=
package
.
all
_requires
for
pkg
in
repo
.
packages
:
for
require
in
requires
:
if
pkg
.
name
==
require
.
name
:
...
...
poetry/console/commands/show.py
View file @
26f13f78
...
...
@@ -68,14 +68,17 @@ lists all packages available."""
# Show tree view if requested
if
self
.
option
(
"tree"
)
and
not
package
:
requires
=
self
.
poetry
.
package
.
requires
groups
=
[
"default"
]
if
include_dev
:
requires
+=
self
.
poetry
.
package
.
dev_requires
groups
.
append
(
"dev"
)
package
=
self
.
poetry
.
package
.
with_dependency_groups
(
groups
,
only
=
True
)
requires
=
package
.
all_requires
packages
=
locked_repo
.
packages
for
p
ackage
in
packages
:
for
p
kg
in
packages
:
for
require
in
requires
:
if
p
ackage
.
name
==
require
.
name
:
self
.
display_package_tree
(
self
.
_io
,
p
ackage
,
locked_repo
)
if
p
kg
.
name
==
require
.
name
:
self
.
display_package_tree
(
self
.
_io
,
p
kg
,
locked_repo
)
break
return
0
...
...
@@ -386,13 +389,16 @@ lists all packages available."""
# find the latest version allowed in this pool
if
package
.
source_type
in
(
"git"
,
"file"
,
"directory"
):
requires
=
self
.
poetry
.
package
.
requires
groups
=
[
"default"
]
if
include_dev
:
requires
=
requires
+
self
.
poetry
.
package
.
dev_requires
groups
.
append
(
"dev"
)
root
=
self
.
poetry
.
package
.
with_dependency_groups
(
groups
,
only
=
True
)
requires
=
root
.
all_requires
for
dep
in
requires
:
if
dep
.
name
==
package
.
name
:
provider
=
Provider
(
self
.
poetry
.
package
,
self
.
poetry
.
pool
,
NullIO
())
provider
=
Provider
(
root
,
self
.
poetry
.
pool
,
NullIO
())
if
dep
.
is_vcs
():
return
provider
.
search_for_vcs
(
dep
)[
0
]
...
...
poetry/console/commands/update.py
View file @
26f13f78
...
...
@@ -37,7 +37,9 @@ class UpdateCommand(InstallerCommand):
if
packages
:
self
.
_installer
.
whitelist
({
name
:
"*"
for
name
in
packages
})
self
.
_installer
.
dev_mode
(
not
self
.
option
(
"no-dev"
))
if
self
.
option
(
"no-dev"
):
self
.
_installer
.
with_groups
([
"dev"
])
self
.
_installer
.
dry_run
(
self
.
option
(
"dry-run"
))
self
.
_installer
.
execute_operations
(
not
self
.
option
(
"lock"
))
...
...
poetry/inspection/info.py
View file @
26f13f78
...
...
@@ -157,7 +157,9 @@ class PackageInfo:
poetry_package
=
self
.
_get_poetry_package
(
path
=
root_dir
or
self
.
_source_url
)
if
poetry_package
:
package
.
extras
=
poetry_package
.
extras
package
.
requires
=
poetry_package
.
requires
for
dependency
in
poetry_package
.
requires
:
package
.
add_dependency
(
dependency
)
return
package
seen_requirements
=
set
()
...
...
@@ -191,7 +193,7 @@ class PackageInfo:
req
=
dependency
.
to_pep_508
(
with_extras
=
True
)
if
req
not
in
seen_requirements
:
package
.
requires
.
append
(
dependency
)
package
.
add_dependency
(
dependency
)
seen_requirements
.
add
(
req
)
return
package
...
...
poetry/installation/installer.py
View file @
26f13f78
...
...
@@ -54,8 +54,10 @@ class Installer:
self
.
_update
=
False
self
.
_verbose
=
False
self
.
_write_lock
=
True
self
.
_dev_mode
=
True
self
.
_dev_only
=
False
self
.
_without_groups
=
None
self
.
_with_groups
=
None
self
.
_only_groups
=
None
self
.
_execute_operations
=
True
self
.
_lock
=
False
...
...
@@ -137,21 +139,20 @@ class Installer:
def
is_verbose
(
self
)
->
bool
:
return
self
.
_verbose
def
dev_mode
(
self
,
dev_mode
:
bool
=
True
)
->
"Installer"
:
self
.
_
dev_mode
=
dev_mode
def
without_groups
(
self
,
groups
:
List
[
str
]
)
->
"Installer"
:
self
.
_
without_groups
=
groups
return
self
def
is_dev_mode
(
self
)
->
bool
:
return
self
.
_dev_mode
def
dev_only
(
self
,
dev_only
:
bool
=
False
)
->
"Installer"
:
self
.
_dev_only
=
dev_only
def
with_groups
(
self
,
groups
:
List
[
str
])
->
"Installer"
:
self
.
_with_groups
=
groups
return
self
def
is_dev_only
(
self
)
->
bool
:
return
self
.
_dev_only
def
only_groups
(
self
,
groups
:
List
[
str
])
->
"Installer"
:
self
.
_only_groups
=
groups
return
self
def
update
(
self
,
update
:
bool
=
True
)
->
"Installer"
:
self
.
_update
=
update
...
...
@@ -283,13 +284,20 @@ class Installer:
# If we are only in lock mode, no need to go any further
return
0
root
=
self
.
_package
if
not
self
.
is_dev_mode
():
root
=
root
.
clone
()
del
root
.
dev_requires
[:]
elif
self
.
is_dev_only
():
root
=
root
.
clone
()
del
root
.
requires
[:]
if
self
.
_without_groups
or
self
.
_with_groups
or
self
.
_only_groups
:
if
self
.
_with_groups
:
# Default dependencies and opt-in optional dependencies
root
=
self
.
_package
.
without_dependency_groups
(
self
.
_with_groups
)
elif
self
.
_without_groups
:
# Default dependencies without elected groups
root
=
self
.
_package
.
without_dependency_groups
(
self
.
_without_groups
)
else
:
# Only selected groups
root
=
self
.
_package
.
with_dependency_groups
(
self
.
_only_groups
,
only
=
True
)
else
:
root
=
self
.
_package
.
without_optional_dependency_groups
()
if
self
.
_io
.
is_verbose
():
self
.
_io
.
write_line
(
""
)
...
...
@@ -502,9 +510,7 @@ class Installer:
for
installed
in
installed_repo
.
packages
:
if
locked
.
name
==
installed
.
name
:
is_installed
=
True
if
locked
.
category
==
"dev"
and
not
self
.
is_dev_mode
():
ops
.
append
(
Uninstall
(
locked
))
elif
locked
.
optional
and
locked
.
name
not
in
extra_packages
:
if
locked
.
optional
and
locked
.
name
not
in
extra_packages
:
# Installed but optional and not requested in extras
ops
.
append
(
Uninstall
(
locked
))
elif
locked
.
version
!=
installed
.
version
:
...
...
@@ -553,11 +559,6 @@ class Installer:
if
package
.
name
not
in
extra_packages
:
op
.
skip
(
"Not required"
)
# If the package is a dev package and dev packages
# are not requested, we skip it
if
package
.
category
==
"dev"
and
not
self
.
is_dev_mode
():
op
.
skip
(
"Dev dependencies not requested"
)
def
_get_extra_packages
(
self
,
repo
:
Repository
)
->
List
[
str
]:
"""
Returns all package names required by extras.
...
...
poetry/packages/locker.py
View file @
26f13f78
...
...
@@ -47,7 +47,7 @@ class Locker:
_VERSION
=
"1.1"
_relevant_keys
=
[
"dependencies"
,
"
dev-dependencies
"
,
"source"
,
"extras"
]
_relevant_keys
=
[
"dependencies"
,
"
group
"
,
"source"
,
"extras"
]
def
__init__
(
self
,
lock
:
Union
[
str
,
Path
],
local_config
:
dict
)
->
None
:
self
.
_lock
=
TOMLFile
(
lock
)
...
...
@@ -128,7 +128,8 @@ class Locker:
source_resolved_reference
=
source
.
get
(
"resolved_reference"
),
)
package
.
description
=
info
.
get
(
"description"
,
""
)
package
.
category
=
info
[
"category"
]
package
.
category
=
info
.
get
(
"category"
,
"main"
)
package
.
groups
=
info
.
get
(
"groups"
,
[
"default"
])
package
.
optional
=
info
[
"optional"
]
if
"hashes"
in
lock_data
[
"metadata"
]:
# Old lock so we create dummy files from the hashes
...
...
poetry/packages/project_package.py
View file @
26f13f78
...
...
@@ -21,3 +21,5 @@ class ProjectPackage(_ProjectPackage):
else
:
self
.
_version
=
version
self
.
_pretty_version
=
pretty_version
or
version
.
text
return
self
poetry/puzzle/provider.py
View file @
26f13f78
...
...
@@ -330,7 +330,8 @@ class Provider:
for
dep
in
package
.
extras
[
extra
]:
dep
.
activate
()
package
.
requires
+=
package
.
extras
[
extra
]
for
extra_dep
in
package
.
extras
[
extra
]:
package
.
add_dependency
(
extra_dep
)
dependency
.
_constraint
=
package
.
version
dependency
.
_pretty_constraint
=
package
.
version
.
text
...
...
@@ -535,10 +536,10 @@ class Provider:
# - pypiwin32 (219); sys_platform == "win32" and python_version < "3.6"
duplicates
=
dict
()
for
dep
in
dependencies
:
if
dep
.
name
not
in
duplicates
:
duplicates
[
dep
.
name
]
=
[]
if
dep
.
complete_
name
not
in
duplicates
:
duplicates
[
dep
.
complete_
name
]
=
[]
duplicates
[
dep
.
name
]
.
append
(
dep
)
duplicates
[
dep
.
complete_
name
]
.
append
(
dep
)
dependencies
=
[]
for
dep_name
,
deps
in
duplicates
.
items
():
...
...
@@ -699,7 +700,12 @@ class Provider:
clean_dependencies
.
append
(
dep
)
package
.
requires
=
clean_dependencies
package
=
DependencyPackage
(
package
.
dependency
,
package
.
with_dependency_groups
([],
only
=
True
)
)
for
dep
in
clean_dependencies
:
package
.
add_dependency
(
dep
)
return
package
...
...
poetry/puzzle/solver.py
View file @
26f13f78
...
...
@@ -6,6 +6,7 @@ from contextlib import contextmanager
from
typing
import
TYPE_CHECKING
from
typing
import
Callable
from
typing
import
Dict
from
typing
import
FrozenSet
from
typing
import
List
from
typing
import
Optional
from
typing
import
Tuple
...
...
@@ -254,7 +255,7 @@ class Solver:
for
dep
in
package
.
requires
:
if
dep
not
in
pkg
.
requires
:
pkg
.
requires
.
append
(
dep
)
pkg
.
add_dependency
(
dep
)
return
packages
,
depths
...
...
@@ -300,7 +301,7 @@ class Solver:
continue
if
dep
not
in
_package
.
requires
:
_package
.
requires
.
append
(
dep
)
_package
.
add_dependency
(
dep
)
continue
...
...
@@ -312,7 +313,9 @@ class Solver:
class
DFSNode
:
def
__init__
(
self
,
id
:
Tuple
[
str
,
str
,
bool
],
name
:
str
,
base_name
:
str
)
->
None
:
def
__init__
(
self
,
id
:
Tuple
[
str
,
FrozenSet
[
str
],
bool
],
name
:
str
,
base_name
:
str
)
->
None
:
self
.
id
=
id
self
.
name
=
name
self
.
base_name
=
base_name
...
...
@@ -423,13 +426,15 @@ class PackageNode(DFSNode):
if
not
previous
:
self
.
category
=
"dev"
self
.
groups
=
frozenset
()
self
.
optional
=
True
else
:
self
.
category
=
dep
.
category
self
.
category
=
"main"
if
"default"
in
dep
.
groups
else
"dev"
self
.
groups
=
dep
.
groups
self
.
optional
=
dep
.
is_optional
()
super
()
.
__init__
(
(
package
.
complete_name
,
self
.
category
,
self
.
optional
),
(
package
.
complete_name
,
self
.
groups
,
self
.
optional
),
package
.
complete_name
,
package
.
name
,
)
...
...
@@ -470,7 +475,7 @@ class PackageNode(DFSNode):
# we merge the requirements
if
any
(
child
.
package
.
name
==
pkg
.
name
and
child
.
category
==
dependency
.
category
and
child
.
groups
==
dependency
.
groups
for
child
in
children
):
continue
...
...
@@ -505,14 +510,20 @@ def aggregate_package_nodes(
)
->
Tuple
[
Package
,
int
]:
package
=
nodes
[
0
]
.
package
depth
=
max
(
node
.
depth
for
node
in
nodes
)
groups
=
[]
for
node
in
nodes
:
groups
.
extend
(
node
.
groups
)
category
=
(
"main"
if
any
(
node
.
category
==
"main"
for
node
in
children
+
nodes
)
else
"dev"
"main"
if
any
(
"default"
in
node
.
groups
for
node
in
children
+
nodes
)
else
"dev"
)
optional
=
all
(
node
.
optional
for
node
in
children
+
nodes
)
for
node
in
nodes
:
node
.
depth
=
depth
node
.
category
=
category
node
.
optional
=
optional
package
.
category
=
category
package
.
optional
=
optional
return
package
,
depth
pyproject.toml
View file @
26f13f78
...
...
@@ -31,7 +31,7 @@ generate-setup-file = false
[tool.poetry.dependencies]
python
=
"^3.6"
poetry-core
=
"~1.1.0a5"
poetry-core
=
{
git
=
"https://github.com/python-poetry/poetry-core.git"
,
branch
=
"master"
}
cleo
=
"^1.0.0a1"
crashtest
=
"^0.3.0"
requests
=
"^2.18"
...
...
tests/console/commands/test_add.py
View file @
26f13f78
...
...
@@ -116,7 +116,7 @@ def test_add_constraint_with_extras(app, repo, tester):
cachy1
=
get_package
(
"cachy"
,
"0.1.0"
)
cachy1
.
extras
=
{
"msgpack"
:
[
get_dependency
(
"msgpack-python"
)]}
msgpack_dep
=
get_dependency
(
"msgpack-python"
,
">=0.5 <0.6"
,
optional
=
True
)
cachy1
.
requires
=
[
msgpack_dep
]
cachy1
.
add_dependency
(
msgpack_dep
)
repo
.
add_package
(
get_package
(
"cachy"
,
"0.2.0"
))
repo
.
add_package
(
cachy1
)
...
...
@@ -144,7 +144,7 @@ Package operations: 2 installs, 0 updates, 0 removals
def
test_add_constraint_dependencies
(
app
,
repo
,
tester
):
cachy2
=
get_package
(
"cachy"
,
"0.2.0"
)
msgpack_dep
=
get_dependency
(
"msgpack-python"
,
">=0.5 <0.6"
)
cachy2
.
requires
=
[
msgpack_dep
]
cachy2
.
add_dependency
(
msgpack_dep
)
repo
.
add_package
(
get_package
(
"cachy"
,
"0.1.0"
))
repo
.
add_package
(
cachy2
)
...
...
@@ -443,7 +443,7 @@ def test_add_constraint_with_extras_option(app, repo, tester):
cachy2
=
get_package
(
"cachy"
,
"0.2.0"
)
cachy2
.
extras
=
{
"msgpack"
:
[
get_dependency
(
"msgpack-python"
)]}
msgpack_dep
=
get_dependency
(
"msgpack-python"
,
">=0.5 <0.6"
,
optional
=
True
)
cachy2
.
requires
=
[
msgpack_dep
]
cachy2
.
add_dependency
(
msgpack_dep
)
repo
.
add_package
(
get_package
(
"cachy"
,
"0.1.0"
))
repo
.
add_package
(
cachy2
)
...
...
@@ -919,7 +919,7 @@ def test_add_constraint_with_extras_old_installer(app, repo, installer, old_test
cachy1
=
get_package
(
"cachy"
,
"0.1.0"
)
cachy1
.
extras
=
{
"msgpack"
:
[
get_dependency
(
"msgpack-python"
)]}
msgpack_dep
=
get_dependency
(
"msgpack-python"
,
">=0.5 <0.6"
,
optional
=
True
)
cachy1
.
requires
=
[
msgpack_dep
]
cachy1
.
add_dependency
(
msgpack_dep
)
repo
.
add_package
(
get_package
(
"cachy"
,
"0.2.0"
))
repo
.
add_package
(
cachy1
)
...
...
@@ -948,7 +948,7 @@ Package operations: 2 installs, 0 updates, 0 removals
def
test_add_constraint_dependencies_old_installer
(
app
,
repo
,
installer
,
old_tester
):
cachy2
=
get_package
(
"cachy"
,
"0.2.0"
)
msgpack_dep
=
get_dependency
(
"msgpack-python"
,
">=0.5 <0.6"
)
cachy2
.
requires
=
[
msgpack_dep
]
cachy2
.
add_dependency
(
msgpack_dep
)
repo
.
add_package
(
get_package
(
"cachy"
,
"0.1.0"
))
repo
.
add_package
(
cachy2
)
...
...
@@ -1245,7 +1245,7 @@ def test_add_constraint_with_extras_option_old_installer(
cachy2
=
get_package
(
"cachy"
,
"0.2.0"
)
cachy2
.
extras
=
{
"msgpack"
:
[
get_dependency
(
"msgpack-python"
)]}
msgpack_dep
=
get_dependency
(
"msgpack-python"
,
">=0.5 <0.6"
,
optional
=
True
)
cachy2
.
requires
=
[
msgpack_dep
]
cachy2
.
add_dependency
(
msgpack_dep
)
repo
.
add_package
(
get_package
(
"cachy"
,
"0.1.0"
))
repo
.
add_package
(
cachy2
)
...
...
tests/console/commands/test_show.py
View file @
26f13f78
...
...
@@ -13,7 +13,7 @@ def test_show_basic_with_installed_packages(tester, poetry, installed):
poetry
.
package
.
add_dependency
(
Factory
.
create_dependency
(
"cachy"
,
"^0.1.0"
))
poetry
.
package
.
add_dependency
(
Factory
.
create_dependency
(
"pendulum"
,
"^2.0.0"
))
poetry
.
package
.
add_dependency
(
Factory
.
create_dependency
(
"pytest"
,
"^3.7.3"
,
category
=
"dev"
)
Factory
.
create_dependency
(
"pytest"
,
"^3.7.3"
,
groups
=
[
"dev"
]
)
)
cachy_010
=
get_package
(
"cachy"
,
"0.1.0"
)
...
...
@@ -1193,7 +1193,7 @@ cachy 0.2.0
def
test_show_tree_no_dev
(
tester
,
poetry
,
installed
):
poetry
.
package
.
add_dependency
(
Factory
.
create_dependency
(
"cachy"
,
"^0.2.0"
))
poetry
.
package
.
add_dependency
(
Factory
.
create_dependency
(
"pytest"
,
"^6.1.0"
,
category
=
"dev"
)
Factory
.
create_dependency
(
"pytest"
,
"^6.1.0"
,
groups
=
[
"dev"
]
)
)
cachy2
=
get_package
(
"cachy"
,
"0.2.0"
)
...
...
tests/fixtures/sample_project/pyproject.toml
View file @
26f13f78
...
...
@@ -46,7 +46,7 @@ functools32 = { version = "^3.2.3", markers = "python_version ~= '2.7' and sys_p
[tool.poetry.extras]
db
=
[
"orator"
]
[tool.poetry.
dev-
dependencies]
[tool.poetry.
group.dev.
dependencies]
pytest
=
"~3.4"
...
...
tests/fixtures/up_to_date_lock/poetry.lock
View file @
26f13f78
...
...
@@ -101,7 +101,7 @@ six = "*"
[metadata]
lock-version = "1.1"
python-versions = "^3.8"
content-hash = "
0cd068218f235c162f7b74bc8faf4ce3387b82daee1c1bb7a97af034f27ee116
"
content-hash = "
ae61bd854548e88c090780099edd400d58e6944ce9f3fc086d2f9aa5ac487f14
"
[metadata.files]
certifi = [
...
...
tests/helpers.py
View file @
26f13f78
...
...
@@ -7,7 +7,6 @@ from pathlib import Path
from
poetry.console.application
import
Application
from
poetry.core.masonry.utils.helpers
import
escape_name
from
poetry.core.masonry.utils.helpers
import
escape_version
from
poetry.core.packages.dependency
import
Dependency
from
poetry.core.packages.package
import
Package
from
poetry.core.packages.utils.link
import
Link
from
poetry.core.toml.file
import
TOMLFile
...
...
@@ -28,15 +27,18 @@ def get_package(name, version):
def
get_dependency
(
name
,
constraint
=
None
,
category
=
"main"
,
optional
=
False
,
allows_prereleases
=
False
name
,
constraint
=
None
,
groups
=
None
,
optional
=
False
,
allows_prereleases
=
False
):
return
Dependency
(
name
,
constraint
or
"*"
,
category
=
category
,
optional
=
optional
,
allows_prereleases
=
allows_prereleases
,
)
if
constraint
is
None
:
constraint
=
"*"
if
isinstance
(
constraint
,
str
):
constraint
=
{
"version"
:
constraint
}
constraint
[
"optional"
]
=
optional
constraint
[
"allow_prereleases"
]
=
allows_prereleases
return
Factory
.
create_dependency
(
name
,
constraint
or
"*"
,
groups
=
groups
)
def
fixture
(
path
=
None
):
...
...
tests/installation/test_installer.py
View file @
26f13f78
...
...
@@ -334,13 +334,13 @@ def _configure_run_install_dev(locker, repo, package, installed):
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
"~1.0"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"B"
,
"~1.1"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"C"
,
"~1.2"
,
category
=
"dev"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"C"
,
"~1.2"
,
groups
=
[
"dev"
]
))
def
test_run_install_no_
dev
(
installer
,
locker
,
repo
,
package
,
installed
):
def
test_run_install_no_
group
(
installer
,
locker
,
repo
,
package
,
installed
):
_configure_run_install_dev
(
locker
,
repo
,
package
,
installed
)
installer
.
dev_mode
(
False
)
installer
.
with_groups
([
"dev"
]
)
installer
.
run
()
assert
0
==
installer
.
executor
.
installations_count
...
...
@@ -348,10 +348,10 @@ def test_run_install_no_dev(installer, locker, repo, package, installed):
assert
1
==
installer
.
executor
.
removals_count
def
test_run_install_
dev
_only
(
installer
,
locker
,
repo
,
package
,
installed
):
def
test_run_install_
group
_only
(
installer
,
locker
,
repo
,
package
,
installed
):
_configure_run_install_dev
(
locker
,
repo
,
package
,
installed
)
installer
.
dev_only
(
True
)
installer
.
only_groups
([
"dev"
]
)
installer
.
run
()
assert
0
==
installer
.
executor
.
installations_count
...
...
@@ -359,18 +359,6 @@ def test_run_install_dev_only(installer, locker, repo, package, installed):
assert
2
==
installer
.
executor
.
removals_count
def
test_run_install_no_dev_and_dev_only
(
installer
,
locker
,
repo
,
package
,
installed
):
_configure_run_install_dev
(
locker
,
repo
,
package
,
installed
)
installer
.
dev_mode
(
False
)
installer
.
dev_only
(
True
)
installer
.
run
()
assert
0
==
installer
.
executor
.
installations_count
assert
0
==
installer
.
executor
.
updates_count
assert
1
==
installer
.
executor
.
removals_count
@pytest.mark.parametrize
(
"managed_reserved_package_names"
,
[
...
...
@@ -439,7 +427,7 @@ def test_run_install_remove_untracked(
}
)
installer
.
dev_mode
(
True
)
.
remove_untracked
(
True
)
installer
.
remove_untracked
(
True
)
installer
.
run
()
assert
0
==
installer
.
executor
.
installations_count
...
...
@@ -863,7 +851,7 @@ def test_installer_with_pypi_repository(package, locker, installed, config):
NullIO
(),
NullEnv
(),
package
,
locker
,
pool
,
config
,
installed
=
installed
)
package
.
add_dependency
(
Factory
.
create_dependency
(
"pytest"
,
"^3.5"
,
category
=
"dev"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"pytest"
,
"^3.5"
,
groups
=
[
"dev"
]
))
installer
.
run
()
expected
=
fixture
(
"with-pypi-repository"
)
...
...
@@ -1069,7 +1057,7 @@ def test_run_changes_category_if_needed(installer, locker, repo, package):
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
{
"version"
:
"^1.0"
,
"optional"
:
True
},
category
=
"dev"
"A"
,
{
"version"
:
"^1.0"
,
"optional"
:
True
},
groups
=
[
"dev"
]
)
)
package
.
add_dependency
(
Factory
.
create_dependency
(
"B"
,
"^1.1"
))
...
...
@@ -1169,8 +1157,8 @@ def test_run_update_with_locked_extras(installer, locker, repo, package):
b_dependency
.
in_extras
.
append
(
"foo"
)
c_dependency
=
get_dependency
(
"C"
,
"^1.0"
)
c_dependency
.
python_versions
=
"~2.7"
package_a
.
requires
.
append
(
b_dependency
)
package_a
.
requires
.
append
(
c_dependency
)
package_a
.
add_dependency
(
b_dependency
)
package_a
.
add_dependency
(
c_dependency
)
repo
.
add_package
(
package_a
)
repo
.
add_package
(
get_package
(
"B"
,
"1.0"
))
...
...
@@ -1869,7 +1857,7 @@ def test_installer_can_handle_old_lock_files(
pool
=
Pool
()
pool
.
add_repository
(
MockRepository
())
package
.
add_dependency
(
Factory
.
create_dependency
(
"pytest"
,
"^3.5"
,
category
=
"dev"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"pytest"
,
"^3.5"
,
groups
=
[
"dev"
]
))
locker
.
locked
()
locker
.
mock_lock_data
(
fixture
(
"old-lock"
))
...
...
tests/installation/test_installer_old.py
View file @
26f13f78
...
...
@@ -281,9 +281,9 @@ def test_run_install_no_dev(installer, locker, repo, package, installed):
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
"~1.0"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"B"
,
"~1.1"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"C"
,
"~1.2"
,
category
=
"dev"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"C"
,
"~1.2"
,
groups
=
[
"dev"
]
))
installer
.
dev_mode
(
False
)
installer
.
with_groups
([
"dev"
]
)
installer
.
run
()
installs
=
installer
.
installer
.
installs
...
...
@@ -364,7 +364,7 @@ def test_run_install_remove_untracked(
}
)
installer
.
dev_mode
(
True
)
.
remove_untracked
(
True
)
installer
.
remove_untracked
(
True
)
installer
.
run
()
installs
=
installer
.
installer
.
installs
...
...
@@ -767,7 +767,7 @@ def test_installer_with_pypi_repository(package, locker, installed, config):
NullIO
(),
NullEnv
(),
package
,
locker
,
pool
,
config
,
installed
=
installed
)
package
.
add_dependency
(
Factory
.
create_dependency
(
"pytest"
,
"^3.5"
,
category
=
"dev"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"pytest"
,
"^3.5"
,
groups
=
[
"dev"
]
))
installer
.
run
()
expected
=
fixture
(
"with-pypi-repository"
)
...
...
@@ -974,7 +974,7 @@ def test_run_changes_category_if_needed(installer, locker, repo, package):
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
{
"version"
:
"^1.0"
,
"optional"
:
True
},
category
=
"dev"
"A"
,
{
"version"
:
"^1.0"
,
"optional"
:
True
},
groups
=
[
"dev"
]
)
)
package
.
add_dependency
(
Factory
.
create_dependency
(
"B"
,
"^1.1"
))
...
...
@@ -1074,8 +1074,8 @@ def test_run_update_with_locked_extras(installer, locker, repo, package):
b_dependency
.
in_extras
.
append
(
"foo"
)
c_dependency
=
get_dependency
(
"C"
,
"^1.0"
)
c_dependency
.
python_versions
=
"~2.7"
package_a
.
requires
.
append
(
b_dependency
)
package_a
.
requires
.
append
(
c_dependency
)
package_a
.
add_dependency
(
b_dependency
)
package_a
.
add_dependency
(
c_dependency
)
repo
.
add_package
(
package_a
)
repo
.
add_package
(
get_package
(
"B"
,
"1.0"
))
...
...
@@ -1739,7 +1739,7 @@ def test_installer_can_handle_old_lock_files(
pool
=
Pool
()
pool
.
add_repository
(
MockRepository
())
package
.
add_dependency
(
Factory
.
create_dependency
(
"pytest"
,
"^3.5"
,
category
=
"dev"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"pytest"
,
"^3.5"
,
groups
=
[
"dev"
]
))
locker
.
locked
()
locker
.
mock_lock_data
(
fixture
(
"old-lock"
))
...
...
tests/packages/test_locker.py
View file @
26f13f78
...
...
@@ -86,7 +86,7 @@ resolved_reference = "123456"
[metadata]
lock-version = "1.1"
python-versions = "*"
content-hash = "1
15cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8
"
content-hash = "1
78f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831
"
[metadata.files]
A = [
...
...
@@ -295,7 +295,7 @@ python-versions = "*"
[metadata]
lock-version = "1.1"
python-versions = "*"
content-hash = "1
15cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8
"
content-hash = "1
78f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831
"
[metadata.files]
A = []
...
...
@@ -335,7 +335,7 @@ foo = ["B (>=1.0.0)"]
[metadata]
lock-version = "1.1"
python-versions = "*"
content-hash = "1
15cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8
"
content-hash = "1
78f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831
"
[metadata.files]
A = []
...
...
@@ -365,7 +365,7 @@ foo = ["bar"]
[metadata]
lock-version = "1.1"
python-versions = "*"
content-hash = "1
15cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8
"
content-hash = "1
78f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831
"
[metadata.files]
A = []
...
...
@@ -410,7 +410,7 @@ reference = "legacy"
[metadata]
lock-version = "1.1"
python-versions = "*"
content-hash = "1
15cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8
"
content-hash = "1
78f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831
"
[metadata.files]
A = []
...
...
@@ -497,7 +497,7 @@ B = {version = "^1.0.0", extras = ["a", "b", "c"], optional = true}
[metadata]
lock-version = "1.1"
python-versions = "*"
content-hash = "1
15cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8
"
content-hash = "1
78f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831
"
[metadata.files]
A = []
...
...
@@ -591,7 +591,7 @@ F = {git = "https://github.com/python-poetry/poetry.git", branch = "foo"}
[metadata]
lock-version = "1.1"
python-versions = "*"
content-hash = "1
15cf985d932e9bf5f540555bbdd75decbb62cac81e399375fc19f6277f8c1d8
"
content-hash = "1
78f2cd01dc40e96be23a4a0ae1094816626346346618335e5ff4f0b2c0c5831
"
[metadata.files]
A = []
...
...
tests/puzzle/test_solver.py
View file @
26f13f78
...
...
@@ -148,7 +148,7 @@ def test_solver_with_deps(solver, repo, package):
repo
.
add_package
(
package_b
)
repo
.
add_package
(
new_package_b
)
package_a
.
requires
.
append
(
get_dependency
(
"B"
,
"<1.1"
))
package_a
.
add_dependency
(
get_dependency
(
"B"
,
"<1.1"
))
ops
=
solver
.
solve
()
...
...
@@ -176,7 +176,7 @@ def test_install_honours_not_equal(solver, repo, package):
repo
.
add_package
(
new_package_b12
)
repo
.
add_package
(
new_package_b13
)
package_a
.
requires
.
append
(
get_dependency
(
"B"
,
"<=1.3,!=1.3,!=1.2"
))
package_a
.
add_dependency
(
get_dependency
(
"B"
,
"<=1.3,!=1.3,!=1.2"
))
ops
=
solver
.
solve
()
...
...
@@ -201,10 +201,10 @@ def test_install_with_deps_in_order(solver, repo, package):
repo
.
add_package
(
package_b
)
repo
.
add_package
(
package_c
)
package_b
.
requires
.
append
(
get_dependency
(
"A"
,
">=1.0"
))
package_b
.
requires
.
append
(
get_dependency
(
"C"
,
">=1.0"
))
package_b
.
add_dependency
(
get_dependency
(
"A"
,
">=1.0"
))
package_b
.
add_dependency
(
get_dependency
(
"C"
,
">=1.0"
))
package_c
.
requires
.
append
(
get_dependency
(
"A"
,
">=1.0"
))
package_c
.
add_dependency
(
get_dependency
(
"A"
,
">=1.0"
))
ops
=
solver
.
solve
()
...
...
@@ -278,9 +278,9 @@ def test_update_with_use_latest(solver, repo, installed, package, locked):
)
def
test_solver_sets_
categorie
s
(
solver
,
repo
,
package
):
def
test_solver_sets_
group
s
(
solver
,
repo
,
package
):
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
"*"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"B"
,
"*"
,
category
=
"dev"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"B"
,
"*"
,
groups
=
[
"dev"
]
))
package_a
=
get_package
(
"A"
,
"1.0"
)
package_b
=
get_package
(
"B"
,
"1.0"
)
...
...
@@ -429,7 +429,7 @@ def test_solver_returns_extras_if_requested(solver, repo, package):
dep
=
get_dependency
(
"C"
,
"^1.0"
,
optional
=
True
)
dep
.
marker
=
parse_marker
(
"extra == 'foo'"
)
package_b
.
extras
=
{
"foo"
:
[
dep
]}
package_b
.
requires
.
append
(
dep
)
package_b
.
add_dependency
(
dep
)
repo
.
add_package
(
package_a
)
repo
.
add_package
(
package_b
)
...
...
@@ -474,8 +474,8 @@ def test_solver_returns_extras_only_requested(solver, repo, package, enabled_ext
package_b
.
extras
=
{
"one"
:
[
dep10
],
"two"
:
[
dep20
]}
package_b
.
requires
.
append
(
dep10
)
package_b
.
requires
.
append
(
dep20
)
package_b
.
add_dependency
(
dep10
)
package_b
.
add_dependency
(
dep20
)
repo
.
add_package
(
package_a
)
repo
.
add_package
(
package_b
)
...
...
@@ -523,7 +523,7 @@ def test_solver_returns_extras_when_multiple_extras_use_same_dependency(
package_b
.
extras
=
{
"one"
:
[
dep
],
"two"
:
[
dep
]}
package_b
.
requires
.
append
(
dep
)
package_b
.
add_dependency
(
dep
)
extras
=
[
enabled_extra
]
if
enabled_extra
is
not
None
else
[]
package_a
.
add_dependency
(
...
...
@@ -574,8 +574,8 @@ def test_solver_returns_extras_only_requested_nested(
package_b
.
extras
=
{
"one"
:
[
dep10
],
"two"
:
[
dep20
]}
package_b
.
requires
.
append
(
dep10
)
package_b
.
requires
.
append
(
dep20
)
package_b
.
add_dependency
(
dep10
)
package_b
.
add_dependency
(
dep20
)
extras
=
[
enabled_extra
]
if
enabled_extra
is
not
None
else
[]
package_a
.
add_dependency
(
...
...
@@ -824,14 +824,14 @@ def test_solver_sub_dependencies_with_not_supported_python_version_transitive(
)
def
test_solver_with_dependency_in_both_
main
_and_dev_dependencies
(
def
test_solver_with_dependency_in_both_
default
_and_dev_dependencies
(
solver
,
repo
,
package
):
solver
.
provider
.
set_package_python_versions
(
"^3.5"
)
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
"*"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
{
"version"
:
"*"
,
"extras"
:
[
"foo"
]},
category
=
"dev"
"A"
,
{
"version"
:
"*"
,
"extras"
:
[
"foo"
]},
groups
=
[
"dev"
]
)
)
...
...
@@ -884,7 +884,7 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_
package
.
add_dependency
(
Factory
.
create_dependency
(
"E"
,
"*"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
{
"version"
:
"*"
,
"extras"
:
[
"foo"
]},
category
=
"dev"
"A"
,
{
"version"
:
"*"
,
"extras"
:
[
"foo"
]},
groups
=
[
"dev"
]
)
)
...
...
@@ -1417,8 +1417,8 @@ def test_solver_does_not_trigger_new_resolution_on_duplicate_dependencies_if_onl
package_a
=
get_package
(
"A"
,
"1.0.0"
)
package_a
.
extras
=
{
"foo"
:
[
dep1
],
"bar"
:
[
dep2
]}
package_a
.
requires
.
append
(
dep1
)
package_a
.
requires
.
append
(
dep2
)
package_a
.
add_dependency
(
dep1
)
package_a
.
add_dependency
(
dep2
)
package_b2
=
get_package
(
"B"
,
"2.0.0"
)
package_b1
=
get_package
(
"B"
,
"1.0.0"
)
...
...
@@ -1539,7 +1539,7 @@ def test_solver_ignores_dependencies_with_incompatible_python_full_version_marke
package
.
add_dependency
(
Factory
.
create_dependency
(
"B"
,
"^2.0"
))
package_a
=
get_package
(
"A"
,
"1.0.0"
)
package_a
.
requires
.
append
(
package_a
.
add_dependency
(
Dependency
.
create_from_pep_508
(
'B (<2.0); platform_python_implementation == "PyPy" and python_full_version < "2.7.9"'
)
...
...
@@ -2286,12 +2286,12 @@ def test_solver_does_not_raise_conflict_for_conditional_dev_dependencies(
solver
.
provider
.
set_package_python_versions
(
"~2.7 || ^3.5"
)
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
{
"version"
:
"^1.0"
,
"python"
:
"~2.7"
},
category
=
"dev"
"A"
,
{
"version"
:
"^1.0"
,
"python"
:
"~2.7"
},
groups
=
[
"dev"
]
)
)
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
{
"version"
:
"^2.0"
,
"python"
:
"^3.5"
},
category
=
"dev"
"A"
,
{
"version"
:
"^2.0"
,
"python"
:
"^3.5"
},
groups
=
[
"dev"
]
)
)
...
...
tests/utils/test_exporter.py
View file @
26f13f78
...
...
@@ -62,16 +62,12 @@ def poetry(fixture_dir, locker):
def
set_package_requires
(
poetry
,
skip
=
None
):
skip
=
skip
or
set
()
packages
=
poetry
.
locker
.
locked_repository
(
with_dev_reqs
=
True
)
.
packages
poetry
.
package
.
requires
=
[
pkg
.
to_dependency
()
for
pkg
in
packages
if
pkg
.
category
==
"main"
and
pkg
.
name
not
in
skip
]
poetry
.
package
.
dev_requires
=
[
pkg
.
to_dependency
()
for
pkg
in
packages
if
pkg
.
category
==
"dev"
and
pkg
.
name
not
in
skip
]
package
=
poetry
.
package
.
with_dependency_groups
([],
only
=
True
)
for
pkg
in
packages
:
if
pkg
.
name
not
in
skip
:
package
.
add_dependency
(
pkg
.
to_dependency
())
poetry
.
_package
=
package
def
test_exporter_can_export_requirements_txt_with_standard_packages
(
...
...
@@ -483,16 +479,18 @@ def test_exporter_can_export_requirements_txt_with_nested_packages_and_markers_a
}
)
poetry
.
package
.
requires
=
[
root
=
poetry
.
package
.
with_dependency_groups
([],
only
=
True
)
root
.
add_dependency
(
Factory
.
create_dependency
(
name
=
"a"
,
constraint
=
dict
(
version
=
"^1.2.3"
,
python
=
"<3.8"
)
)
,
]
poetry
.
package
.
dev_requires
=
[
)
)
root
.
add_dependency
(
Factory
.
create_dependency
(
name
=
"b"
,
constraint
=
dict
(
version
=
"^4.5.6"
),
category
=
"dev"
),
]
name
=
"b"
,
constraint
=
dict
(
version
=
"^4.5.6"
),
groups
=
[
"dev"
]
)
)
poetry
.
_package
=
root
exporter
=
Exporter
(
poetry
)
...
...
@@ -825,6 +823,7 @@ def test_exporter_can_export_requirements_txt_with_git_packages(tmp_dir, poetry)
}
)
set_package_requires
(
poetry
)
print
(
poetry
.
package
.
all_requires
)
exporter
=
Exporter
(
poetry
)
...
...
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