-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathexceptions.py
More file actions
177 lines (126 loc) · 5.87 KB
/
exceptions.py
File metadata and controls
177 lines (126 loc) · 5.87 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
from __future__ import annotations
from typing import TYPE_CHECKING, Any
if TYPE_CHECKING:
from collections.abc import Mapping
class Error(Exception):
def __init__(self, message: str | None = None) -> None:
self.message = message
super().__init__(self.message)
class JsonDecodeError(Error):
def __init__(self, message: str | None = None, content: str | None = None, url: str | None = None) -> None:
self.message = message
self.content = content
self.url = url
if not self.message and self.url:
self.message = f"Unable to decode response as JSON data from {self.url}"
if self.content:
self.message += f". Server response: {self.content}"
super().__init__(self.message)
class ServerNotReachableError(Error):
def __init__(self, address: str, message: str | None = None) -> None:
self.address = address
self.message = message or f"Unable to connect to '{address}'."
super().__init__(self.message)
class ServerNotResponsiveError(Error):
def __init__(self, url: str, timeout: int | None = None, message: str | None = None) -> None:
self.url = url
self.timeout = timeout
self.message = message or f"Unable to read from '{url}'."
if timeout:
self.message += f" (timeout: {timeout} sec)"
super().__init__(self.message)
class GraphQLError(Error):
def __init__(self, errors: list[dict[str, Any]], query: str | None = None, variables: dict | None = None) -> None:
self.query = query
self.variables = variables
self.errors = errors
self.message = f"An error occurred while executing the GraphQL Query {self.query}, {self.errors}"
super().__init__(self.message)
class BranchNotFoundError(Error):
def __init__(self, identifier: str, message: str | None = None) -> None:
self.identifier = identifier
self.message = message or f"Unable to find the branch '{identifier}' in the Database."
super().__init__(self.message)
class SchemaNotFoundError(Error):
def __init__(self, identifier: str, message: str | None = None) -> None:
self.identifier = identifier
self.message = message or f"Unable to find the schema '{identifier}'."
super().__init__(self.message)
class ModuleImportError(Error):
def __init__(self, message: str | None = None) -> None:
self.message = message or "Unable to import the module"
super().__init__(self.message)
class NodeNotFoundError(Error):
def __init__(
self,
identifier: Mapping[str, list[str]],
message: str = "Unable to find the node in the database.",
branch_name: str | None = None,
node_type: str | None = None,
) -> None:
self.node_type = node_type or "unknown"
self.identifier = identifier
self.branch_name = branch_name
self.message = message
super().__init__(self.message)
def __str__(self) -> str:
return f"""
{self.message}
{self.branch_name} | {self.node_type} | {self.identifier}
"""
class NodeInvalidError(NodeNotFoundError):
pass
class ResourceNotDefinedError(Error):
"""Raised when trying to access a resource that hasn't been defined."""
def __init__(self, message: str | None = None) -> None:
self.message = message or "The requested resource was not found"
super().__init__(self.message)
class InfrahubCheckNotFoundError(Error):
def __init__(self, name: str, message: str | None = None) -> None:
self.message = message or f"The requested InfrahubCheck '{name}' was not found."
super().__init__(self.message)
class InfrahubTransformNotFoundError(Error):
def __init__(self, name: str, message: str | None = None) -> None:
self.message = message or f"The requested InfrahubTransform '{name}' was not found."
super().__init__(self.message)
class ValidationError(Error):
def __init__(self, identifier: str, message: str | None = None, messages: list[str] | None = None) -> None:
self.identifier = identifier
self.message = message
self.messages = messages
if not messages and not message:
self.message = f"Validation Error for {self.identifier}"
super().__init__(self.message)
def __str__(self) -> str:
if self.messages:
return f"{self.identifier}: {', '.join(self.messages)}"
return f"{self.identifier}: {self.message}"
class ObjectValidationError(Error):
def __init__(self, position: list[int | str], message: str) -> None:
self.position = position
self.message = message
super().__init__(self.message)
def __str__(self) -> str:
return f"{'.'.join(map(str, self.position))}: {self.message}"
class AuthenticationError(Error):
def __init__(self, message: str | None = None) -> None:
self.message = message or "Authentication Error, unable to execute the query."
super().__init__(self.message)
class URLNotFoundError(Error):
def __init__(self, url: str) -> None:
self.message = f"`{url}` not found."
super().__init__(self.message)
class FeatureNotSupportedError(Error):
"""Raised when trying to use a method on a node that doesn't support it."""
class UninitializedError(Error):
"""Raised when an object requires an initialization step before use"""
class InvalidResponseError(Error):
"""Raised when an object requires an initialization step before use"""
class FileNotValidError(Error):
def __init__(self, name: str, message: str = "") -> None:
self.message = message or f"Cannot parse '{name}' content."
super().__init__(self.message)
class TimestampFormatError(Error):
def __init__(self, message: str | None = None) -> None:
self.message = message or "Invalid timestamp format"
super().__init__(self.message)