-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathmaster.py
More file actions
executable file
·126 lines (85 loc) · 3.43 KB
/
Copy pathmaster.py
File metadata and controls
executable file
·126 lines (85 loc) · 3.43 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
from abc import ABCMeta
from enum import unique, IntEnum
from typing import Type
import enum_tools
from requests import HTTPError
from .base import ResponseException
from ..base import get_values_from_response
@enum_tools.documentation.document_enum
@unique
class MasterErrorCode(IntEnum):
"""
Overview:
Error codes for master end
"""
SUCCESS = 0 # doc: Master request success
SYSTEM_SHUTTING_DOWN = 101 # doc: Master end is shutting down
CHANNEL_NOT_GIVEN = 201 # doc: No channel id given in request
CHANNEL_INVALID = 202 # doc: Channel id given not match with master end
MASTER_TOKEN_NOT_GIVEN = 301 # doc: No master token found in connection request from slave
MASTER_TOKEN_INVALID = 302 # doc: Master token auth failed in master end
SELF_TOKEN_NOT_GIVEN = 401 # doc: No self token given in self request (such as ping, shutdown)
SELF_TOKEN_INVALID = 402 # doc: Self token auth failed in master end itself (such as ping, shutdown)
SLAVE_TOKEN_NOT_GIVEN = 501 # doc: No slave token given in service request from slave
SLAVE_TOKEN_INVALID = 502 # doc: Slave token not found in master end
TASK_DATA_INVALID = 601 # doc: Task data is invalid
# noinspection DuplicatedCode
class MasterResponseException(ResponseException, metaclass=ABCMeta):
"""
Overview:
Response exception for master client
"""
def __init__(self, error: HTTPError):
"""
Overview:
Constructor
Arguments:
- error (:obj:`HTTPError`): Original http exception object
"""
ResponseException.__init__(self, error)
class MasterSuccess(MasterResponseException):
pass
class MasterSystemShuttingDown(MasterResponseException):
pass
class MasterChannelNotGiven(MasterResponseException):
pass
class MasterChannelInvalid(MasterResponseException):
pass
class MasterMasterTokenNotGiven(MasterResponseException):
pass
class MasterMasterTokenInvalid(MasterResponseException):
pass
class MasterSelfTokenNotGiven(MasterResponseException):
pass
class MasterSelfTokenInvalid(MasterResponseException):
pass
class MasterSlaveTokenNotGiven(MasterResponseException):
pass
class MasterSlaveTokenInvalid(MasterResponseException):
pass
class MasterTaskDataInvalid(MasterResponseException):
pass
_PREFIX = ['master']
def get_master_exception_class_by_error_code(error_code: MasterErrorCode) -> Type[MasterResponseException]:
"""
Overview:
Transform from master error code to `MasterResponseException` class
Arguments:
- error_code (:obj:`MasterErrorCode`): Master error code
Returns:
- exception_class (:obj:`Type[MasterResponseException`): Master response exception class
"""
class_name = ''.join([word.lower().capitalize() for word in (_PREFIX + error_code.name.split('_'))])
return eval(class_name)
def get_master_exception_by_error(error: HTTPError) -> MasterResponseException:
"""
Overview:
Auto transform http error object to master response exception object.
Arguments:
- error (:obj:`HTTPError`): Http error object
Returns:
- exception (:obj:`MasterResponseException`): Master response exception object
"""
_, _, code, _, _ = get_values_from_response(error.response)
error_code = {v.value: v for k, v in MasterErrorCode.__members__.items()}[code]
return get_master_exception_class_by_error_code(error_code)(error)