openedx-ltistore


Nameopenedx-ltistore JSON
Version 1.1.2 PyPI version JSON
download
home_pagehttps://github.com/openedx/openedx-ltistore
SummaryAn app for storing LTI provider configurations centrally.
upload_time2025-09-19 11:24:40
maintainerNone
docs_urlNone
authoredX
requires_python>=3.11
licenseAGPL 3.0
keywords python edx
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Openedx LTI Store

A plugin for openedx-platform to store LTI configurations centrally. This allows course creators to add [LTI components](https://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/lti_component.html) without having to enter the details like secrets, keys and URLs everytime the component block is created.

## Development

The development instructions are written with the [Open edX Devstack](https://edx.readthedocs.io/projects/open-edx-devstack/en/latest/index.html) as reference.

1. Clone the repostiory to `<devstack_root>/src/` directory
   ```sh
   cd <devstack_root>/src/
   git clone git@github.com:open-craft/openedx-ltistore.git
   ```
2. Install the plugin inside the Studio container and run migrations
   ```sh
   cd <devstack_root>/devstack/
   make studio-shell
   pip install -e /edx/src/openedx-ltistore
   python manage.py cms migrate lti_store
   exit
   ```
3. Install the plugin inside the LMS Container
   ```sh
   make lms-shell
   pip install -e /edx/src/openedx-ltistore
   exit
   ```
4. The LTI Consumer XBlock can fetch configurations to LTI Tools using `openedx-filters` mechanism. It calls the filter `org.openedx.xblock.lti_consumer.configuration.listed.v1` whenever it wants to fetch the configurations from external tools like plugins. In order for **LTI Store** to send available LTI Tools, add the following to any existing `openedx-filters` configurations for both LMS (`edx-platform/lms/envs/devstack.py` or `private.py`) and studio (`edx-platform/cms/envs/devstack.py`):
   ```py
   OPEN_EDX_FILTERS_CONFIG = {
       "org.openedx.xblock.lti_consumer.configuration.listed.v1": {
           "fail_silently": False,
           "pipeline": [
               "lti_store.pipelines.GetLtiConfigurations"
           ]
       }
   }
   ```
5. Restart the LMS & Studio for the latest config to take effect
   ```sh
   make lms-restart
   make studio-restart
   ```

Now any changes made to the source code should reflect in the application

## Adding LTI Tools to the store

1. Go to `http://localhost:18000/admin`
2. Look for `LTI_STORE` and add **External lti configurations** by clicking `+ Add` button

## Use configuration on LTI consumer XBlock

1. Go to `http://localhost:18000/admin`
2. Look for `LTI_STORE` and go to **External lti configurations**
3. On the list of external LTI configurations, note down the "Filter Key" value
   of the configuration to use (Example: `lti_store:1`).
4. Copy "Filter Key" to the "External ID" field on the LTI consumer XBlock.

## Linting

The project uses [Black](https://black.readthedocs.io/en/stable/) for linting. To lint the code

```
make lint
```

## Testing

Unit tests can be run with

```
make test
```


Change Log
==========

Unreleased
----------

*

1.1.2 - 2025-09-19
------------------

### Fixed

* Fixed issue with LTI 1.3 public JWK not being included in serialized config.

1.1.0 – 2025-05-21
------------------

### Added

* Initial release to PyPI.
* CI pipelines.
* Django 5.2 support.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/openedx/openedx-ltistore",
    "name": "openedx-ltistore",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "Python edx",
    "author": "edX",
    "author_email": "oscm@edx.org",
    "download_url": "https://files.pythonhosted.org/packages/23/8a/048b4c373779bb5bee862e70bd4ce66fc4aeede4dfc9f79dfbed117c1e7d/openedx_ltistore-1.1.2.tar.gz",
    "platform": null,
    "description": "# Openedx LTI Store\n\nA plugin for openedx-platform to store LTI configurations centrally. This allows course creators to add [LTI components](https://edx.readthedocs.io/projects/edx-partner-course-staff/en/latest/exercises_tools/lti_component.html) without having to enter the details like secrets, keys and URLs everytime the component block is created.\n\n## Development\n\nThe development instructions are written with the [Open edX Devstack](https://edx.readthedocs.io/projects/open-edx-devstack/en/latest/index.html) as reference.\n\n1. Clone the repostiory to `<devstack_root>/src/` directory\n   ```sh\n   cd <devstack_root>/src/\n   git clone git@github.com:open-craft/openedx-ltistore.git\n   ```\n2. Install the plugin inside the Studio container and run migrations\n   ```sh\n   cd <devstack_root>/devstack/\n   make studio-shell\n   pip install -e /edx/src/openedx-ltistore\n   python manage.py cms migrate lti_store\n   exit\n   ```\n3. Install the plugin inside the LMS Container\n   ```sh\n   make lms-shell\n   pip install -e /edx/src/openedx-ltistore\n   exit\n   ```\n4. The LTI Consumer XBlock can fetch configurations to LTI Tools using `openedx-filters` mechanism. It calls the filter `org.openedx.xblock.lti_consumer.configuration.listed.v1` whenever it wants to fetch the configurations from external tools like plugins. In order for **LTI Store** to send available LTI Tools, add the following to any existing `openedx-filters` configurations for both LMS (`edx-platform/lms/envs/devstack.py` or `private.py`) and studio (`edx-platform/cms/envs/devstack.py`):\n   ```py\n   OPEN_EDX_FILTERS_CONFIG = {\n       \"org.openedx.xblock.lti_consumer.configuration.listed.v1\": {\n           \"fail_silently\": False,\n           \"pipeline\": [\n               \"lti_store.pipelines.GetLtiConfigurations\"\n           ]\n       }\n   }\n   ```\n5. Restart the LMS & Studio for the latest config to take effect\n   ```sh\n   make lms-restart\n   make studio-restart\n   ```\n\nNow any changes made to the source code should reflect in the application\n\n## Adding LTI Tools to the store\n\n1. Go to `http://localhost:18000/admin`\n2. Look for `LTI_STORE` and add **External lti configurations** by clicking `+ Add` button\n\n## Use configuration on LTI consumer XBlock\n\n1. Go to `http://localhost:18000/admin`\n2. Look for `LTI_STORE` and go to **External lti configurations**\n3. On the list of external LTI configurations, note down the \"Filter Key\" value\n   of the configuration to use (Example: `lti_store:1`).\n4. Copy \"Filter Key\" to the \"External ID\" field on the LTI consumer XBlock.\n\n## Linting\n\nThe project uses [Black](https://black.readthedocs.io/en/stable/) for linting. To lint the code\n\n```\nmake lint\n```\n\n## Testing\n\nUnit tests can be run with\n\n```\nmake test\n```\n\n\nChange Log\n==========\n\nUnreleased\n----------\n\n*\n\n1.1.2 - 2025-09-19\n------------------\n\n### Fixed\n\n* Fixed issue with LTI 1.3 public JWK not being included in serialized config.\n\n1.1.0 \u2013 2025-05-21\n------------------\n\n### Added\n\n* Initial release to PyPI.\n* CI pipelines.\n* Django 5.2 support.\n",
    "bugtrack_url": null,
    "license": "AGPL 3.0",
    "summary": "An app for storing LTI provider configurations centrally.",
    "version": "1.1.2",
    "project_urls": {
        "Homepage": "https://github.com/openedx/openedx-ltistore"
    },
    "split_keywords": [
        "python",
        "edx"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bf83e374701b7c3bb9301eff68497c0572edb7d03f01204e8196a73f3fae2231",
                "md5": "58142b10b0da91d01897d528c7cc7d16",
                "sha256": "6912497d012cac0f3841023e6c9300d3d2d672b1c6b2021a44ed26bfd710ac48"
            },
            "downloads": -1,
            "filename": "openedx_ltistore-1.1.2-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "58142b10b0da91d01897d528c7cc7d16",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.11",
            "size": 22488,
            "upload_time": "2025-09-19T11:24:38",
            "upload_time_iso_8601": "2025-09-19T11:24:38.270001Z",
            "url": "https://files.pythonhosted.org/packages/bf/83/e374701b7c3bb9301eff68497c0572edb7d03f01204e8196a73f3fae2231/openedx_ltistore-1.1.2-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "238a048b4c373779bb5bee862e70bd4ce66fc4aeede4dfc9f79dfbed117c1e7d",
                "md5": "3eb360c83154997d87cfe110026a6be4",
                "sha256": "ccb33cde9eb1368c00edab8a06c69c3aecce82497aba9279990d11980b3c0566"
            },
            "downloads": -1,
            "filename": "openedx_ltistore-1.1.2.tar.gz",
            "has_sig": false,
            "md5_digest": "3eb360c83154997d87cfe110026a6be4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 23947,
            "upload_time": "2025-09-19T11:24:40",
            "upload_time_iso_8601": "2025-09-19T11:24:40.283743Z",
            "url": "https://files.pythonhosted.org/packages/23/8a/048b4c373779bb5bee862e70bd4ce66fc4aeede4dfc9f79dfbed117c1e7d/openedx_ltistore-1.1.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-19 11:24:40",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "openedx",
    "github_project": "openedx-ltistore",
    "github_not_found": true,
    "lcname": "openedx-ltistore"
}
        
edX
Elapsed time: 1.86635s