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/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
- maintenance_com = "101"
25
- audiovisual_dept = "102"
26
- interior_dept = "103"
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
- def _get_item(self, endpoint: str, body: dict = None, headers: dict = None) -> dict:
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
- ## Paramètres
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
- ## Renvoie
122
- - `list` de tous les élements correspondants
123
- - `None` si aucune donnée n'est trouvée
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
- Publie des données JSON dans une table nation-db.
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
- Supprime des données JSON dans une table nation-db.
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 == 200:
199
- matches = res.json()
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
- return matches
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
- if res.status_code == 200:
243
- return res.json()
244
- elif res.status_code in (403, 401):
245
- raise PermissionError(res.json()['message'])
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 FileExistsError(res.json()['message'])
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
- if res.status_code == 200:
271
- return res.json()
272
- elif res.status_code in (403, 401):
273
- raise PermissionError(res.json()['message'])
274
- else:
275
- raise Exception(f"Error {res.status_code}: {res.json()['message']}")
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
@@ -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
- else:
68
- res.raise_for_status()
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
- else:
78
- res.raise_for_status()
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
- else:
92
- res.raise_for_status()
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
- ## Attributs
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
- self.id: NSID = NSID(round(time.time()))
122
- self.name: str = "Unknown Object"
123
- self.emoji: str = ":light_bulb:"
124
- self.category: str = "common"
125
- self.craft: dict = {}
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
- def _load(self, _data: dict, url: str, headers: dict) -> None:
128
- self._url = url + '/marketplace/items/' + _data['id']
129
- self._headers = headers
143
+ elif res.status_code == 401:
144
+ raise errors.globals.AuthError(_data['message'])
130
145
 
131
- self.id = NSID(_data['id'])
146
+ elif res.status_code == 403:
147
+ raise errors.globals.PermissionError(_data['message'])
132
148
 
133
- self.name = _data['name']
134
- self.emoji = _data['emoji']
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 rename(self, new_name: str):
139
- res = requests.post(f"{self._url}/rename?name={new_name}", headers = self._headers)
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.name = new_name
143
- else:
144
- res.raise_for_status()
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
- self.tag = _data['tag']
224
- self.register_date = _data['register_date']
162
+ _data = res.json()
225
163
 
226
- self.items = _data['items']
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
- def deposit_item(self, item: Item, giver: NSID = None, quantity: int = 1, digicode: str = None):
229
- res = requests.post(f"{self._url}/deposit?item={item.id}&amount={quantity}", headers = self._headers, json = {
230
- "giver": giver,
231
- "digicode": digicode
232
- })
172
+ elif res.status_code == 401:
173
+ raise errors.globals.AuthError(_data['message'])
233
174
 
234
- if res.status_code == 200:
235
- if self.objects[item.id] > quantity:
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
- if res.status_code == 200:
248
- return NSID(res.json()['sale_id'])
249
- else:
250
- res.raise_for_status()
178
+ elif res.status_code == 404:
179
+ raise errors.globals.NotFoundError(_data['message'])