Skip to content

Commit

Permalink
feat: remove duplicate workflow lookups
Browse files Browse the repository at this point in the history
Previously, anything that requested a workflow would cause a workflow
update and refresh. This changes that logic to:
1. Only init workflow API once through load of ORA block (reloaded each
time the page / ORA MFE load).
2. On load, update workflow.
3. Calls for workflow info reference cached workflow.
4. Try to update workflow when none found.

Note we can still  manually refresh workflow info with either
get_workflow_info or update_workflow_status.
  • Loading branch information
nsprenkle committed Dec 1, 2023
1 parent 9a30eca commit 4e13185
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 8 deletions.
2 changes: 1 addition & 1 deletion openassessment/xblock/apis/ora_data_accessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def submission_data(self):

@property
def workflow_data(self):
return WorkflowAPI(self._block)
return self._block.workflow_data

@property
def grades_data(self):
Expand Down
31 changes: 25 additions & 6 deletions openassessment/xblock/apis/workflow_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,28 @@ class WorkflowAPI:
def __init__(self, block):
self._block = block
self.grades = self._block.grades_data
self._workflow = self._block.get_workflow_info()

def get_workflow_info(self, submission_uuid=None):
return self._block.get_workflow_info(submission_uuid)
"""
Update workflow info and return workflow for the submission.
NOTE - calls workflow update
"""
self._workflow = self._block.get_workflow_info(submission_uuid)
return self._workflow

@property
def workflow(self):
return self.get_workflow_info()
"""
Getter for workflow, used to keep us from updating workflow every time
we ask for info.
NOTE - when there isn't a workflow, this will try to refresh workflow.
"""
if not self._workflow:
return self.get_workflow_info()
return self._workflow

@property
def has_workflow(self):
Expand All @@ -34,6 +49,11 @@ def has_status(self):
def status_details(self):
return self.workflow.get("status_details", {})

@property
def status(self):
if self.workflow:
return self.workflow.get("status")

def has_reached_given_step(self, requested_step, current_workflow_step=None):
"""
Helper to determine if are far enough through a workflow to request data for a step.
Expand Down Expand Up @@ -102,10 +122,6 @@ def submission_uuid(self):
def workflow_requirements(self):
return self._block.workflow_requirements()

@property
def status(self):
return self.workflow.get("status")

@property
def has_received_grade(self):
return bool(self.workflow.get('score'))
Expand All @@ -120,6 +136,9 @@ def get_course_workflow_settings(self):
return self._block.get_course_workflow_settings()

def update_workflow_status(self, submission_uuid=None):
"""
NOTE - calls workflow update.
"""
self._block.update_workflow_status(submission_uuid)

def create_workflow(self, submission_uuid):
Expand Down
7 changes: 6 additions & 1 deletion openassessment/xblock/openassessmentblock.py
Original file line number Diff line number Diff line change
Expand Up @@ -293,9 +293,14 @@ class OpenAssessmentBlock(
def config_data(self):
return ORAConfigAPI(self)

_workflow_data = None

@property
def workflow_data(self):
return WorkflowAPI(self)
# Initialize Workflow API only once
if not self._workflow_data:
self._workflow_data = WorkflowAPI(self)
return self._workflow_data

@property
def submission_data(self):
Expand Down

0 comments on commit 4e13185

Please sign in to comment.