Skip to content

Commit deb5b0f

Browse files
authored
feat: add filter to hook render of XBlock (#34865)
* Bumps openedx-filters to 1.9.0 * Adds filter to hook render of XBlock * Disables a too-many-statements warning on render_xblock function
1 parent a26e4b4 commit deb5b0f

File tree

5 files changed

+32
-12
lines changed

5 files changed

+32
-12
lines changed

lms/djangoapps/courseware/views/views.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@
3333
from django.views.generic import View
3434
from edx_django_utils.monitoring import set_custom_attribute, set_custom_attributes_for_course_key
3535
from ipware.ip import get_client_ip
36+
from lms.djangoapps.static_template_view.views import render_500
3637
from markupsafe import escape
3738
from opaque_keys import InvalidKeyError
3839
from opaque_keys.edx.keys import CourseKey, UsageKey
39-
from openedx_filters.learning.filters import CourseAboutRenderStarted
40+
from openedx_filters.learning.filters import CourseAboutRenderStarted, RenderXBlockStarted
4041
from requests.exceptions import ConnectionError, Timeout # pylint: disable=redefined-builtin
4142
from pytz import UTC
4243
from rest_framework import status
@@ -1532,7 +1533,7 @@ def _check_sequence_exam_access(request, location):
15321533
@xframe_options_exempt
15331534
@transaction.non_atomic_requests
15341535
@ensure_csrf_cookie
1535-
def render_xblock(request, usage_key_string, check_if_enrolled=True, disable_staff_debug_info=False):
1536+
def render_xblock(request, usage_key_string, check_if_enrolled=True, disable_staff_debug_info=False): # pylint: disable=too-many-statements
15361537
"""
15371538
Returns an HttpResponse with HTML content for the xBlock with the given usage_key.
15381539
The returned HTML is a chromeless rendering of the xBlock (excluding content of the containing courseware).
@@ -1641,11 +1642,7 @@ def render_xblock(request, usage_key_string, check_if_enrolled=True, disable_sta
16411642
if not _check_sequence_exam_access(request, seq_block.location):
16421643
return HttpResponseForbidden("Access to exam content is restricted")
16431644

1644-
fragment = block.render(requested_view, context=student_view_context)
1645-
optimization_flags = get_optimization_flags_for_content(block, fragment)
1646-
16471645
context = {
1648-
'fragment': fragment,
16491646
'course': course,
16501647
'block': block,
16511648
'disable_accordion': True,
@@ -1666,10 +1663,33 @@ def render_xblock(request, usage_key_string, check_if_enrolled=True, disable_sta
16661663
'is_learning_mfe': is_learning_mfe,
16671664
'is_mobile_app': is_mobile_app,
16681665
'render_course_wide_assets': True,
1666+
}
1667+
1668+
try:
1669+
# .. filter_implemented_name: RenderXBlockStarted
1670+
# .. filter_type: org.openedx.learning.xblock.render.started.v1
1671+
context, student_view_context = RenderXBlockStarted.run_filter(
1672+
context=context, student_view_context=student_view_context
1673+
)
1674+
except RenderXBlockStarted.PreventXBlockBlockRender as exc:
1675+
log.info("Halted rendering block %s. Reason: %s", usage_key_string, exc.message)
1676+
return render_500(request)
1677+
except RenderXBlockStarted.RenderCustomResponse as exc:
1678+
log.info("Rendering custom exception for block %s. Reason: %s", usage_key_string, exc.message)
1679+
context.update({
1680+
'fragment': Fragment(exc.response)
1681+
})
1682+
return render_to_response('courseware/courseware-chromeless.html', context, request=request)
16691683

1684+
fragment = block.render(requested_view, context=student_view_context)
1685+
optimization_flags = get_optimization_flags_for_content(block, fragment)
1686+
1687+
context.update({
1688+
'fragment': fragment,
16701689
**optimization_flags,
1671-
}
1672-
return render_to_response('courseware/courseware-chromeless.html', context)
1690+
})
1691+
1692+
return render_to_response('courseware/courseware-chromeless.html', context, request=request)
16731693

16741694

16751695
def get_optimization_flags_for_content(block, fragment):

requirements/edx/base.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,7 +746,7 @@ openedx-events==9.10.0
746746
# edx-event-bus-redis
747747
# event-tracking
748748
# ora2
749-
openedx-filters==1.8.1
749+
openedx-filters==1.9.0
750750
# via
751751
# -r requirements/edx/kernel.in
752752
# lti-consumer-xblock

requirements/edx/development.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1284,7 +1284,7 @@ openedx-events==9.10.0
12841284
# edx-event-bus-redis
12851285
# event-tracking
12861286
# ora2
1287-
openedx-filters==1.8.1
1287+
openedx-filters==1.9.0
12881288
# via
12891289
# -r requirements/edx/doc.txt
12901290
# -r requirements/edx/testing.txt

requirements/edx/doc.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ openedx-events==9.10.0
872872
# edx-event-bus-redis
873873
# event-tracking
874874
# ora2
875-
openedx-filters==1.8.1
875+
openedx-filters==1.9.0
876876
# via
877877
# -r requirements/edx/base.txt
878878
# lti-consumer-xblock

requirements/edx/testing.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -951,7 +951,7 @@ openedx-events==9.10.0
951951
# edx-event-bus-redis
952952
# event-tracking
953953
# ora2
954-
openedx-filters==1.8.1
954+
openedx-filters==1.9.0
955955
# via
956956
# -r requirements/edx/base.txt
957957
# lti-consumer-xblock

0 commit comments

Comments
 (0)