From f18fc1e7aac29baba65456e218f0521431b0ccd7 Mon Sep 17 00:00:00 2001 From: Calen Pennington Date: Thu, 18 Apr 2019 14:58:15 -0400 Subject: [PATCH] Expose will_recheck_access further up the LMS xblock stack --- lms/djangoapps/courseware/module_render.py | 30 ++++++++++++------- lms/djangoapps/courseware/views/views.py | 8 ++++- .../content_type_gating/tests/test_access.py | 3 +- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/lms/djangoapps/courseware/module_render.py b/lms/djangoapps/courseware/module_render.py index 3441805245..55f42f0a9d 100644 --- a/lms/djangoapps/courseware/module_render.py +++ b/lms/djangoapps/courseware/module_render.py @@ -290,7 +290,7 @@ def _add_timed_exam_info(user, course, section, section_context): def get_module(user, request, usage_key, field_data_cache, position=None, log_if_not_found=True, wrap_xmodule_display=True, grade_bucket_type=None, depth=0, - static_asset_path='', course=None): + static_asset_path='', course=None, will_recheck_access=False): """ Get an instance of the xmodule class identified by location, setting the state based on an existing StudentModule, or creating one if none @@ -325,7 +325,7 @@ def get_module(user, request, usage_key, field_data_cache, wrap_xmodule_display=wrap_xmodule_display, grade_bucket_type=grade_bucket_type, static_asset_path=static_asset_path, - course=course) + course=course, will_recheck_access=will_recheck_access) except ItemNotFoundError: if log_if_not_found: log.debug("Error in get_module: ItemNotFoundError") @@ -392,7 +392,7 @@ def get_xqueue_callback_url_prefix(request): def get_module_for_descriptor(user, request, descriptor, field_data_cache, course_key, position=None, wrap_xmodule_display=True, grade_bucket_type=None, static_asset_path='', disable_staff_debug_info=False, - course=None): + course=None, will_recheck_access=False): """ Implements get_module, extracting out the request-specific functionality. @@ -424,7 +424,8 @@ def get_module_for_descriptor(user, request, descriptor, field_data_cache, cours user_location=user_location, request_token=xblock_request_token(request), disable_staff_debug_info=disable_staff_debug_info, - course=course + course=course, + will_recheck_access=will_recheck_access, ) @@ -443,7 +444,8 @@ def get_module_system_for_user( static_asset_path='', user_location=None, disable_staff_debug_info=False, - course=None + course=None, + will_recheck_access=False ): """ Helper function that returns a module system and student_data bound to a user and a descriptor. @@ -514,7 +516,7 @@ def get_module_system_for_user( user_location=user_location, request_token=request_token, course=course, - will_recheck_access=True, + will_recheck_access=will_recheck_access, ) def get_event_handler(event_type): @@ -870,7 +872,8 @@ def get_module_for_descriptor_internal(user, descriptor, student_data, course_id user_location=user_location, request_token=request_token, disable_staff_debug_info=disable_staff_debug_info, - course=course + course=course, + will_recheck_access=will_recheck_access, ) descriptor.bind_for_student( @@ -898,7 +901,6 @@ def get_module_for_descriptor_internal(user, descriptor, student_data, course_id not access and will_recheck_access and (access.user_message or access.user_fragment) - and isinstance(access, IncorrectPartitionGroupError) ) if access or caller_will_handle_access_error: return descriptor @@ -906,7 +908,7 @@ def get_module_for_descriptor_internal(user, descriptor, student_data, course_id return descriptor -def load_single_xblock(request, user_id, course_id, usage_key_string, course=None): +def load_single_xblock(request, user_id, course_id, usage_key_string, course=None, will_recheck_access=False): """ Load a single XBlock identified by usage_key_string. """ @@ -920,7 +922,15 @@ def load_single_xblock(request, user_id, course_id, usage_key_string, course=Non modulestore().get_item(usage_key), depth=0, ) - instance = get_module(user, request, usage_key, field_data_cache, grade_bucket_type='xqueue', course=course) + instance = get_module( + user, + request, + usage_key, + field_data_cache, + grade_bucket_type='xqueue', + course=course, + will_recheck_access=will_recheck_access + ) if instance is None: msg = u"No module {0} for user {1}--access denied?".format(usage_key_string, user) log.debug(msg) diff --git a/lms/djangoapps/courseware/views/views.py b/lms/djangoapps/courseware/views/views.py index dd8b73a9b1..c76034d1f5 100644 --- a/lms/djangoapps/courseware/views/views.py +++ b/lms/djangoapps/courseware/views/views.py @@ -317,7 +317,13 @@ def course_info(request, course_id): course.id, request.user, course, depth=2 ) course_module = get_module_for_descriptor( - user, request, course, field_data_cache, course.id, course=course + user, + request, + course, + field_data_cache, + course.id, + course=course, + will_recheck_access=True, ) chapter_module = get_current_child(course_module) if chapter_module is not None: diff --git a/openedx/features/content_type_gating/tests/test_access.py b/openedx/features/content_type_gating/tests/test_access.py index 1e0afac189..2236c6c552 100644 --- a/openedx/features/content_type_gating/tests/test_access.py +++ b/openedx/features/content_type_gating/tests/test_access.py @@ -87,7 +87,8 @@ def _get_fragment_from_block(block, user_id, course, request_factory, mock_get_c user_id=user_id, course_id=unicode(course.id), usage_key_string=unicode(course.scope_ids.usage_id), - course=course + course=course, + will_recheck_access=True, ) runtime = vertical_xblock.runtime