Loading app.py +26 −1 Original line number Original line Diff line number Diff line Loading @@ -81,6 +81,13 @@ def cli_users_set_password(name, password): manager.update_users_password(name, password) manager.update_users_password(name, password) @users_cli.command('promote', help='Promote user to the admin') @click.argument('name') def cli_users_promote(name): log.info(f"[CMD] Promote user to admin: {name}") manager.promote_user(name) @users_cli.command('add-secret', help='Adds secret for the user') @users_cli.command('add-secret', help='Adds secret for the user') @click.argument('name') @click.argument('name') @click.option('-s', '--secret', help='Users password', prompt=True, hide_input=True) @click.option('-s', '--secret', help='Users password', prompt=True, hide_input=True) Loading @@ -88,6 +95,7 @@ def cli_users_add_secret(name, secret): log.info(f"[CMD] Add secret for the user: {name} ({secret})") log.info(f"[CMD] Add secret for the user: {name} ({secret})") manager.add_user_secret(name, secret) manager.add_user_secret(name, secret) @users_cli.command('delete', help="Deletes user") @users_cli.command('delete', help="Deletes user") @click.argument('name') @click.argument('name') def cli_users_delete_user(name): def cli_users_delete_user(name): Loading Loading @@ -121,7 +129,7 @@ def cli_users_list(course, role, group, file): # # @courses_cli.command('create', help="Creates course with default roles") @courses_cli.command('create', help="Creates course with default roles") @click.argument('name', ) @click.argument('name') def cli_course_creates(name): def cli_course_creates(name): log.info(f"[CMD] Create Course: {name}") log.info(f"[CMD] Create Course: {name}") manager.create_course(name) manager.create_course(name) Loading @@ -133,6 +141,23 @@ def cli_courses_list(): manager.list_courses() manager.list_courses() @courses_cli.command('rm', help="Delete course") @click.argument('name') def cli_courses_rm(name): log.info(f"[CMD] Remove Course: {name}") manager.delete_course(name) @courses_cli.command('add-user', help="Add user") @click.argument('user') @click.argument('course') @click.argument('role') @click.argument('group', required=False) def cli_courses_add_user(user, course, role, group): log.info(f"[CMD] Add user {user} to course course {course} as {role} in {group}") manager.add_user_to_course(user, course, role=role, group=group) @courses_cli.command( @courses_cli.command( 'create-role', help="Creates role by it's type in the course") 'create-role', help="Creates role by it's type in the course") @click.argument('course') @click.argument('course') Loading management/data/__init__.py +43 −18 Original line number Original line Diff line number Diff line Loading @@ -11,7 +11,7 @@ from management.data.data_dev import init_dev_data from management.data.data_prod import init_prod_data from management.data.data_prod import init_prod_data from management.data.data_test import init_test_data from management.data.data_test import init_test_data from portal import logger from portal import logger from portal.database.models import Course, Group, Role, Secret, Submission, SubmissionState, User from portal.database.models import Course, Role, Secret, Submission, SubmissionState, User from portal.service.rest import RestService from portal.service.rest import RestService from portal.tools import time from portal.tools import time Loading Loading @@ -54,6 +54,15 @@ class DataManagement(object): user = self.rest.find.user(name) user = self.rest.find.user(name) self.rest.users(user).delete() self.rest.users(user).delete() def delete_course(self, name: str): """Deletes course Args: name(str): name of the course """ with self.app.app_context(): course = self.rest.find.course(name) self.rest.courses(course).delete() def update_users_password(self, name: str, password: str) -> User: def update_users_password(self, name: str, password: str) -> User: """Updates user's password """Updates user's password Args: Args: Loading Loading @@ -186,23 +195,26 @@ class DataManagement(object): def import_users(self, file, course=None, role=None, group=None): def import_users(self, file, course=None, role=None, group=None): with self.app.app_context(): with self.app.app_context(): course = self.rest.find.course(course) if role: role = self.rest.find.role(course, role) if group: group = self.rest.find.group(course, group) users = self._parse_csv_users(file) users = self._parse_csv_users(file) created_users = [] created_users = [] for user in users: for user in users: found_user = self.rest.find.user(user['username'], throws=False) found_user = self.rest.find.user(user['username'], throws=False) if found_user: if not found_user: log.debug(f"[IMPORT] Adding user {user['username']}: {user}") found_user = self.rest.users.create(**user, admin=False) else: log.debug(f"[IMPORT] skipping already existing user {user['username']}: {user}") log.debug(f"[IMPORT] skipping already existing user {user['username']}: {user}") created_users.append(found_user) created_users.append(found_user) continue log.debug(f"[IMPORT] Adding user {user['username']}: {user}") self._add_users_to_course(created_users, course, role, group) created = self.rest.users.create(**user, admin=False) created_users.append(created) def _get_role_group_instance(self, course, group, role): self._add_users_to_course(created_users, role, group) course = self.rest.find.course(course) if role: role = self.rest.find.role(course, role) if group: group = self.rest.find.group(course, group) return group, role def _parse_csv_users(self, file=None) -> list: def _parse_csv_users(self, file=None) -> list: fields = ['username', 'uco', 'email', 'name'] fields = ['username', 'uco', 'email', 'name'] Loading @@ -217,9 +229,22 @@ class DataManagement(object): reader = csv.DictReader(f, fieldnames=fields) reader = csv.DictReader(f, fieldnames=fields) return __read_users(reader) return __read_users(reader) def _add_users_to_course(self, created_users, role: Role, group: Group): def _add_users_to_course(self, created_users, course, role, group): for user in created_users: for user in created_users: self.add_user_to_course(user, course, role, group) def promote_user(self, name): with self.app.app_context(): user = self.rest.find.user(name) user.is_admin = True self.rest.users.write_entity(user) def add_user_to_course(self, user, course, role, group=None): user = self.rest.find.user(user) group, role = self._get_role_group_instance(course, group, role) if role: if role: self.rest.roles(role).add_client(user) self.rest.roles(role).add_client(user) if group: if group: self.rest.groups(group).add_user(user) self.rest.groups(group).add_user(user) Loading
app.py +26 −1 Original line number Original line Diff line number Diff line Loading @@ -81,6 +81,13 @@ def cli_users_set_password(name, password): manager.update_users_password(name, password) manager.update_users_password(name, password) @users_cli.command('promote', help='Promote user to the admin') @click.argument('name') def cli_users_promote(name): log.info(f"[CMD] Promote user to admin: {name}") manager.promote_user(name) @users_cli.command('add-secret', help='Adds secret for the user') @users_cli.command('add-secret', help='Adds secret for the user') @click.argument('name') @click.argument('name') @click.option('-s', '--secret', help='Users password', prompt=True, hide_input=True) @click.option('-s', '--secret', help='Users password', prompt=True, hide_input=True) Loading @@ -88,6 +95,7 @@ def cli_users_add_secret(name, secret): log.info(f"[CMD] Add secret for the user: {name} ({secret})") log.info(f"[CMD] Add secret for the user: {name} ({secret})") manager.add_user_secret(name, secret) manager.add_user_secret(name, secret) @users_cli.command('delete', help="Deletes user") @users_cli.command('delete', help="Deletes user") @click.argument('name') @click.argument('name') def cli_users_delete_user(name): def cli_users_delete_user(name): Loading Loading @@ -121,7 +129,7 @@ def cli_users_list(course, role, group, file): # # @courses_cli.command('create', help="Creates course with default roles") @courses_cli.command('create', help="Creates course with default roles") @click.argument('name', ) @click.argument('name') def cli_course_creates(name): def cli_course_creates(name): log.info(f"[CMD] Create Course: {name}") log.info(f"[CMD] Create Course: {name}") manager.create_course(name) manager.create_course(name) Loading @@ -133,6 +141,23 @@ def cli_courses_list(): manager.list_courses() manager.list_courses() @courses_cli.command('rm', help="Delete course") @click.argument('name') def cli_courses_rm(name): log.info(f"[CMD] Remove Course: {name}") manager.delete_course(name) @courses_cli.command('add-user', help="Add user") @click.argument('user') @click.argument('course') @click.argument('role') @click.argument('group', required=False) def cli_courses_add_user(user, course, role, group): log.info(f"[CMD] Add user {user} to course course {course} as {role} in {group}") manager.add_user_to_course(user, course, role=role, group=group) @courses_cli.command( @courses_cli.command( 'create-role', help="Creates role by it's type in the course") 'create-role', help="Creates role by it's type in the course") @click.argument('course') @click.argument('course') Loading
management/data/__init__.py +43 −18 Original line number Original line Diff line number Diff line Loading @@ -11,7 +11,7 @@ from management.data.data_dev import init_dev_data from management.data.data_prod import init_prod_data from management.data.data_prod import init_prod_data from management.data.data_test import init_test_data from management.data.data_test import init_test_data from portal import logger from portal import logger from portal.database.models import Course, Group, Role, Secret, Submission, SubmissionState, User from portal.database.models import Course, Role, Secret, Submission, SubmissionState, User from portal.service.rest import RestService from portal.service.rest import RestService from portal.tools import time from portal.tools import time Loading Loading @@ -54,6 +54,15 @@ class DataManagement(object): user = self.rest.find.user(name) user = self.rest.find.user(name) self.rest.users(user).delete() self.rest.users(user).delete() def delete_course(self, name: str): """Deletes course Args: name(str): name of the course """ with self.app.app_context(): course = self.rest.find.course(name) self.rest.courses(course).delete() def update_users_password(self, name: str, password: str) -> User: def update_users_password(self, name: str, password: str) -> User: """Updates user's password """Updates user's password Args: Args: Loading Loading @@ -186,23 +195,26 @@ class DataManagement(object): def import_users(self, file, course=None, role=None, group=None): def import_users(self, file, course=None, role=None, group=None): with self.app.app_context(): with self.app.app_context(): course = self.rest.find.course(course) if role: role = self.rest.find.role(course, role) if group: group = self.rest.find.group(course, group) users = self._parse_csv_users(file) users = self._parse_csv_users(file) created_users = [] created_users = [] for user in users: for user in users: found_user = self.rest.find.user(user['username'], throws=False) found_user = self.rest.find.user(user['username'], throws=False) if found_user: if not found_user: log.debug(f"[IMPORT] Adding user {user['username']}: {user}") found_user = self.rest.users.create(**user, admin=False) else: log.debug(f"[IMPORT] skipping already existing user {user['username']}: {user}") log.debug(f"[IMPORT] skipping already existing user {user['username']}: {user}") created_users.append(found_user) created_users.append(found_user) continue log.debug(f"[IMPORT] Adding user {user['username']}: {user}") self._add_users_to_course(created_users, course, role, group) created = self.rest.users.create(**user, admin=False) created_users.append(created) def _get_role_group_instance(self, course, group, role): self._add_users_to_course(created_users, role, group) course = self.rest.find.course(course) if role: role = self.rest.find.role(course, role) if group: group = self.rest.find.group(course, group) return group, role def _parse_csv_users(self, file=None) -> list: def _parse_csv_users(self, file=None) -> list: fields = ['username', 'uco', 'email', 'name'] fields = ['username', 'uco', 'email', 'name'] Loading @@ -217,9 +229,22 @@ class DataManagement(object): reader = csv.DictReader(f, fieldnames=fields) reader = csv.DictReader(f, fieldnames=fields) return __read_users(reader) return __read_users(reader) def _add_users_to_course(self, created_users, role: Role, group: Group): def _add_users_to_course(self, created_users, course, role, group): for user in created_users: for user in created_users: self.add_user_to_course(user, course, role, group) def promote_user(self, name): with self.app.app_context(): user = self.rest.find.user(name) user.is_admin = True self.rest.users.write_entity(user) def add_user_to_course(self, user, course, role, group=None): user = self.rest.find.user(user) group, role = self._get_role_group_instance(course, group, role) if role: if role: self.rest.roles(role).add_client(user) self.rest.roles(role).add_client(user) if group: if group: self.rest.groups(group).add_user(user) self.rest.groups(group).add_user(user)