Skip to content

Commit 41d9dd8

Browse files
Merge pull request #150 from open-craft/pooja/fix-parameter-processor-logic
[SE-4235] Add missing parameter processors code
2 parents a5ca2cd + 1926299 commit 41d9dd8

3 files changed

Lines changed: 26 additions & 1 deletion

File tree

lti_consumer/lti_1p1/consumer.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ def __init__(self, lti_launch_url, oauth_key, oauth_secret):
146146
self.lti_launch_presentation_locale = None
147147
self.lti_custom_parameters = None
148148

149+
# Extra claims - used for custom parameter processors
150+
self.extra_claims = {}
151+
149152
def set_user_data(
150153
self,
151154
user_id,
@@ -241,6 +244,14 @@ def set_custom_parameters(self, custom_parameters):
241244

242245
self.lti_custom_parameters = custom_parameters
243246

247+
def set_extra_claims(self, claim):
248+
"""
249+
Updates launch extra claims using python's dict .update method
250+
"""
251+
if not isinstance(claim, dict):
252+
raise ValueError('Invalid extra claim: {!r} is not a dict.'.format(claim))
253+
self.extra_claims.update(claim)
254+
244255
def generate_launch_request(self, resource_link_id):
245256
"""
246257
Signs LTI launch request and returns signature and OAuth parameters.
@@ -288,6 +299,10 @@ def generate_launch_request(self, resource_link_id):
288299
if self.lti_custom_parameters:
289300
lti_parameters.update(self.lti_custom_parameters)
290301

302+
# Extra claims - from custom parameter processors
303+
if self.extra_claims:
304+
lti_parameters.update(self.extra_claims)
305+
291306
headers = {
292307
# This is needed for body encoding:
293308
'Content-Type': 'application/x-www-form-urlencoded',

lti_consumer/lti_xblock.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,6 +1009,16 @@ def lti_launch_handler(self, request, suffix=''): # pylint: disable=unused-argu
10091009

10101010
lti_consumer.set_custom_parameters(self.prefixed_custom_parameters)
10111011

1012+
for processor in self.get_parameter_processors():
1013+
try:
1014+
default_params = getattr(processor, 'lti_xblock_default_params', {})
1015+
lti_consumer.set_extra_claims(default_params)
1016+
lti_consumer.set_extra_claims(processor(self) or {})
1017+
except Exception: # pylint: disable=broad-except
1018+
# Log the error without causing a 500-error.
1019+
# Useful for catching casual runtime errors in the processors.
1020+
log.exception('Error in XBlock LTI parameter processor "%s"', processor)
1021+
10121022
lti_parameters = lti_consumer.generate_launch_request(self.resource_link_id)
10131023
loader = ResourceLoader(__name__)
10141024
context = self._get_context_for_template()

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def is_requirement(line):
4949

5050
setup(
5151
name='lti-consumer-xblock',
52-
version='3.0.2',
52+
version='3.0.3',
5353
author='Open edX project',
5454
author_email='oscm@edx.org',
5555
description='This XBlock implements the consumer side of the LTI specification.',

0 commit comments

Comments
 (0)