def grade(args): args, _ = grade_args_parser().parse_known_args(args) _check_grade(args.grade) _check_filepaths(args.attachments) if args.comment: comment = args.comment elif args.comment_file: _check_filepaths([args.comment_file]) with open(args.comment_file) as f: comment = f.read() elif args.attachments: comment = "See attached file{}.".format( "" if len(args.attachments) == 1 else "s") else: comment = None course = canvas.Course() assignment = canvas.Assignment(course) submission = canvas.Submission() student_ids = submission.student_ids if args.one: student_ids = student_ids[:1] for sub in assignment.submissions(): if sub['user_id'] in student_ids: current_grade = sub['grade'] if current_grade == grade: print('Already graded.') course.canvas.show_verification_urls( course.id, assignment.id, sub['user_id']) return for student_id in student_ids: assignment.give_feedback(student_id, args.grade, comment, args.attachments, use_post=True)
def fetch_subs(course, name, deep=False, metadata=False): path = os.path.join("subs", name) if os.path.isdir(path): assign = canvas.Assignment(course, path=path) else: assign = canvas.Assignment(course, name=name) mkdir("subs") mkdir(path) assign.cache(path) print("Fetched {} as {}.".format(name, path)) if not deep: return students = canvas.StudentList(searchdir="students").mapping for sub in assign.subs: fetch_sub(students, path, sub, metadata)
def grade(args): args, more_attachments = grade_args_parser().parse_known_args(args) args.attachments += more_attachments _check_grade(args.grade) _check_filepaths(args.attachments) if args.comment: comment = args.comment elif args.comment_file: _check_filepaths([args.comment_file]) with open(args.comment_file) as f: comment = f.read() elif args.attachments: comment = "See attached file{}.".format("" if len(args.attachments) == 1 else "s") else: comment = None course = canvas.Course() assignment = canvas.Assignment(course) submission = canvas.Submission() student_ids = submission.student_ids if args.one: student_ids = student_ids[:1] elif args.kuid is not None: users_found = _find_user(args.kuid) if len(users_found) == 1: user_id = users_found[0]['id'] student_ids = [user_id] elif len(users_found) > 1: print( "Kuid is too ambiguous! Found multiple users with the kuid {}:." .format(args.kuid)) for user in users_found: print('- id: {}, login_id: {}, kuid: {}, name: {}'.format( user['id'], user['login_id'], user['kuid'], user['name'])) sys.exit(1) else: print("Found no users with the kuid {}!".format(args.kuid)) sys.exit(1) for sub in assignment.submissions(): if sub['user_id'] in student_ids: current_grade = sub['grade'] if current_grade == grade: print('Already graded.') course.canvas.show_verification_urls(course.id, assignment.id, sub['user_id']) return for student_id in student_ids: assignment.give_feedback(student_id, args.grade, comment, args.attachments, use_post=True)
def fetch_all_subs(course): print("Fetching all assignments..") assigns = course.list_assignments() mkdir("subs") for assign in assigns: if assign['grading_type'] == 'not_graded': continue print("Fetching {}..".format(assign['name'])) assign = canvas.Assignment(course, id=assign['id']) dirname = slugify(assign.displayname.replace(os.sep, '_')) path = os.path.join("subs", dirname) mkdir(path) assign.cache(path)
def grade(args): args, remargs = grade_args_parser().parse_known_args(args) grade = _check_grade(args.grade) filepaths = _check_filepaths(remargs) message = args.message course = canvas.Course() assignment = canvas.Assignment(course) submission = canvas.Submission() for student_id in submission.student_ids: assignment.give_feedback(student_id, grade, message, filepaths, use_post=True)