Skip to content

Commit

Permalink
feat: exam events for exams IDA (#268)
Browse files Browse the repository at this point in the history
  • Loading branch information
ilee2u authored Oct 2, 2023
1 parent fb09ce0 commit b36ea94
Show file tree
Hide file tree
Showing 13 changed files with 641 additions and 1 deletion.
6 changes: 6 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ Changed
~~~~~~~
* Re-licensed this repository from AGPL 3.0 to Apache 2.0

[8.7.0] - 2023-09-29
--------------------
Added
~~~~~
* Added new ``EXAM_ATTEMPT_SUBMITTED``, ``EXAM_ATTEMPT_REJECTED``, ``EXAM_ATTEMPT_VERIFIED``, ``EXAM_ATTEMPT_RESET``, and ``EXAM_ATTEMPT_ERRORED`` in learning.

[8.6.0] - 2023-08-28
--------------------
Added
Expand Down
51 changes: 51 additions & 0 deletions docs/decisions/0013-special-exam-submission-and-review-events.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
12. Event definitions for special exam post-submission and review
#################################################################

Status
******

**Draft** 2023-10-02

Context
*******

About Special Exams:
====================
* Course subsections that have an `exam_type` have additional logic that governs completion, grading, credit requirements, and more based on the `exam_type` value (e.g. timed, proctored, etc).
* These subsections are also known as **Special Exams**.
* NOTE: The events described in this document will only be produced/consumed in the context of **Special Exams**.
* Course subsections that do not have an `exam_type` configured may still have a grading policy named 'Exam'. This type of content does not have the exam user experience and is not governed by any exam specific logic.

The New Exams IDA:
==================
* A new backend for exams called `edx-exams` is being developed (See the `exams IDA ADR <https://github.com/openedx/edx-proctoring/blob/master/docs/decisions/0004-exam-ida.rst>`_ for more info).
* We are currently working to use the event bus to trigger the downstream effects whenever an exam attempt is submitted or reviewed.
* For example, when an exam attempt is submitted, we will want to make sure `edx-platform` knows to mark the exam subsection as completed.


Decision
********

Where these events will be produced/consumed:
=============================================

* `edx-exams` will produce these events.
* NOTE: There is no plan to have the legacy exams backend, `edx-proctoring`, produce these events.
* `edx-platform` will consume these events in order to handle all behavior as it pertains to the state of an exam subsection.

Event Definitions:
==================
* We will define the events that as planned in `the ADR for events in edx-exams <https://github.com/edx/edx-exams/blob/main/docs/decisions/0004-downstream-effect-events.rst>`_.

Note on the Event Data/Signal Names:
====================================
We are using the prefix "Exam" as opposed to the prefix "Special_Exam" for these events because **Special Exams** will likely be the only type of exam that will be of concern to developers in the context of events for the forseeable future.


Consequences
************

* `edx-exams` will emit events via the event bus to send information without needing a response.
* Since, `edx-exams` already recieves and responds to REST requests, we will avoid creating circular dependencies because `edx-exams` will not need to send REST requests itself.
* These events are dynamic, in that they can also be consumed by other services/applications as needed in the future.

1 change: 1 addition & 0 deletions docs/decisions/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ Architectural Decision Records (ADRs)
0010-multiple-event-types-per-topic
0011-depending-on-multiple-event-bus-implementations
0012-producing-to-event-bus-via-settings
0013-special-exam-submission-and-review-events
2 changes: 1 addition & 1 deletion openedx_events/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
more information about the project.
"""

__version__ = "8.6.0"
__version__ = "8.7.0"
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{
"name": "CloudEvent",
"type": "record",
"doc": "Avro Event Format for CloudEvents created with openedx_events/schema",
"fields": [
{
"name": "exam_attempt",
"type": {
"name": "ExamAttemptData",
"type": "record",
"fields": [
{
"name": "student_user",
"type": {
"name": "UserData",
"type": "record",
"fields": [
{
"name": "id",
"type": "long"
},
{
"name": "is_active",
"type": "boolean"
},
{
"name": "pii",
"type": {
"name": "UserPersonalData",
"type": "record",
"fields": [
{
"name": "username",
"type": "string"
},
{
"name": "email",
"type": "string"
},
{
"name": "name",
"type": "string"
}
]
}
}
]
}
},
{
"name": "course_key",
"type": "string"
},
{
"name": "usage_key",
"type": "string"
},
{
"name": "exam_type",
"type": "string"
},
{
"name": "requesting_user",
"type": [
"null",
"UserData"
],
"default": null
}
]
}
}
],
"namespace": "org.openedx.learning.exam.attempt.errored.v1"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{
"name": "CloudEvent",
"type": "record",
"doc": "Avro Event Format for CloudEvents created with openedx_events/schema",
"fields": [
{
"name": "exam_attempt",
"type": {
"name": "ExamAttemptData",
"type": "record",
"fields": [
{
"name": "student_user",
"type": {
"name": "UserData",
"type": "record",
"fields": [
{
"name": "id",
"type": "long"
},
{
"name": "is_active",
"type": "boolean"
},
{
"name": "pii",
"type": {
"name": "UserPersonalData",
"type": "record",
"fields": [
{
"name": "username",
"type": "string"
},
{
"name": "email",
"type": "string"
},
{
"name": "name",
"type": "string"
}
]
}
}
]
}
},
{
"name": "course_key",
"type": "string"
},
{
"name": "usage_key",
"type": "string"
},
{
"name": "exam_type",
"type": "string"
},
{
"name": "requesting_user",
"type": [
"null",
"UserData"
],
"default": null
}
]
}
}
],
"namespace": "org.openedx.learning.exam.attempt.rejected.v1"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{
"name": "CloudEvent",
"type": "record",
"doc": "Avro Event Format for CloudEvents created with openedx_events/schema",
"fields": [
{
"name": "exam_attempt",
"type": {
"name": "ExamAttemptData",
"type": "record",
"fields": [
{
"name": "student_user",
"type": {
"name": "UserData",
"type": "record",
"fields": [
{
"name": "id",
"type": "long"
},
{
"name": "is_active",
"type": "boolean"
},
{
"name": "pii",
"type": {
"name": "UserPersonalData",
"type": "record",
"fields": [
{
"name": "username",
"type": "string"
},
{
"name": "email",
"type": "string"
},
{
"name": "name",
"type": "string"
}
]
}
}
]
}
},
{
"name": "course_key",
"type": "string"
},
{
"name": "usage_key",
"type": "string"
},
{
"name": "exam_type",
"type": "string"
},
{
"name": "requesting_user",
"type": [
"null",
"UserData"
],
"default": null
}
]
}
}
],
"namespace": "org.openedx.learning.exam.attempt.reset.v1"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{
"name": "CloudEvent",
"type": "record",
"doc": "Avro Event Format for CloudEvents created with openedx_events/schema",
"fields": [
{
"name": "exam_attempt",
"type": {
"name": "ExamAttemptData",
"type": "record",
"fields": [
{
"name": "student_user",
"type": {
"name": "UserData",
"type": "record",
"fields": [
{
"name": "id",
"type": "long"
},
{
"name": "is_active",
"type": "boolean"
},
{
"name": "pii",
"type": {
"name": "UserPersonalData",
"type": "record",
"fields": [
{
"name": "username",
"type": "string"
},
{
"name": "email",
"type": "string"
},
{
"name": "name",
"type": "string"
}
]
}
}
]
}
},
{
"name": "course_key",
"type": "string"
},
{
"name": "usage_key",
"type": "string"
},
{
"name": "exam_type",
"type": "string"
},
{
"name": "requesting_user",
"type": [
"null",
"UserData"
],
"default": null
}
]
}
}
],
"namespace": "org.openedx.learning.exam.attempt.submitted.v1"
}
Loading

0 comments on commit b36ea94

Please sign in to comment.