nsarchive 3.0.0b1__py3-none-any.whl → 3.0.0b2__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.
- nsarchive/__init__.py +3 -1
- nsarchive/errors/__init__.py +1 -0
- nsarchive/errors/_globals.py +29 -0
- nsarchive/interfaces/_economy.py +0 -252
- nsarchive/interfaces/_entities.py +100 -14
- nsarchive/interfaces/_justice.py +173 -21
- nsarchive/interfaces/_state.py +177 -34
- nsarchive/mandate.py +21 -2
- nsarchive/models/base.py +108 -69
- nsarchive/models/economy.py +80 -151
- nsarchive/models/entities.py +305 -68
- nsarchive/models/justice.py +23 -2
- nsarchive/models/republic.py +44 -4
- nsarchive/models/state.py +43 -4
- nsarchive-3.0.0b2.dist-info/METADATA +90 -0
- nsarchive-3.0.0b2.dist-info/RECORD +21 -0
- nsarchive-3.0.0b1.dist-info/METADATA +0 -21
- nsarchive-3.0.0b1.dist-info/RECORD +0 -19
- {nsarchive-3.0.0b1.dist-info → nsarchive-3.0.0b2.dist-info}/LICENSE +0 -0
- {nsarchive-3.0.0b1.dist-info → nsarchive-3.0.0b2.dist-info}/WHEEL +0 -0
nsarchive/models/base.py
CHANGED
@@ -2,7 +2,7 @@ import json
|
|
2
2
|
import requests
|
3
3
|
import typing
|
4
4
|
|
5
|
-
from .. import utils
|
5
|
+
from .. import utils, errors
|
6
6
|
|
7
7
|
VERSION = 300
|
8
8
|
|
@@ -12,27 +12,25 @@ class NSID(str):
|
|
12
12
|
|
13
13
|
ID unique et universel pour l'ensemble des entités et évènements. Il prend les `int`, les `str` et les autres instances `NSID` pour les convertir en un identifiant hexadécimal.
|
14
14
|
"""
|
15
|
+
|
15
16
|
unknown = "0"
|
17
|
+
|
16
18
|
admin = "1"
|
17
19
|
gov = "2"
|
18
20
|
court = "3"
|
19
21
|
assembly = "4"
|
20
|
-
office = "5"
|
21
|
-
hexabank = "6"
|
22
|
-
archives = "7"
|
23
22
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
justice_dept = "104"
|
28
|
-
egalitary_com = "105"
|
29
|
-
antifraud_dept = "106"
|
23
|
+
tresor_public = "A"
|
24
|
+
office = "B"
|
25
|
+
hexabank = "C"
|
30
26
|
|
31
27
|
def __new__(cls, value):
|
32
28
|
if type(value) == int:
|
33
29
|
value = hex(value)
|
34
30
|
elif type(value) in (str, NSID):
|
35
31
|
value = hex(int(value, 16))
|
32
|
+
elif value is None:
|
33
|
+
value = hex(int(cls.unknown, 16))
|
36
34
|
else:
|
37
35
|
raise TypeError(f"<{value}> is not NSID serializable")
|
38
36
|
|
@@ -99,29 +97,35 @@ class Interface:
|
|
99
97
|
"password": password
|
100
98
|
})
|
101
99
|
|
102
|
-
if res.status_code == 200:
|
103
|
-
return res.json()["token"]
|
104
|
-
elif res.status_code in (401, 403):
|
105
|
-
raise PermissionError(res.json()['message'])
|
106
|
-
else:
|
107
|
-
raise Exception(f"Error {res.status_code}: {res.json()['message']}")
|
108
100
|
|
109
|
-
|
110
|
-
|
111
|
-
Récupère des données JSON depuis l'API
|
101
|
+
if 500 <= res.status_code < 600:
|
102
|
+
raise errors.globals.ServerDownError()
|
112
103
|
|
113
|
-
|
114
|
-
endpoint: `str`:
|
115
|
-
Endpoint de l'URL
|
116
|
-
headers: `dict` (optional)
|
117
|
-
Headers à envoyer
|
118
|
-
body: `dict` (optional)
|
119
|
-
Données à envoyer
|
104
|
+
_data = res.json()
|
120
105
|
|
121
|
-
|
122
|
-
|
123
|
-
|
106
|
+
if res.status_code == 400:
|
107
|
+
if _data['message'] == "MissingParam":
|
108
|
+
raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
|
109
|
+
elif _data['message'] == "InvalidParam":
|
110
|
+
raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
|
111
|
+
elif _data['message'] == "InvalidToken":
|
112
|
+
raise errors.globals.AuthError("Token is not valid.")
|
113
|
+
|
114
|
+
elif res.status_code == 401:
|
115
|
+
raise errors.globals.AuthError(_data['message'])
|
116
|
+
|
117
|
+
elif res.status_code == 403:
|
118
|
+
raise errors.globals.PermissionError(_data['message'])
|
119
|
+
|
120
|
+
|
121
|
+
return _data['token']
|
122
|
+
|
123
|
+
def _get_item(self, endpoint: str, body: dict = None, headers: dict = None) -> dict:
|
124
124
|
"""
|
125
|
+
Obsolète.
|
126
|
+
"""
|
127
|
+
|
128
|
+
utils.warn("La fonction 'Interface._get_item' est obsolète et sera supprimée dans la version 3.0.0 de NSArchive.")
|
125
129
|
|
126
130
|
if not headers:
|
127
131
|
headers = self.default_headers
|
@@ -144,17 +148,12 @@ class Interface:
|
|
144
148
|
|
145
149
|
def _put_in_db(self, endpoint: str, body: dict = {}, headers: dict = None, use_PUT: bool = False) -> None:
|
146
150
|
"""
|
147
|
-
|
148
|
-
|
149
|
-
## Paramètres
|
150
|
-
endpoint: `str`
|
151
|
-
Endpoint de l'URL
|
152
|
-
body: `dict`
|
153
|
-
Données à envoyer
|
154
|
-
headers: `dict` (optionnel)
|
155
|
-
Headers à envoyer
|
151
|
+
Obsolète
|
156
152
|
"""
|
157
153
|
|
154
|
+
utils.warn("La fonction 'Interface._put_in_db' est obsolète et sera supprimée dans la version 3.0.0 de NSArchive.")
|
155
|
+
|
156
|
+
|
158
157
|
if not headers:
|
159
158
|
headers = headers
|
160
159
|
|
@@ -170,15 +169,11 @@ class Interface:
|
|
170
169
|
|
171
170
|
def _delete(self, _class: str, ids: list[NSID]) -> None:
|
172
171
|
"""
|
173
|
-
|
174
|
-
|
175
|
-
## Paramètres
|
176
|
-
_class: `str`
|
177
|
-
Classe des entités à supprimer
|
178
|
-
ids: `list[NSID]`
|
179
|
-
ID des entités à supprimer
|
172
|
+
Obsolète
|
180
173
|
"""
|
181
174
|
|
175
|
+
utils.warn("La fonction 'Interface._delete' est obsolète et sera supprimée dans la version 3.0.0 de NSArchive.")
|
176
|
+
|
182
177
|
res = requests.post(f"{self.url}/delete_{_class}", json = { "ids": ids })
|
183
178
|
|
184
179
|
if 200 <= res.status_code < 300:
|
@@ -188,21 +183,33 @@ class Interface:
|
|
188
183
|
else:
|
189
184
|
raise Exception(f"Error {res.status_code}: {res.json()['message']}")
|
190
185
|
|
191
|
-
def _delete_by_ID(self, _class: str, id: NSID):
|
192
|
-
utils.warn("Method '_delete_by_id' is deprecated. Use '_delete' instead.")
|
193
|
-
self._delete(_class, id)
|
194
|
-
|
195
186
|
def fetch(self, _class: str, **query: typing.Any) -> list:
|
196
187
|
res = requests.get(f"{self.url}/fetch/{_class}", params = query)
|
197
188
|
|
198
|
-
if res.status_code
|
199
|
-
|
200
|
-
elif res.status_code in (401, 403):
|
201
|
-
matches = []
|
202
|
-
else:
|
203
|
-
res.raise_for_status()
|
189
|
+
if 500 <= res.status_code < 600:
|
190
|
+
raise errors.globals.ServerDownError()
|
204
191
|
|
205
|
-
|
192
|
+
_data = res.json()
|
193
|
+
|
194
|
+
if res.status_code == 400:
|
195
|
+
if _data['message'] == "MissingParam":
|
196
|
+
raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
|
197
|
+
elif _data['message'] == "InvalidParam":
|
198
|
+
raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
|
199
|
+
elif _data['message'] == "InvalidToken":
|
200
|
+
raise errors.globals.AuthError("Token is not valid.")
|
201
|
+
|
202
|
+
elif res.status_code == 401:
|
203
|
+
raise errors.globals.AuthError(_data['message'])
|
204
|
+
|
205
|
+
elif res.status_code == 403:
|
206
|
+
raise errors.globals.PermissionError(_data['message'])
|
207
|
+
|
208
|
+
elif res.status_code == 404:
|
209
|
+
return []
|
210
|
+
|
211
|
+
|
212
|
+
return res.json()
|
206
213
|
|
207
214
|
|
208
215
|
def _upload_file(self, bucket: str, name: str, data: bytes, overwrite: bool = False, headers: dict = None) -> dict:
|
@@ -239,14 +246,28 @@ class Interface:
|
|
239
246
|
|
240
247
|
res = requests.put(f"{self.url}/upload_file/{bucket}", headers = headers, json = body, files = [ file ])
|
241
248
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
249
|
+
|
250
|
+
if 500 <= res.status_code < 600:
|
251
|
+
raise errors.globals.ServerDownError()
|
252
|
+
|
253
|
+
_data = res.json()
|
254
|
+
|
255
|
+
if res.status_code == 400:
|
256
|
+
if _data['message'] == "MissingParam":
|
257
|
+
raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
|
258
|
+
elif _data['message'] == "InvalidParam":
|
259
|
+
raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
|
260
|
+
elif _data['message'] == "InvalidToken":
|
261
|
+
raise errors.globals.AuthError("Token is not valid.")
|
262
|
+
|
263
|
+
elif res.status_code == 401:
|
264
|
+
raise errors.globals.AuthError(_data['message'])
|
265
|
+
|
266
|
+
elif res.status_code == 403:
|
267
|
+
raise errors.globals.PermissionError(_data['message'])
|
268
|
+
|
246
269
|
elif res.status_code == 409:
|
247
|
-
raise
|
248
|
-
else:
|
249
|
-
raise Exception(f"Error {res.status_code}: {res.json()['message']}")
|
270
|
+
raise errors.globals.ConflictError(_data['message'])
|
250
271
|
|
251
272
|
def _download_from_storage(self, bucket: str, path: str, headers: dict = None) -> bytes:
|
252
273
|
"""
|
@@ -267,9 +288,27 @@ class Interface:
|
|
267
288
|
|
268
289
|
res = requests.get(f"{self.url}/drive/{bucket}/{path}", headers = headers)
|
269
290
|
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
291
|
+
|
292
|
+
if 500 <= res.status_code < 600:
|
293
|
+
raise errors.globals.ServerDownError()
|
294
|
+
|
295
|
+
_data = res.json()
|
296
|
+
|
297
|
+
if res.status_code == 400:
|
298
|
+
if _data['message'] == "MissingParam":
|
299
|
+
raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
|
300
|
+
elif _data['message'] == "InvalidParam":
|
301
|
+
raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
|
302
|
+
elif _data['message'] == "InvalidToken":
|
303
|
+
raise errors.globals.AuthError("Token is not valid.")
|
304
|
+
|
305
|
+
elif res.status_code == 401:
|
306
|
+
raise errors.globals.AuthError(_data['message'])
|
307
|
+
|
308
|
+
elif res.status_code == 403:
|
309
|
+
raise errors.globals.PermissionError(_data['message'])
|
310
|
+
|
311
|
+
elif res.status_code == 404:
|
312
|
+
return
|
313
|
+
|
314
|
+
return _data
|
nsarchive/models/economy.py
CHANGED
@@ -3,6 +3,7 @@ import time
|
|
3
3
|
import urllib
|
4
4
|
|
5
5
|
from .base import NSID
|
6
|
+
from .. import errors
|
6
7
|
|
7
8
|
|
8
9
|
class BankAccount:
|
@@ -64,8 +65,27 @@ class BankAccount:
|
|
64
65
|
|
65
66
|
if res.status_code == 200:
|
66
67
|
self.frozen = frozen
|
67
|
-
|
68
|
-
|
68
|
+
elif 500 <= res.status_code < 600:
|
69
|
+
raise errors.globals.ServerDownError()
|
70
|
+
|
71
|
+
_data = res.json()
|
72
|
+
|
73
|
+
if res.status_code == 400:
|
74
|
+
if _data['message'] == "MissingParam":
|
75
|
+
raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
|
76
|
+
elif _data['message'] == "InvalidParam":
|
77
|
+
raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
|
78
|
+
elif _data['message'] == "InvalidToken":
|
79
|
+
raise errors.globals.AuthError("Token is not valid.")
|
80
|
+
|
81
|
+
elif res.status_code == 401:
|
82
|
+
raise errors.globals.AuthError(_data['message'])
|
83
|
+
|
84
|
+
elif res.status_code == 403:
|
85
|
+
raise errors.globals.PermissionError(_data['message'])
|
86
|
+
|
87
|
+
elif res.status_code == 404:
|
88
|
+
raise errors.globals.NotFoundError(_data['message'])
|
69
89
|
|
70
90
|
def flag(self, flagged: bool = True, reason: str = None) -> None:
|
71
91
|
res = requests.post(f"{self._url}/flag?flagged={str(flagged).lower()}", headers = self._headers, json = {
|
@@ -74,8 +94,27 @@ class BankAccount:
|
|
74
94
|
|
75
95
|
if res.status_code == 200:
|
76
96
|
self.flagged = flagged
|
77
|
-
|
78
|
-
|
97
|
+
elif 500 <= res.status_code < 600:
|
98
|
+
raise errors.globals.ServerDownError()
|
99
|
+
|
100
|
+
_data = res.json()
|
101
|
+
|
102
|
+
if res.status_code == 400:
|
103
|
+
if _data['message'] == "MissingParam":
|
104
|
+
raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
|
105
|
+
elif _data['message'] == "InvalidParam":
|
106
|
+
raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
|
107
|
+
elif _data['message'] == "InvalidToken":
|
108
|
+
raise errors.globals.AuthError("Token is not valid.")
|
109
|
+
|
110
|
+
elif res.status_code == 401:
|
111
|
+
raise errors.globals.AuthError(_data['message'])
|
112
|
+
|
113
|
+
elif res.status_code == 403:
|
114
|
+
raise errors.globals.PermissionError(_data['message'])
|
115
|
+
|
116
|
+
elif res.status_code == 404:
|
117
|
+
raise errors.globals.NotFoundError(_data['message'])
|
79
118
|
|
80
119
|
def debit(self, amount: int, reason: str = None, target: NSID = None, loan: NSID = None, digicode: str = None) -> None:
|
81
120
|
_target_query = f"&target={target}"
|
@@ -88,163 +127,53 @@ class BankAccount:
|
|
88
127
|
|
89
128
|
if res.status_code == 200:
|
90
129
|
self.amount -= amount
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
def deposit(self, amount: int, reason: str = None) -> None:
|
95
|
-
res = requests.post(f"{self._url}/deposit?amount={amount}", headers = self._headers, json = {
|
96
|
-
"reason": reason,
|
97
|
-
})
|
98
|
-
|
99
|
-
if res.status_code == 200:
|
100
|
-
self.amount -= amount
|
101
|
-
else:
|
102
|
-
res.raise_for_status()
|
103
|
-
|
104
|
-
class Item:
|
105
|
-
"""
|
106
|
-
Article d'inventaire qui peut circuler sur le serveur
|
130
|
+
elif 500 <= res.status_code < 600:
|
131
|
+
raise errors.globals.ServerDownError()
|
107
132
|
|
108
|
-
|
109
|
-
- id: `NSID`\n
|
110
|
-
Identifiant de l'objet
|
111
|
-
- name: `str`\n
|
112
|
-
Nom de l'objet
|
113
|
-
- emoji: `str`\n
|
114
|
-
Emoji lié à l'objet
|
115
|
-
"""
|
116
|
-
|
117
|
-
def __init__(self) -> None:
|
118
|
-
self._url: str = ""
|
119
|
-
self._headers: dict = {}
|
133
|
+
_data = res.json()
|
120
134
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
135
|
+
if res.status_code == 400:
|
136
|
+
if _data['message'] == "MissingParam":
|
137
|
+
raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
|
138
|
+
elif _data['message'] == "InvalidParam":
|
139
|
+
raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
|
140
|
+
elif _data['message'] == "InvalidToken":
|
141
|
+
raise errors.globals.AuthError("Token is not valid.")
|
126
142
|
|
127
|
-
|
128
|
-
|
129
|
-
self._headers = headers
|
143
|
+
elif res.status_code == 401:
|
144
|
+
raise errors.globals.AuthError(_data['message'])
|
130
145
|
|
131
|
-
|
146
|
+
elif res.status_code == 403:
|
147
|
+
raise errors.globals.PermissionError(_data['message'])
|
132
148
|
|
133
|
-
|
134
|
-
|
135
|
-
self.category = _data['category']
|
136
|
-
self.craft = _data['craft']
|
149
|
+
elif res.status_code == 404:
|
150
|
+
raise errors.globals.NotFoundError(_data['message'])
|
137
151
|
|
138
|
-
def
|
139
|
-
res = requests.post(f"{self._url}/
|
152
|
+
def deposit(self, amount: int, reason: str = None) -> None:
|
153
|
+
res = requests.post(f"{self._url}/deposit?amount={amount}", headers = self._headers, json = {
|
154
|
+
"reason": reason,
|
155
|
+
})
|
140
156
|
|
141
157
|
if res.status_code == 200:
|
142
|
-
self.
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
class Sale:
|
147
|
-
"""
|
148
|
-
Vente mettant en jeu un objet
|
149
|
-
|
150
|
-
## Attributs
|
151
|
-
- id: `NSID`\n
|
152
|
-
Identifiant de la vente
|
153
|
-
- item: `NSID`\n
|
154
|
-
Identifiant de l'objet mis en vente
|
155
|
-
- quantity: `int`\n
|
156
|
-
Quantité d'objets mis en vente
|
157
|
-
- price: `int`\n
|
158
|
-
Prix total du lot
|
159
|
-
- seller_id: `NSID`\n
|
160
|
-
Identifiant du vendeur
|
161
|
-
"""
|
162
|
-
|
163
|
-
def __init__(self, item: Item) -> None:
|
164
|
-
self._url: str = ""
|
165
|
-
self._headers: dict = {}
|
166
|
-
|
167
|
-
self.id: NSID = NSID(round(time.time()))
|
168
|
-
self.open: bool = True
|
169
|
-
self.seller_id: NSID = NSID('0')
|
170
|
-
|
171
|
-
self.item_id: NSID = NSID(item.id)
|
172
|
-
self.quantity: int = 1
|
173
|
-
self.price: int = 0
|
174
|
-
|
175
|
-
def _load(self, _data: dict, url: str, headers: dict) -> None:
|
176
|
-
self._url = url + '/marketplace/sales/' + _data['id']
|
177
|
-
self._headers = headers
|
178
|
-
|
179
|
-
self.id = _data['id']
|
180
|
-
self.open = _data['open']
|
181
|
-
self.seller_id = NSID(_data['seller_id'])
|
182
|
-
|
183
|
-
self.item_id = NSID(_data['item_id'])
|
184
|
-
self.quantity = _data['quantity']
|
185
|
-
self.price = _data['price']
|
186
|
-
|
187
|
-
class Inventory:
|
188
|
-
"""
|
189
|
-
Inventaire d'un membre
|
190
|
-
|
191
|
-
## Attributs
|
192
|
-
- id: `NSID`\n
|
193
|
-
ID de l'inventaire
|
194
|
-
- owner_id: `NSID`\n
|
195
|
-
ID du propriétaire de l'inventaire
|
196
|
-
- tag: `str`\n
|
197
|
-
Étiquette de l'inventaire
|
198
|
-
- register_date: `int`\n
|
199
|
-
Date (timestamp) de création de l'inventaire
|
200
|
-
- items: `dict[NSID, int]`\n
|
201
|
-
Collection d'objets et leur quantité
|
202
|
-
"""
|
203
|
-
|
204
|
-
def __init__(self, owner_id: NSID) -> None:
|
205
|
-
self._url: str = ""
|
206
|
-
self._headers: dict = {}
|
207
|
-
|
208
|
-
self.id: NSID = NSID(owner_id)
|
209
|
-
self.owner_id: NSID = NSID(owner_id)
|
210
|
-
|
211
|
-
self.tag: str = "inconnu"
|
212
|
-
self.register_date: int = 0
|
213
|
-
|
214
|
-
self.items: dict[NSID, int] = {}
|
215
|
-
|
216
|
-
def _load(self, _data: dict, url: str, headers: dict):
|
217
|
-
self._url = url + '/bank/inventories/' + _data['id']
|
218
|
-
self._headers = headers
|
219
|
-
|
220
|
-
self.id = NSID(_data['id'])
|
221
|
-
self.owner_id = NSID(_data['owner_id'])
|
158
|
+
self.amount -= amount
|
159
|
+
elif 500 <= res.status_code < 600:
|
160
|
+
raise errors.globals.ServerDownError()
|
222
161
|
|
223
|
-
|
224
|
-
self.register_date = _data['register_date']
|
162
|
+
_data = res.json()
|
225
163
|
|
226
|
-
|
164
|
+
if res.status_code == 400:
|
165
|
+
if _data['message'] == "MissingParam":
|
166
|
+
raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
|
167
|
+
elif _data['message'] == "InvalidParam":
|
168
|
+
raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
|
169
|
+
elif _data['message'] == "InvalidToken":
|
170
|
+
raise errors.globals.AuthError("Token is not valid.")
|
227
171
|
|
228
|
-
|
229
|
-
|
230
|
-
"giver": giver,
|
231
|
-
"digicode": digicode
|
232
|
-
})
|
172
|
+
elif res.status_code == 401:
|
173
|
+
raise errors.globals.AuthError(_data['message'])
|
233
174
|
|
234
|
-
|
235
|
-
|
236
|
-
self.objects[item.id] -= quantity
|
237
|
-
else:
|
238
|
-
self.objects[item.id] = 0
|
239
|
-
else:
|
240
|
-
res.raise_for_status()
|
241
|
-
|
242
|
-
def sell_item(self, item: Item, price: int, quantity: int = 1, digicode: str = None) -> NSID:
|
243
|
-
res = requests.post(f"{self._url}/sell_item?item={item.id}&quantity={quantity}&price={price}", headers = self._headers, json = {
|
244
|
-
"digicode": digicode
|
245
|
-
})
|
175
|
+
elif res.status_code == 403:
|
176
|
+
raise errors.globals.PermissionError(_data['message'])
|
246
177
|
|
247
|
-
|
248
|
-
|
249
|
-
else:
|
250
|
-
res.raise_for_status()
|
178
|
+
elif res.status_code == 404:
|
179
|
+
raise errors.globals.NotFoundError(_data['message'])
|