Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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)