-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathslave.py
More file actions
executable file
·141 lines (94 loc) · 3.82 KB
/
Copy pathslave.py
File metadata and controls
executable file
·141 lines (94 loc) · 3.82 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
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 SlaveErrorCode(IntEnum):
"""
Overview:
Error code for slave end
"""
SUCCESS = 0 # doc: Slave request success
SYSTEM_SHUTTING_DOWN = 101 # doc: Slave end is shutting down
CHANNEL_NOT_FOUND = 201 # doc: No channel id given in request
CHANNEL_INVALID = 202 # doc: Channel id given not match with slave end
MASTER_TOKEN_NOT_FOUND = 301 # doc: No master token found in connection request from master
MASTER_TOKEN_INVALID = 302 # doc: Master token auth failed in slave end
SELF_TOKEN_NOT_FOUND = 401 # doc: No self token given in self request (such as ping, shutdown)
SELF_TOKEN_INVALID = 402 # doc: Self token auth failed in slave end itself (such as ping, shutdown)
SLAVE_ALREADY_CONNECTED = 501 # doc: Slave end has already connected to another master end
SLAVE_NOT_CONNECTED = 502 # doc: Slave end not connected with master end yey
SLAVE_CONNECTION_REFUSED = 503 # doc: Connection to slave end refused
SLAVE_DISCONNECTION_REFUSED = 504 # doc: Disconnection to slave end refused
TASK_ALREADY_EXIST = 601 # doc: Slave end is processing another task
TASK_REFUSED = 602 # doc: Task for slave end refused
# noinspection DuplicatedCode
class SlaveResponseException(ResponseException, metaclass=ABCMeta):
"""
Overview:
Response exception for slave client
"""
def __init__(self, error: HTTPError):
"""
Overview:
Constructor
Arguments:
- error (:obj:`HTTPError`): Original http exception object
"""
ResponseException.__init__(self, error)
class SlaveSuccess(SlaveResponseException):
pass
class SlaveSystemShuttingDown(SlaveResponseException):
pass
class SlaveChannelNotFound(SlaveResponseException):
pass
class SlaveChannelInvalid(SlaveResponseException):
pass
class SlaveMasterTokenNotFound(SlaveResponseException):
pass
class SlaveMasterTokenInvalid(SlaveResponseException):
pass
class SlaveSelfTokenNotFound(SlaveResponseException):
pass
class SlaveSelfTokenInvalid(SlaveResponseException):
pass
class SlaveSlaveAlreadyConnected(SlaveResponseException):
pass
class SlaveSlaveNotConnected(SlaveResponseException):
pass
class SlaveSlaveConnectionRefused(SlaveResponseException):
pass
class SlaveSlaveDisconnectionRefused(SlaveResponseException):
pass
class SlaveTaskAlreadyExist(SlaveResponseException):
pass
class SlaveTaskRefused(SlaveResponseException):
pass
_PREFIX = ['slave']
def get_slave_exception_class_by_error_code(error_code: SlaveErrorCode) -> Type[SlaveResponseException]:
"""
Overview:
Transform from slave error code to `SlaveResponseException` class
Arguments:
- error_code (:obj:`SlaveErrorCode`): Slave error code
Returns:
- exception_class (:obj:`Type[SlaveResponseException`): Slave response exception class
"""
class_name = ''.join([word.lower().capitalize() for word in (_PREFIX + error_code.name.split('_'))])
return eval(class_name)
def get_slave_exception_by_error(error: HTTPError) -> SlaveResponseException:
"""
Overview:
Auto transform http error object to slave response exception object.
Arguments:
- error (:obj:`HTTPError`): Http error object
Returns:
- exception (:obj:`SlaveResponseException`): Slave response exception object
"""
_, _, code, _, _ = get_values_from_response(error.response)
error_code = {v.value: v for k, v in SlaveErrorCode.__members__.items()}[code]
return get_slave_exception_class_by_error_code(error_code)(error)