-
Notifications
You must be signed in to change notification settings - Fork 54
/
exceptions.py
60 lines (48 loc) · 1.86 KB
/
exceptions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
class PipToolsError(Exception):
pass
class NoCandidateFound(PipToolsError):
def __init__(self, ireq, candidates_tried, finder):
self.ireq = ireq
self.candidates_tried = candidates_tried
self.finder = finder
def __str__(self):
versions = []
pre_versions = []
for candidate in sorted(self.candidates_tried):
version = str(candidate.version)
if candidate.version.is_prerelease:
pre_versions.append(version)
else:
versions.append(version)
lines = ["Could not find a version that matches {}".format(self.ireq)]
if versions:
lines.append("Tried: {}".format(", ".join(versions)))
if pre_versions:
if self.finder.allow_all_prereleases:
line = "Tried"
else:
line = "Skipped"
line += " pre-versions: {}".format(", ".join(pre_versions))
lines.append(line)
if versions or pre_versions:
lines.append(
"There are incompatible versions in the resolved dependencies:"
)
source_ireqs = getattr(self.ireq, "_source_ireqs", [])
lines.extend(" {}".format(ireq) for ireq in source_ireqs)
else:
lines.append("No versions found")
lines.append(
"{} {} reachable?".format(
"Were" if len(self.finder.index_urls) > 1 else "Was",
" or ".join(self.finder.index_urls),
)
)
return "\n".join(lines)
class IncompatibleRequirements(PipToolsError):
def __init__(self, ireq_a, ireq_b):
self.ireq_a = ireq_a
self.ireq_b = ireq_b
def __str__(self):
message = "Incompatible requirements found: {} and {}"
return message.format(self.ireq_a, self.ireq_b)