This commit updates common/djangoapps. These keys are now objects with a limited interface, and the particular internal representation is managed by the data storage layer (the modulestore). For the LMS, there should be no outward-facing changes to the system. The keys are, for now, a change to internal representation only. For Studio, the new serialized form of the keys is used in urls, to allow for further migration in the future. Co-Author: Andy Armstrong <andya@edx.org> Co-Author: Christina Roberts <christina@edx.org> Co-Author: David Baumgold <db@edx.org> Co-Author: Diana Huang <dkh@edx.org> Co-Author: Don Mitchell <dmitchell@edx.org> Co-Author: Julia Hansbrough <julia@edx.org> Co-Author: Nimisha Asthagiri <nasthagiri@edx.org> Co-Author: Sarina Canelake <sarina@edx.org> [LMS-2370]
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
"""
|
|
Middleware for user api.
|
|
Adds user's tags to tracking event context.
|
|
"""
|
|
from track.contexts import COURSE_REGEX
|
|
from eventtracking import tracker
|
|
from user_api.models import UserCourseTag
|
|
from xmodule.modulestore.locations import SlashSeparatedCourseKey
|
|
|
|
|
|
class UserTagsEventContextMiddleware(object):
|
|
"""Middleware that adds a user's tags to tracking event context."""
|
|
CONTEXT_NAME = 'user_tags_context'
|
|
|
|
def process_request(self, request):
|
|
"""
|
|
Add a user's tags to the tracking event context.
|
|
"""
|
|
match = COURSE_REGEX.match(request.build_absolute_uri())
|
|
course_id = None
|
|
if match:
|
|
course_id = match.group('course_id')
|
|
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
|
|
|
|
context = {}
|
|
|
|
if course_id:
|
|
context['course_id'] = course_id
|
|
|
|
if request.user.is_authenticated():
|
|
context['course_user_tags'] = dict(
|
|
UserCourseTag.objects.filter(
|
|
user=request.user.pk,
|
|
course_id=course_key,
|
|
).values_list('key', 'value')
|
|
)
|
|
else:
|
|
context['course_user_tags'] = {}
|
|
|
|
tracker.get_tracker().enter_context(
|
|
self.CONTEXT_NAME,
|
|
context
|
|
)
|
|
|
|
def process_response(self, request, response): # pylint: disable=unused-argument
|
|
"""Exit the context if it exists."""
|
|
try:
|
|
tracker.get_tracker().exit_context(self.CONTEXT_NAME)
|
|
except: # pylint: disable=bare-except
|
|
pass
|
|
|
|
return response
|