Loading kontrctl/commands/submissions.py +12 −5 Original line number Diff line number Diff line Loading @@ -19,17 +19,24 @@ def remove_none(**params): @cli_submissions.command('list', help='List all submissions') @click.option('-r', '--remote', required=False, help='Sets remote') @click.option('-c', '--y', required=False, help='Sets course') @click.option('-c', '--course', required=False, help='Sets course') @click.option('-p', '--project', required=False, help='Sets project') @click.option('-p', '--user', required=False, help='Sets user') @click.option('-u', '--user', required=False, help='Sets user') @click.option('-i', '--ids', required=False, is_flag=True, help='Get just ids') @click.option('-s', '--state', required=False, help='Get submissions by state') @click.option('-R', '--result', required=False, help='Get submissions by result') @click.option('-P', '--points', required=False, help='Get points by expression (example: p > 3.0)') @click.option('-C','--cols', required=False, help='Show just provided columns, separator is ;') @click.option('--t-format', required=False, help='Table formats (default simple), look at the tabular projects for more') @click.pass_obj def cli_submissions_list(obj: AppConfig, remote, **kwargs): def cli_submissions_list(obj: AppConfig, remote=None, **kwargs): params = remove_none(**kwargs) remote: Remote = helpers.get_remote(obj, remote) submissions = remote.kontr_client.submissions.list(params=params) submissions = remote.kontr_client.submissions.list(params=kwargs) params = ['id', 'result', 'points', 'state', 'user.username', 'course.codename', 'project.codename'] helpers.generic_list(submissions, params=params) submissions = helpers.filter_submissions(submissions, **kwargs) helpers.generic_list(submissions, options=kwargs, params=params) @cli_submissions.command('read', help='Get a submission info') Loading kontrctl/utils/helpers.py +30 −2 Original line number Diff line number Diff line Loading @@ -230,7 +230,13 @@ def generic_list_projects(client, codename): generic_list(entity['projects'], __trans, headers=headers) def generic_list(data_list, params=None, t_func=None, headers=None): def _print_ids(data): for item in data: print(item['id']) def generic_list(data_list, params=None, options=None, t_func=None, headers=None): def __default_trans(item): res = [] for param in params: Loading @@ -241,13 +247,22 @@ def generic_list(data_list, params=None, t_func=None, headers=None): res.append(nested_get(elem, key)) return res if options and options['cols']: params = options['cols'].split(';') if not t_func: t_func = __default_trans if not headers: headers = [param.upper().replace('.', ' ') for param in params] data = data_transform(data_list, t_func) print(tabulate(data, headers=headers)) if options and (options['ids']): _print_ids(data_list) return format = 'simple' if not options or not options['t_format'] else options['t_format'] print(tabulate(data, headers=headers, tablefmt=format)) def get_any_client(remote: Remote, user, worker): Loading @@ -270,3 +285,16 @@ def nested_get(input_dict, nested_key): if internal_dict_value is None: return None return internal_dict_value def filter_submissions(submissions, points=None, result=None, state=None, **kwargs): res = [] for subm in submissions: if result and subm['result'] != result: continue if points and not eval(points, None, dict(p=subm['points'])): continue if state and subm['state'] != state: continue res.append(subm) return res No newline at end of file setup.py +1 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ from kontrctl.version import KONTRCTL_VERSION with open("README.md", "r") as fh: long_description = fh.read() requirements = [ 'click', 'kontr-api' ] requirements = [ 'click', 'kontr-api', 'tabulate' ] extras = { 'dev': [ Loading Loading
kontrctl/commands/submissions.py +12 −5 Original line number Diff line number Diff line Loading @@ -19,17 +19,24 @@ def remove_none(**params): @cli_submissions.command('list', help='List all submissions') @click.option('-r', '--remote', required=False, help='Sets remote') @click.option('-c', '--y', required=False, help='Sets course') @click.option('-c', '--course', required=False, help='Sets course') @click.option('-p', '--project', required=False, help='Sets project') @click.option('-p', '--user', required=False, help='Sets user') @click.option('-u', '--user', required=False, help='Sets user') @click.option('-i', '--ids', required=False, is_flag=True, help='Get just ids') @click.option('-s', '--state', required=False, help='Get submissions by state') @click.option('-R', '--result', required=False, help='Get submissions by result') @click.option('-P', '--points', required=False, help='Get points by expression (example: p > 3.0)') @click.option('-C','--cols', required=False, help='Show just provided columns, separator is ;') @click.option('--t-format', required=False, help='Table formats (default simple), look at the tabular projects for more') @click.pass_obj def cli_submissions_list(obj: AppConfig, remote, **kwargs): def cli_submissions_list(obj: AppConfig, remote=None, **kwargs): params = remove_none(**kwargs) remote: Remote = helpers.get_remote(obj, remote) submissions = remote.kontr_client.submissions.list(params=params) submissions = remote.kontr_client.submissions.list(params=kwargs) params = ['id', 'result', 'points', 'state', 'user.username', 'course.codename', 'project.codename'] helpers.generic_list(submissions, params=params) submissions = helpers.filter_submissions(submissions, **kwargs) helpers.generic_list(submissions, options=kwargs, params=params) @cli_submissions.command('read', help='Get a submission info') Loading
kontrctl/utils/helpers.py +30 −2 Original line number Diff line number Diff line Loading @@ -230,7 +230,13 @@ def generic_list_projects(client, codename): generic_list(entity['projects'], __trans, headers=headers) def generic_list(data_list, params=None, t_func=None, headers=None): def _print_ids(data): for item in data: print(item['id']) def generic_list(data_list, params=None, options=None, t_func=None, headers=None): def __default_trans(item): res = [] for param in params: Loading @@ -241,13 +247,22 @@ def generic_list(data_list, params=None, t_func=None, headers=None): res.append(nested_get(elem, key)) return res if options and options['cols']: params = options['cols'].split(';') if not t_func: t_func = __default_trans if not headers: headers = [param.upper().replace('.', ' ') for param in params] data = data_transform(data_list, t_func) print(tabulate(data, headers=headers)) if options and (options['ids']): _print_ids(data_list) return format = 'simple' if not options or not options['t_format'] else options['t_format'] print(tabulate(data, headers=headers, tablefmt=format)) def get_any_client(remote: Remote, user, worker): Loading @@ -270,3 +285,16 @@ def nested_get(input_dict, nested_key): if internal_dict_value is None: return None return internal_dict_value def filter_submissions(submissions, points=None, result=None, state=None, **kwargs): res = [] for subm in submissions: if result and subm['result'] != result: continue if points and not eval(points, None, dict(p=subm['points'])): continue if state and subm['state'] != state: continue res.append(subm) return res No newline at end of file
setup.py +1 −1 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ from kontrctl.version import KONTRCTL_VERSION with open("README.md", "r") as fh: long_description = fh.read() requirements = [ 'click', 'kontr-api' ] requirements = [ 'click', 'kontr-api', 'tabulate' ] extras = { 'dev': [ Loading