Skip to content
Snippets Groups Projects
Commit fd5c5acc authored by Tyler Hallada's avatar Tyler Hallada
Browse files

Add emulate_http_request contextmanager for tasks

remove explicit middleware from resolver task

Address Gabe's comment

Add TODO to define middleware_classes in settings
parent c25e4ba0
No related merge requests found
......@@ -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)
......
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()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment