Merge pull request #16598 from edx/thallada/ret-emulate-request-default-middleware
Default middleware_classes in emulate_http_request
This commit is contained in:
@@ -6,7 +6,6 @@ import logging
|
||||
from urlparse import urljoin
|
||||
|
||||
from celery import task
|
||||
from crum import CurrentRequestUserMiddleware
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.sites.models import Site
|
||||
@@ -22,7 +21,6 @@ import lms.lib.comment_client as cc
|
||||
|
||||
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
||||
from openedx.core.djangoapps.schedules.template_context import get_base_template_context
|
||||
from openedx.core.djangoapps.theming.middleware import CurrentSiteThemeMiddleware
|
||||
from openedx.core.lib.celery.task_utils import emulate_http_request
|
||||
|
||||
|
||||
@@ -44,11 +42,7 @@ def send_ace_message(context):
|
||||
if _should_send_message(context):
|
||||
context['site'] = Site.objects.get(id=context['site_id'])
|
||||
thread_author = User.objects.get(id=context['thread_author_id'])
|
||||
middleware_classes = [
|
||||
CurrentRequestUserMiddleware,
|
||||
CurrentSiteThemeMiddleware,
|
||||
]
|
||||
with emulate_http_request(site=context['site'], user=thread_author, middleware_classes=middleware_classes):
|
||||
with emulate_http_request(site=context['site'], user=thread_author):
|
||||
message_context = _build_message_context(context)
|
||||
message = ResponseNotification().personalize(
|
||||
Recipient(thread_author.username, thread_author.email),
|
||||
|
||||
@@ -222,12 +222,8 @@ class TaskTestCase(ModuleStoreTestCase):
|
||||
|
||||
def _assert_rendered_email(self, message):
|
||||
# check that we can actually render the message
|
||||
middleware_classes = [
|
||||
CurrentRequestUserMiddleware,
|
||||
CurrentSiteThemeMiddleware,
|
||||
]
|
||||
with emulate_http_request(
|
||||
site=message.context['site'], user=self.thread_author, middleware_classes=middleware_classes
|
||||
site=message.context['site'], user=self.thread_author
|
||||
):
|
||||
rendered_email = EmailRenderer().render(message)
|
||||
self.assertTrue(self.comment['body'] in rendered_email.body_html)
|
||||
|
||||
@@ -3,7 +3,6 @@ import logging
|
||||
|
||||
import analytics
|
||||
from celery.task import task, Task
|
||||
from crum import CurrentRequestUserMiddleware
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.sites.models import Site
|
||||
@@ -20,7 +19,6 @@ from openedx.core.djangoapps.monitoring_utils import set_custom_metric
|
||||
from openedx.core.djangoapps.schedules import message_types
|
||||
from openedx.core.djangoapps.schedules.models import Schedule, ScheduleConfig
|
||||
from openedx.core.djangoapps.schedules import resolvers
|
||||
from openedx.core.djangoapps.theming.middleware import CurrentSiteThemeMiddleware
|
||||
from openedx.core.lib.celery.task_utils import emulate_http_request
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
@@ -103,11 +101,7 @@ class ScheduleMessageBaseTask(Task):
|
||||
):
|
||||
msg_type = self.make_message_type(day_offset)
|
||||
site = Site.objects.select_related('configuration').get(id=site_id)
|
||||
middleware_classes = [
|
||||
CurrentRequestUserMiddleware,
|
||||
CurrentSiteThemeMiddleware,
|
||||
]
|
||||
with emulate_http_request(site=site, middleware_classes=middleware_classes):
|
||||
with emulate_http_request(site=site):
|
||||
_annotate_for_monitoring(msg_type, site, bin_num, target_day_str, day_offset)
|
||||
return self.resolver(
|
||||
self.async_send_task,
|
||||
@@ -191,11 +185,7 @@ def _schedule_send(msg_str, site_id, delivery_config_var, log_prefix):
|
||||
msg = Message.from_string(msg_str)
|
||||
|
||||
user = User.objects.get(username=msg.recipient.username)
|
||||
middleware_classes = [
|
||||
CurrentRequestUserMiddleware,
|
||||
CurrentSiteThemeMiddleware,
|
||||
]
|
||||
with emulate_http_request(site=site, user=user, middleware_classes=middleware_classes):
|
||||
with emulate_http_request(site=site, user=user):
|
||||
_annonate_send_task_for_monitoring(msg)
|
||||
LOG.debug('%s: Sending message = %s', log_prefix, msg_str)
|
||||
ace.send(msg)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from contextlib import contextmanager
|
||||
|
||||
from crum import CurrentRequestUserMiddleware
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
from openedx.core.djangoapps.theming.middleware import CurrentSiteThemeMiddleware
|
||||
|
||||
|
||||
@contextmanager
|
||||
@@ -20,12 +22,17 @@ def emulate_http_request(site=None, user=None, middleware_classes=None):
|
||||
site (Site): The site that this request should emulate. Defaults to None.
|
||||
user (User): The user that initiated this fake request. Defaults to None
|
||||
middleware_classes (list): A list of classes that implement Django's middleware interface.
|
||||
Defaults to [CurrentRequestUserMiddleware, CurrentSiteThemeMiddleware] if None.
|
||||
"""
|
||||
request = HttpRequest()
|
||||
request.user = user
|
||||
request.site = site
|
||||
|
||||
middleware_classes = middleware_classes or []
|
||||
# TODO: define the default middleware_classes in settings.py
|
||||
middleware_classes = middleware_classes or [
|
||||
CurrentRequestUserMiddleware,
|
||||
CurrentSiteThemeMiddleware,
|
||||
]
|
||||
middleware_instances = [klass() for klass in middleware_classes]
|
||||
response = HttpResponse()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user