nsarchive 3.0.0a8__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.
@@ -1,19 +1,17 @@
1
1
  import requests
2
2
  import time
3
3
  import typing
4
- import urllib
5
- import warnings
6
4
 
7
5
  from .base import NSID
8
6
 
9
- from .. import utils
7
+ from .. import errors
10
8
 
11
9
  class Permission:
12
10
  def __init__(self, initial: str = "----"):
13
- self.append: bool
14
- self.manage: bool
15
- self.edit: bool
16
- self.read: bool
11
+ self.append: bool = False
12
+ self.manage: bool = False
13
+ self.edit: bool = False
14
+ self.read: bool = False
17
15
 
18
16
  self.load(initial)
19
17
 
@@ -90,14 +88,33 @@ class Position:
90
88
  return self.id
91
89
 
92
90
  def update_permisions(self, **permissions: str):
93
- query = "&".join(f"{k}={ urllib.parse.quote(v) }" for k, v in permissions.items())
91
+ query = "&".join(f"{k}={v}" for k, v in permissions.items())
94
92
 
95
93
  res = requests.post(f"{self._url}/update_permissions?{query}", headers = self._headers)
96
94
 
97
95
  if res.status_code == 200:
98
96
  self.permissions.merge(permissions)
99
- else:
100
- 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'])
101
118
 
102
119
  def _load(self, _data: dict, url: str, headers: dict) -> None:
103
120
  self._url = url + '/model/positions/' + _data['id']
@@ -163,11 +180,33 @@ class Entity:
163
180
 
164
181
  if res.status_code == 200:
165
182
  self.name = new_name
166
- else:
167
- res.raise_for_status()
183
+ elif 500 <= res.status_code < 600:
184
+ raise errors.globals.ServerDownError()
185
+
186
+ _data = res.json()
187
+
188
+ if res.status_code == 400:
189
+ if _data['message'] == "MissingParam":
190
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
191
+ elif _data['message'] == "InvalidParam":
192
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
193
+ elif _data['message'] == "InvalidToken":
194
+ raise errors.globals.AuthError("Token is not valid.")
195
+
196
+ elif res.status_code == 401:
197
+ raise errors.globals.AuthError(_data['message'])
168
198
 
169
- def set_position(self, position: Position) -> None:
170
- res = requests.post(f"{self._url}/change_position?position={position.id}", headers = self._headers)
199
+ elif res.status_code == 403:
200
+ raise errors.globals.PermissionError(_data['message'])
201
+
202
+ elif res.status_code == 404:
203
+ raise errors.globals.NotFoundError(_data['message'])
204
+
205
+ def set_position(self, position: str | Position) -> None:
206
+ if isinstance(position, Position):
207
+ position: str = position.id
208
+
209
+ res = requests.post(f"{self._url}/change_position?position={position}", headers = self._headers)
171
210
 
172
211
  if res.status_code == 200:
173
212
  self.position = position
@@ -188,23 +227,60 @@ class Entity:
188
227
  "type": _class
189
228
  }
190
229
 
191
- query = "&".join(f"{k}={ urllib.parse.quote(v) }" for k, v in params.items())
230
+ query = "&".join(f"{k}={v}" for k, v in params.items())
192
231
 
193
232
  res = requests.post(f"{self._url}/add_link?{query}", headers = self._headers)
194
233
 
195
234
  if res.status_code == 200:
196
235
  self.additional[key] = value
197
- else:
198
- print(res.text)
199
- res.raise_for_status()
236
+ elif 500 <= res.status_code < 600:
237
+ raise errors.globals.ServerDownError()
238
+
239
+ _data = res.json()
240
+
241
+ if res.status_code == 400:
242
+ if _data['message'] == "MissingParam":
243
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
244
+ elif _data['message'] == "InvalidParam":
245
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
246
+ elif _data['message'] == "InvalidToken":
247
+ raise errors.globals.AuthError("Token is not valid.")
248
+
249
+ elif res.status_code == 401:
250
+ raise errors.globals.AuthError(_data['message'])
251
+
252
+ elif res.status_code == 403:
253
+ raise errors.globals.PermissionError(_data['message'])
254
+
255
+ elif res.status_code == 404:
256
+ raise errors.globals.NotFoundError(_data['message'])
200
257
 
201
258
  def unlink(self, key: str) -> None:
202
- res = requests.post(f"{self._url}/remove_link?link={urllib.parse.quote(key)}", headers = self._headers)
259
+ res = requests.post(f"{self._url}/remove_link?link={key}", headers = self._headers)
203
260
 
204
261
  if res.status_code == 200:
205
262
  del self.additional[key]
206
- else:
207
- res.raise_for_status()
263
+ elif 500 <= res.status_code < 600:
264
+ raise errors.globals.ServerDownError()
265
+
266
+ _data = res.json()
267
+
268
+ if res.status_code == 400:
269
+ if _data['message'] == "MissingParam":
270
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
271
+ elif _data['message'] == "InvalidParam":
272
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
273
+ elif _data['message'] == "InvalidToken":
274
+ raise errors.globals.AuthError("Token is not valid.")
275
+
276
+ elif res.status_code == 401:
277
+ raise errors.globals.AuthError(_data['message'])
278
+
279
+ elif res.status_code == 403:
280
+ raise errors.globals.PermissionError(_data['message'])
281
+
282
+ elif res.status_code == 404:
283
+ raise errors.globals.NotFoundError(_data['message'])
208
284
 
209
285
  class User(Entity):
210
286
  """
@@ -261,8 +337,27 @@ class User(Entity):
261
337
 
262
338
  if res.status_code == 200:
263
339
  self.xp += amount * boost
264
- else:
265
- res.raise_for_status()
340
+ elif 500 <= res.status_code < 600:
341
+ raise errors.globals.ServerDownError()
342
+
343
+ _data = res.json()
344
+
345
+ if res.status_code == 400:
346
+ if _data['message'] == "MissingParam":
347
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
348
+ elif _data['message'] == "InvalidParam":
349
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
350
+ elif _data['message'] == "InvalidToken":
351
+ raise errors.globals.AuthError("Token is not valid.")
352
+
353
+ elif res.status_code == 401:
354
+ raise errors.globals.AuthError(_data['message'])
355
+
356
+ elif res.status_code == 403:
357
+ raise errors.globals.PermissionError(_data['message'])
358
+
359
+ elif res.status_code == 404:
360
+ raise errors.globals.NotFoundError(_data['message'])
266
361
 
267
362
  def edit_boost(self, name: str, multiplier: int = -1) -> None:
268
363
  res = requests.post(f"{self._url}/edit_boost?boost={name}&multiplier={multiplier}", headers = self._headers)
@@ -272,8 +367,27 @@ class User(Entity):
272
367
  self.boosts[name] = multiplier
273
368
  else:
274
369
  del self.boosts[name]
275
- else:
276
- res.raise_for_status()
370
+ elif 500 <= res.status_code < 600:
371
+ raise errors.globals.ServerDownError()
372
+
373
+ _data = res.json()
374
+
375
+ if res.status_code == 400:
376
+ if _data['message'] == "MissingParam":
377
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
378
+ elif _data['message'] == "InvalidParam":
379
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
380
+ elif _data['message'] == "InvalidToken":
381
+ raise errors.globals.AuthError("Token is not valid.")
382
+
383
+ elif res.status_code == 401:
384
+ raise errors.globals.AuthError(_data['message'])
385
+
386
+ elif res.status_code == 403:
387
+ raise errors.globals.PermissionError(_data['message'])
388
+
389
+ elif res.status_code == 404:
390
+ raise errors.globals.NotFoundError(_data['message'])
277
391
 
278
392
  def get_groups(self) -> list[Entity]:
279
393
  res = requests.get(f"{self._url}/groups", headers = self._headers)
@@ -291,35 +405,107 @@ class User(Entity):
291
405
  groups.append(group)
292
406
 
293
407
  return groups
294
- else:
295
- return []
408
+ elif 500 <= res.status_code < 600:
409
+ raise errors.globals.ServerDownError()
296
410
 
297
- class GroupPermissions:
298
- """
299
- Permissions d'un membre à l'échelle d'un groupe
300
- """
411
+ _data = res.json()
301
412
 
302
- def __init__(self) -> None:
303
- self.manage_organization = False # Renommer l'organisation, changer le logo
304
- self.manage_roles = False # Changer les rôles des membres
305
- self.manage_members = False # Virer quelqu'un d'une entreprise, l'y inviter
413
+ if res.status_code == 400:
414
+ if _data['message'] == "MissingParam":
415
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
416
+ elif _data['message'] == "InvalidParam":
417
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
418
+ elif _data['message'] == "InvalidToken":
419
+ raise errors.globals.AuthError("Token is not valid.")
420
+
421
+ elif res.status_code == 401:
422
+ raise errors.globals.AuthError(_data['message'])
306
423
 
307
- def edit(self, **permissions: bool) -> None:
308
- for perm in permissions.values():
309
- self.__setattr__(*perm)
424
+ elif res.status_code == 403:
425
+ raise errors.globals.PermissionError(_data['message'])
426
+
427
+ elif res.status_code == 404:
428
+ raise errors.globals.NotFoundError(_data['message'])
310
429
 
311
430
  class GroupMember:
312
431
  """
313
432
  Membre au sein d'une entité collective
314
433
 
315
434
  ## Attributs
316
- - permissions: `.GroupPermissions`\n
317
- Permissions du membre au sein du groupe
435
+ - level: `int`\n
436
+ Niveau d'accréditation d'un membre au sein d'un groupe
437
+ - manager: `bool`\n
438
+ Permission ou non de modifier le groupe
318
439
  """
319
440
 
320
441
  def __init__(self, id: NSID) -> None:
442
+ self._group_url: str
443
+ self._headers: dict
444
+
321
445
  self.id = id
322
- self.permissions: GroupPermissions = GroupPermissions()
446
+ self.level: int = 1 # Plus un level est haut, plus il a de pouvoir sur les autres membres
447
+ self.manager: bool = False
448
+
449
+ def _load(self, _data: dict, group_url: str, headers: dict):
450
+ self._group_url = group_url
451
+ self._headers = headers
452
+
453
+ self.level = _data['level']
454
+ self.manager = _data['manager']
455
+
456
+ def edit(self, level: int = None, manager: bool = None) -> None:
457
+ params = {
458
+ "member": self.id
459
+ }
460
+
461
+ if level is not None: params['level'] = level
462
+ if manager is not None: params['manager'] = str(manager).lower()
463
+
464
+ res = requests.post(f"{self._group_url}/edit_member", params = params, headers = self._headers)
465
+
466
+ if res.status_code == 200:
467
+ if level:
468
+ self.level = level
469
+ else:
470
+ return
471
+
472
+ if manager is not None:
473
+ self.manager = manager
474
+
475
+ elif 500 <= res.status_code < 600:
476
+ raise errors.globals.ServerDownError()
477
+
478
+ _data = res.json()
479
+
480
+ if res.status_code == 400:
481
+ if _data['message'] == "MissingParam":
482
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
483
+ elif _data['message'] == "InvalidParam":
484
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
485
+ elif _data['message'] == "InvalidToken":
486
+ raise errors.globals.AuthError("Token is not valid.")
487
+
488
+ elif res.status_code == 401:
489
+ raise errors.globals.AuthError(_data['message'])
490
+
491
+ elif res.status_code == 403:
492
+ raise errors.globals.PermissionError(_data['message'])
493
+
494
+ elif res.status_code == 404:
495
+ raise errors.globals.NotFoundError(_data['message'])
496
+
497
+ def promote(self, level: int = None):
498
+ if level is None:
499
+ level = self.level + 1
500
+
501
+ self.edit(level = level)
502
+
503
+ def demote(self, level: int = None):
504
+ if level is None:
505
+ level = self.level - 1
506
+
507
+ self.edit(level = level)
508
+
323
509
 
324
510
  class Organization(Entity):
325
511
  """
@@ -329,14 +515,12 @@ class Organization(Entity):
329
515
  - Tous les attributs de la classe `.Entity`
330
516
  - owner: `.Entity`\n
331
517
  Utilisateur ou entreprise propriétaire de l'entité collective
332
- - avatar: `bytes`\n
333
- Avatar/logo de l'entité collective
334
- - certifications: `dict[str, int]`\n
518
+ - avatar_url: `str`\n
519
+ Url du logo de l'entité collective
520
+ - certifications: `dict[str, Any]`\n
335
521
  Liste des certifications et de leur date d'ajout
336
522
  - members: `list[.GroupMember]`\n
337
523
  Liste des membres de l'entreprise
338
- - parts: `list[.Share]`\n
339
- Liste des actions émises par l'entreprise
340
524
  """
341
525
 
342
526
  def __init__(self, id: NSID) -> None:
@@ -346,10 +530,11 @@ class Organization(Entity):
346
530
  self.avatar_url: str = self._url + '/avatar'
347
531
 
348
532
  self.certifications: dict = {}
349
- self.members: list[GroupMember] = []
533
+ self.members: dict[NSID, GroupMember] = {}
350
534
 
351
535
  def _load(self, _data: dict, url: str, headers: dict):
352
536
  self._url = url + '/model/organizations/' + _data['id']
537
+ self.avatar_url = url + '/avatar'
353
538
  self._headers = headers
354
539
 
355
540
  self.id = NSID(_data['id'])
@@ -375,11 +560,11 @@ class Organization(Entity):
375
560
 
376
561
  self.owner._load(_owner, url, headers)
377
562
 
378
- for _member in _data['members']:
379
- member = GroupMember(_member['id'])
380
- member.permission_level = _member['level']
563
+ for _id, _member in _data['members'].items():
564
+ member = GroupMember(_id)
565
+ member._load(_member, self._url, headers)
381
566
 
382
- self.members.append(member)
567
+ self.members[member.id] = member
383
568
 
384
569
  self.certifications = _data['certifications']
385
570
 
@@ -388,8 +573,27 @@ class Organization(Entity):
388
573
 
389
574
  if res.status_code == 200:
390
575
  self.certifications[certification] = int(round(time.time()) + __expires)
391
- else:
392
- res.raise_for_status()
576
+ elif 500 <= res.status_code < 600:
577
+ raise errors.globals.ServerDownError()
578
+
579
+ _data = res.json()
580
+
581
+ if res.status_code == 400:
582
+ if _data['message'] == "MissingParam":
583
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
584
+ elif _data['message'] == "InvalidParam":
585
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
586
+ elif _data['message'] == "InvalidToken":
587
+ raise errors.globals.AuthError("Token is not valid.")
588
+
589
+ elif res.status_code == 401:
590
+ raise errors.globals.AuthError(_data['message'])
591
+
592
+ elif res.status_code == 403:
593
+ raise errors.globals.PermissionError(_data['message'])
594
+
595
+ elif res.status_code == 404:
596
+ raise errors.globals.NotFoundError(_data['message'])
393
597
 
394
598
  def has_certification(self, certification: str) -> bool:
395
599
  return certification in self.certifications.keys()
@@ -399,44 +603,76 @@ class Organization(Entity):
399
603
 
400
604
  if res.status_code == 200:
401
605
  del self.certifications[certification]
402
- else:
403
- res.raise_for_status()
606
+ elif 500 <= res.status_code < 600:
607
+ raise errors.globals.ServerDownError()
608
+
609
+ _data = res.json()
610
+
611
+ if res.status_code == 400:
612
+ if _data['message'] == "MissingParam":
613
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
614
+ elif _data['message'] == "InvalidParam":
615
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
616
+ elif _data['message'] == "InvalidToken":
617
+ raise errors.globals.AuthError("Token is not valid.")
404
618
 
405
- def add_member(self, member: NSID, permissions: GroupPermissions = GroupPermissions()) -> None:
619
+ elif res.status_code == 401:
620
+ raise errors.globals.AuthError(_data['message'])
621
+
622
+ elif res.status_code == 403:
623
+ raise errors.globals.PermissionError(_data['message'])
624
+
625
+ elif res.status_code == 404:
626
+ raise errors.globals.NotFoundError(_data['message'])
627
+
628
+ def add_member(self, member: NSID) -> GroupMember:
406
629
  if not isinstance(member, NSID):
407
630
  raise TypeError("L'entrée membre doit être de type NSID")
408
631
 
409
- res = requests.post(f"{self._url}/add_member?id={member}", headers = self._headers, json = {
410
- "permissions": permissions.__dict__
411
- })
632
+ res = requests.post(f"{self._url}/add_member?member={member}", headers = self._headers, json = {})
412
633
 
413
634
  if res.status_code == 200:
414
635
  member = GroupMember(member)
415
- member.permissions = permissions
636
+ member._group_url = self._url
637
+ member._headers = self._headers
416
638
 
417
- self.members.append(member)
418
- else:
419
- res.raise_for_status()
639
+ self.members[member.id] = member
640
+ return member
641
+ elif 500 <= res.status_code < 600:
642
+ raise errors.globals.ServerDownError()
643
+
644
+ _data = res.json()
645
+
646
+ if res.status_code == 400:
647
+ if _data['message'] == "MissingParam":
648
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
649
+ elif _data['message'] == "InvalidParam":
650
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
651
+ elif _data['message'] == "InvalidToken":
652
+ raise errors.globals.AuthError("Token is not valid.")
653
+
654
+ elif res.status_code == 401:
655
+ raise errors.globals.AuthError(_data['message'])
656
+
657
+ elif res.status_code == 403:
658
+ raise errors.globals.PermissionError(_data['message'])
659
+
660
+ elif res.status_code == 404:
661
+ raise errors.globals.NotFoundError(_data['message'])
420
662
 
421
663
  def remove_member(self, member: GroupMember) -> None:
422
- requests.post(f"{self._url}/remove_member?id={member.id}", headers = self._headers)
664
+ member.demote(level = 0)
423
665
 
424
- for _member in self.members:
425
- if _member.id == member.id:
426
- self.members.remove(_member)
666
+ del self.members[member.id]
427
667
 
428
668
  def set_owner(self, member: User) -> None:
429
669
  self.owner = member
430
670
 
431
671
  def get_member(self, id: NSID) -> GroupMember:
432
- for member in self.members:
433
- if member.id == id:
434
- return member
435
- else:
436
- return
672
+ return self.members.get(id)
437
673
 
438
674
  def get_members_by_attr(self, attribute: str = "id") -> list[str]:
439
- return [ member.__getattribute__(attribute) for member in self.members ]
675
+ return [ member.__getattribute__(attribute) for member in self.members.values() ]
440
676
 
441
677
  def save_avatar(self, data: bytes = None):
442
678
  pass
@@ -3,6 +3,8 @@ import time
3
3
 
4
4
  from .base import NSID
5
5
 
6
+ from .. import errors
7
+
6
8
  class Report:
7
9
  def __init__(self, id: NSID):
8
10
  self._url: str = ""
@@ -46,8 +48,27 @@ class Report:
46
48
 
47
49
  if res.status_code == 200:
48
50
  self.status = status
49
- else:
50
- res.raise_for_status()
51
+ elif 500 <= res.status_code < 600:
52
+ raise errors.globals.ServerDownError()
53
+
54
+ _data = res.json()
55
+
56
+ if res.status_code == 400:
57
+ if _data['message'] == "MissingParam":
58
+ raise errors.globals.MissingParamError(f"Missing parameter '{_data['param']}'.")
59
+ elif _data['message'] == "InvalidParam":
60
+ raise errors.globals.InvalidParamError(f"Invalid parameter '{_data['param']}'.")
61
+ elif _data['message'] == "InvalidToken":
62
+ raise errors.globals.AuthError("Token is not valid.")
63
+
64
+ elif res.status_code == 401:
65
+ raise errors.globals.AuthError(_data['message'])
66
+
67
+ elif res.status_code == 403:
68
+ raise errors.globals.PermissionError(_data['message'])
69
+
70
+ elif res.status_code == 404:
71
+ raise errors.globals.NotFoundError(_data['message'])
51
72
 
52
73
  class Sanction:
53
74
  def __init__(self, id: NSID):
@@ -60,7 +81,7 @@ class Sanction:
60
81
  self.date: int = round(time.time())
61
82
  self.duration: int = 0
62
83
  self.title: str = None
63
- self.case: NSID = NSID('0')
84
+ self.lawsuit: NSID = NSID('0')
64
85
 
65
86
  def _load(self, _data: dict, url: str, headers: dict) -> None:
66
87
  self._url = url
@@ -72,7 +93,7 @@ class Sanction:
72
93
  self.date = _data['date']
73
94
  self.duration = _data['duration']
74
95
  self.title = _data['title']
75
- self.case = NSID(_data['case'])
96
+ self.lawsuit = NSID(_data['lawsuit'])
76
97
 
77
98
  class Lawsuit:
78
99
  def __init__(self, id: NSID):