Commit 946dda3099666a1031f975962c72bd8726443736
1 parent
4113c4f3
Exists in
master
and in
4 other branches
New cli command user_update()
Showing
1 changed file
with
116 additions
and
87 deletions
Show diff stats
app/commands/commands.py
... | ... | @@ -13,11 +13,35 @@ from sqlalchemy.orm import Session |
13 | 13 | from sqlalchemy import create_engine |
14 | 14 | |
15 | 15 | from app.models import db, Agent, Service, Project, Capacity, Period, Charge |
16 | -from app.auth.models import User, _nameToRole | |
16 | +from app.auth.models import User, _nameToRole, _roleToName | |
17 | 17 | |
18 | 18 | from . import bp |
19 | 19 | |
20 | 20 | |
21 | +@bp.cli.command('create_db') | |
22 | +def create_db(): | |
23 | + """ | |
24 | + Create the database structure. Database should be empty. | |
25 | + | |
26 | + configure the proper database uri in the db_config.py file. | |
27 | + """ | |
28 | + db.create_all() | |
29 | + admin = User(email='admin@nowhere.org', name='admin', login='admin', role='admin') | |
30 | + admin.set_password('admin') | |
31 | + sqlite_uri = db.engine.url.__str__() if 'sqlite' in db.engine.url.__str__() else None | |
32 | + try: | |
33 | + db.session.add(admin) | |
34 | + db.session.commit() | |
35 | + except IntegrityError: | |
36 | + current_app.logger.error("User admin already exists, database should be empty at create") | |
37 | + if sqlite_uri: | |
38 | + current_app.logger.error("see " + sqlite_uri) | |
39 | + sys.exit(-1) | |
40 | + | |
41 | + if sqlite_uri: | |
42 | + current_app.logger.info("Created sqlite db: " + sqlite_uri) | |
43 | + | |
44 | + | |
21 | 45 | @bp.cli.command("feed_from_irap") |
22 | 46 | @click.option('--csv-file', '-f', 'csv_file_name', help="the csv file path to feed from") |
23 | 47 | def feed_from_irap(csv_file_name): |
... | ... | @@ -123,6 +147,59 @@ def feed_from_irap(csv_file_name): |
123 | 147 | db.session.commit() |
124 | 148 | |
125 | 149 | |
150 | +@bp.cli.command("feed_from_lesia") | |
151 | +def feed_from_lesia(): | |
152 | + """ | |
153 | + Feed db with agents from a lesia like mysql database. | |
154 | + | |
155 | + Remember to configure the proper database uri in the db_config.py file. | |
156 | + """ | |
157 | + from .lesia_db import lesia_agent, lesia_session, lesia_service, lesia_project, \ | |
158 | + lesia_fonction, lesia_periods, lesia_affectation | |
159 | + | |
160 | + agents = lesia_session.query(lesia_agent).all() | |
161 | + for a in agents: | |
162 | + n_a = Agent(id=a.IDagent, firstname=a.nom, secondname=a.prenom) | |
163 | + db.session.add(n_a) | |
164 | + db.session.commit() | |
165 | + | |
166 | + services = lesia_session.query(lesia_service).all() | |
167 | + for s in services: | |
168 | + n_s = Service(id=s.id, name=s.nom, abbr=s.abbreviation) | |
169 | + db.session.add(n_s) | |
170 | + db.session.commit() | |
171 | + | |
172 | + projects = lesia_session.query(lesia_project).all() | |
173 | + for p in projects: | |
174 | + n_p = Project(id=p.id, name=p.nom) | |
175 | + db.session.add(n_p) | |
176 | + db.session.commit() | |
177 | + | |
178 | + fonctions = lesia_session.query(lesia_fonction).all() | |
179 | + for f in fonctions: | |
180 | + n_c = Capacity(id=f.id, name=f.nom) | |
181 | + db.session.add(n_c) | |
182 | + db.session.commit() | |
183 | + | |
184 | + periods = lesia_session.query(lesia_periods) | |
185 | + for p in periods: | |
186 | + n_p = Period(name=p.id_semestre) | |
187 | + db.session.add(n_p) | |
188 | + db.session.commit() | |
189 | + | |
190 | + affectations = lesia_session.query(lesia_affectation) | |
191 | + for f in affectations: | |
192 | + p = Period.query.filter(Period.name == f.semestre_id).one() | |
193 | + n_c = Charge(agent_id=f.agent_id, | |
194 | + project_id=f.projet_id, | |
195 | + service_id=f.service_id, | |
196 | + capacity_id=f.fonction_id, | |
197 | + period_id=p.id, | |
198 | + charge_rate=f.charge) | |
199 | + db.session.add(n_c) | |
200 | + db.session.commit() | |
201 | + | |
202 | + | |
126 | 203 | @bp.cli.command("fake_lesia_names") |
127 | 204 | def fake_lesia_names(): |
128 | 205 | """ |
... | ... | @@ -186,59 +263,6 @@ def fake_lesia_names(): |
186 | 263 | db.session.commit() |
187 | 264 | |
188 | 265 | |
189 | -@bp.cli.command("feed_from_lesia") | |
190 | -def feed_from_lesia(): | |
191 | - """ | |
192 | - Feed db with agents from a lesia like mysql database. | |
193 | - | |
194 | - Remember to configure the proper database uri in the db_config.py file. | |
195 | - """ | |
196 | - from .lesia_db import lesia_agent, lesia_session, lesia_service, lesia_project, \ | |
197 | - lesia_fonction, lesia_periods, lesia_affectation | |
198 | - | |
199 | - agents = lesia_session.query(lesia_agent).all() | |
200 | - for a in agents: | |
201 | - n_a = Agent(id=a.IDagent, firstname=a.nom, secondname=a.prenom) | |
202 | - db.session.add(n_a) | |
203 | - db.session.commit() | |
204 | - | |
205 | - services = lesia_session.query(lesia_service).all() | |
206 | - for s in services: | |
207 | - n_s = Service(id=s.id, name=s.nom, abbr=s.abbreviation) | |
208 | - db.session.add(n_s) | |
209 | - db.session.commit() | |
210 | - | |
211 | - projects = lesia_session.query(lesia_project).all() | |
212 | - for p in projects: | |
213 | - n_p = Project(id=p.id, name=p.nom) | |
214 | - db.session.add(n_p) | |
215 | - db.session.commit() | |
216 | - | |
217 | - fonctions = lesia_session.query(lesia_fonction).all() | |
218 | - for f in fonctions: | |
219 | - n_c = Capacity(id=f.id, name=f.nom) | |
220 | - db.session.add(n_c) | |
221 | - db.session.commit() | |
222 | - | |
223 | - periods = lesia_session.query(lesia_periods) | |
224 | - for p in periods: | |
225 | - n_p = Period(name=p.id_semestre) | |
226 | - db.session.add(n_p) | |
227 | - db.session.commit() | |
228 | - | |
229 | - affectations = lesia_session.query(lesia_affectation) | |
230 | - for f in affectations: | |
231 | - p = Period.query.filter(Period.name == f.semestre_id).one() | |
232 | - n_c = Charge(agent_id=f.agent_id, | |
233 | - project_id=f.projet_id, | |
234 | - service_id=f.service_id, | |
235 | - capacity_id=f.fonction_id, | |
236 | - period_id=p.id, | |
237 | - charge_rate=f.charge) | |
238 | - db.session.add(n_c) | |
239 | - db.session.commit() | |
240 | - | |
241 | - | |
242 | 266 | @bp.cli.command("feed_periods") |
243 | 267 | @click.option('--begin-year', '-b', 'begin_year', default=2005, help="the start year to begin periods with") |
244 | 268 | @click.option('--end-year', '-e', 'end_year', default=2025, help="the last year to end periods with") |
... | ... | @@ -288,39 +312,6 @@ def feed_random_charges(agent): |
288 | 312 | db.session.commit() |
289 | 313 | |
290 | 314 | |
291 | -@bp.cli.command('user_delete') | |
292 | -@click.argument('user_id') | |
293 | -def user_delete(user_id): | |
294 | - """Delete the user by given id (see user_show_all").""" | |
295 | - user = User.query.get(user_id) | |
296 | - db.session.delete(user) | |
297 | - db.session.commit() | |
298 | - | |
299 | - | |
300 | -@bp.cli.command('create_db') | |
301 | -def create_db(): | |
302 | - """ | |
303 | - Create the database structure. Database should be empty. | |
304 | - | |
305 | - configure the proper database uri in the db_config.py file. | |
306 | - """ | |
307 | - db.create_all() | |
308 | - admin = User(email='admin@nowhere.org', name='admin', login='admin', role='admin') | |
309 | - admin.set_password('admin') | |
310 | - sqlite_uri = db.engine.url.__str__() if 'sqlite' in db.engine.url.__str__() else None | |
311 | - try: | |
312 | - db.session.add(admin) | |
313 | - db.session.commit() | |
314 | - except IntegrityError: | |
315 | - current_app.logger.error("User admin already exists, database should be empty at create") | |
316 | - if sqlite_uri: | |
317 | - current_app.logger.error("see " + sqlite_uri) | |
318 | - sys.exit(-1) | |
319 | - | |
320 | - if sqlite_uri: | |
321 | - current_app.logger.info("Created sqlite db: " + sqlite_uri) | |
322 | - | |
323 | - | |
324 | 315 | @bp.cli.command('user_add') |
325 | 316 | @click.argument('email') |
326 | 317 | @click.argument('name') |
... | ... | @@ -339,6 +330,44 @@ def user_add(email, name, login, password, role): |
339 | 330 | current_app.logger.info(f"added {name}") |
340 | 331 | |
341 | 332 | |
333 | +@bp.cli.command('user_update') | |
334 | +@click.option('--name', '-n', 'name', default=None, help="the name to set for that user") | |
335 | +@click.option('--role', '-r', 'role', default=None, help="the role to set for that user") | |
336 | +@click.option('--email', '-e', 'email', default=None, help="the email to set for that user") | |
337 | +@click.option('--password', '-p', 'password', default=None, help="the password to set for that user") | |
338 | +@click.argument('user_id') | |
339 | +def user_update(user_id, name, role, email, password): | |
340 | + """Update the user by given id and given parameters.""" | |
341 | + user = User.query.get(user_id) | |
342 | + if not user: | |
343 | + current_app.logger.error(f"such user_id doesnt exists {user_id}") | |
344 | + return | |
345 | + if name: | |
346 | + user.name = name | |
347 | + print(f"User --{user.name}-- name updated to {user.name}") | |
348 | + if role: | |
349 | + user.set_role(role) | |
350 | + print(f"User --{user.name}-- role updated to {_roleToName[user.role]}") | |
351 | + if email: | |
352 | + user.email=email | |
353 | + print(f"User --{user.name}-- email updated to {user.email}") | |
354 | + if password: | |
355 | + print(f"User --{user.name}-- password updated") | |
356 | + user.set_password(password) | |
357 | + if not ( name or role or email or password): | |
358 | + print(f"No update for user --{user.name}--") | |
359 | + db.session.commit() | |
360 | + | |
361 | + | |
362 | +@bp.cli.command('user_delete') | |
363 | +@click.argument('user_id') | |
364 | +def user_delete(user_id): | |
365 | + """Delete the user by given id (see user_show_all").""" | |
366 | + user = User.query.get(user_id) | |
367 | + db.session.delete(user) | |
368 | + db.session.commit() | |
369 | + | |
370 | + | |
342 | 371 | @bp.cli.command('show_roles') |
343 | 372 | def show_roles(): |
344 | 373 | """ List all available roles for a user""" | ... | ... |