Verified Commit fbff1576 authored by Peter Stanko's avatar Peter Stanko
Browse files

Isd and list better implementation

parent 79494e28
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -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')
+30 −2
Original line number Diff line number Diff line
@@ -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:
@@ -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):
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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': [