def import_endpoint(): user = load_api_user() course_id = request.json.get('course_id') if course_id is None: abort(400, "You need to specify the course_id") assignments = request.json.get('assignments', []) for assignment in assignments: assignment = Assignment.by_url(assignment['url']) if not user.is_instructor(assignment.course_id): return abort(400, "Not an instructor in this assignments' course.") groups = request.json.get('groups', []) for group in groups: group = Assignment.by_url(group['url']) if not user.is_instructor(group.course_id): return abort(400, "Not an instructor in this assignments' course.") # TODO: Verify that memberships are all attached to a group owned by this user import_bundle(request.json, owner_id=user.id, course_id=course_id) return jsonify(success=True)
def get_existing(cls, data): group_url = data['assignment_group_url'] assignment_url = data['assignment_url'] assignment = Assignment.by_url(assignment_url) group = AssignmentGroup.by_url(group_url) if not assignment or not group: return None return (AssignmentGroupMembership.query.filter_by( assignment_group_id=group.id, assignment_id=assignment.id).first())
def export(): user = load_api_user() assignment_url = request.json.get("assignment_url") assignment_id = request.json.get("assignment_id") if assignment_id or assignment_url: if assignment_url: assignment = Assignment.by_url(assignment_url) else: assignment = Assignment.by_id(assignment_id) check_resource_exists(assignment, "Assignment", assignment_id or assignment_url) if not user.is_instructor(assignment.course_id): return abort(400, "Not an instructor in this assignments' course.") return json.dumps(export_bundle(assignments=[assignment])) group_id = request.json.get("assignment_group_id") if group_id: assignment_group = AssignmentGroup.by_id(group_id) assignments = assignment_group.get_assignments() memberships = assignment_group.get_memberships() if not user.is_instructor(assignment_group.course_id): return abort( 400, "Not an instructor in this assignment group's course.") for assignment in assignments: if not user.is_instructor(assignment.course_id): return abort(400, "Not an instructor in this assignments' course.") bundle = export_bundle(groups=[assignment_group], assignments=assignments, memberships=memberships) return json.dumps(bundle) course_id = request.json.get("course_id") if course_id: if not user.is_instructor(course_id): return abort(400, "Not an instructor in this course.") course = Course.by_id(course_id) groups = course.get_assignment_groups() assignment_and_memberships = course.get_assignments() assignments = [a for a, m in assignment_and_memberships] memberships = [m for a, m in assignment_and_memberships] bundle = export_bundle(groups=groups, assignments=assignments, memberships=memberships) return json.dumps(bundle) abort(400, "No assignment_id or assignment_group_id given")