crypticorn 2.1.3__py3-none-any.whl → 2.1.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- crypticorn/common/errors.py +215 -252
- crypticorn/common/sorter.py +38 -0
- crypticorn/pay/client/__init__.py +1 -0
- crypticorn/pay/client/api/now_payments_api.py +3 -16
- crypticorn/pay/client/api/payments_api.py +0 -42
- crypticorn/pay/client/api/products_api.py +3 -42
- crypticorn/pay/client/configuration.py +2 -1
- crypticorn/pay/client/models/__init__.py +1 -0
- crypticorn/pay/client/models/body_create_now_invoice.py +98 -0
- crypticorn/{trade/client/models/update_notification.py → pay/client/models/body_create_product.py} +20 -17
- crypticorn/pay/client/models/body_get_products.py +87 -0
- crypticorn/pay/client/models/body_handle_now_webhook.py +98 -0
- crypticorn/pay/client/models/body_update_product.py +98 -0
- crypticorn/pay/client/models/product_model.py +9 -0
- crypticorn/pay/client/models/scope.py +56 -0
- crypticorn/trade/client/api/api_keys_api.py +5 -70
- crypticorn/trade/client/api/bots_api.py +4 -56
- crypticorn/trade/client/api/exchanges_api.py +2 -19
- crypticorn/trade/client/api/futures_trading_panel_api.py +21 -89
- crypticorn/trade/client/api/notifications_api.py +6 -87
- crypticorn/trade/client/api/orders_api.py +2 -15
- crypticorn/trade/client/api/strategies_api.py +4 -56
- crypticorn/trade/client/api/trading_actions_api.py +1 -14
- crypticorn/trade/client/configuration.py +2 -1
- crypticorn/trade/client/models/api_error_identifier.py +49 -43
- crypticorn/trade/client/models/api_error_level.py +2 -2
- {crypticorn-2.1.3.dist-info → crypticorn-2.1.5.dist-info}/METADATA +3 -3
- {crypticorn-2.1.3.dist-info → crypticorn-2.1.5.dist-info}/RECORD +30 -26
- crypticorn/trade/client/models/notification_type.py +0 -37
- crypticorn/trade/client/models/strategy_model.py +0 -158
- {crypticorn-2.1.3.dist-info → crypticorn-2.1.5.dist-info}/WHEEL +0 -0
- {crypticorn-2.1.3.dist-info → crypticorn-2.1.5.dist-info}/top_level.txt +0 -0
crypticorn/common/errors.py
CHANGED
@@ -17,218 +17,189 @@ class ApiErrorType(str, Enum):
|
|
17
17
|
class ApiErrorIdentifier(str, Enum):
|
18
18
|
"""API error identifiers"""
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
USER_FROZEN = "user_account_is_frozen"
|
27
|
-
RATE_LIMIT = "rate_limit_exceeded"
|
28
|
-
INVALID_PARAMETER = "invalid_parameter_provided"
|
29
|
-
REQUEST_SCOPE_EXCEEDED = "request_scope_limit_exceeded"
|
20
|
+
API_KEY_ALREADY_EXISTS = "api_key_already_exists"
|
21
|
+
BLACK_SWAN = "black_swan"
|
22
|
+
BOT_ALREADY_DELETED = "bot_already_deleted"
|
23
|
+
BOT_DISABLED = "bot_disabled"
|
24
|
+
BOT_STOPPING_COMPLETED = "bot_stopping_completed"
|
25
|
+
CLIENT_ORDER_ID_REPEATED = "client_order_id_already_exists"
|
30
26
|
CONTENT_TYPE_ERROR = "invalid_content_type"
|
31
|
-
|
32
|
-
|
27
|
+
DELETE_BOT_ERROR = "delete_bot_error"
|
28
|
+
EXCHANGE_API_KEY_IN_USE = "exchange_api_key_in_use"
|
29
|
+
EXCHANGE_INVALID_SIGNATURE = "exchange_invalid_signature"
|
30
|
+
EXCHANGE_INVALID_TIMESTAMP = "exchange_invalid_timestamp"
|
31
|
+
EXCHANGE_IP_RESTRICTED = "exchange_ip_address_is_not_authorized"
|
32
|
+
EXCHANGE_MAINTENANCE = "exchange_system_under_maintenance"
|
33
|
+
EXCHANGE_RATE_LIMIT = "exchange_rate_limit_exceeded"
|
34
|
+
EXCHANGE_SERVICE_UNAVAILABLE = "exchange_service_temporarily_unavailable"
|
35
|
+
EXCHANGE_SYSTEM_BUSY = "exchange_system_is_busy"
|
36
|
+
EXCHANGE_SYSTEM_CONFIG_ERROR = "exchange_system_configuration_error"
|
37
|
+
EXCHANGE_SYSTEM_ERROR = "exchange_internal_system_error"
|
38
|
+
EXCHANGE_USER_FROZEN = "exchange_user_account_is_frozen"
|
39
|
+
EXCHANGE_PERMISSION_DENIED = "insufficient_permissions_spot_and_futures_required"
|
40
|
+
HEDGE_MODE_NOT_ACTIVE = "hedge_mode_not_active"
|
41
|
+
HTTP_ERROR = "http_request_error"
|
42
|
+
INSUFFICIENT_BALANCE = "insufficient_balance"
|
43
|
+
INSUFFICIENT_MARGIN = "insufficient_margin"
|
44
|
+
INSUFFICIENT_SCOPES = "insufficient_scopes"
|
45
|
+
INVALID_API_KEY = "invalid_api_key"
|
46
|
+
INVALID_BEARER = "invalid_bearer"
|
47
|
+
INVALID_EXCHANGE_API_KEY = "invalid_exchange_api_key"
|
48
|
+
INVALID_MARGIN_MODE = "invalid_margin_mode"
|
49
|
+
INVALID_PARAMETER = "invalid_parameter_provided"
|
50
|
+
JWT_EXPIRED = "jwt_expired"
|
51
|
+
LEVERAGE_EXCEEDED = "leverage_limit_exceeded"
|
52
|
+
LIQUIDATION_PRICE_VIOLATION = "order_violates_liquidation_price_constraints"
|
53
|
+
NO_CREDENTIALS = "no_credentials"
|
54
|
+
OBJECT_NOT_FOUND = "object_not_found"
|
33
55
|
ORDER_ALREADY_FILLED = "order_is_already_filled"
|
34
56
|
ORDER_IN_PROCESS = "order_is_being_processed"
|
35
57
|
ORDER_LIMIT_EXCEEDED = "order_quantity_limit_exceeded"
|
58
|
+
ORDER_NOT_FOUND = "order_does_not_exist"
|
36
59
|
ORDER_PRICE_INVALID = "order_price_is_invalid"
|
37
|
-
|
38
|
-
|
39
|
-
CLIENT_ORDER_ID_REPEATED = "client_order_id_already_exists"
|
40
|
-
|
41
|
-
POSITION_NOT_FOUND = "position_does_not_exist"
|
60
|
+
ORDER_SIZE_TOO_LARGE = "order_size_too_large"
|
61
|
+
ORDER_SIZE_TOO_SMALL = "order_size_too_small"
|
42
62
|
POSITION_LIMIT_EXCEEDED = "position_limit_exceeded"
|
63
|
+
POSITION_NOT_FOUND = "position_does_not_exist"
|
43
64
|
POSITION_SUSPENDED = "position_opening_temporarily_suspended"
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
LEVERAGE_EXCEEDED = "leverage_limit_exceeded"
|
65
|
+
POST_ONLY_REJECTED = "post_only_order_would_immediately_match"
|
66
|
+
REQUEST_SCOPE_EXCEEDED = "request_scope_limit_exceeded"
|
48
67
|
RISK_LIMIT_EXCEEDED = "risk_limit_exceeded"
|
49
|
-
LIQUIDATION_PRICE_VIOLATION = "order_violates_liquidation_price_constraints"
|
50
|
-
INVALID_MARGIN_MODE = "invalid_margin_mode"
|
51
|
-
|
52
|
-
SYSTEM_ERROR = "internal_system_error"
|
53
|
-
SYSTEM_CONFIG_ERROR = "system_configuration_error"
|
54
|
-
SERVICE_UNAVAILABLE = "service_temporarily_unavailable"
|
55
|
-
SYSTEM_BUSY = "system_is_busy_please_try_again_later"
|
56
|
-
MAINTENANCE = "system_under_maintenance"
|
57
68
|
RPC_TIMEOUT = "rpc_timeout"
|
58
69
|
SETTLEMENT_IN_PROGRESS = "system_settlement_in_process"
|
59
|
-
|
60
|
-
|
70
|
+
STRATEGY_DISABLED = "strategy_disabled"
|
71
|
+
SUCCESS = "success"
|
72
|
+
SYMBOL_NOT_FOUND = "symbol_does_not_exist"
|
61
73
|
TRADING_LOCKED = "trading_has_been_locked"
|
62
|
-
|
74
|
+
TRADING_ACTION_EXPIRED = "trading_action_expired"
|
75
|
+
TRADING_ACTION_SKIPPED = "trading_action_skipped"
|
76
|
+
TRADING_SUSPENDED = "trading_is_suspended"
|
63
77
|
UNKNOWN_ERROR = "unknown_error_occurred"
|
64
|
-
|
65
|
-
BLACK_SWAN = "black_swan"
|
66
|
-
|
67
|
-
# our bot errors
|
68
|
-
ACTION_EXPIRED = "trading_action_expired"
|
69
|
-
ACTION_SKIPPED = "trading_action_skipped"
|
70
|
-
BOT_DISABLED = "bot_disabled"
|
71
|
-
ORDER_SIZE_TOO_SMALL = "order_size_too_small"
|
72
|
-
ORDER_SIZE_TOO_LARGE = "order_size_too_large"
|
73
|
-
HEDGE_MODE_NOT_ACTIVE = "hedge_mode_not_active"
|
74
|
-
|
75
|
-
# our API errors
|
76
|
-
API_KEY_ALREADY_EXISTS = "api_key_already_exists"
|
77
|
-
DELETE_BOT_ERROR = "delete_bot_error"
|
78
|
-
JWT_EXPIRED = "jwt_expired"
|
79
|
-
BOT_STOPPING_COMPLETED = "bot_stopping_completed"
|
80
|
-
OBJECT_NOT_FOUND = "object_not_found"
|
81
|
-
STRATEGY_DISABLED = "strategy_disabled"
|
82
|
-
API_KEY_IN_USE = "api_key_in_use_by_bots"
|
83
|
-
BOT_ALREADY_DELETED = "bot_already_deleted"
|
84
|
-
|
85
|
-
# our auth errors
|
86
|
-
INVALID_API_KEY = "invalid_api_key"
|
87
|
-
INVALID_BEARER = "invalid_bearer"
|
88
|
-
NO_CREDENTIALS = "no_credentials"
|
89
|
-
INSUFFICIENT_SCOPES = "insufficient_scopes"
|
78
|
+
URL_NOT_FOUND = "requested_resource_not_found"
|
90
79
|
|
91
80
|
|
92
81
|
class ApiErrorLevel(str, Enum):
|
82
|
+
"""API error levels"""
|
83
|
+
|
93
84
|
ERROR = "error"
|
94
|
-
SUCCESS = "success"
|
95
85
|
INFO = "info"
|
86
|
+
SUCCESS = "success"
|
96
87
|
WARNING = "warning"
|
97
88
|
|
98
89
|
|
99
90
|
class ApiError(Enum):
|
100
91
|
"""API error codes"""
|
101
92
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
UNAUTHORIZED = (
|
106
|
-
ApiErrorIdentifier.UNAUTHORIZED,
|
107
|
-
ApiErrorType.SERVER_ERROR,
|
108
|
-
ApiErrorLevel.ERROR,
|
109
|
-
)
|
110
|
-
INVALID_SIGNATURE = (
|
111
|
-
ApiErrorIdentifier.INVALID_SIGNATURE,
|
112
|
-
ApiErrorType.SERVER_ERROR,
|
93
|
+
API_KEY_ALREADY_EXISTS = (
|
94
|
+
ApiErrorIdentifier.API_KEY_ALREADY_EXISTS,
|
95
|
+
ApiErrorType.USER_ERROR,
|
113
96
|
ApiErrorLevel.ERROR,
|
114
97
|
)
|
115
|
-
|
116
|
-
ApiErrorIdentifier.
|
117
|
-
ApiErrorType.
|
118
|
-
ApiErrorLevel.
|
98
|
+
BLACK_SWAN = (
|
99
|
+
ApiErrorIdentifier.BLACK_SWAN,
|
100
|
+
ApiErrorType.USER_ERROR,
|
101
|
+
ApiErrorLevel.INFO,
|
119
102
|
)
|
120
|
-
|
121
|
-
ApiErrorIdentifier.
|
103
|
+
BOT_ALREADY_DELETED = (
|
104
|
+
ApiErrorIdentifier.BOT_ALREADY_DELETED,
|
122
105
|
ApiErrorType.SERVER_ERROR,
|
123
106
|
ApiErrorLevel.ERROR,
|
124
107
|
)
|
125
|
-
|
126
|
-
ApiErrorIdentifier.
|
127
|
-
ApiErrorType.USER_ERROR,
|
128
|
-
ApiErrorLevel.ERROR,
|
129
|
-
)
|
130
|
-
USER_FROZEN = (
|
131
|
-
ApiErrorIdentifier.USER_FROZEN,
|
108
|
+
BOT_DISABLED = (
|
109
|
+
ApiErrorIdentifier.BOT_DISABLED,
|
132
110
|
ApiErrorType.USER_ERROR,
|
133
|
-
ApiErrorLevel.
|
111
|
+
ApiErrorLevel.WARNING,
|
134
112
|
)
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
ApiErrorType.EXCHANGE_ERROR,
|
140
|
-
ApiErrorLevel.ERROR,
|
113
|
+
BOT_STOPPING_COMPLETED = (
|
114
|
+
ApiErrorIdentifier.BOT_STOPPING_COMPLETED,
|
115
|
+
ApiErrorType.NO_ERROR,
|
116
|
+
ApiErrorLevel.INFO,
|
141
117
|
)
|
142
|
-
|
143
|
-
|
144
|
-
INVALID_PARAMETER = (
|
145
|
-
ApiErrorIdentifier.INVALID_PARAMETER,
|
118
|
+
CLIENT_ORDER_ID_REPEATED = (
|
119
|
+
ApiErrorIdentifier.CLIENT_ORDER_ID_REPEATED,
|
146
120
|
ApiErrorType.SERVER_ERROR,
|
147
121
|
ApiErrorLevel.ERROR,
|
148
122
|
)
|
149
|
-
REQUEST_SCOPE_EXCEEDED = (
|
150
|
-
ApiErrorIdentifier.REQUEST_SCOPE_EXCEEDED,
|
151
|
-
ApiErrorType.EXCHANGE_ERROR,
|
152
|
-
ApiErrorLevel.ERROR,
|
153
|
-
)
|
154
123
|
CONTENT_TYPE_ERROR = (
|
155
124
|
ApiErrorIdentifier.CONTENT_TYPE_ERROR,
|
156
125
|
ApiErrorType.SERVER_ERROR,
|
157
126
|
ApiErrorLevel.ERROR,
|
158
127
|
)
|
159
|
-
|
160
|
-
ApiErrorIdentifier.
|
128
|
+
DELETE_BOT_ERROR = (
|
129
|
+
ApiErrorIdentifier.DELETE_BOT_ERROR,
|
161
130
|
ApiErrorType.SERVER_ERROR,
|
162
131
|
ApiErrorLevel.ERROR,
|
163
132
|
)
|
164
|
-
|
165
|
-
ApiErrorIdentifier.
|
133
|
+
EXCHANGE_INVALID_SIGNATURE = (
|
134
|
+
ApiErrorIdentifier.EXCHANGE_INVALID_SIGNATURE,
|
166
135
|
ApiErrorType.SERVER_ERROR,
|
167
136
|
ApiErrorLevel.ERROR,
|
168
137
|
)
|
169
|
-
|
170
|
-
|
171
|
-
ORDER_NOT_FOUND = (
|
172
|
-
ApiErrorIdentifier.ORDER_NOT_FOUND,
|
138
|
+
EXCHANGE_INVALID_TIMESTAMP = (
|
139
|
+
ApiErrorIdentifier.EXCHANGE_INVALID_TIMESTAMP,
|
173
140
|
ApiErrorType.SERVER_ERROR,
|
174
141
|
ApiErrorLevel.ERROR,
|
175
142
|
)
|
176
|
-
|
177
|
-
ApiErrorIdentifier.
|
143
|
+
EXCHANGE_IP_RESTRICTED = (
|
144
|
+
ApiErrorIdentifier.EXCHANGE_IP_RESTRICTED,
|
178
145
|
ApiErrorType.SERVER_ERROR,
|
179
|
-
ApiErrorLevel.
|
146
|
+
ApiErrorLevel.ERROR,
|
180
147
|
)
|
181
|
-
|
182
|
-
ApiErrorIdentifier.
|
183
|
-
ApiErrorType.
|
184
|
-
ApiErrorLevel.
|
148
|
+
EXCHANGE_API_KEY_IN_USE = (
|
149
|
+
ApiErrorIdentifier.EXCHANGE_API_KEY_IN_USE,
|
150
|
+
ApiErrorType.SERVER_ERROR,
|
151
|
+
ApiErrorLevel.ERROR,
|
185
152
|
)
|
186
|
-
|
187
|
-
ApiErrorIdentifier.
|
153
|
+
EXCHANGE_MAINTENANCE = (
|
154
|
+
ApiErrorIdentifier.EXCHANGE_MAINTENANCE,
|
155
|
+
ApiErrorType.EXCHANGE_ERROR,
|
156
|
+
ApiErrorLevel.ERROR,
|
157
|
+
)
|
158
|
+
EXCHANGE_PERMISSION_DENIED = (
|
159
|
+
ApiErrorIdentifier.EXCHANGE_PERMISSION_DENIED,
|
188
160
|
ApiErrorType.USER_ERROR,
|
189
161
|
ApiErrorLevel.ERROR,
|
190
162
|
)
|
191
|
-
|
192
|
-
ApiErrorIdentifier.
|
193
|
-
ApiErrorType.
|
163
|
+
EXCHANGE_RATE_LIMIT = (
|
164
|
+
ApiErrorIdentifier.EXCHANGE_RATE_LIMIT,
|
165
|
+
ApiErrorType.EXCHANGE_ERROR,
|
194
166
|
ApiErrorLevel.ERROR,
|
195
167
|
)
|
196
|
-
|
197
|
-
ApiErrorIdentifier.
|
198
|
-
ApiErrorType.
|
168
|
+
EXCHANGE_SERVICE_UNAVAILABLE = (
|
169
|
+
ApiErrorIdentifier.EXCHANGE_SERVICE_UNAVAILABLE,
|
170
|
+
ApiErrorType.EXCHANGE_ERROR,
|
199
171
|
ApiErrorLevel.ERROR,
|
200
172
|
)
|
201
|
-
|
202
|
-
ApiErrorIdentifier.
|
203
|
-
ApiErrorType.
|
204
|
-
ApiErrorLevel.
|
173
|
+
EXCHANGE_SYSTEM_BUSY = (
|
174
|
+
ApiErrorIdentifier.EXCHANGE_SYSTEM_BUSY,
|
175
|
+
ApiErrorType.EXCHANGE_ERROR,
|
176
|
+
ApiErrorLevel.ERROR,
|
205
177
|
)
|
206
|
-
|
207
|
-
ApiErrorIdentifier.
|
208
|
-
ApiErrorType.
|
178
|
+
EXCHANGE_SYSTEM_CONFIG_ERROR = (
|
179
|
+
ApiErrorIdentifier.EXCHANGE_SYSTEM_CONFIG_ERROR,
|
180
|
+
ApiErrorType.EXCHANGE_ERROR,
|
209
181
|
ApiErrorLevel.ERROR,
|
210
182
|
)
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
) # not an error because user can close a position manually which we don't know about
|
219
|
-
POSITION_LIMIT_EXCEEDED = (
|
220
|
-
ApiErrorIdentifier.POSITION_LIMIT_EXCEEDED,
|
183
|
+
EXCHANGE_SYSTEM_ERROR = (
|
184
|
+
ApiErrorIdentifier.EXCHANGE_SYSTEM_ERROR,
|
185
|
+
ApiErrorType.EXCHANGE_ERROR,
|
186
|
+
ApiErrorLevel.ERROR,
|
187
|
+
)
|
188
|
+
EXCHANGE_USER_FROZEN = (
|
189
|
+
ApiErrorIdentifier.EXCHANGE_USER_FROZEN,
|
221
190
|
ApiErrorType.USER_ERROR,
|
222
191
|
ApiErrorLevel.ERROR,
|
223
192
|
)
|
224
|
-
|
225
|
-
ApiErrorIdentifier.
|
193
|
+
HEDGE_MODE_NOT_ACTIVE = (
|
194
|
+
ApiErrorIdentifier.HEDGE_MODE_NOT_ACTIVE,
|
195
|
+
ApiErrorType.USER_ERROR,
|
196
|
+
ApiErrorLevel.ERROR,
|
197
|
+
)
|
198
|
+
HTTP_ERROR = (
|
199
|
+
ApiErrorIdentifier.HTTP_ERROR,
|
226
200
|
ApiErrorType.EXCHANGE_ERROR,
|
227
201
|
ApiErrorLevel.ERROR,
|
228
202
|
)
|
229
|
-
# FUTURES_BRAWL_RESTRICTED = "Operation restricted for Futures Brawl", ApiErrorType.USER_ERROR
|
230
|
-
|
231
|
-
# Balance/Margin
|
232
203
|
INSUFFICIENT_BALANCE = (
|
233
204
|
ApiErrorIdentifier.INSUFFICIENT_BALANCE,
|
234
205
|
ApiErrorType.USER_ERROR,
|
@@ -239,20 +210,23 @@ class ApiError(Enum):
|
|
239
210
|
ApiErrorType.USER_ERROR,
|
240
211
|
ApiErrorLevel.ERROR,
|
241
212
|
)
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
ApiErrorIdentifier.LEVERAGE_EXCEEDED,
|
246
|
-
ApiErrorType.SERVER_ERROR,
|
213
|
+
INSUFFICIENT_SCOPES = (
|
214
|
+
ApiErrorIdentifier.INSUFFICIENT_SCOPES,
|
215
|
+
ApiErrorType.USER_ERROR,
|
247
216
|
ApiErrorLevel.ERROR,
|
248
217
|
)
|
249
|
-
|
250
|
-
ApiErrorIdentifier.
|
251
|
-
ApiErrorType.
|
218
|
+
INVALID_API_KEY = (
|
219
|
+
ApiErrorIdentifier.INVALID_API_KEY,
|
220
|
+
ApiErrorType.USER_ERROR,
|
252
221
|
ApiErrorLevel.ERROR,
|
253
222
|
)
|
254
|
-
|
255
|
-
ApiErrorIdentifier.
|
223
|
+
INVALID_BEARER = (
|
224
|
+
ApiErrorIdentifier.INVALID_BEARER,
|
225
|
+
ApiErrorType.USER_ERROR,
|
226
|
+
ApiErrorLevel.ERROR,
|
227
|
+
)
|
228
|
+
INVALID_EXCHANGE_API_KEY = (
|
229
|
+
ApiErrorIdentifier.INVALID_EXCHANGE_API_KEY,
|
256
230
|
ApiErrorType.SERVER_ERROR,
|
257
231
|
ApiErrorLevel.ERROR,
|
258
232
|
)
|
@@ -261,81 +235,63 @@ class ApiError(Enum):
|
|
261
235
|
ApiErrorType.SERVER_ERROR,
|
262
236
|
ApiErrorLevel.ERROR,
|
263
237
|
)
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
ApiErrorIdentifier.SYSTEM_ERROR,
|
268
|
-
ApiErrorType.EXCHANGE_ERROR,
|
238
|
+
INVALID_PARAMETER = (
|
239
|
+
ApiErrorIdentifier.INVALID_PARAMETER,
|
240
|
+
ApiErrorType.SERVER_ERROR,
|
269
241
|
ApiErrorLevel.ERROR,
|
270
242
|
)
|
271
|
-
|
272
|
-
ApiErrorIdentifier.
|
273
|
-
ApiErrorType.
|
243
|
+
JWT_EXPIRED = (
|
244
|
+
ApiErrorIdentifier.JWT_EXPIRED,
|
245
|
+
ApiErrorType.SERVER_ERROR,
|
274
246
|
ApiErrorLevel.ERROR,
|
275
247
|
)
|
276
|
-
|
277
|
-
ApiErrorIdentifier.
|
278
|
-
ApiErrorType.
|
248
|
+
LEVERAGE_EXCEEDED = (
|
249
|
+
ApiErrorIdentifier.LEVERAGE_EXCEEDED,
|
250
|
+
ApiErrorType.SERVER_ERROR,
|
279
251
|
ApiErrorLevel.ERROR,
|
280
252
|
)
|
281
|
-
|
282
|
-
ApiErrorIdentifier.
|
283
|
-
ApiErrorType.
|
253
|
+
LIQUIDATION_PRICE_VIOLATION = (
|
254
|
+
ApiErrorIdentifier.LIQUIDATION_PRICE_VIOLATION,
|
255
|
+
ApiErrorType.SERVER_ERROR,
|
284
256
|
ApiErrorLevel.ERROR,
|
285
257
|
)
|
286
|
-
|
287
|
-
ApiErrorIdentifier.
|
288
|
-
ApiErrorType.
|
258
|
+
NO_CREDENTIALS = (
|
259
|
+
ApiErrorIdentifier.NO_CREDENTIALS,
|
260
|
+
ApiErrorType.USER_ERROR,
|
289
261
|
ApiErrorLevel.ERROR,
|
290
262
|
)
|
291
|
-
|
292
|
-
ApiErrorIdentifier.
|
293
|
-
ApiErrorType.
|
263
|
+
OBJECT_NOT_FOUND = (
|
264
|
+
ApiErrorIdentifier.OBJECT_NOT_FOUND,
|
265
|
+
ApiErrorType.SERVER_ERROR,
|
294
266
|
ApiErrorLevel.ERROR,
|
295
267
|
)
|
296
|
-
|
297
|
-
ApiErrorIdentifier.
|
298
|
-
ApiErrorType.
|
299
|
-
ApiErrorLevel.
|
268
|
+
ORDER_ALREADY_FILLED = (
|
269
|
+
ApiErrorIdentifier.ORDER_ALREADY_FILLED,
|
270
|
+
ApiErrorType.SERVER_ERROR,
|
271
|
+
ApiErrorLevel.INFO,
|
300
272
|
)
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
ApiErrorType.EXCHANGE_ERROR,
|
306
|
-
ApiErrorLevel.ERROR,
|
273
|
+
ORDER_IN_PROCESS = (
|
274
|
+
ApiErrorIdentifier.ORDER_IN_PROCESS,
|
275
|
+
ApiErrorType.NO_ERROR,
|
276
|
+
ApiErrorLevel.INFO,
|
307
277
|
)
|
308
|
-
|
309
|
-
ApiErrorIdentifier.
|
310
|
-
ApiErrorType.
|
278
|
+
ORDER_LIMIT_EXCEEDED = (
|
279
|
+
ApiErrorIdentifier.ORDER_LIMIT_EXCEEDED,
|
280
|
+
ApiErrorType.USER_ERROR,
|
311
281
|
ApiErrorLevel.ERROR,
|
312
282
|
)
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
ApiErrorIdentifier.UNKNOWN_ERROR,
|
317
|
-
ApiErrorType.EXCHANGE_ERROR,
|
283
|
+
ORDER_NOT_FOUND = (
|
284
|
+
ApiErrorIdentifier.ORDER_NOT_FOUND,
|
285
|
+
ApiErrorType.SERVER_ERROR,
|
318
286
|
ApiErrorLevel.ERROR,
|
319
287
|
)
|
320
|
-
|
321
|
-
ApiErrorIdentifier.
|
322
|
-
ApiErrorType.
|
288
|
+
ORDER_PRICE_INVALID = (
|
289
|
+
ApiErrorIdentifier.ORDER_PRICE_INVALID,
|
290
|
+
ApiErrorType.SERVER_ERROR,
|
323
291
|
ApiErrorLevel.ERROR,
|
324
292
|
)
|
325
|
-
|
326
|
-
|
327
|
-
ACTION_EXPIRED = (
|
328
|
-
ApiErrorIdentifier.ACTION_EXPIRED,
|
329
|
-
ApiErrorType.NO_ERROR,
|
330
|
-
ApiErrorLevel.INFO,
|
331
|
-
)
|
332
|
-
ACTION_SKIPPED = (
|
333
|
-
ApiErrorIdentifier.ACTION_SKIPPED,
|
334
|
-
ApiErrorType.NO_ERROR,
|
335
|
-
ApiErrorLevel.INFO,
|
336
|
-
)
|
337
|
-
BOT_DISABLED = (
|
338
|
-
ApiErrorIdentifier.BOT_DISABLED,
|
293
|
+
ORDER_SIZE_TOO_LARGE = (
|
294
|
+
ApiErrorIdentifier.ORDER_SIZE_TOO_LARGE,
|
339
295
|
ApiErrorType.USER_ERROR,
|
340
296
|
ApiErrorLevel.WARNING,
|
341
297
|
)
|
@@ -344,41 +300,44 @@ class ApiError(Enum):
|
|
344
300
|
ApiErrorType.USER_ERROR,
|
345
301
|
ApiErrorLevel.WARNING,
|
346
302
|
)
|
347
|
-
|
348
|
-
ApiErrorIdentifier.
|
349
|
-
ApiErrorType.USER_ERROR,
|
350
|
-
ApiErrorLevel.WARNING,
|
351
|
-
)
|
352
|
-
HEDGE_MODE_NOT_ACTIVE = (
|
353
|
-
ApiErrorIdentifier.HEDGE_MODE_NOT_ACTIVE,
|
303
|
+
POSITION_LIMIT_EXCEEDED = (
|
304
|
+
ApiErrorIdentifier.POSITION_LIMIT_EXCEEDED,
|
354
305
|
ApiErrorType.USER_ERROR,
|
355
306
|
ApiErrorLevel.ERROR,
|
356
307
|
)
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
308
|
+
POSITION_NOT_FOUND = (
|
309
|
+
ApiErrorIdentifier.POSITION_NOT_FOUND,
|
310
|
+
ApiErrorType.NO_ERROR,
|
311
|
+
ApiErrorLevel.INFO,
|
312
|
+
)
|
313
|
+
POSITION_SUSPENDED = (
|
314
|
+
ApiErrorIdentifier.POSITION_SUSPENDED,
|
315
|
+
ApiErrorType.EXCHANGE_ERROR,
|
362
316
|
ApiErrorLevel.ERROR,
|
363
317
|
)
|
364
|
-
|
365
|
-
ApiErrorIdentifier.
|
318
|
+
POST_ONLY_REJECTED = (
|
319
|
+
ApiErrorIdentifier.POST_ONLY_REJECTED,
|
366
320
|
ApiErrorType.SERVER_ERROR,
|
367
321
|
ApiErrorLevel.ERROR,
|
368
322
|
)
|
369
|
-
|
370
|
-
ApiErrorIdentifier.
|
323
|
+
REQUEST_SCOPE_EXCEEDED = (
|
324
|
+
ApiErrorIdentifier.REQUEST_SCOPE_EXCEEDED,
|
325
|
+
ApiErrorType.EXCHANGE_ERROR,
|
326
|
+
ApiErrorLevel.ERROR,
|
327
|
+
)
|
328
|
+
RISK_LIMIT_EXCEEDED = (
|
329
|
+
ApiErrorIdentifier.RISK_LIMIT_EXCEEDED,
|
371
330
|
ApiErrorType.SERVER_ERROR,
|
372
331
|
ApiErrorLevel.ERROR,
|
373
332
|
)
|
374
|
-
|
375
|
-
ApiErrorIdentifier.
|
376
|
-
ApiErrorType.
|
377
|
-
ApiErrorLevel.
|
333
|
+
RPC_TIMEOUT = (
|
334
|
+
ApiErrorIdentifier.RPC_TIMEOUT,
|
335
|
+
ApiErrorType.EXCHANGE_ERROR,
|
336
|
+
ApiErrorLevel.ERROR,
|
378
337
|
)
|
379
|
-
|
380
|
-
ApiErrorIdentifier.
|
381
|
-
ApiErrorType.
|
338
|
+
SETTLEMENT_IN_PROGRESS = (
|
339
|
+
ApiErrorIdentifier.SETTLEMENT_IN_PROGRESS,
|
340
|
+
ApiErrorType.EXCHANGE_ERROR,
|
382
341
|
ApiErrorLevel.ERROR,
|
383
342
|
)
|
384
343
|
STRATEGY_DISABLED = (
|
@@ -386,36 +345,40 @@ class ApiError(Enum):
|
|
386
345
|
ApiErrorType.SERVER_ERROR,
|
387
346
|
ApiErrorLevel.ERROR,
|
388
347
|
)
|
389
|
-
|
390
|
-
|
348
|
+
SUCCESS = (ApiErrorIdentifier.SUCCESS, ApiErrorType.NO_ERROR, ApiErrorLevel.SUCCESS)
|
349
|
+
SYMBOL_NOT_FOUND = (
|
350
|
+
ApiErrorIdentifier.SYMBOL_NOT_FOUND,
|
391
351
|
ApiErrorType.SERVER_ERROR,
|
392
352
|
ApiErrorLevel.ERROR,
|
393
353
|
)
|
394
|
-
|
395
|
-
ApiErrorIdentifier.
|
396
|
-
ApiErrorType.
|
397
|
-
ApiErrorLevel.
|
354
|
+
TRADING_ACTION_EXPIRED = (
|
355
|
+
ApiErrorIdentifier.TRADING_ACTION_EXPIRED,
|
356
|
+
ApiErrorType.NO_ERROR,
|
357
|
+
ApiErrorLevel.INFO,
|
398
358
|
)
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
359
|
+
TRADING_ACTION_SKIPPED = (
|
360
|
+
ApiErrorIdentifier.TRADING_ACTION_SKIPPED,
|
361
|
+
ApiErrorType.NO_ERROR,
|
362
|
+
ApiErrorLevel.INFO,
|
363
|
+
)
|
364
|
+
TRADING_LOCKED = (
|
365
|
+
ApiErrorIdentifier.TRADING_LOCKED,
|
366
|
+
ApiErrorType.EXCHANGE_ERROR,
|
404
367
|
ApiErrorLevel.ERROR,
|
405
368
|
)
|
406
|
-
|
407
|
-
ApiErrorIdentifier.
|
408
|
-
ApiErrorType.
|
369
|
+
TRADING_SUSPENDED = (
|
370
|
+
ApiErrorIdentifier.TRADING_SUSPENDED,
|
371
|
+
ApiErrorType.EXCHANGE_ERROR,
|
409
372
|
ApiErrorLevel.ERROR,
|
410
373
|
)
|
411
|
-
|
412
|
-
ApiErrorIdentifier.
|
413
|
-
ApiErrorType.
|
374
|
+
UNKNOWN_ERROR = (
|
375
|
+
ApiErrorIdentifier.UNKNOWN_ERROR,
|
376
|
+
ApiErrorType.EXCHANGE_ERROR,
|
414
377
|
ApiErrorLevel.ERROR,
|
415
378
|
)
|
416
|
-
|
417
|
-
ApiErrorIdentifier.
|
418
|
-
ApiErrorType.
|
379
|
+
URL_NOT_FOUND = (
|
380
|
+
ApiErrorIdentifier.URL_NOT_FOUND,
|
381
|
+
ApiErrorType.SERVER_ERROR,
|
419
382
|
ApiErrorLevel.ERROR,
|
420
383
|
)
|
421
384
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import re
|
2
|
+
import pyperclip
|
3
|
+
|
4
|
+
|
5
|
+
def sort_api_errors(file_content):
|
6
|
+
# Find the start of the ApiError class definition
|
7
|
+
class_start = file_content.find("class ApiErrorIdentifier(str, Enum):")
|
8
|
+
if class_start == -1:
|
9
|
+
return "Could not find ApiErrorIdentifier class"
|
10
|
+
|
11
|
+
# Find all enum definitions
|
12
|
+
enum_pattern = r' ([A-Z_]+)\s*=\s*"([a-z_]+)"'
|
13
|
+
enum_matches = re.finditer(enum_pattern, file_content)
|
14
|
+
|
15
|
+
# Extract all enum entries
|
16
|
+
enum_entries = []
|
17
|
+
for match in enum_matches:
|
18
|
+
full_match = match.group(0)
|
19
|
+
enum_name = match.group(1)
|
20
|
+
enum_entries.append((enum_name, full_match.strip()))
|
21
|
+
|
22
|
+
# Sort entries by enum name
|
23
|
+
sorted_entries = sorted(enum_entries, key=lambda x: x[0])
|
24
|
+
|
25
|
+
# Reconstruct the class content
|
26
|
+
class_header = "class ApiErrorIdentifier(str, Enum):\n\n"
|
27
|
+
sorted_content = class_header + "\n ".join(entry[1] for entry in sorted_entries)
|
28
|
+
|
29
|
+
return sorted_content
|
30
|
+
|
31
|
+
|
32
|
+
# Example usage:
|
33
|
+
if __name__ == "__main__":
|
34
|
+
with open("python/crypticorn/common/errors.py", "r") as f:
|
35
|
+
content = f.read()
|
36
|
+
|
37
|
+
sorted_content = sort_api_errors(content)
|
38
|
+
pyperclip.copy(sorted_content)
|
@@ -44,6 +44,7 @@ from crypticorn.pay.client.models.now_webhook_payload import NowWebhookPayload
|
|
44
44
|
from crypticorn.pay.client.models.payment_status import PaymentStatus
|
45
45
|
from crypticorn.pay.client.models.product_model import ProductModel
|
46
46
|
from crypticorn.pay.client.models.product_subs_model import ProductSubsModel
|
47
|
+
from crypticorn.pay.client.models.scope import Scope
|
47
48
|
from crypticorn.pay.client.models.services import Services
|
48
49
|
from crypticorn.pay.client.models.unified_payment_model import UnifiedPaymentModel
|
49
50
|
from crypticorn.pay.client.models.validation_error import ValidationError
|