{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "====================================\nlti: Learning Tools Interoperability\n====================================\n\n.. image:: https://travis-ci.org/pylti/lti.svg?branch=master\n :target: https://travis-ci.org/pylti/lti\n\n.. image:: https://codecov.io/gh/pylti/lti/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/pylti/lti\n\n.. image:: https://badges.gitter.im/pylti/lti.svg\n :alt: Join the chat at https://gitter.im/pylti/lti\n :target: https://gitter.im/pylti/lti?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n\n.. image:: https://requires.io/github/pylti/lti/requirements.svg?branch=master\n :target: https://requires.io/github/pylti/lti/requirements/?branch=master\n :alt: Requirements Status\n\n``lti`` is a Python library implementing the\nLearning Tools Interperability (LTI) standard.\nIt is based on dce_lti_py_,\nwhich is based on ims_lti_py_.\n\n.. _dce_lti_py: https://github.com/harvard-dce/dce_lti_py\n.. _ims_lti_py: https://github.com/tophatmonocle/ims_lti_py\n\n\nInstallation\n============\n\n.. code-block:: sh\n\n pip install lti\n\n\nDependencies\n============\n\n* lxml_\n* oauthlib_\n* requests-oauthlib_\n\n.. _lxml: https://github.com/lxml/lxml\n.. _oauthlib: https://github.com/idan/oauthlib\n.. _requests-oauthlib: https://github.com/requests/requests-oauthlib\n\n\nUsage\n=====\n\nThe primary goal of this library is to provide classes\nfor building Python LTI tool providers (LTI apps).\nTo that end, the functionality that you're looking for\nis probably in the ``ToolConfig`` and ``ToolProvider`` classes (``ToolConsumer``\nis available too, if you want to consume LTI Providers).\n\n\nTool Config Example (Django)\n----------------------------\n\nHere's an example of a Django view you might use as the\nconfiguration URL when registering your app with the LTI consumer.\n\n.. code-block:: python\n\n from lti import ToolConfig\n from django.http import HttpResponse\n\n\n def tool_config(request):\n\n # basic stuff\n app_title = 'My App'\n app_description = 'An example LTI App'\n launch_view_name = 'lti_launch'\n launch_url = request.build_absolute_uri(reverse('lti_launch'))\n\n # maybe you've got some extensions\n extensions = {\n 'my_extensions_provider': {\n # extension settings...\n }\n }\n\n lti_tool_config = ToolConfig(\n title=app_title,\n launch_url=launch_url,\n secure_launch_url=launch_url,\n extensions=extensions,\n description = app_description\n )\n\n # or you may need some additional LTI parameters\n lti_tool_config.cartridge_bundle = 'BLTI001_Bundle'\n lti_tool_config.cartridge_icon = 'BLTI001_Icon'\n lti_tool_config.icon = 'http://www.example.com/icon.png'\n\n return HttpResponse(lti_tool_config.to_xml(), content_type='text/xml')\n\n\nTool Provider OAuth Request Validation Example (Django)\n-------------------------------------------------------\n\n.. code-block:: python\n\n from lti.contrib.django import DjangoToolProvider\n from my_app import RequestValidator\n\n\n # create the tool provider instance\n tool_provider = DjangoToolProvider.from_django_request(request=request)\n\n # the tool provider uses the 'oauthlib' library which requires an instance\n # of a validator class when doing the oauth request signature checking.\n # see https://oauthlib.readthedocs.org/en/latest/oauth1/validator.html for\n # info on how to create one\n validator = RequestValidator()\n\n # validate the oauth request signature\n ok = tool_provider.is_valid_request(validator)\n\n # do stuff if ok / not ok\n\n\nTool Consumer Example (Django)\n------------------------------\n\nIn your view:\n\n.. code-block:: python\n\n def index(request):\n consumer = ToolConsumer(\n consumer_key='my_key_given_from_provider',\n consumer_secret='super_secret',\n launch_url='provider_url',\n params={\n 'lti_message_type': 'basic-lti-launch-request'\n }\n )\n\n return render(\n request,\n 'lti_consumer/index.html',\n {\n 'launch_data': consumer.generate_launch_data(),\n 'launch_url': consumer.launch_url\n }\n )\n\nAt the template:\n\n.. code-block:: html\n\n
\n {% for key, value in launch_data.items %}\n \n {% endfor %}\n \n
\n\n\nTesting\n=======\n\nUnit tests can be run by executing\n\n.. code-block:: sh\n\n tox\n\nThis uses tox_ to set up and run the test environment.\n\n.. _tox: https://tox.readthedocs.org/\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/pylti/lti", "keywords": "lti", "license": "MIT License", "maintainer": "Ryan Hiebert", "maintainer_email": "ryan@ryanhiebert.com", "name": "lti", "package_url": "https://pypi.org/project/lti/", "platform": "", "project_url": "https://pypi.org/project/lti/", "project_urls": { "Homepage": "https://github.com/pylti/lti" }, "release_url": "https://pypi.org/project/lti/0.9.4/", "requires_dist": [ "lxml", "oauthlib", "requests-oauthlib" ], "requires_python": "", "summary": "A python library for building and/or consuming LTI apps", "version": "0.9.4" }, "last_serial": 4238489, "releases": { "0.8.0": [ { "comment_text": "", "digests": { "md5": "91096fc287af858a6d798b844819b575", "sha256": "a3c0490d13d28da98de176ee1026bc722a48d006d10b5efdae1c1f02b5d1f2e6" }, "downloads": -1, "filename": "lti-0.8.0-py2-none-any.whl", "has_sig": false, "md5_digest": "91096fc287af858a6d798b844819b575", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 18615, "upload_time": "2016-05-15T22:42:07", "url": "https://files.pythonhosted.org/packages/86/a9/f84a5732b75c30a03e07b8296104a676c4b967797f853448d769f2df7ce1/lti-0.8.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "228a54ef479f3134b251165e593fc359", "sha256": "b8c830c03f74a0be8f3fc04a380b057c8c7ce2fb85b4fc5b38c2e804699ff71f" }, "downloads": -1, "filename": "lti-0.8.0.tar.gz", "has_sig": false, "md5_digest": "228a54ef479f3134b251165e593fc359", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11960, "upload_time": "2016-05-15T22:42:16", "url": "https://files.pythonhosted.org/packages/88/80/aa41f3183d8aee430d22712eaaa21be28e035ea2097afe2db74091f29ee7/lti-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "40474eb8c986c1a71415ab5cb4b22c7c", "sha256": "0765811bad1af312fdc0e27798d0c8d1b3dbd1a4d86dc620675f4613bf2bf0d8" }, "downloads": -1, "filename": "lti-0.8.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "40474eb8c986c1a71415ab5cb4b22c7c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18936, "upload_time": "2016-06-22T16:40:25", "url": "https://files.pythonhosted.org/packages/07/33/fad7e1d7e637621b79dbfd9aec943a82ac8c7ef5dcc9b68d4c23aa08b8c6/lti-0.8.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07401537ebba6e52642a75c95fc2e76c", "sha256": "67e0b6fccf7860811ac81c309154dfb574c3ccd84932b5d3476c878ac008b0e2" }, "downloads": -1, "filename": "lti-0.8.1.tar.gz", "has_sig": false, "md5_digest": "07401537ebba6e52642a75c95fc2e76c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12163, "upload_time": "2016-06-22T16:40:29", "url": "https://files.pythonhosted.org/packages/20/d8/eef1817548bc104a8b537cf03caa4c33bf778c6d85b39fc80190e9ba5d6e/lti-0.8.1.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "f44f1d844e4bf8a460a98e1dc6a42117", "sha256": "c77f0c7dcf05b86ba5a9395afff49cc85a787121e4a5062f30ef4a3764d53f38" }, "downloads": -1, "filename": "lti-0.8.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f44f1d844e4bf8a460a98e1dc6a42117", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19217, "upload_time": "2016-07-06T14:01:24", "url": "https://files.pythonhosted.org/packages/6a/e4/ae8ae958d153d12d9535da57a0461e2d7eeba344c1ca92db5d37b85b09ed/lti-0.8.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5fb73b45e6bd1bf88e355d931ab027e4", "sha256": "e2370fd6daa97aa1c59cd5e53ac1a3e8cea5363dcfa7e414d09e7f79d0020031" }, "downloads": -1, "filename": "lti-0.8.2.tar.gz", "has_sig": false, "md5_digest": "5fb73b45e6bd1bf88e355d931ab027e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12393, "upload_time": "2016-07-06T14:01:28", "url": "https://files.pythonhosted.org/packages/a3/01/2bba51e598fbf2d592b2fac3bdf4e15e551f0adc459534a90f5f7465dfcb/lti-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "0ff050ca94bac55c504952327e8cc4c2", "sha256": "3cebb3931cca3e7eb0a196bb0e9eee91ca4cfe0acc5f078dae7b57e6ec51b7e7" }, "downloads": -1, "filename": "lti-0.8.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0ff050ca94bac55c504952327e8cc4c2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19220, "upload_time": "2016-07-22T04:19:01", "url": "https://files.pythonhosted.org/packages/7c/5f/1d502ad6dac20de7da7e969cc11210451568bf7415f704082c6bdc5207b1/lti-0.8.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "241cef83230bf0053d3b11482b2c9f6a", "sha256": "1f51682f1c134675403018355d6d838829c132175115c44ff4d5970e29730397" }, "downloads": -1, "filename": "lti-0.8.3.tar.gz", "has_sig": false, "md5_digest": "241cef83230bf0053d3b11482b2c9f6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12382, "upload_time": "2016-07-22T04:19:03", "url": "https://files.pythonhosted.org/packages/64/89/045ed749d8de1341190dc37aa23995c9105ca6e2761404c04bf3c7b9ec8b/lti-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "a4ca8564801f4b32ababc188f6fb6cd4", "sha256": "b62b5a8aa3b14a21d539e56a9d2ca4e3ce9bd51f48c604b6c22bbe8e4f33d124" }, "downloads": -1, "filename": "lti-0.8.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a4ca8564801f4b32ababc188f6fb6cd4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19227, "upload_time": "2016-07-26T18:02:53", "url": "https://files.pythonhosted.org/packages/5d/be/4032dc2f6c0c1a2d95ff8f04bf83ce3882ca1095269624241976aceffd39/lti-0.8.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e41935f0e41f7375f588079e5252a8f8", "sha256": "0ad6b3bc46d7ad75c59125896a016e53c873256777b0777fc781533c3f1a2925" }, "downloads": -1, "filename": "lti-0.8.4.tar.gz", "has_sig": false, "md5_digest": "e41935f0e41f7375f588079e5252a8f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12389, "upload_time": "2016-07-26T18:02:56", "url": "https://files.pythonhosted.org/packages/18/f8/df18e06e31b9ef3a750ae3fca1c90d01566f6b3d514e414708825055b885/lti-0.8.4.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "f5f4b4fd2b0674515bc85a702c456013", "sha256": "48b4b94f7654b85e61c3e5cf6b80b592e5253d9ae43e81a21b62604769813909" }, "downloads": -1, "filename": "lti-0.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f5f4b4fd2b0674515bc85a702c456013", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21654, "upload_time": "2017-06-14T14:24:56", "url": "https://files.pythonhosted.org/packages/8c/90/abe130927a47ac5fdc4e1b27b433c425dfc5009ea51655d0794ad21bc222/lti-0.9.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d59054703df89093ca3124d7f77ef27", "sha256": "1c0884fa6c290b1f648c6815976e92f03ed891e0a16d3cac61c65ae7971b071a" }, "downloads": -1, "filename": "lti-0.9.0.tar.gz", "has_sig": false, "md5_digest": "4d59054703df89093ca3124d7f77ef27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13629, "upload_time": "2017-06-14T14:24:57", "url": "https://files.pythonhosted.org/packages/54/d2/874e497dce21872d673bd9c58f27600790c11b7fbc6c915e1f6cd78beb58/lti-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "244cc32d68ab26dfa76f615debd2b814", "sha256": "1b1fe6a79f2d423919dabf47c9c5fd1e428df22918b13e87f16543a2ce47f896" }, "downloads": -1, "filename": "lti-0.9.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "244cc32d68ab26dfa76f615debd2b814", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21676, "upload_time": "2017-06-15T12:45:25", "url": "https://files.pythonhosted.org/packages/1b/28/3a9009542c4532d448e9dde36394625d28390128ae4980689219fc595575/lti-0.9.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "210659c0ca0b825ef44d029e1cdeaced", "sha256": "afc125f97fd5cf24dac9d4750ab421ed053b286cbcb511eaa732bc65c57b3412" }, "downloads": -1, "filename": "lti-0.9.1.tar.gz", "has_sig": false, "md5_digest": "210659c0ca0b825ef44d029e1cdeaced", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13657, "upload_time": "2017-06-15T12:45:27", "url": "https://files.pythonhosted.org/packages/79/c1/e68e13eb6c57f2584b7d1f257b9b24b434a6014cf6158464305c4f58fb32/lti-0.9.1.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "54f746a7ce67402cce52f55dc479e070", "sha256": "16202a3427ac458d9f14c35386256b73be2967527b4b07871ca9a4cc39cfa923" }, "downloads": -1, "filename": "lti-0.9.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "54f746a7ce67402cce52f55dc479e070", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21728, "upload_time": "2017-06-15T14:17:42", "url": "https://files.pythonhosted.org/packages/04/e9/3e7657c537755214e17a17d2856eda2d987473ddd2703189852b7c1525cb/lti-0.9.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d86278130c665b4dd1f9492ce598c56", "sha256": "64aab16ccec57e29ffaa7b457e7e3f73ee4dd85d805f2d41f511387e62342d4d" }, "downloads": -1, "filename": "lti-0.9.2.tar.gz", "has_sig": false, "md5_digest": "2d86278130c665b4dd1f9492ce598c56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13689, "upload_time": "2017-06-15T14:17:44", "url": "https://files.pythonhosted.org/packages/03/e7/67dee6e9986b4542fc007ed8d53f6d80f9fe705d5460b68952ddee8c26d9/lti-0.9.2.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "9a46da46ac863346344fc7c3b39e33c6", "sha256": "be43709b7638340fa3c881339cd2af4aa79c30af4b528924129d0e413829a646" }, "downloads": -1, "filename": "lti-0.9.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9a46da46ac863346344fc7c3b39e33c6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19402, "upload_time": "2018-06-20T20:29:11", "url": "https://files.pythonhosted.org/packages/72/f7/2cb9f7928975b45bfd3e63b9172e3603aa30e449a06ddda989def7ee3abb/lti-0.9.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2a0f712e6874ae66925a09633c306edd", "sha256": "b80040d39bc2e4faa1ff03b526c4ecc33d21339c365e4ee5eba26385ec3291fb" }, "downloads": -1, "filename": "lti-0.9.3.tar.gz", "has_sig": false, "md5_digest": "2a0f712e6874ae66925a09633c306edd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13924, "upload_time": "2018-06-20T20:29:12", "url": "https://files.pythonhosted.org/packages/63/95/81fcd5441b602c3675ef224f92a05cfbf1b1086ee58536a9b333c50a0038/lti-0.9.3.tar.gz" } ], "0.9.4": [ { "comment_text": "", "digests": { "md5": "b3e246ae4dadca372b2675de9a5dde11", "sha256": "82cfb4724747906a0a014a1d9525b6aac1737fd530f962898f0e54edfccfcddf" }, "downloads": -1, "filename": "lti-0.9.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b3e246ae4dadca372b2675de9a5dde11", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19428, "upload_time": "2018-09-04T17:21:11", "url": "https://files.pythonhosted.org/packages/a6/ad/f4f9819fd5c87ef31176f6a5b626651dfd21857406bea0b15733c8e787c9/lti-0.9.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3befc259c289d2bb2efd80ce68db1843", "sha256": "fe3452c220ceabf673fe0383bb1303d589780366c29c8c8fdec12a2c988b4266" }, "downloads": -1, "filename": "lti-0.9.4.tar.gz", "has_sig": false, "md5_digest": "3befc259c289d2bb2efd80ce68db1843", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13950, "upload_time": "2018-09-04T17:21:13", "url": "https://files.pythonhosted.org/packages/19/6d/3f774e0379962c381e19a8e02dd704be8deb873d6d4cef13e04520bbfbe2/lti-0.9.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b3e246ae4dadca372b2675de9a5dde11", "sha256": "82cfb4724747906a0a014a1d9525b6aac1737fd530f962898f0e54edfccfcddf" }, "downloads": -1, "filename": "lti-0.9.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b3e246ae4dadca372b2675de9a5dde11", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19428, "upload_time": "2018-09-04T17:21:11", "url": "https://files.pythonhosted.org/packages/a6/ad/f4f9819fd5c87ef31176f6a5b626651dfd21857406bea0b15733c8e787c9/lti-0.9.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3befc259c289d2bb2efd80ce68db1843", "sha256": "fe3452c220ceabf673fe0383bb1303d589780366c29c8c8fdec12a2c988b4266" }, "downloads": -1, "filename": "lti-0.9.4.tar.gz", "has_sig": false, "md5_digest": "3befc259c289d2bb2efd80ce68db1843", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13950, "upload_time": "2018-09-04T17:21:13", "url": "https://files.pythonhosted.org/packages/19/6d/3f774e0379962c381e19a8e02dd704be8deb873d6d4cef13e04520bbfbe2/lti-0.9.4.tar.gz" } ] }