feat: add _runtime_services attribute to DescriptorSystem

This commit is contained in:
Kaustav Banerjee
2023-02-06 12:25:24 +05:30
committed by Agrendalath
parent 7d8f54fa88
commit 20ed3d64ec
3 changed files with 28 additions and 24 deletions

View File

@@ -223,7 +223,7 @@ def _preview_module_system(request, descriptor, field_data):
# Set up functions to modify the fragment produced by student_view
descriptor.runtime.wrappers = wrappers
descriptor.runtime.wrappers_asides = wrappers_asides
descriptor.runtime._services.update(services)
descriptor.runtime._runtime_services.update(services) # lint-amnesty, pylint: disable=protected-access
# xmodules can check for this attribute during rendering to determine if
# they are being rendered for preview (i.e. in Studio)

View File

@@ -627,7 +627,7 @@ def get_module_system_for_user(
descriptor.runtime.mixins = descriptor.runtime.mixologist._mixins
descriptor.runtime.wrappers = block_wrappers
descriptor.runtime._services.update(services)
descriptor.runtime._runtime_services.update(services) # lint-amnesty, pylint: disable=protected-access
descriptor.runtime.request_token = request_token
descriptor.runtime.wrap_asides_override = lms_wrappers_aside

View File

@@ -1070,7 +1070,7 @@ class ModuleSystemShim:
'runtime.anonymous_student_id is deprecated. Please use the user service instead.',
DeprecationWarning, stacklevel=3,
)
user_service = self._services.get('user')
user_service = self._runtime_services.get('user') or self._services.get('user')
if user_service:
return user_service.get_current_user().opt_attrs.get(ATTR_KEY_ANONYMOUS_USER_ID)
return None
@@ -1100,7 +1100,7 @@ class ModuleSystemShim:
'runtime.user_id is deprecated. Please use the user service instead.',
DeprecationWarning, stacklevel=3,
)
user_service = self._services.get('user')
user_service = self._runtime_services.get('user') or self._services.get('user')
if user_service:
return user_service.get_current_user().opt_attrs.get(ATTR_KEY_USER_ID)
return None
@@ -1116,9 +1116,9 @@ class ModuleSystemShim:
'runtime.user_is_staff is deprecated. Please use the user service instead.',
DeprecationWarning, stacklevel=3,
)
user_service = self._services.get('user')
user_service = self._runtime_services.get('user') or self._services.get('user')
if user_service:
return self._services['user'].get_current_user().opt_attrs.get(ATTR_KEY_USER_IS_STAFF)
return user_service.get_current_user().opt_attrs.get(ATTR_KEY_USER_IS_STAFF)
return None
@property
@@ -1132,9 +1132,9 @@ class ModuleSystemShim:
'runtime.user_location is deprecated. Please use the user service instead.',
DeprecationWarning, stacklevel=3,
)
user_service = self._services.get('user')
user_service = self._runtime_services.get('user') or self._services.get('user')
if user_service:
return self._services['user'].get_current_user().opt_attrs.get(ATTR_KEY_REQUEST_COUNTRY_CODE)
return user_service.get_current_user().opt_attrs.get(ATTR_KEY_REQUEST_COUNTRY_CODE)
return None
@property
@@ -1152,9 +1152,9 @@ class ModuleSystemShim:
'runtime.get_real_user is deprecated. Please use the user service instead.',
DeprecationWarning, stacklevel=3,
)
user_service = self._services.get('user')
user_service = self._runtime_services.get('user') or self._services.get('user')
if user_service:
return self._services['user'].get_user_by_anonymous_id
return user_service.get_user_by_anonymous_id
return None
@property
@@ -1170,9 +1170,9 @@ class ModuleSystemShim:
'runtime.get_user_role is deprecated. Please use the user service instead.',
DeprecationWarning, stacklevel=3,
)
user_service = self._services.get('user')
user_service = self._runtime_services.get('user') or self._services.get('user')
if user_service:
return partial(self._services['user'].get_current_user().opt_attrs.get, ATTR_KEY_USER_ROLE)
return partial(user_service.get_current_user().opt_attrs.get, ATTR_KEY_USER_ROLE)
@property
def render_template(self):
@@ -1188,7 +1188,7 @@ class ModuleSystemShim:
)
if hasattr(self, '_deprecated_render_template'):
return self._deprecated_render_template
render_service = self._services.get('mako')
render_service = self._runtime_services.get('mako') or self._services.get('mako')
if render_service:
return render_service.render_template
return None
@@ -1222,7 +1222,7 @@ class ModuleSystemShim:
'runtime.xqueue is deprecated. Please use the xqueue service instead.',
DeprecationWarning, stacklevel=3,
)
xqueue_service = self._services.get('xqueue')
xqueue_service = self._runtime_services.get('xqueue') or self._services.get('xqueue')
if xqueue_service:
return {
'interface': xqueue_service.interface,
@@ -1244,7 +1244,7 @@ class ModuleSystemShim:
'runtime.can_execute_unsafe_code is deprecated. Please use the sandbox service instead.',
DeprecationWarning, stacklevel=3,
)
sandbox_service = self._services.get('sandbox')
sandbox_service = self._runtime_services.get('sandbox') or self._services.get('sandbox')
if sandbox_service:
return sandbox_service.can_execute_unsafe_code
# Default to saying "no unsafe code".
@@ -1264,7 +1264,7 @@ class ModuleSystemShim:
'runtime.get_python_lib_zip is deprecated. Please use the sandbox service instead.',
DeprecationWarning, stacklevel=3,
)
sandbox_service = self._services.get('sandbox')
sandbox_service = self._runtime_services.get('sandbox') or self._services.get('sandbox')
if sandbox_service:
return sandbox_service.get_python_lib_zip
# Default to saying "no lib data"
@@ -1283,7 +1283,7 @@ class ModuleSystemShim:
'runtime.cache is deprecated. Please use the cache service instead.',
DeprecationWarning, stacklevel=3,
)
return self._services.get('cache') or DoNothingCache()
return self._runtime_services.get('cache') or self._services.get('cache') or DoNothingCache()
@property
def replace_urls(self):
@@ -1296,7 +1296,7 @@ class ModuleSystemShim:
'runtime.replace_urls is deprecated. Please use the replace_urls service instead.',
DeprecationWarning, stacklevel=3,
)
replace_urls_service = self._services.get('replace_urls')
replace_urls_service = self._runtime_services.get('replace_urls') or self._services.get('replace_urls')
if replace_urls_service:
return partial(replace_urls_service.replace_urls, static_replace_only=True)
@@ -1311,7 +1311,7 @@ class ModuleSystemShim:
'runtime.replace_course_urls is deprecated. Please use the replace_urls service instead.',
DeprecationWarning, stacklevel=3,
)
replace_urls_service = self._services.get('replace_urls')
replace_urls_service = self._runtime_services.get('replace_urls') or self._services.get('replace_urls')
if replace_urls_service:
return partial(replace_urls_service.replace_urls)
@@ -1326,7 +1326,7 @@ class ModuleSystemShim:
'runtime.replace_jump_to_id_urls is deprecated. Please use the replace_urls service instead.',
DeprecationWarning, stacklevel=3,
)
replace_urls_service = self._services.get('replace_urls')
replace_urls_service = self._runtime_services.get('replace_urls') or self._services.get('replace_urls')
if replace_urls_service:
return partial(replace_urls_service.replace_urls)
@@ -1379,7 +1379,7 @@ class ModuleSystemShim:
"rebind_noauth_module_to_user is deprecated. Please use the 'rebind_user' service instead.",
DeprecationWarning, stacklevel=3
)
rebind_user_service = self._services.get('rebind_user')
rebind_user_service = self._runtime_services.get('rebind_user') or self._services.get('rebind_user')
if rebind_user_service:
return partial(rebind_user_service.rebind_noauth_module_to_user)
@@ -1466,6 +1466,7 @@ class DescriptorSystem(MetricsMixin, ConfigurableFragmentWrapper, ModuleSystemSh
self.get_policy = lambda u: {}
self.disabled_xblock_types = disabled_xblock_types
self._runtime_services = {}
def get(self, attr):
""" provide uniform access to attributes (like etree)."""
@@ -1559,7 +1560,7 @@ class DescriptorSystem(MetricsMixin, ConfigurableFragmentWrapper, ModuleSystemSh
Publish events through the `EventPublishingService`.
This ensures that the correct track method is used for Instructor tasks.
"""
if publish_service := self._services.get('publish'):
if publish_service := self._runtime_services.get('publish') or self._services.get('publish'):
publish_service.publish(block, event_type, event)
def service(self, block, service_name):
@@ -1576,8 +1577,11 @@ class DescriptorSystem(MetricsMixin, ConfigurableFragmentWrapper, ModuleSystemSh
Returns:
An object implementing the requested service, or None.
"""
# getting the service from parent module. making sure of block service declarations.
service = super().service(block=block, service_name=service_name)
declaration = block.service_declaration(service_name)
service = self._runtime_services.get(service_name)
if declaration is None or service is None:
# getting the service from parent module. making sure of block service declarations.
service = super().service(block=block, service_name=service_name)
# Passing the block to service if it is callable e.g. XBlockI18nService. It is the responsibility of calling
# service to handle the passing argument.
if callable(service):