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
6ff23efb
Commit
6ff23efb
authored
Nov 17, 2021
by
Branch Vincent
Committed by
Bjorn Neergaard
Nov 17, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore(puzzle): remove type errors
parent
fd3f3387
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
41 additions
and
34 deletions
+41
-34
pyproject.toml
+0
-2
src/poetry/installation/operations/operation.py
+5
-2
src/poetry/puzzle/exceptions.py
+1
-1
src/poetry/puzzle/provider.py
+15
-13
src/poetry/puzzle/solver.py
+19
-15
src/poetry/puzzle/transaction.py
+1
-1
No files found.
pyproject.toml
View file @
6ff23efb
...
@@ -108,7 +108,6 @@ files = "src"
...
@@ -108,7 +108,6 @@ files = "src"
[[tool.mypy.overrides]]
[[tool.mypy.overrides]]
module
=
[
module
=
[
'poetry.poetry'
,
'poetry.config.file_config_source'
,
'poetry.config.file_config_source'
,
'poetry.console.*'
,
'poetry.console.*'
,
'poetry.factory.*'
,
'poetry.factory.*'
,
...
@@ -117,7 +116,6 @@ module = [
...
@@ -117,7 +116,6 @@ module = [
'poetry.layouts.*'
,
'poetry.layouts.*'
,
'poetry.mixology.*'
,
'poetry.mixology.*'
,
'poetry.packages.locker'
,
'poetry.packages.locker'
,
'poetry.puzzle.*'
,
'poetry.repositories.installed_repository'
,
'poetry.repositories.installed_repository'
,
'poetry.utils.*'
'poetry.utils.*'
]
]
...
...
src/poetry/installation/operations/operation.py
View file @
6ff23efb
from
typing
import
TYPE_CHECKING
from
typing
import
TYPE_CHECKING
from
typing
import
Optional
from
typing
import
Optional
from
typing
import
TypeVar
if
TYPE_CHECKING
:
if
TYPE_CHECKING
:
from
poetry.core.packages.package
import
Package
from
poetry.core.packages.package
import
Package
T
=
TypeVar
(
"T"
,
bound
=
"Operation"
)
class
Operation
:
class
Operation
:
def
__init__
(
self
,
reason
:
Optional
[
str
]
=
None
,
priority
:
int
=
0
)
->
None
:
def
__init__
(
self
,
reason
:
Optional
[
str
]
=
None
,
priority
:
int
=
0
)
->
None
:
...
@@ -41,13 +44,13 @@ class Operation:
...
@@ -41,13 +44,13 @@ class Operation:
def
format_version
(
self
,
package
:
"Package"
)
->
str
:
def
format_version
(
self
,
package
:
"Package"
)
->
str
:
return
package
.
full_pretty_version
return
package
.
full_pretty_version
def
skip
(
self
,
reason
:
str
)
->
"Operation"
:
def
skip
(
self
:
T
,
reason
:
str
)
->
T
:
self
.
_skipped
=
True
self
.
_skipped
=
True
self
.
_skip_reason
=
reason
self
.
_skip_reason
=
reason
return
self
return
self
def
unskip
(
self
)
->
"Operation"
:
def
unskip
(
self
:
T
)
->
T
:
self
.
_skipped
=
False
self
.
_skipped
=
False
self
.
_skip_reason
=
None
self
.
_skip_reason
=
None
...
...
src/poetry/puzzle/exceptions.py
View file @
6ff23efb
...
@@ -18,5 +18,5 @@ class OverrideNeeded(Exception):
...
@@ -18,5 +18,5 @@ class OverrideNeeded(Exception):
self
.
_overrides
=
overrides
self
.
_overrides
=
overrides
@property
@property
def
overrides
(
self
)
->
Tuple
[
Dict
]:
def
overrides
(
self
)
->
Tuple
[
Dict
,
...
]:
return
self
.
_overrides
return
self
.
_overrides
src/poetry/puzzle/provider.py
View file @
6ff23efb
import
logging
import
logging
import
os
import
os
import
re
import
re
import
tempfile
import
time
import
time
import
urllib.parse
import
urllib.parse
...
@@ -12,6 +13,7 @@ from typing import Dict
...
@@ -12,6 +13,7 @@ from typing import Dict
from
typing
import
Iterator
from
typing
import
Iterator
from
typing
import
List
from
typing
import
List
from
typing
import
Optional
from
typing
import
Optional
from
typing
import
Set
from
typing
import
Union
from
typing
import
Union
from
cleo.ui.progress_indicator
import
ProgressIndicator
from
cleo.ui.progress_indicator
import
ProgressIndicator
...
@@ -39,7 +41,6 @@ from poetry.repositories import Pool
...
@@ -39,7 +41,6 @@ from poetry.repositories import Pool
from
poetry.utils.env
import
Env
from
poetry.utils.env
import
Env
from
poetry.utils.helpers
import
download_file
from
poetry.utils.helpers
import
download_file
from
poetry.utils.helpers
import
safe_rmtree
from
poetry.utils.helpers
import
safe_rmtree
from
poetry.utils.helpers
import
temporary_directory
logger
=
logging
.
getLogger
(
__name__
)
logger
=
logging
.
getLogger
(
__name__
)
...
@@ -54,7 +55,7 @@ class Indicator(ProgressIndicator):
...
@@ -54,7 +55,7 @@ class Indicator(ProgressIndicator):
class
Provider
:
class
Provider
:
UNSAFE_PACKAGES
=
set
()
UNSAFE_PACKAGES
:
Set
[
str
]
=
set
()
def
__init__
(
def
__init__
(
self
,
package
:
Package
,
pool
:
Pool
,
io
:
Any
,
env
:
Optional
[
Env
]
=
None
self
,
package
:
Package
,
pool
:
Pool
,
io
:
Any
,
env
:
Optional
[
Env
]
=
None
...
@@ -64,11 +65,11 @@ class Provider:
...
@@ -64,11 +65,11 @@ class Provider:
self
.
_io
=
io
self
.
_io
=
io
self
.
_env
=
env
self
.
_env
=
env
self
.
_python_constraint
=
package
.
python_constraint
self
.
_python_constraint
=
package
.
python_constraint
self
.
_search_for
=
{}
self
.
_search_for
:
Dict
[
Dependency
,
List
[
Package
]]
=
{}
self
.
_is_debugging
=
self
.
_io
.
is_debug
()
or
self
.
_io
.
is_very_verbose
()
self
.
_is_debugging
=
self
.
_io
.
is_debug
()
or
self
.
_io
.
is_very_verbose
()
self
.
_in_progress
=
False
self
.
_in_progress
=
False
self
.
_overrides
=
{}
self
.
_overrides
:
Dict
=
{}
self
.
_deferred_cache
=
{}
self
.
_deferred_cache
:
Dict
[
Dependency
,
Package
]
=
{}
self
.
_load_deferred
=
True
self
.
_load_deferred
=
True
@property
@property
...
@@ -351,12 +352,11 @@ class Provider:
...
@@ -351,12 +352,11 @@ class Provider:
@classmethod
@classmethod
def
get_package_from_url
(
cls
,
url
:
str
)
->
Package
:
def
get_package_from_url
(
cls
,
url
:
str
)
->
Package
:
with
temporary_directory
()
as
temp_dir
:
file_name
=
os
.
path
.
basename
(
urllib
.
parse
.
urlparse
(
url
)
.
path
)
temp_dir
=
Path
(
temp_dir
)
with
tempfile
.
TemporaryDirectory
()
as
temp_dir
:
file_name
=
os
.
path
.
basename
(
urllib
.
parse
.
urlparse
(
url
)
.
path
)
dest
=
Path
(
temp_dir
)
/
file_name
download_file
(
url
,
str
(
temp_dir
/
file_name
))
download_file
(
url
,
str
(
dest
))
package
=
cls
.
get_package_from_file
(
dest
)
package
=
cls
.
get_package_from_file
(
temp_dir
/
file_name
)
package
.
_source_type
=
"url"
package
.
_source_type
=
"url"
package
.
_source_url
=
url
package
.
_source_url
=
url
...
@@ -543,7 +543,7 @@ class Provider:
...
@@ -543,7 +543,7 @@ class Provider:
# An example of this is:
# An example of this is:
# - pypiwin32 (220); sys_platform == "win32" and python_version >= "3.6"
# - pypiwin32 (220); sys_platform == "win32" and python_version >= "3.6"
# - pypiwin32 (219); sys_platform == "win32" and python_version < "3.6"
# - pypiwin32 (219); sys_platform == "win32" and python_version < "3.6"
duplicates
=
{}
duplicates
:
Dict
[
str
,
List
[
Dependency
]]
=
{}
for
dep
in
dependencies
:
for
dep
in
dependencies
:
if
dep
.
complete_name
not
in
duplicates
:
if
dep
.
complete_name
not
in
duplicates
:
duplicates
[
dep
.
complete_name
]
=
[]
duplicates
[
dep
.
complete_name
]
=
[]
...
@@ -559,7 +559,7 @@ class Provider:
...
@@ -559,7 +559,7 @@ class Provider:
self
.
debug
(
f
"<debug>Duplicate dependencies for {dep_name}</debug>"
)
self
.
debug
(
f
"<debug>Duplicate dependencies for {dep_name}</debug>"
)
# Regrouping by constraint
# Regrouping by constraint
by_constraint
=
{}
by_constraint
:
Dict
[
str
,
List
[
Dependency
]]
=
{}
for
dep
in
deps
:
for
dep
in
deps
:
if
dep
.
constraint
not
in
by_constraint
:
if
dep
.
constraint
not
in
by_constraint
:
by_constraint
[
dep
.
constraint
]
=
[]
by_constraint
[
dep
.
constraint
]
=
[]
...
@@ -723,6 +723,8 @@ class Provider:
...
@@ -723,6 +723,8 @@ class Provider:
if
message
.
startswith
(
"fact:"
):
if
message
.
startswith
(
"fact:"
):
if
"depends on"
in
message
:
if
"depends on"
in
message
:
m
=
re
.
match
(
r"fact: (.+?) depends on (.+?) \((.+?)\)"
,
message
)
m
=
re
.
match
(
r"fact: (.+?) depends on (.+?) \((.+?)\)"
,
message
)
if
m
is
None
:
raise
ValueError
(
f
"Unable to parse fact: {message}"
)
m2
=
re
.
match
(
r"(.+?) \((.+?)\)"
,
m
.
group
(
1
))
m2
=
re
.
match
(
r"(.+?) \((.+?)\)"
,
m
.
group
(
1
))
if
m2
:
if
m2
:
name
=
m2
.
group
(
1
)
name
=
m2
.
group
(
1
)
...
...
src/poetry/puzzle/solver.py
View file @
6ff23efb
...
@@ -57,7 +57,7 @@ class Solver:
...
@@ -57,7 +57,7 @@ class Solver:
provider
=
Provider
(
self
.
_package
,
self
.
_pool
,
self
.
_io
)
provider
=
Provider
(
self
.
_package
,
self
.
_pool
,
self
.
_io
)
self
.
_provider
=
provider
self
.
_provider
=
provider
self
.
_overrides
=
[]
self
.
_overrides
:
List
[
Dict
]
=
[]
@property
@property
def
provider
(
self
)
->
Provider
:
def
provider
(
self
)
->
Provider
:
...
@@ -94,7 +94,7 @@ class Solver:
...
@@ -94,7 +94,7 @@ class Solver:
)
)
def
solve_in_compatibility_mode
(
def
solve_in_compatibility_mode
(
self
,
overrides
:
Tuple
[
Dict
],
use_latest
:
List
[
str
]
=
None
self
,
overrides
:
Tuple
[
Dict
,
...
],
use_latest
:
List
[
str
]
=
None
)
->
Tuple
[
List
[
"Package"
],
List
[
int
]]:
)
->
Tuple
[
List
[
"Package"
],
List
[
int
]]:
locked
=
{}
locked
=
{}
for
package
in
self
.
_locked
.
packages
:
for
package
in
self
.
_locked
.
packages
:
...
@@ -178,10 +178,11 @@ class Solver:
...
@@ -178,10 +178,11 @@ class Solver:
return
final_packages
,
depths
return
final_packages
,
depths
DFSNodeID
=
Tuple
[
str
,
FrozenSet
[
str
],
bool
]
class
DFSNode
:
class
DFSNode
:
def
__init__
(
def
__init__
(
self
,
id
:
DFSNodeID
,
name
:
str
,
base_name
:
str
)
->
None
:
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
...
@@ -205,9 +206,9 @@ class VisitedState(enum.Enum):
...
@@ -205,9 +206,9 @@ class VisitedState(enum.Enum):
def
depth_first_search
(
def
depth_first_search
(
source
:
"PackageNode"
,
aggregator
:
Callable
source
:
"PackageNode"
,
aggregator
:
Callable
)
->
List
[
Tuple
[
Package
,
int
]]:
)
->
List
[
Tuple
[
Package
,
int
]]:
back_edges
=
defaultdict
(
list
)
back_edges
:
Dict
[
DFSNodeID
,
List
[
"PackageNode"
]]
=
defaultdict
(
list
)
visited
=
{}
visited
:
Dict
[
DFSNodeID
,
VisitedState
]
=
{}
topo_sorted_nodes
=
[]
topo_sorted_nodes
:
List
[
"PackageNode"
]
=
[]
dfs_visit
(
source
,
back_edges
,
visited
,
topo_sorted_nodes
)
dfs_visit
(
source
,
back_edges
,
visited
,
topo_sorted_nodes
)
...
@@ -233,8 +234,8 @@ def depth_first_search(
...
@@ -233,8 +234,8 @@ def depth_first_search(
def
dfs_visit
(
def
dfs_visit
(
node
:
"PackageNode"
,
node
:
"PackageNode"
,
back_edges
:
Dict
[
str
,
List
[
"PackageNode"
]],
back_edges
:
Dict
[
DFSNodeID
,
List
[
"PackageNode"
]],
visited
:
Dict
[
str
,
VisitedState
],
visited
:
Dict
[
DFSNodeID
,
VisitedState
],
sorted_nodes
:
List
[
"PackageNode"
],
sorted_nodes
:
List
[
"PackageNode"
],
)
->
bool
:
)
->
bool
:
if
visited
.
get
(
node
.
id
,
VisitedState
.
Unvisited
)
==
VisitedState
.
Visited
:
if
visited
.
get
(
node
.
id
,
VisitedState
.
Unvisited
)
==
VisitedState
.
Visited
:
...
@@ -292,12 +293,14 @@ class PackageNode(DFSNode):
...
@@ -292,12 +293,14 @@ class PackageNode(DFSNode):
if
not
previous
:
if
not
previous
:
self
.
category
=
"dev"
self
.
category
=
"dev"
self
.
groups
=
frozenset
()
self
.
groups
:
FrozenSet
[
str
]
=
frozenset
()
self
.
optional
=
True
self
.
optional
=
True
el
se
:
el
if
dep
:
self
.
category
=
"main"
if
"default"
in
dep
.
groups
else
"dev"
self
.
category
=
"main"
if
"default"
in
dep
.
groups
else
"dev"
self
.
groups
=
dep
.
groups
self
.
groups
=
dep
.
groups
self
.
optional
=
dep
.
is_optional
()
self
.
optional
=
dep
.
is_optional
()
else
:
raise
ValueError
(
"Both previous and dep must be passed"
)
super
()
.
__init__
(
super
()
.
__init__
(
(
package
.
complete_name
,
self
.
groups
,
self
.
optional
),
(
package
.
complete_name
,
self
.
groups
,
self
.
optional
),
...
@@ -315,7 +318,8 @@ class PackageNode(DFSNode):
...
@@ -315,7 +318,8 @@ class PackageNode(DFSNode):
self
.
seen
.
append
(
self
.
package
)
self
.
seen
.
append
(
self
.
package
)
if
(
if
(
self
.
previous_dep
self
.
dep
and
self
.
previous_dep
and
self
.
previous_dep
is
not
self
.
dep
and
self
.
previous_dep
is
not
self
.
dep
and
self
.
previous_dep
.
name
==
self
.
dep
.
name
and
self
.
previous_dep
.
name
==
self
.
dep
.
name
):
):
...
@@ -359,7 +363,7 @@ class PackageNode(DFSNode):
...
@@ -359,7 +363,7 @@ class PackageNode(DFSNode):
return
children
return
children
def
visit
(
self
,
parents
:
"PackageNode"
)
->
None
:
def
visit
(
self
,
parents
:
List
[
"PackageNode"
]
)
->
None
:
# The root package, which has no parents, is defined as having depth -1
# The root package, which has no parents, is defined as having depth -1
# So that the root package's top-level dependencies have depth 0.
# So that the root package's top-level dependencies have depth 0.
self
.
depth
=
1
+
max
(
self
.
depth
=
1
+
max
(
...
@@ -376,7 +380,7 @@ def aggregate_package_nodes(
...
@@ -376,7 +380,7 @@ 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
=
[]
groups
:
List
[
str
]
=
[]
for
node
in
nodes
:
for
node
in
nodes
:
groups
.
extend
(
node
.
groups
)
groups
.
extend
(
node
.
groups
)
...
...
src/poetry/puzzle/transaction.py
View file @
6ff23efb
...
@@ -33,7 +33,7 @@ class Transaction:
...
@@ -33,7 +33,7 @@ class Transaction:
from
poetry.installation.operations.uninstall
import
Uninstall
from
poetry.installation.operations.uninstall
import
Uninstall
from
poetry.installation.operations.update
import
Update
from
poetry.installation.operations.update
import
Update
operations
=
[]
operations
:
List
[
"OperationTypes"
]
=
[]
for
result_package
,
priority
in
self
.
_result_packages
:
for
result_package
,
priority
in
self
.
_result_packages
:
installed
=
False
installed
=
False
...
...
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