Files
edx-platform/lms/djangoapps/discussion/signals/handlers.py
edX requirements bot f33f12bbea BOM-2358 : Pyupgrade in dashboard, debug, discussion apps (#26529)
* Python code cleanup by the cleanup-python-code Jenkins job.

This pull request was generated by the cleanup-python-code Jenkins job, which ran
```
cd lms/djangoapps/dashboard; find . -type f -name '*.py' | while read fname; do sed -i 's/  # lint-amnesty, pylint: disable=super-with-arguments//; s/  # lint-amnesty, pylint: disable=import-error, wrong-import-order//; s/  # lint-amnesty, pylint: disable=wrong-import-order//' "$fname"; done; find . -type f -name '*.py' | while read fname; do pyupgrade --exit-zero-even-if-changed --py3-plus --py36-plus --py38-plus "$fname"; done; isort --recursive .
```

The following packages were installed:
`pyupgrade,isort`

* feedback done

Co-authored-by: Zulqarnain <muhammad.zulqarnain@arbisoft.com>
2021-02-22 15:42:21 +05:00

79 lines
2.9 KiB
Python

"""
Signal handlers related to discussions.
"""
import logging
from django.conf import settings
from django.dispatch import receiver
from opaque_keys.edx.locator import LibraryLocator
from lms.djangoapps.discussion import tasks
from openedx.core.djangoapps.django_comment_common import signals
from openedx.core.djangoapps.site_configuration.models import SiteConfiguration
from openedx.core.djangoapps.theming.helpers import get_current_site
from xmodule.modulestore.django import SignalHandler
log = logging.getLogger(__name__)
ENABLE_FORUM_NOTIFICATIONS_FOR_SITE_KEY = 'enable_forum_notifications'
@receiver(SignalHandler.course_published)
def update_discussions_on_course_publish(sender, course_key, **kwargs): # pylint: disable=unused-argument
"""
Catches the signal that a course has been published in the module
store and creates/updates the corresponding cache entry.
Ignores publish signals from content libraries.
"""
if isinstance(course_key, LibraryLocator):
return
context = {
'course_id': str(course_key),
}
tasks.update_discussions_map.apply_async(
args=[context],
countdown=settings.DISCUSSION_SETTINGS['COURSE_PUBLISH_TASK_DELAY'],
)
@receiver(signals.comment_created)
def send_discussion_email_notification(sender, user, post, **kwargs): # lint-amnesty, pylint: disable=missing-function-docstring, unused-argument
current_site = get_current_site()
if current_site is None:
log.info('Discussion: No current site, not sending notification about post: %s.', post.id)
return
try:
if not current_site.configuration.get_value(ENABLE_FORUM_NOTIFICATIONS_FOR_SITE_KEY, False):
log_message = 'Discussion: notifications not enabled for site: %s. Not sending message about post: %s.'
log.info(log_message, current_site, post.id)
return
except SiteConfiguration.DoesNotExist:
log_message = 'Discussion: No SiteConfiguration for site %s. Not sending message about post: %s.'
log.info(log_message, current_site, post.id)
return
send_message(post, current_site)
def send_message(comment, site): # lint-amnesty, pylint: disable=missing-function-docstring
thread = comment.thread
context = {
'course_id': str(thread.course_id),
'comment_id': comment.id,
'comment_body': comment.body,
'comment_author_id': comment.user_id,
'comment_created_at': comment.created_at, # comment_client models dates are already serialized
'thread_id': thread.id,
'thread_title': thread.title,
'thread_author_id': thread.user_id,
'thread_created_at': thread.created_at, # comment_client models dates are already serialized
'thread_commentable_id': thread.commentable_id,
'site_id': site.id
}
tasks.send_ace_message.apply_async(args=[context])