Files
secondo/apis/python2/SecondoAPI/PY/libs_pkg/exception_handler.py
2026-01-23 17:03:45 +08:00

187 lines
4.9 KiB
Python

"""
This dictionary contains all error codes and descriptions of errors for Secondo server.
"""
secondo_errors = {
0: "ERR_NO_ERROR",
1: "ERR_CMD_NOT_RECOGNIZED",
2: "ERR_IN_QUERY_EXPR",
3: "ERR_EXPR_NOT_EVALUABLE",
4: "ERR_NO_OBJ_CREATED",
5: "ERR_NO_TYPE_DEFINED",
6: "ERR_NO_DATABASE_OPEN",
7: "ERR_DATABASE_OPEN",
701: "ERR_CREATE_DATABASE",
702: "ERR_DELETE_DATABASE",
8: "ERR_UNDEF_OBJ_VALUE",
9: "ERR_SYNTAX_ERROR",
10: "ERR_IDENT_USED",
11: "ERR_IDENT_UNKNOWN_TYPE",
12: "ERR_IDENT_UNKNOWN_OBJ",
13: "ERR_EXPR_TYPE_NEQ_OBJ_TYPE",
14: "ERR_TYPE_NAME_USED_BY_OBJ",
15: "ERR_IDENT_RESERVED",
16: "ERR_UPDATE_FOR_DERIVED_OBJ_UNSUPPORTED",
20: "ERR_TRANSACTION_ACTIVE",
21: "ERR_NO_TRANSACTION_ACTIVE",
22: "ERR_BEGIN_TRANSACTION_FAILED",
23: "ERR_COMMIT_OR_ABORT_FAILED",
24: "ERR_IN_DEFINITIONS_FILE",
25: "ERR_IDENT_UNKNOWN_DB_NAME",
26: "ERR_PROBLEM_IN_WRITING_TO_FILE",
27: "ERR_DB_NAME_NEQ_IDENT",
28: "ERR_PROBLEM_IN_READING_FILE",
29: "ERR_IN_LIST_STRUCTURE_IN_FILE",
30: "ERR_CMD_NOT_YET_IMPL",
31: "ERR_CMD_LEVEL_NOT_YET_IMPL",
32: "ERR_CMD_NOT_IMPL_AT_THIS_LEVEL",
40: "ERR_IN_TYPE_DEFINITION",
41: "ERR_NAME_DOUBLY_DEFINED",
42: "ERR_IN_TYPE_EXPRESSION",
50: "ERR_IN_OBJ_DEFINITION",
51: "ERR_OBJ_NAME_DOUBLY_DEFINED",
52: "ERR_WRONG_TYPE_EXPR_FOR_OBJ",
53: "ERR_WRONG_LIST_REP_FOR_OBJ",
60: "ERR_KIND_DOES_NOT_MATCH_TYPE_EXPR",
61: "ERR_SPECIFIC_KIND_CHECKING_ERROR",
70: "ERR_IN_VALUELIST_TC_V",
71: "ERR_SPECIFIC_FOR_TYPE_CONSTRUCTOR",
72: "ERR_IN_VALUELIST_TC",
73: "ERR_AT_POS_IN_VALUELIST",
80: "ERR_IN_SECONDO_PROTOCOL",
81: "ERR_CONNECTION_TO_SERVER_LOST",
82: "ERR_IDENT_UNKNOWN_DB_OBJECT",
83: "ERR_OBJ_NAME_IN_FILE_NEQ_IDENT",
84: "ERR_IDENT_ALREADY_KNOWN_IN_DB",
85: "ERR_ALGEBRA_UNKNOWN",
86: "ERR_IN_FILETRANSFER",
87: "ERR_INVALID_FILE_NAME",
88: "ERR_FILE_EXISTS",
89: "ERR_FILE_NOT_EXISTS",
100: "ERR_SYSTEM_ERROR",
101: "ERR_SYSTEM_DIED",
-1: "ERR_UNKNOWN_RETURN_CODE",
-999: "E_SMI_BDB",
-1001: "E_SMI_STARTUP",
-1002: "E_SMI_SHUTDOWN",
-1003: "E_SMI_DB_CREATE",
-1004: "E_SMI_DB_OPEN",
-1005: "E_SMI_DB_CLOSE",
-1006: "E_SMI_DB_ERASE",
-1007: "E_SMI_DB_NOTOPEN",
-1008: "E_SMI_DB_NOTCLOSED",
-1009: "E_SMI_DB_INVALIDNAME",
-10010: "E_SMI_DB_EXISTING",
-10011: "E_SMI_DB_NOTEXISTING",
-10012: "E_SMI_DB_LOOKUP",
-10013: "E_SMI_DB_INSERT_CATALOG",
-10014: "E_SMI_DB_DELETE_CATALOG",
-10015: "E_SMI_DB_UPDATE_CATALOG",
-10016: "E_SMI_DB_NOTFOUND",
-10017: "E_SMI_DB_NOTLOCKED",
-10018: "E_SMI_DB_REGISTER",
-10019: "E_SMI_DB_UNREGISTER",
-10020: "E_SMI_DB_LOCK",
-10021: "E_SMI_DB_UNLOCK",
-10022: "E_SMI_DB_LOCK_DEADLOCK",
-1051: "E_SMI_TXN_BEGIN",
-1052: "E_SMI_TXN_COMMIT",
-1053: "E_SMI_TXN_ABORT",
-1054: "E_SMI_TXN_RUNNING",
-1055: "E_SMI_TXN_NOTRUNNING",
-1101: "E_SMI_CATALOG_LOOKUP",
-1102: "E_SMI_CATALOG_INSERT",
-1103: "E_SMI_CATALOG_DELETE",
-1104: "E_SMI_CATALOG_KEYEXIST",
-1105: "E_SMI_CATALOG_NOTFOUND",
-1106: "E_SMI_CATALOG_RENAME",
-1201: "E_SMI_FILE_INVALIDNAME",
-1202: "E_SMI_FILE_NOFILEID",
-1203: "E_SMI_FILE_BADCONTEXT",
-1204: "E_SMI_FILE_CREATE",
-1205: "E_SMI_FILE_OPEN",
-1206: "E_SMI_FILE_CLOSE",
-1207: "E_SMI_FILE_KEYEXIST",
-1208: "E_SMI_FILE_ISTEMP",
-1251: "E_SMI_RECORD_NOTINIT",
-1252: "E_SMI_RECORD_READ",
-1253: "E_SMI_RECORD_WRITE",
-1254: "E_SMI_RECORD_SELECT",
-1255: "E_SMI_RECORD_APPEND",
-1256: "E_SMI_RECORD_DELETE",
-1257: "E_SMI_RECORD_SELECTALL",
-1258: "E_SMI_RECORD_INSERT",
-1259: "E_SMI_RECORD_TRUNCATE",
-1260: "E_SMI_RECORD_READONLY",
-1261: "E_SMI_RECORD_FINISH",
-1271: "E_SMI_CURSOR_NOTOPEN",
-1272: "E_SMI_CURSOR_NEXT",
-1273: "E_SMI_CURSOR_ENDOFSCAN",
-1274: "E_SMI_CURSOR_DELETE",
-1275: "E_SMI_CURSOR_FINISH",
-1290: "E_SMI_PREFETCH_RANGE"
}
class GeneralError(Exception):
"""
This exception class is the base class of all other error exceptions,
used to catch all errors with one single except statement.
"""
def __init__(self, error, *args):
self.error = error
super(GeneralError, self).__init__(error, *args)
class SecondoAPI_Error(GeneralError):
"""
The class that is responsible for raising Exception for errors that are related
to the PySecondo interface rather than the database itself.
"""
def __init__(self, error, *args):
self.error = error
super(SecondoAPI_Error, self).__init__(error, *args)
class SecondoError(GeneralError):
"""
The class that is responsible for raising Exception for errors that are related to the database.
"""
def __init__(self, error, *args):
self.error = error
super(SecondoError, self).__init__(error, *args)
class UnexpectedSystemError(SecondoError):
"""
The class that is responsible for raising Exception for errors that are related to the database's operation
e.g. an unexpected disconnect, the data source name not found,
a transaction could not be processed, a memory allocation error, etc.
"""
def __init__(self, error, *args):
self.error = error
super(UnexpectedSystemError, self).__init__(error, *args)