Skip to content

Commit 93a1db5

Browse files
committedAug 19, 2023
Adding new API features for better exercise management (archiving, exercise admins, ref. solutions visibility).
1 parent 0f6a758 commit 93a1db5

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed
 

‎recodex/api.py

+14
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,23 @@ def set_exercise_score_config(self, exercise_id, score_config: str):
9797
def update_exercise(self, exercise_id, details):
9898
self.post('/exercises/{}'.format(exercise_id), data=details)
9999

100+
def set_exercise_archived(self, exercise_id, archived):
101+
self.post('/exercises/{}/archived'.format(exercise_id), data={"archived": archived})
102+
103+
def set_exercise_author(self, exercise_id, author):
104+
self.post('/exercises/{}/author'.format(exercise_id), data={"author": author})
105+
106+
def set_exercise_admins(self, exercise_id, admins_ids):
107+
self.post('/exercises/{}/admins'.format(exercise_id), data={"admins": admins_ids})
108+
100109
def delete_exercise(self, exercise_id):
101110
self.delete('/exercises/{}'.format(exercise_id))
102111

112+
def update_reference_solution_visibility(self, solution_id, visibility):
113+
self.post('/reference-solutions/{}/visibility'.format(solution_id), data={
114+
"visibility": visibility
115+
})
116+
103117
def delete_reference_solution_evaluation(self, evaluation_id):
104118
self.delete('/reference-solutions/evaluation/{}'.format(evaluation_id))
105119

‎recodex/plugins/exercises/cli.py

+44
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,39 @@ def set_config(api: ApiClient, exercise_id, file_name, useJson):
260260
api.update_exercise_config(exercise_id, config)
261261

262262

263+
@cli.command()
264+
@click.argument("exercise_id")
265+
@click.option("--excavate/--archive", "excavate", default=False)
266+
@pass_api_client
267+
def set_archived(api: ApiClient, exercise_id, excavate):
268+
"""
269+
Set the archived flag of an exercise (put it into archived mode or excavate from archive).
270+
"""
271+
api.set_exercise_archived(exercise_id, not excavate)
272+
273+
274+
@cli.command()
275+
@click.argument("exercise_id")
276+
@click.argument("author")
277+
@pass_api_client
278+
def set_author(api: ApiClient, exercise_id, author):
279+
"""
280+
Change the author of the exercise.
281+
"""
282+
api.set_exercise_author(exercise_id, author)
283+
284+
285+
@cli.command()
286+
@click.argument("exercise_id")
287+
@click.option('--admin', '-a', multiple=True)
288+
@pass_api_client
289+
def set_admins(api: ApiClient, exercise_id, admin):
290+
"""
291+
Set exercise admins (replaces current list of admins).
292+
"""
293+
api.set_exercise_admins(exercise_id, admin)
294+
295+
263296
@cli.command()
264297
@click.option('--stats', is_flag=True)
265298
@pass_api_client
@@ -321,3 +354,14 @@ def tags_remove_global(api: ApiClient, tag):
321354
"""
322355
res = api.exercise_tags_remove_global(tag)
323356
click.echo("{} exercise(s) affected".format(res["count"]))
357+
358+
359+
@cli.command()
360+
@click.argument("ref_solution_id")
361+
@click.argument("visibility")
362+
@pass_api_client
363+
def set_ref_solution_visibility(api: ApiClient, ref_solution_id, visibility):
364+
"""
365+
Change visibility of a reference solution.
366+
"""
367+
api.update_reference_solution_visibility(ref_solution_id, int(visibility))

‎setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name='recodex-cli',
5-
version='0.0.19',
5+
version='0.0.20',
66
description='ReCodEx CLI',
77
long_description='A command line frontend to the ReCodEx programmer evaluation system',
88
classifiers=[

0 commit comments

Comments
 (0)
Please sign in to comment.