Files
edx-platform/lms/djangoapps/ora_staff_grader/mock/utils.py
Nathan Sprenkle 1212e3550c feat: ora staff grader backend (#29828)
- Adds Enhanced Staff Grader (ESG) backend-for-frontend (BFF) in `lms/djangoapps/ora_staff_grader`
    - Adds routing to ESG BFF at `{lms_url}/api/ora_staff_grader/*`
    - Adds mock implementation routing at `{lms_url}/api/ora_staff_grader/mock/*`
    - Adds `ORA_GRADING_MICROFRONTEND_URL` setting for routing to ESG microfrontend (MFE)
- Updates to the teams app:
    - Add`get_teams_in_teamset` to the teams API.
    - Add `get_team_names` to teams service.
- Adds `openassessment.staffgrader` app for appropriate ORA migrations.
- Modifies management commands for creation of users.
- Updates test factory to return display org with course overview.

Co-authored-by: jansenk <jkantor@edx.org>
Co-authored-by: Leangseu Kim <lkim@edx.org>
Co-authored-by: Ben Warzeski <bwarzeski@edx.org>
2022-01-31 11:09:41 -05:00

80 lines
2.5 KiB
Python

"""
Mocking/testing utils for ESG
"""
import json
from os import path
DATA_ROOT = "/edx/app/edxapp/edx-platform/lms/djangoapps/ora_staff_grader/mock/data"
def read_data_file(file_name):
"""Return data from a JSON file in the /data dir"""
with open(path.join(DATA_ROOT, file_name), "r") as data_file:
return json.load(data_file)
def update_data_file(file_name, update_key_path, update_value):
"""
Update a single key/value within a JSON file
params:
- file_name: string path of file relative to DATA_ROOT
- update_key_path: array-like list of keys to traverse, necessary for editing multiple levels down in hierarchy
"""
update_data = read_data_file(file_name)
# Adapted from https://ipindersinghsuri.medium.com/updating-dynamic-nested-dictionary-in-python-92f5afbd1755
def get_updated_dict(dict_to_update, key_list, value):
obj = dict_to_update
for k in key_list[:-1]:
obj = obj[k]
obj[key_list[-1]] = value
get_updated_dict(update_data, update_key_path, update_value)
with open(path.join(DATA_ROOT, file_name), "w") as data_file:
json.dump(update_data, data_file, indent=4)
def get_course_metadata(ora_location):
"""Get course metadata, indexed by ORA block location"""
return read_data_file("course_metadata.json")[ora_location]
def get_ora_metadata(ora_location):
"""Get ORA metadata, indexed by ORA block location"""
return read_data_file("ora_metadata.json")[ora_location]
def get_submissions(ora_location): # pylint: disable=unused-argument
"""Get Submission list, scoped by ORA block location"""
submissions = read_data_file("submissions.json")[ora_location]
# For the list view, we don't return grade data
# pylint: disable=unused-variable
for (submission_id, submission) in submissions.items():
submission.pop("gradeData")
return submissions
def fetch_submission(ora_location, submission_id):
"""Fetch an individual submission, indexed first by ORA block location then Submission ID"""
return read_data_file("submissions.json")[ora_location].get(submission_id)
def fetch_response(submission_id): # pylint: disable=unused-argument
"""Return a default response, the same for all submissions"""
return read_data_file("responses.json").get(submission_id)
def save_submission_update(ora_location, submission):
"""Update a submission key with new data"""
update_data_file(
"submissions.json", [ora_location, submission["submissionUUID"]], submission
)