From 79d8f3e867278704769ebfc86b37e538d8401a9b Mon Sep 17 00:00:00 2001 From: "M. Tayyab Tahir Qureshi" Date: Tue, 13 Jan 2026 18:59:57 +0500 Subject: [PATCH] fix: fix LTI XBlock preview in Content Libaray --- xblocks_contrib/lti/lti.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/xblocks_contrib/lti/lti.py b/xblocks_contrib/lti/lti.py index 0fbe3f9b..eafedd26 100644 --- a/xblocks_contrib/lti/lti.py +++ b/xblocks_contrib/lti/lti.py @@ -70,7 +70,7 @@ from django.utils.translation import gettext_noop as _ from lxml import etree from oauthlib.oauth1.rfc5849 import signature -from opaque_keys.edx.keys import UsageKey +from opaque_keys.edx.keys import CourseKey, UsageKey from pytz import UTC from web_fragments.fragment import Fragment from webob import Response @@ -383,6 +383,15 @@ class LTIBlock( # Indicates that this XBlock has been extracted from edx-platform. is_extracted = True + @property + def category(self): + """Return the block type/category.""" + return self.scope_ids.block_type + + @property + def url_name(self): + return self.location.block_id + @property def location(self): return self.scope_ids.usage_id @@ -764,7 +773,9 @@ def get_course(self): """ Return course by course id. """ - return self.runtime.modulestore.get_course(self.location.course_key) + if isinstance(self.location.course_key, CourseKey): + return self.runtime.modulestore.get_course(self.location.course_key) + return None @property def context_id(self): @@ -992,7 +1003,7 @@ def get_client_key_secret(self): Obtains client_key and client_secret credentials from current course. """ course = self.get_course() - for lti_passport in course.lti_passports: + for lti_passport in course.lti_passports if course else []: try: lti_id, key, secret = [i.strip() for i in lti_passport.split(':')] except ValueError: