Skip to content

LTI XBlock won't preview in the Content Library #132

@ttqureshi

Description

@ttqureshi

The LTI XBlock preview in the Content Library V2 is not working. Here are the crash logs. (discovered here)

Traceback (most recent call last):
  File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/pyenv/versions/3.11.8/lib/python3.11/contextlib.py", line 81, in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper
    return view_func(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/views/generic/base.py", line 105, in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 515, in dispatch
    response = self.handle_exception(exc)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 475, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 486, in raise_uncaught_exception
    raise exc
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 512, in dispatch
    response = handler(request, *args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/decorators.py", line 50, in handler
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/views/decorators/clickjacking.py", line 86, in _view_wrapper
    response = view_func(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/rest_api/views.py", line 118, in embed_block_view
    fragment = _render_block_view(block, view_name, request.user)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/api.py", line 261, in render_block_view
    fragment = block.render(view_name)
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblock/xblock/core.py", line 818, in render
    return self.runtime.render(self, view, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/runtime/runtime.py", line 415, in render
    fragment = super().render(block, view_name, context)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/runtime/shims.py", line 41, in render
    return super().render(block, view_name, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblock/xblock/runtime.py", line 823, in render
    frag = view_fn(context)
           ^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 536, in student_view
    "templates/lti.html", self.get_context(),
                          ^^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 508, in get_context
    'input_fields': self.get_input_fields(),
                    ^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 438, in get_input_fields
    client_key, client_secret = self.get_client_key_secret()
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 994, in get_client_key_secret
    course = self.get_course()
             ^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 767, in get_course
    return self.runtime.modulestore.get_course(self.location.course_key)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'LearningCoreXBlockRuntime' object has no attribute 'modulestore'
Internal Server Error: /xblocks/v2/lb:axim:lib1:lti:28d163a1-8bdb-4ce4-919d-7dcff9bb739c/embed/student_view/
Traceback (most recent call last):
  File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/pyenv/versions/3.11.8/lib/python3.11/contextlib.py", line 81, in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper
    return view_func(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/views/generic/base.py", line 105, in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 515, in dispatch
    response = self.handle_exception(exc)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 475, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 486, in raise_uncaught_exception
    raise exc
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 512, in dispatch
    response = handler(request, *args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/decorators.py", line 50, in handler
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/views/decorators/clickjacking.py", line 86, in _view_wrapper
    response = view_func(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/rest_api/views.py", line 118, in embed_block_view
    fragment = _render_block_view(block, view_name, request.user)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/api.py", line 261, in render_block_view
    fragment = block.render(view_name)
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblock/xblock/core.py", line 818, in render
    return self.runtime.render(self, view, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/runtime/runtime.py", line 415, in render
    fragment = super().render(block, view_name, context)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/runtime/shims.py", line 41, in render
    return super().render(block, view_name, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblock/xblock/runtime.py", line 823, in render
    frag = view_fn(context)
           ^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 536, in student_view
    "templates/lti.html", self.get_context(),
                          ^^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 508, in get_context
    'input_fields': self.get_input_fields(),
                    ^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 438, in get_input_fields
    client_key, client_secret = self.get_client_key_secret()
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 994, in get_client_key_secret
    course = self.get_course()
             ^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 767, in get_course
    return self.runtime.modulestore.get_course(self.location.course_key)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'LearningCoreXBlockRuntime' object has no attribute 'modulestore'
2026-01-05 14:13:39,088 ERROR 25 [django.request] [user None] [ip None] log.py:253 - Internal Server Error: /xblocks/v2/lb:axim:lib1:lti:28d163a1-8bdb-4ce4-919d-7dcff9bb739c/embed/student_view/
Traceback (most recent call last):
  File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/pyenv/versions/3.11.8/lib/python3.11/contextlib.py", line 81, in inner
    return func(*args, **kwds)
           ^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/views/decorators/csrf.py", line 65, in _view_wrapper
    return view_func(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/views/generic/base.py", line 105, in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 515, in dispatch
    response = self.handle_exception(exc)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 475, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 486, in raise_uncaught_exception
    raise exc
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/views.py", line 512, in dispatch
    response = handler(request, *args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/rest_framework/decorators.py", line 50, in handler
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/venv/lib/python3.11/site-packages/django/views/decorators/clickjacking.py", line 86, in _view_wrapper
    response = view_func(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/rest_api/views.py", line 118, in embed_block_view
    fragment = _render_block_view(block, view_name, request.user)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/api.py", line 261, in render_block_view
    fragment = block.render(view_name)
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblock/xblock/core.py", line 818, in render
    return self.runtime.render(self, view, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/runtime/runtime.py", line 415, in render
    fragment = super().render(block, view_name, context)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/openedx/edx-platform/openedx/core/djangoapps/xblock/runtime/shims.py", line 41, in render
    return super().render(block, view_name, context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblock/xblock/runtime.py", line 823, in render
    frag = view_fn(context)
           ^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 536, in student_view
    "templates/lti.html", self.get_context(),
                          ^^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 508, in get_context
    'input_fields': self.get_input_fields(),
                    ^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 438, in get_input_fields
    client_key, client_secret = self.get_client_key_secret()
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 994, in get_client_key_secret
    course = self.get_course()
             ^^^^^^^^^^^^^^^^^
  File "/mnt/xblocks-contrib/xblocks_contrib/lti/lti.py", line 767, in get_course
    return self.runtime.modulestore.get_course(self.location.course_key)
           ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'LearningCoreXBlockRuntime' object has no attribute 'modulestore'```

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Status

✅ Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions