def import_bundle(bundle, owner_id, course_id=None, update=True): if 'course' in bundle: course = Course.decode_json(bundle['course'], owner_id=owner_id) db.session.add(course) db.session.commit() else: course = Course.by_id(course_id) assignment_remap = {} assignments = bundle.get('assignments', []) for assignment_data in natsorted(assignments, key=lambda a: a['name']): assignment = Assignment.decode_json(assignment_data, course_id=course.id, owner_id=owner_id) assignment_remap[assignment_data['url']] = assignment.id group_remap = {} groups = bundle.get('groups', []) for group_data in natsorted(groups, key=lambda g: g['name']): group = AssignmentGroup.decode_json(group_data, course_id=course.id, owner_id=owner_id) group_remap[group_data['url']] = group.id memberships = bundle.get('memberships', []) for member_data in sorted(memberships, key=sorter): assignment_id = assignment_remap[member_data['assignment_url']] group_id = group_remap[member_data['assignment_group_url']] member = AssignmentGroupMembership.decode_json( member_data, assignment_id=assignment_id, assignment_group_id=group_id) return True