diff --git a/pylti/common.py b/pylti/common.py
index 62354e9..a7d9de6 100644
--- a/pylti/common.py
+++ b/pylti/common.py
@@ -306,7 +306,7 @@ def verify_request_common(consumers, url, method, headers, params):
def generate_request_xml(message_identifier_id, operation,
- lis_result_sourcedid, score):
+ lis_result_sourcedid, score, launch_url=None):
# pylint: disable=too-many-locals
"""
Generates LTI 1.1 XML for posting result to LTI consumer.
@@ -315,6 +315,7 @@ def generate_request_xml(message_identifier_id, operation,
:param operation:
:param lis_result_sourcedid:
:param score:
+ :param launch_url:
:return: XML string
"""
root = etree.Element(u'imsx_POXEnvelopeRequest',
@@ -343,6 +344,10 @@ def generate_request_xml(message_identifier_id, operation,
language.text = 'en'
text_string = etree.SubElement(result_score, 'textString')
text_string.text = score.__str__()
+ if launch_url:
+ result_data = etree.SubElement(result, 'resultData')
+ lti_launch_url = etree.SubElement(result_data, 'ltiLaunchUrl')
+ lti_launch_url.text = launch_url
ret = "\n{}".format(
etree.tostring(root, encoding='utf-8').decode('utf-8'))
diff --git a/pylti/tests/test_common.py b/pylti/tests/test_common.py
index 64fd90d..c687df0 100644
--- a/pylti/tests/test_common.py
+++ b/pylti/tests/test_common.py
@@ -219,6 +219,20 @@ def test_generate_xml(self):
\
lis_result_sourcedid\
""")
+ xml = generate_request_xml('message_identifier_id', 'operation',
+ 'lis_result_sourcedid', 'score',
+ 'https://somelaunchurl/')
+ self.assertEqual(xml, """
+V1.0\
+message_identifier_id\
+\
+\
+lis_result_sourcedid\
+enscore\
+https://somelaunchurl/\
+\
+""")
@staticmethod
def generate_oauth_request(url_to_sign=None):