Loading app.py +11 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,17 @@ def cli_users_list(): manager.list_users() @users_cli.command('import-csv', help='Import users from the csv') @click.argument('course') @click.argument('role') @click.argument('group', required=False) @click.option('-f', '--file', help="From which file they should be imported, default is stdin", required=False) def cli_users_list(course, role, group, file): log.info(f'[CMD] Importing users from the csv users') manager.import_users(file, course=course, role=role, group=group) # # Courses related commands # Loading management/data/__init__.py +31 −2 Original line number Diff line number Diff line import csv import datetime import sys from flask import Flask from flask_sqlalchemy import SQLAlchemy Loading @@ -8,7 +10,7 @@ from management.data.data_dev import init_dev_data from management.data.data_prod import init_prod_data from management.data.data_test import init_test_data from portal import logger from portal.database.models import Course, Role, Secret, Submission, SubmissionState, User from portal.database.models import Course, Group, Role, Secret, Submission, SubmissionState, User from portal.service.rest import RestService from portal.tools import time Loading Loading @@ -183,4 +185,31 @@ class DataManagement(object): user = self.rest.find.user(name) user.secrets.append(Secret(name='user-cli-secret', value=secret)) log.debug(f'[DATA] Created secret for user: {user.log_name}') self.db.session.commit() No newline at end of file self.db.session.commit() def import_users(self, file, course=None, role=None, group=None): with self.app.app_context(): if role: role = self.rest.find.role(course, role) if group: group = self.rest.find.group(course, group) users = self._parse_csv_users(file) created_users = [] for user in users: created = self.rest.users.create(**user, admin=False) created_users.append(created) self._add_users_to_course(created_users, role, group) def _parse_csv_users(self, file=None): fields = ['username', 'uco', 'email', 'name'] if file is None: return csv.DictReader(sys.stdin, fieldnames=fields) with open(file) as f: return csv.DictReader(f, fieldnames=fields) def _add_users_to_course(self, created_users, role: Role, group: Group): for user in created_users: if role: self.rest.roles(role).add_client(user) if group: self.rest.groups(group).add_user(user) Loading
app.py +11 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,17 @@ def cli_users_list(): manager.list_users() @users_cli.command('import-csv', help='Import users from the csv') @click.argument('course') @click.argument('role') @click.argument('group', required=False) @click.option('-f', '--file', help="From which file they should be imported, default is stdin", required=False) def cli_users_list(course, role, group, file): log.info(f'[CMD] Importing users from the csv users') manager.import_users(file, course=course, role=role, group=group) # # Courses related commands # Loading
management/data/__init__.py +31 −2 Original line number Diff line number Diff line import csv import datetime import sys from flask import Flask from flask_sqlalchemy import SQLAlchemy Loading @@ -8,7 +10,7 @@ from management.data.data_dev import init_dev_data from management.data.data_prod import init_prod_data from management.data.data_test import init_test_data from portal import logger from portal.database.models import Course, Role, Secret, Submission, SubmissionState, User from portal.database.models import Course, Group, Role, Secret, Submission, SubmissionState, User from portal.service.rest import RestService from portal.tools import time Loading Loading @@ -183,4 +185,31 @@ class DataManagement(object): user = self.rest.find.user(name) user.secrets.append(Secret(name='user-cli-secret', value=secret)) log.debug(f'[DATA] Created secret for user: {user.log_name}') self.db.session.commit() No newline at end of file self.db.session.commit() def import_users(self, file, course=None, role=None, group=None): with self.app.app_context(): if role: role = self.rest.find.role(course, role) if group: group = self.rest.find.group(course, group) users = self._parse_csv_users(file) created_users = [] for user in users: created = self.rest.users.create(**user, admin=False) created_users.append(created) self._add_users_to_course(created_users, role, group) def _parse_csv_users(self, file=None): fields = ['username', 'uco', 'email', 'name'] if file is None: return csv.DictReader(sys.stdin, fieldnames=fields) with open(file) as f: return csv.DictReader(f, fieldnames=fields) def _add_users_to_course(self, created_users, role: Role, group: Group): for user in created_users: if role: self.rest.roles(role).add_client(user) if group: self.rest.groups(group).add_user(user)