nsarchive 2.0.0a3__tar.gz → 2.0.0a5__tar.gz

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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nsarchive
3
- Version: 2.0.0a3
3
+ Version: 2.0.0a5
4
4
  Summary: API-wrapper pour récupérer des données liées à Nation
5
5
  License: GPL-3.0
6
6
  Author: happex
@@ -18,6 +18,7 @@ from .cls.base import NSID
18
18
  from .cls.archives import *
19
19
  from .cls.entities import *
20
20
  from .cls.republic import *
21
+ from .cls.economy import *
21
22
 
22
23
  from .cls.exceptions import *
23
24
 
@@ -37,7 +37,7 @@ class Instance:
37
37
  def __init__(self, client: Client):
38
38
  self.db = client
39
39
 
40
- def _select_from_db(self, table: str, key: str, value: str) -> dict:
40
+ def _select_from_db(self, table: str, key: str, value: str) -> list:
41
41
  """
42
42
  Récupère des données JSON d'une table Supabase en fonction de l'ID.
43
43
 
@@ -112,11 +112,12 @@ class Instance:
112
112
  matches = []
113
113
 
114
114
  for key, value in query.items():
115
- matches.append(self._select_from_db(table, key, value))
115
+ entity = self._select_from_db(table, key, value)
116
+ if entity is not None: matches.append(entity[0])
116
117
 
117
118
  _res = []
118
119
 
119
- for item in matches[0]:
120
+ for item in matches:
120
121
  if all(item in sublist for sublist in matches[1:]):
121
122
  _res.append(item)
122
123
 
@@ -19,17 +19,20 @@ class Item:
19
19
  class Inventory:
20
20
  def __init__(self, owner_id: NSID) -> None:
21
21
  self.owner_id: NSID = NSID(owner_id)
22
- self.objects: list[Item] = []
22
+ self.objects: dict[str, NSID] = {}
23
23
 
24
24
  def append(self, item: Item, quantity: int = 1):
25
- self.objects.extend(quantity * [ item ])
25
+ if item.id in self.objects.keys():
26
+ self.objects[item.id] += quantity
27
+ else:
28
+ self.objects[item.id] = quantity
26
29
 
27
30
  def throw(self, item: Item, quantity: int = 1):
28
- if quantity > self.objects.count(item):
29
- quantity = self.objects.count(item)
30
-
31
- for i in range(quantity):
32
- self.objects.remove(item)
31
+ if item.id in self.objects.keys():
32
+ if self.objects[item.id] > quantity:
33
+ self.objects[item.id] -= quantity
34
+ else:
35
+ self.objects[item.id] = 0
33
36
 
34
37
  class Sale:
35
38
  def __init__(self, id: NSID, item: Item) -> None:
@@ -29,7 +29,7 @@ class PositionPermissions:
29
29
  self.vote_representatives = False # Participer aux élections législatives
30
30
 
31
31
  def edit(self, **permissions: bool) -> None:
32
- for perm in permissions.values():
32
+ for perm in permissions.items():
33
33
  self.__setattr__(*perm)
34
34
 
35
35
  class Position:
@@ -43,7 +43,7 @@ class Entity:
43
43
  self.id: NSID = NSID(id) # ID hexadécimal de l'entité (ou nom dans le cas de l'entreprise)
44
44
  self.name: str = "Entité Inconnue"
45
45
  self.registerDate: int = 0
46
- self.legalPosition: Position = Position()
46
+ self.position: Position = Position()
47
47
  self.additional: dict = {}
48
48
 
49
49
  def set_name(self, new_name: str) -> None:
@@ -53,7 +53,7 @@ class Entity:
53
53
  self.name = new_name
54
54
 
55
55
  def set_position(self, position: str) -> None:
56
- self.legalPosition = position
56
+ self.position = position
57
57
 
58
58
  def add_link(self, key: str, value: str | int) -> None:
59
59
  if isinstance(value, str) or isinstance(value, int):
@@ -11,7 +11,7 @@ class Vote:
11
11
  self.startDate: int = 0
12
12
  self.endDate: int = 0
13
13
 
14
- class ClosedVote(Vote): # Meilleur nom pour cette classe en v2
14
+ class Referendum(Vote):
15
15
  def __init__(self, id: str | NSID, title: str) -> None:
16
16
  super().__init__(id, title, ('yes', 'no', 'blank'))
17
17
 
@@ -39,8 +39,9 @@ class EconomyInstance(Instance):
39
39
  account = BankAccount(id)
40
40
  account.amount = _data['amount']
41
41
  account.frozen = _data['frozen']
42
- account.owner = _data['owner_id']
42
+ account.owner = NSID(_data['owner_id'])
43
43
  account.bank = _data['bank']
44
+ account.income = _data['income']
44
45
 
45
46
  return account
46
47
 
@@ -52,7 +53,8 @@ class EconomyInstance(Instance):
52
53
  'amount': account.amount,
53
54
  'frozen': account.frozen,
54
55
  'owner_id': account.owner,
55
- 'bank': account.bank
56
+ 'bank': account.bank,
57
+ 'income': account.income
56
58
  }
57
59
 
58
60
  self._put_in_db('accounts', _data)
@@ -66,19 +68,66 @@ class EconomyInstance(Instance):
66
68
  self.save_account(account)
67
69
 
68
70
  """
69
- ---- VENTES ----
71
+ ---- OBJETS & VENTES ----
70
72
  """
71
73
 
72
- def get_sale(self, id: str | NSID) -> Sale | None:
74
+ def save_item(self, item: Item) -> None:
75
+ """
76
+ Sauvegarde des infos à propos d'un item.
77
+
78
+ ## Paramètres
79
+ item: `.Item`\n
80
+ Article à sauvegarder
81
+ """
82
+
83
+ _item = item.__dict__
84
+ self._put_in_db('items', _item)
85
+
86
+ def get_item(self, id: NSID) -> Item | None:
87
+ """
88
+ Récupère des informations à propos d'un item.
89
+
90
+ ## Paramètres
91
+ id: `NSID`\n
92
+ ID de l'item
93
+
94
+ ## Retourne
95
+ - `.Item` si quelque chose est trouvé, sinon
96
+ - `None`
97
+ """
98
+
99
+ _item = self._get_by_ID('items', id)
100
+
101
+ if _item is None:
102
+ return
103
+
104
+ item = Item(id)
105
+ item.title = _item['title']
106
+ item.emoji = _item['emoji']
107
+
108
+ return item
109
+
110
+ def delete_item(self, item: Item) -> None:
111
+ """
112
+ Annule le référencement d'un item.
113
+
114
+ ## Paramètres
115
+ item: `.Item`\n
116
+ Item à vendre
117
+ """
118
+
119
+ self._delete_by_ID('items', item.id)
120
+
121
+ def get_sale(self, id: NSID) -> Sale | None:
73
122
  """
74
123
  Récupère une vente disponible sur le marketplace.
75
124
 
76
125
  ## Paramètres
77
- id: `str | NSID`\n
78
- ID de l'item.
126
+ id: `NSID`\n
127
+ ID de la vente.
79
128
 
80
129
  ## Renvoie
81
- - `.Item | None`
130
+ - `.Sale | None`
82
131
  """
83
132
 
84
133
  id = NSID(id)
@@ -87,8 +136,10 @@ class EconomyInstance(Instance):
87
136
 
88
137
  if _data is None:
89
138
  return None
139
+
140
+ item = self.get_item(_data['id'])
90
141
 
91
- sale = Sale(NSID(id))
142
+ sale = Sale(NSID(id), Item(_data['id']) if item is None else item)
92
143
  sale.__dict__ = _data
93
144
 
94
145
  return sale
@@ -147,8 +198,7 @@ class EconomyInstance(Instance):
147
198
  inventory = Inventory(id)
148
199
 
149
200
  for _item in _data['objects']:
150
- item = Item(_item['id'])
151
- item.__dict__ = _item
201
+ item = self.get_item(_item)
152
202
 
153
203
  inventory.objects.append(item)
154
204
 
@@ -163,10 +213,7 @@ class EconomyInstance(Instance):
163
213
  Inventaire à sauvegarder
164
214
  """
165
215
 
166
- _data = {
167
- "owner_id": inventory.owner_id,
168
- "objects": [ object.__dict__ for object in inventory.objects ]
169
- }
216
+ _data = inventory.__dict__
170
217
 
171
218
  self._put_in_db('inventories', _data)
172
219
 
@@ -72,7 +72,7 @@ class EntityInstance(Instance):
72
72
  _member_profile = self.get_entity(member.id)
73
73
 
74
74
  member.set_name(_member_profile.name)
75
- member.legalPosition = _member_profile.legalPosition
75
+ member.position = _member_profile.position
76
76
  member.registerDate = _member_profile.registerDate
77
77
 
78
78
  member.xp = _member_profile.xp
@@ -89,7 +89,7 @@ class EntityInstance(Instance):
89
89
  entity = Entity(id)
90
90
 
91
91
  entity.name = _data['name']
92
- entity.legalPosition = _data['position'] # Métier si c'est un utilisateur, domaine professionnel si c'est un collectif
92
+ entity.position = _data['position'] # Métier si c'est un utilisateur, domaine professionnel si c'est un collectif
93
93
  entity.registerDate = _data['register_date']
94
94
 
95
95
  for key, value in _data.get('additional', {}).items():
@@ -114,7 +114,7 @@ class EntityInstance(Instance):
114
114
  _data = {
115
115
  'id': entity.id,
116
116
  'name': entity.name,
117
- 'position': entity.legalPosition,
117
+ 'position': entity.position,
118
118
  'register_date': entity.registerDate,
119
119
  'additional': {},
120
120
  }
@@ -167,7 +167,8 @@ class EntityInstance(Instance):
167
167
  - `list[Entity | User | Organization]`
168
168
  """
169
169
 
170
- _res = self.fetch('entities', **query)
170
+ _res = self.fetch('individuals', **query)
171
+ _res.extend(self.fetch('organizations', **query))
171
172
 
172
173
  return [ self.get_entity(NSID(entity['id'])) for entity in _res if entity is not None ]
173
174
 
@@ -221,8 +222,8 @@ class EntityInstance(Instance):
221
222
  return None
222
223
 
223
224
  position = Position(id)
224
- position.name = _data['name']
225
- position.permissions.edit(dict(zip(_data['permissions'], True)))
225
+ position.name = _data['title']
226
+ position.permissions.edit(**{ p: True for p in _data['permissions'] })
226
227
 
227
228
  return position
228
229
 
@@ -26,7 +26,7 @@ class RepublicInstance(Instance):
26
26
  ---- VOTES & REFERENDUMS ----
27
27
  """
28
28
 
29
- def get_vote(self, id: str | NSID) -> Vote | ClosedVote | Lawsuit:
29
+ def get_vote(self, id: str | NSID) -> Vote | Referendum | Lawsuit:
30
30
  """
31
31
  Récupère un vote spécifique.
32
32
 
@@ -44,10 +44,10 @@ class RepublicInstance(Instance):
44
44
  if _data is None:
45
45
  return None
46
46
 
47
- if _data['_type'] == 'open':
47
+ if _data['_type'] == 'vote':
48
48
  vote = Vote(id, _data['title'], tuple(_data['choices'].keys()))
49
- elif _data['_type'] == 'closed':
50
- vote = ClosedVote(id, _data['title'])
49
+ elif _data['_type'] == 'referendum':
50
+ vote = Referendum(id, _data['title'])
51
51
  elif _data['_type'] == 'lawsuit':
52
52
  vote = Lawsuit(id, _data['title'])
53
53
  else:
@@ -60,14 +60,14 @@ class RepublicInstance(Instance):
60
60
 
61
61
  return vote
62
62
 
63
- def save_vote(self, vote: Vote | ClosedVote) -> None:
63
+ def save_vote(self, vote: Vote | Referendum) -> None:
64
64
  """Sauvegarde un vote dans la base de données."""
65
65
 
66
66
  vote.id = NSID(vote.id)
67
67
 
68
68
  _data = {
69
- '_type':'open' if type(vote) == Vote else\
70
- 'closed' if type(vote) == ClosedVote else\
69
+ '_type':'vote' if type(vote) == Vote else\
70
+ 'referendum' if type(vote) == Referendum else\
71
71
  'lawsuit' if type(vote) == Lawsuit else\
72
72
  'unknown',
73
73
  'title': vote.title,
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "nsarchive"
3
- version = "2.0.0-alpha.3"
3
+ version = "2.0.0-alpha.5"
4
4
  description = "API-wrapper pour récupérer des données liées à Nation"
5
5
  authors = ["happex <110610727+okayhappex@users.noreply.github.com>"]
6
6
  license = "GPL-3.0"
File without changes
File without changes