Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add event for course wide notification request #285

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ Change Log
Unreleased
----------

[9.2.0] - 2023-11-16
--------------------
Added
~~~~~~~
* Added new COURSE_NOTIFICATION_REQUESTED event in learning

[9.1.0] - 2023-11-07
--------------------
Added
Expand Down
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__ = "9.1.0"
__version__ = "9.2.0"
50 changes: 47 additions & 3 deletions openedx_events/learning/data.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,12 +243,12 @@ class UserNotificationData:
Attributes defined for Open edX User Notification data object.

Arguments:
user_ids (List(int)): identifier of the user to which the notification belongs.
user_ids (List(int)): identifier of the users to which the notification belongs.
notification_type (str): type of the notification.
context (dict): additional structured information about the context in
which this topic is used, such as the section, subsection etc.
content_url (str): url of the content.
app_name (str): name of the app.
course_key (str): identifier of the Course object.
context (dict): additional structured information about the context of the notification.
saadyousafarbi marked this conversation as resolved.
Show resolved Hide resolved
"""

user_ids = attr.ib(type=List[int])
Expand Down Expand Up @@ -425,3 +425,47 @@ class DiscussionThreadData:
user_course_roles = attr.ib(type=List[str], factory=list)
user_forums_roles = attr.ib(type=List[str], factory=list)
options = attr.ib(type=dict, factory=dict)


@attr.s(frozen=True)
class CourseNotificationData:
"""
Attributes defined for Open edX Course Notification data object.

Arguments:
course_key (str): identifier of the Course object.
app_name (str): name of the app requesting the course notification.
notification_type (str): type of the notification.
content_url (str): url of the content the notification will redirect to.
content_context (dict): additional information related to the content of the notification.
Notification content templates are defined in edx-platform here:
https://github.com/openedx/edx-platform/blob/master/openedx/core/djangoapps/notifications/base_notification.py#L10

Example of content_context for a discussion notification (new_comment_on_response):

{
...,
"content_context": {
"post_title": "Post Title",
"replier_name": "test_user",
}

audience_filters (dict): additional information related to the audience of the notification.
We can have different filters on course level, such as roles, enrollments, cohorts etc.

Example of audience_filters for a discussion notification (new_discussion_post):

{
...,
"audience_filters": {
"enrollment": ["verified", "audit"],
"role": ["discussion admin", "discussion moderator"],
}
"""

course_key = attr.ib(type=CourseKey)
app_name = attr.ib(type=str)
notification_type = attr.ib(type=str)
content_url = attr.ib(type=str)
content_context = attr.ib(type=dict, factory=dict)
audience_filters = attr.ib(type=dict, factory=dict)
saadyousafarbi marked this conversation as resolved.
Show resolved Hide resolved
17 changes: 16 additions & 1 deletion openedx_events/learning/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
CohortData,
CourseDiscussionConfigurationData,
CourseEnrollmentData,
CourseNotificationData,
DiscussionThreadData,
ExamAttemptData,
ManageStudentsPermissionData,
Expand Down Expand Up @@ -188,7 +189,7 @@
)

# .. event_type: org.openedx.learning.user.notification.requested.v1
# .. event_name: USER_NOTIFICATION
# .. event_name: USER_NOTIFICATION_REQUESTED
# .. event_description: Can be fired from apps to send user notifications.
# .. event_data: UserNotificationSendListData
# Warning: This event is currently incompatible with the event bus, list/dict cannot be serialized yet
Expand Down Expand Up @@ -312,3 +313,17 @@
"thread": DiscussionThreadData,
}
)


# .. event_type: org.openedx.learning.course.notification.requested.v1
# .. event_name: COURSE_NOTIFICATION_REQUESTED
# .. event_description: Emitted when a notification is requested for a course
# .. event_data: CourseNotificationData
# Warning: This event is currently incompatible with the event bus, list/dict cannot be serialized yet
#
COURSE_NOTIFICATION_REQUESTED = OpenEdxPublicSignal(
event_type="org.openedx.learning.course.notification.requested.v1",
data={
"course_notification_data": CourseNotificationData,
}
)
1 change: 1 addition & 0 deletions openedx_events/tooling.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"org.openedx.learning.thread.created.v1",
"org.openedx.learning.response.created.v1",
"org.openedx.learning.comment.created.v1",
"org.openedx.learning.course.notification.requested.v1",
]


Expand Down