""" Store status messages in the database. """ from config_models.admin import ConfigurationModelAdmin from config_models.models import ConfigurationModel from django.contrib import admin from django.core.cache import cache from django.db import models from opaque_keys.edx.django.models import CourseKeyField from openedx.core.djangolib.markup import HTML class GlobalStatusMessage(ConfigurationModel): """ Model that represents the current status message. .. no_pii: """ message = models.TextField( blank=True, null=True, help_text='
The contents of this field will be displayed as HTML in a warning banner on all views.
' 'To override the banner message for a specific course, refer to the Course Message configuration. ' # lint-amnesty, pylint: disable=line-too-long 'Course Messages will only work if the global status message is enabled, so if you only want to add ' 'a banner to specific courses without adding a global status message, you should add a global status ' # lint-amnesty, pylint: disable=line-too-long 'message with empty message text.
' 'Finally, disable the global status message by adding another empty message with "enabled" ' 'unchecked.
') def full_message(self, course_key): """ Returns the full status message, including any course-specific status messages. """ cache_key = f"status_message.{str(course_key)}" if cache.get(cache_key): return cache.get(cache_key) msg = self.message if course_key: try: course_home_message = self.coursemessage_set.get(course_key=course_key) # Don't override the message if course_home_message is blank. if course_home_message: msg = HTML("{}