1
- from collections import defaultdict
2
1
from logging import getLogger
3
- from typing import Any , DefaultDict
2
+ from typing import Any
4
3
5
4
from pip ._vendor .resolvelib .reporters import BaseReporter
5
+ from pip ._vendor .resolvelib .resolvers import Criterion
6
6
7
7
from .base import Candidate , Requirement
8
8
9
9
logger = getLogger (__name__ )
10
10
11
11
12
12
class PipReporter (BaseReporter ):
13
- def __init__ (self ) -> None :
14
- self .backtracks_by_package : DefaultDict [str , int ] = defaultdict (int )
15
-
16
- self ._messages_at_backtrack = {
17
- 1 : (
18
- "pip is looking at multiple versions of {package_name} to "
19
- "determine which version is compatible with other "
20
- "requirements. This could take a while."
21
- ),
22
- 8 : (
23
- "pip is looking at multiple versions of {package_name} to "
24
- "determine which version is compatible with other "
25
- "requirements. This could take a while."
26
- ),
27
- 13 : (
28
- "This is taking longer than usual. You might need to provide "
29
- "the dependency resolver with stricter constraints to reduce "
30
- "runtime. See https://pip.pypa.io/warnings/backtracking for "
31
- "guidance. If you want to abort this run, press Ctrl + C."
32
- ),
33
- }
34
-
35
- def discarding_conflicted_criterion (self , criterion , candidate ) -> None :
13
+ def backtracking (
14
+ self , criterion : Criterion [Any , Any , Any ], candidate : Candidate
15
+ ) -> None :
36
16
msg = "Will try a different candidate, due to conflict:"
37
17
for req_info in criterion .information :
38
18
req , parent = req_info .requirement , req_info .parent
@@ -43,17 +23,8 @@ def discarding_conflicted_criterion(self, criterion, candidate) -> None:
43
23
else :
44
24
msg += "The user requested "
45
25
msg += req .format_for_error ()
46
- logger .info (msg )
47
-
48
- def backtracking (self , candidate : Candidate ) -> None :
49
- self .backtracks_by_package [candidate .name ] += 1
50
-
51
- count = self .backtracks_by_package [candidate .name ]
52
- if count not in self ._messages_at_backtrack :
53
- return
54
26
55
- message = self ._messages_at_backtrack [count ]
56
- logger .info ("INFO: %s" , message .format (package_name = candidate .name ))
27
+ logger .info ("INFO: %s" , msg )
57
28
58
29
59
30
class PipDebuggingReporter (BaseReporter ):
@@ -74,7 +45,9 @@ def ending(self, state: Any) -> None:
74
45
def adding_requirement (self , requirement : Requirement , parent : Candidate ) -> None :
75
46
logger .info ("Reporter.adding_requirement(%r, %r)" , requirement , parent )
76
47
77
- def backtracking (self , candidate : Candidate ) -> None :
48
+ def backtracking (
49
+ self , criterion : Criterion [Any , Any , Any ], candidate : Candidate
50
+ ) -> None :
78
51
logger .info ("Reporter.backtracking(%r)" , candidate )
79
52
80
53
def pinning (self , candidate : Candidate ) -> None :
0 commit comments