-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathexceptions.py
More file actions
216 lines (115 loc) · 4.83 KB
/
Copy pathexceptions.py
File metadata and controls
216 lines (115 loc) · 4.83 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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
from typing import Dict, Type
from objectbox.c import py_str, C, DbErrorCode
class DbError(Exception):
"""The base class for all exceptions thrown by ObjectBox.
Every exception has a code attribute for identification."""
code = DbErrorCode.OBX_NO_SUCCESS # Re-defined by derived classes
def __init__(self):
self.message = py_str(C.obx_last_error_message())
super().__init__(f"{self.code.value} ({self.code.name}) - {self.message}")
@staticmethod
def from_code(code: int):
"""Creates a DbError of the given error code."""
return create_db_error(code)
@staticmethod
def last():
"""Creates a DbError of the last error that was generated in core."""
return DbError.from_code(C.obx_last_error())
class NotFoundError(DbError):
"""Raised when an object is not found."""
code = DbErrorCode.OBX_NOT_FOUND
class NoSuccessError(DbError):
code = DbErrorCode.OBX_NO_SUCCESS
class TimeoutError(DbError):
code = DbErrorCode.OBX_TIMEOUT
class IllegalStateError(DbError):
code = DbErrorCode.OBX_ERROR_ILLEGAL_STATE
class IllegalArgumentError(DbError):
code = DbErrorCode.OBX_ERROR_ILLEGAL_ARGUMENT
class AllocationError(DbError):
code = DbErrorCode.OBX_ERROR_ALLOCATION
class NumericOverflowError(DbError):
code = DbErrorCode.OBX_ERROR_NUMERIC_OVERFLOW
class FeatureNotAvailable(DbError):
code = DbErrorCode.OBX_ERROR_FEATURE_NOT_AVAILABLE
class ShuttingDownError(DbError):
code = DbErrorCode.OBX_ERROR_SHUTTING_DOWN
class IoError(DbError):
code = DbErrorCode.OBX_ERROR_IO
class BackupFileInvalidError(DbError):
code = DbErrorCode.OBX_ERROR_BACKUP_FILE_INVALID
class NoErrorInfoError(DbError):
code = DbErrorCode.OBX_ERROR_NO_ERROR_INFO
class GeneralError(DbError):
code = DbErrorCode.OBX_ERROR_GENERAL
class UnknownError(DbError):
code = DbErrorCode.OBX_ERROR_UNKNOWN
class DbFullError(DbError):
code = DbErrorCode.OBX_ERROR_DB_FULL
class MaxReadersExceededError(DbError):
code = DbErrorCode.OBX_ERROR_MAX_READERS_EXCEEDED
class StoreMustShutdownError(DbError):
code = DbErrorCode.OBX_ERROR_STORE_MUST_SHUTDOWN
class MaxDataSizeExceededError(DbError):
code = DbErrorCode.OBX_ERROR_MAX_DATA_SIZE_EXCEEDED
class DbGeneralError(DbError):
code = DbErrorCode.OBX_ERROR_DB_GENERAL
class GeneralStorageError(DbError):
code = DbErrorCode.OBX_ERROR_STORAGE_GENERAL
class UniqueViolatedError(DbError):
code = DbErrorCode.OBX_ERROR_UNIQUE_VIOLATED
class NonUniqueResultError(DbError):
code = DbErrorCode.OBX_ERROR_NON_UNIQUE_RESULT
class PropertyTypeMismatchError(DbError):
code = DbErrorCode.OBX_ERROR_PROPERTY_TYPE_MISMATCH
class IdAlreadyExistsError(DbError):
code = DbErrorCode.OBX_ERROR_ID_ALREADY_EXISTS
class IdNotFoundError(DbError):
code = DbErrorCode.OBX_ERROR_ID_NOT_FOUND
class TimeSeriesError(DbError):
code = DbErrorCode.OBX_ERROR_TIME_SERIES
class ConstraintViolatedError(DbError):
code = DbErrorCode.OBX_ERROR_CONSTRAINT_VIOLATED
class StdIllegalArgumentError(DbError):
code = DbErrorCode.OBX_ERROR_STD_ILLEGAL_ARGUMENT
class StdOutOfRangeError(DbError):
code = DbErrorCode.OBX_ERROR_STD_OUT_OF_RANGE
class StdLengthError(DbError):
code = DbErrorCode.OBX_ERROR_STD_LENGTH
class StdBadAllocError(DbError):
code = DbErrorCode.OBX_ERROR_STD_BAD_ALLOC
class StdRangeError(DbError):
code = DbErrorCode.OBX_ERROR_STD_RANGE
class StdOverflowError(DbError):
code = DbErrorCode.OBX_ERROR_STD_OVERFLOW
class StdOtherError(DbError):
code = DbErrorCode.OBX_ERROR_STD_OTHER
class SchemaError(DbError):
code = DbErrorCode.OBX_ERROR_SCHEMA
class FileCorruptError(DbError):
code = DbErrorCode.OBX_ERROR_FILE_CORRUPT
class FilePagesCorruptError(DbError):
code = DbErrorCode.OBX_ERROR_FILE_PAGES_CORRUPT
class SchemaObjectNotFoundError(DbError):
code = DbErrorCode.OBX_ERROR_SCHEMA_OBJECT_NOT_FOUND
class TreeModelInvalidError(DbError):
code = DbErrorCode.OBX_ERROR_TREE_MODEL_INVALID
class TreeValueTypeMismatchError(DbError):
code = DbErrorCode.OBX_ERROR_TREE_VALUE_TYPE_MISMATCH
class TreePathNonUniqueError(DbError):
code = DbErrorCode.OBX_ERROR_TREE_PATH_NON_UNIQUE
class TreePathIllegalError(DbError):
code = DbErrorCode.OBX_ERROR_TREE_PATH_ILLEGAL
class TreeOtherError(DbError):
code = DbErrorCode.OBX_ERROR_TREE_OTHER
obx_db_error_map: Dict[int, Type] = {}
def _init_db_errror_map():
for subclass in DbError.__subclasses__():
obx_db_error_map[subclass.code] = subclass
_init_db_errror_map()
def create_db_error(code: int) -> DbError:
if code == DbErrorCode.OBX_SUCCESS:
raise Exception("Can't create a StorageException for code: OBX_SUCCESS")
elif code not in obx_db_error_map:
raise Exception(f"Unrecognized StorageException code: {code}")
return obx_db_error_map[code]()