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