Skip to main content

This library is a fork of lti_lti_py It has been modified to accept non-standard params and bubble up useful error messages in the form of exceptions to the caller.

lti is a Python library implementing the Learning Tools Interoperability (LTI) standard. It is based on lti_lti_py, which is based on dce_lti_py, which is based on ims_lti_py.

Installation

pip install lti

Dependencies

Usage

The primary goal of this library is to provide classes for building Python LTI tool providers (LTI apps). To that end, the functionality that you’re looking for is probably in the ToolConfig and ToolProvider classes (ToolConsumer is available too, if you want to consume LTI Providers).

Tool Config Example (Django)

Here’s an example of a Django view you might use as the configuration URL when registering your app with the LTI consumer.

from lti import ToolConfig
from django.http import HttpResponse


def tool_config(request):

    # basic stuff
    app_title = 'My App'
    app_description = 'An example LTI App'
    launch_view_name = 'lti_launch'
    launch_url = request.build_absolute_uri(reverse('lti_launch'))

    # maybe you've got some extensions
    extensions = {
        'my_extensions_provider': {
            # extension settings...
        }
    }

    lti_tool_config = ToolConfig(
        title=app_title,
        launch_url=launch_url,
        secure_launch_url=launch_url,
        extensions=extensions,
        description = app_description
    )

    return HttpResponse(lti_tool_config.to_xml(), content_type='text/xml')

Tool Provider OAuth Request Validation Example (Django)

from lti.contrib.django import DjangoToolProvider
from my_app import RequestValidator
from oauthlib.oauth1 import SignatureOnlyEndpoint

# create the tool provider instance
tool_provider = DjangoToolProvider.from_django_request(request=request)

# the tool provider uses the 'oauthlib' library which requires an instance
# of a validator class when doing the oauth request signature checking.
# see https://oauthlib.readthedocs.org/en/latest/oauth1/validator.html for
# info on how to create one
validator = RequestValidator()

# validate the oauth request signature
ok = tool_provider.is_valid_request(SignatureOnlyEndpoint, validator)

# do stuff if ok / not ok

Tool Consumer Example (Django)

In your view:

def index(request):
    consumer = ToolConsumer(
        consumer_key='my_key_given_from_provider',
        consumer_secret='super_secret',
        launch_url='provider_url',
        params={
            'lti_message_type': 'basic-lti-launch-request'
        }
    )

    return render(
        request,
        'lti_consumer/index.html',
        {
            'launch_data': consumer.generate_launch_data(),
            'launch_url': consumer.launch_url
        }
    )

At the template:

<form action="{{ launch_url }}"
      name="ltiLaunchForm"
      id="ltiLaunchForm"
      method="POST"
      encType="application/x-www-form-urlencoded">
  {% for key, value in launch_data.items %}
    <input type="hidden" name="{{ key }}" value="{{ value }}"/>
  {% endfor %}
  <button type="submit">Launch the tool</button>
</form>

Testing

Unit tests can be run by executing

tox

This uses tox to set up and run the test environment.

Metadata

Release files for e-lti 0.9.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for e-lti 0.9.5
File Size Uploaded
e-lti-0.9.5.tar.gz 15.4 kB Details

Release files / e-lti-0.9.5.tar.gz

Download URL e-lti-0.9.5.tar.gz
Size 15.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c4022d04157cbb62832bf62deed23b93b2b38a9e8789a4c8fafa8d89bb7fba26
BLAKE2b-256 checksum
How to use checksums
fc32e8afa15065628f6e2e0fdbd434576fd6c3778cb1b6f175bfa045b6742931
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.9.5 This release

1 release file

0.9.4

1 release file

0.9.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page