nsarchive 2.0.0a8__tar.gz → 2.0.0b2__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.
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/PKG-INFO +1 -1
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/cls/republic.py +45 -16
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/instances/_entities.py +1 -1
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/instances/_republic.py +59 -42
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/pyproject.toml +1 -1
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/LICENSE +0 -0
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/README.md +0 -0
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/__init__.py +0 -0
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/assets/default_avatar.png +0 -0
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/cls/archives.py +0 -0
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/cls/base.py +0 -0
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/cls/economy.py +0 -0
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/cls/entities.py +0 -0
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/cls/exceptions.py +0 -0
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/instances/_economy.py +0 -0
- {nsarchive-2.0.0a8 → nsarchive-2.0.0b2}/nsarchive/utils.py +0 -0
@@ -2,22 +2,53 @@ from nsarchive.cls.base import NSID
|
|
2
2
|
|
3
3
|
# Votes
|
4
4
|
|
5
|
+
class VoteOption:
|
6
|
+
def __init__(self, id: str, title: str = None, count: int = 0):
|
7
|
+
self.id = id
|
8
|
+
self.title = title if title else id
|
9
|
+
self.count = count
|
10
|
+
|
5
11
|
class Vote:
|
6
|
-
def __init__(self, id: str | NSID, title: str
|
12
|
+
def __init__(self, id: str | NSID, title: str) -> None:
|
7
13
|
self.id: NSID = NSID(id)
|
8
14
|
self.title: str = title
|
9
|
-
self.choices
|
10
|
-
self.author:
|
15
|
+
self.choices: list[VoteOption] = []
|
16
|
+
self.author: NSID = NSID("0")
|
11
17
|
self.startDate: int = 0
|
12
18
|
self.endDate: int = 0
|
13
19
|
|
20
|
+
def by_id(self, id: str) -> VoteOption:
|
21
|
+
for opt in self.choices:
|
22
|
+
if opt.id == id:
|
23
|
+
return opt
|
24
|
+
|
25
|
+
def sorted(self, titles_only: bool = False) -> list[VoteOption] | list[str]:
|
26
|
+
sorted_list: list[VoteOption] = sorted(self.choices, lambda opt : opt.count)
|
27
|
+
|
28
|
+
if titles_only:
|
29
|
+
return [ opt.id for opt in sorted_list ]
|
30
|
+
else:
|
31
|
+
return sorted_list
|
32
|
+
|
14
33
|
class Referendum(Vote):
|
15
|
-
def __init__(self, id:
|
16
|
-
super().__init__(id, title
|
34
|
+
def __init__(self, id: NSID, title: str) -> None:
|
35
|
+
super().__init__(id, title)
|
36
|
+
|
37
|
+
self.choices = [
|
38
|
+
VoteOption('yes', 'Oui'),
|
39
|
+
VoteOption('no', 'Non'),
|
40
|
+
VoteOption('blank', 'Pas d\'avis'),
|
41
|
+
]
|
17
42
|
|
18
43
|
class Lawsuit(Vote):
|
19
|
-
def __init__(self, id:
|
20
|
-
super().__init__(id, title
|
44
|
+
def __init__(self, id: NSID, title: str) -> None:
|
45
|
+
super().__init__(id, title)
|
46
|
+
|
47
|
+
self.choices = [
|
48
|
+
VoteOption('guilty', 'Coupable'),
|
49
|
+
VoteOption('innocent', 'Innocent'),
|
50
|
+
VoteOption('blank', 'Pas d\'avis'),
|
51
|
+
]
|
21
52
|
|
22
53
|
|
23
54
|
# Institutions (defs)
|
@@ -30,21 +61,19 @@ class Official:
|
|
30
61
|
'PRE_REP': 0, # Président de la République
|
31
62
|
'MIN': 0, # Différents ministres
|
32
63
|
'PRE_AS': 0, # Président de l'Assemblée Nationale
|
33
|
-
'JUDGE': 0, # Juge
|
34
64
|
'REPR': 0 # Député
|
35
65
|
}
|
36
66
|
|
37
67
|
self.contributions: dict = {
|
38
|
-
'
|
39
|
-
'
|
40
|
-
'
|
41
|
-
'law_vote': 0
|
68
|
+
'propose_project': 0,
|
69
|
+
'success_project': 0,
|
70
|
+
'vote_law': 0
|
42
71
|
}
|
43
72
|
|
44
73
|
class Administration:
|
45
74
|
def __init__(self) -> None:
|
46
75
|
self.president: Official
|
47
|
-
self.members: list[Official]
|
76
|
+
self.members: list[Official] = []
|
48
77
|
|
49
78
|
class Government:
|
50
79
|
def __init__(self, president: Official) -> None:
|
@@ -61,17 +90,17 @@ class Court:
|
|
61
90
|
def __init__(self) -> None:
|
62
91
|
self.president: Official
|
63
92
|
# On discutera de la mise en place d'un potentiel président. Pour l'instant c'est le Ministre de la Justice
|
64
|
-
self.members: list[Official]
|
93
|
+
self.members: list[Official] = []
|
65
94
|
|
66
95
|
class Assembly:
|
67
96
|
def __init__(self) -> None:
|
68
97
|
self.president: Official
|
69
|
-
self.members: list[Official]
|
98
|
+
self.members: list[Official] = []
|
70
99
|
|
71
100
|
class PoliceForces:
|
72
101
|
def __init__(self) -> None:
|
73
102
|
self.president: Official
|
74
|
-
self.members: list[Official]
|
103
|
+
self.members: list[Official] = []
|
75
104
|
|
76
105
|
class State:
|
77
106
|
def __init__(self) -> None:
|
@@ -139,7 +139,7 @@ class EntityInstance(Instance):
|
|
139
139
|
|
140
140
|
_data['members'] += [_member]
|
141
141
|
|
142
|
-
self._upload_to_storage('organizations', entity.avatar, f'/avatars/{entity.id}')
|
142
|
+
self._upload_to_storage('organizations', entity.avatar, f'/avatars/{entity.id}', overwrite = True)
|
143
143
|
elif type(entity) == User:
|
144
144
|
_data['xp'] = entity.xp
|
145
145
|
_data['boosts'] = entity.boosts
|
@@ -41,22 +41,34 @@ class RepublicInstance(Instance):
|
|
41
41
|
id = NSID(id)
|
42
42
|
_data = self._get_by_ID('votes', id)
|
43
43
|
|
44
|
-
if _data
|
44
|
+
if not _data: # Pas dans les votes -> peut-être dans les procès
|
45
|
+
_data = self._get_by_ID('lawsuits', id)
|
46
|
+
|
47
|
+
if not _data: # Le vote n'existe juste pas
|
45
48
|
return None
|
49
|
+
elif '_type' not in _data.keys(): # Le vote est un procès
|
50
|
+
_data['_type'] = "lawsuit"
|
46
51
|
|
47
52
|
if _data['_type'] == 'vote':
|
48
|
-
vote = Vote(id, _data['title']
|
53
|
+
vote = Vote(id, _data['title'])
|
49
54
|
elif _data['_type'] == 'referendum':
|
50
55
|
vote = Referendum(id, _data['title'])
|
56
|
+
vote.choices = []
|
51
57
|
elif _data['_type'] == 'lawsuit':
|
52
58
|
vote = Lawsuit(id, _data['title'])
|
59
|
+
vote.choices = []
|
53
60
|
else:
|
54
|
-
vote = Vote('0', 'Unknown Vote'
|
61
|
+
vote = Vote('0', 'Unknown Vote')
|
62
|
+
|
63
|
+
vote.author = _data['author_id']
|
64
|
+
vote.startDate = _data['start_date']
|
65
|
+
vote.endDate = _data['end_date']
|
55
66
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
67
|
+
for opt in _data['choices']:
|
68
|
+
option = VoteOption(opt["id"], opt["title"])
|
69
|
+
option.count = opt["count"]
|
70
|
+
|
71
|
+
vote.choices.append(option)
|
60
72
|
|
61
73
|
return vote
|
62
74
|
|
@@ -70,14 +82,19 @@ class RepublicInstance(Instance):
|
|
70
82
|
'referendum' if type(vote) == Referendum else\
|
71
83
|
'lawsuit' if type(vote) == Lawsuit else\
|
72
84
|
'unknown',
|
85
|
+
'id': NSID(vote.id),
|
73
86
|
'title': vote.title,
|
74
|
-
'
|
75
|
-
'
|
76
|
-
'
|
77
|
-
'choices': vote.choices
|
87
|
+
'author_id': NSID(vote.author),
|
88
|
+
'start_date': vote.startDate,
|
89
|
+
'end_date': vote.endDate,
|
90
|
+
'choices': [ opt.__dict__ for opt in vote.choices ]
|
78
91
|
}
|
79
92
|
|
80
|
-
|
93
|
+
if type(vote) == Lawsuit:
|
94
|
+
del _data['_type']
|
95
|
+
self._put_in_db('lawsuits', _data)
|
96
|
+
else:
|
97
|
+
self._put_in_db('votes', _data)
|
81
98
|
|
82
99
|
# Aucune possibilité de supprimer un vote
|
83
100
|
|
@@ -103,19 +120,19 @@ class RepublicInstance(Instance):
|
|
103
120
|
|
104
121
|
base = 'mandate' if current_mandate else 'archives'
|
105
122
|
|
106
|
-
_contributions = self.fetch(base,
|
107
|
-
_mandates = self.fetch(base,
|
108
|
-
self.fetch(base,
|
123
|
+
_contributions = self.fetch(base, author = id, _type = 'contrib')
|
124
|
+
_mandates = self.fetch(base, target = id, _type = 'election') +\
|
125
|
+
self.fetch(base, target = id, _type = 'promotion')
|
109
126
|
|
110
127
|
user = Official(id)
|
111
128
|
for mandate in _mandates:
|
112
|
-
if mandate['position'].startswith('MIN'):
|
113
|
-
mandate['position'] = 'MIN'
|
129
|
+
if mandate['details']['position'].startswith('MIN'):
|
130
|
+
mandate['details']['position'] = 'MIN'
|
114
131
|
|
115
132
|
try:
|
116
|
-
user.mandates[mandate['position']] += 1
|
133
|
+
user.mandates[mandate['details']['position']] += 1
|
117
134
|
except KeyError:
|
118
|
-
user.mandates[mandate['position']] = 1
|
135
|
+
user.mandates[mandate['details']['position']] = 1
|
119
136
|
|
120
137
|
for contrib in _contributions:
|
121
138
|
try:
|
@@ -134,14 +151,14 @@ class RepublicInstance(Instance):
|
|
134
151
|
court = Court()
|
135
152
|
police_forces = PoliceForces()
|
136
153
|
|
137
|
-
_get_position: list[dict] = lambda pos : self._select_from_db('functions', 'id', pos)['users']
|
154
|
+
_get_position: list[dict] = lambda pos : self._select_from_db('functions', 'id', pos)[0]['users']
|
138
155
|
|
139
|
-
admin.members = [ self.get_official(user
|
140
|
-
admin.president = self.get_official(
|
156
|
+
admin.members = [ self.get_official(user) for user in _get_position('ADMIN') ]
|
157
|
+
admin.president = self.get_official(0xF7DB60DD1C4300A) # happex (remplace Kheops pour l'instant)
|
141
158
|
|
142
|
-
gov.president = self.get_official(
|
159
|
+
gov.president = self.get_official(0x0)
|
143
160
|
|
144
|
-
minister = lambda code : self.get_official(_get_position(f'MIN_{code}')[0]
|
161
|
+
minister = lambda code : self.get_official(_get_position(f'MIN_{code}')[0])
|
145
162
|
gov.prime_minister = minister('PRIM')
|
146
163
|
gov.economy_minister = minister('ECO')
|
147
164
|
gov.inner_minister = minister('INN')
|
@@ -150,13 +167,13 @@ class RepublicInstance(Instance):
|
|
150
167
|
gov.outer_minister = minister('OUT')
|
151
168
|
|
152
169
|
assembly.president = self.get_official(_get_position('PRE_AS')[0])
|
153
|
-
assembly.members = [ self.get_official(user
|
170
|
+
assembly.members = [ self.get_official(user) for user in _get_position('REPR') ]
|
154
171
|
|
155
172
|
court.president = gov.justice_minister
|
156
|
-
court.members = [ self.get_official(user
|
173
|
+
court.members = [ self.get_official(user) for user in _get_position('JUDGE') ]
|
157
174
|
|
158
175
|
police_forces.president = gov.inner_minister
|
159
|
-
police_forces.members = [ self.get_official(user
|
176
|
+
police_forces.members = [ self.get_official(user) for user in _get_position('POLICE') ]
|
160
177
|
|
161
178
|
instits = State()
|
162
179
|
instits.administration = admin
|
@@ -179,20 +196,20 @@ class RepublicInstance(Instance):
|
|
179
196
|
|
180
197
|
get_ids = lambda institution : [ member.id for member in institutions.__getattribute__(institution).members ]
|
181
198
|
|
182
|
-
self._put_in_db('functions', { 'users': get_ids('administration') })
|
183
|
-
self._put_in_db('functions', { 'users': get_ids('assembly') })
|
184
|
-
self._put_in_db('functions', { 'users': get_ids('court') })
|
185
|
-
self._put_in_db('functions', { 'users': get_ids('police') })
|
199
|
+
self._put_in_db('functions', { 'id': 'ADMIN', 'users': get_ids('administration') })
|
200
|
+
self._put_in_db('functions', { 'id': 'REPR', 'users': get_ids('assembly') })
|
201
|
+
self._put_in_db('functions', { 'id': 'JUDGE', 'users': get_ids('court') })
|
202
|
+
self._put_in_db('functions', { 'id': 'POLICE', 'users': get_ids('police') })
|
186
203
|
|
187
|
-
self._put_in_db('functions', { 'users': [ institutions.assembly.president.id ] })
|
188
|
-
self._put_in_db('functions', { 'users': [ institutions.government.president.id ] })
|
204
|
+
self._put_in_db('functions', { 'id': 'PRE_AS', 'users': [ institutions.assembly.president.id ] })
|
205
|
+
self._put_in_db('functions', { 'id': 'PRE_REP', 'users': [ institutions.government.president.id ] })
|
189
206
|
|
190
|
-
self._put_in_db('functions', { 'users': [ institutions.government.prime_minister.id ] })
|
191
|
-
self._put_in_db('functions', { 'users': [ institutions.government.inner_minister.id ] })
|
192
|
-
self._put_in_db('functions', { 'users': [ institutions.government.justice_minister.id ] })
|
193
|
-
self._put_in_db('functions', { 'users': [ institutions.government.economy_minister.id ] })
|
194
|
-
self._put_in_db('functions', { 'users': [ institutions.government.press_minister.id ] })
|
195
|
-
self._put_in_db('functions', { 'users': [ institutions.government.outer_minister.id ] })
|
207
|
+
self._put_in_db('functions', { 'id': 'MIN_PRIM', 'users': [ institutions.government.prime_minister.id ] })
|
208
|
+
self._put_in_db('functions', { 'id': 'MIN_INN', 'users': [ institutions.government.inner_minister.id ] })
|
209
|
+
self._put_in_db('functions', { 'id': 'MIN_JUS', 'users': [ institutions.government.justice_minister.id ] })
|
210
|
+
self._put_in_db('functions', { 'id': 'MIN_ECO', 'users': [ institutions.government.economy_minister.id ] })
|
211
|
+
self._put_in_db('functions', { 'id': 'MIN_AUD', 'users': [ institutions.government.press_minister.id ] })
|
212
|
+
self._put_in_db('functions', { 'id': 'MIN_OUT', 'users': [ institutions.government.outer_minister.id ] })
|
196
213
|
|
197
214
|
def new_mandate(self, institutions: State, weeks: int = 4) -> None:
|
198
215
|
"""
|
@@ -222,7 +239,7 @@ class RepublicInstance(Instance):
|
|
222
239
|
elif type(archive) == Demotion:
|
223
240
|
_data['_type'] = "demotion"
|
224
241
|
else:
|
225
|
-
_data['_type'] = "
|
242
|
+
_data['_type'] = "unknown"
|
226
243
|
|
227
244
|
self._put_in_db('archives', _data)
|
228
245
|
self._put_in_db('mandate', _data) # Ajouter les archives à celle du mandat actuel
|
@@ -246,9 +263,9 @@ class RepublicInstance(Instance):
|
|
246
263
|
return None
|
247
264
|
|
248
265
|
if _data['_type'] == "election":
|
249
|
-
archive = Election(_data['author'], _data['target'], _data['position'])
|
266
|
+
archive = Election(_data['author'], _data['target'], _data['details']['position'])
|
250
267
|
elif _data['_type'] == "promotion":
|
251
|
-
archive = Promotion(_data['author'], _data['target'], _data['position'])
|
268
|
+
archive = Promotion(_data['author'], _data['target'], _data['details']['position'])
|
252
269
|
elif _data['_type'] == "demotion":
|
253
270
|
archive = Demotion(_data['author'], _data['target'])
|
254
271
|
else:
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|