""" LTI Deep Linking service implementation """ from lti_consumer.lti_1p3.constants import LTI_DEEP_LINKING_ACCEPTED_TYPES from lti_consumer.lti_1p3 import exceptions class LtiDeepLinking: """ LTI Advantage - Deep Linking Service Reference: http://www.imsglobal.org/spec/lti-dl/v2p0#file """ def __init__( self, deep_linking_launch_url, deep_linking_return_url, ): """ Class initialization. """ self.deep_linking_launch_url = deep_linking_launch_url self.deep_linking_return_url = deep_linking_return_url def get_lti_deep_linking_launch_claim( self, title="", description="", accept_types=None, extra_data=None, ): """ Returns LTI Deep Linking Claim to be injected in the LTI launch message. """ if not accept_types: accept_types = LTI_DEEP_LINKING_ACCEPTED_TYPES # Check if required types are accepted, if not throw accept_types_claim = [] for content_type in accept_types: if content_type in LTI_DEEP_LINKING_ACCEPTED_TYPES: accept_types_claim.append(content_type) else: raise exceptions.LtiDeepLinkingContentTypeNotSupported() # Consctruct Deep Linking Claim deep_linking_claim = { "accept_types": accept_types_claim, "accept_presentation_document_targets": [ "iframe", "window", "embed" ], # Accept multiple items on from Deep Linking responses. "accept_multiple": True, # Automatically saves Content Items without asking to user "auto_create": True, # Other parameters "title": title, "text": description, "deep_link_return_url": self.deep_linking_return_url, } # Extra data is an optional parameter that can be sent. # It's opaque to the tool, but WILL be sent back in the # deep link response. if extra_data: deep_linking_claim.update({ "data": extra_data, }) return { "https://purl.imsglobal.org/spec/lti-dl/claim/deep_linking_settings": deep_linking_claim }