Skip to main content

panorama-openedx-backend

This is a Django app for Open edX that implements all backend functions needed by the Panorama MFE to work.

PyPI CI Documentation Supported Python versions License status-badge

Purpose

Django app that implements backend functions for Panorama MFE.

Panorama is the analytics system for Open edX and more.

This code is not intended to be installed by itself. To install Panorama in your Open edX instance, install the Panorama Tutor plugin.

Getting Started With Development

The Tutor 22 / Verawood target uses Python 3.12 and Django 5.2. The checked compatibility reference is edx-platform release/verawood.1, commit 9e67d1429d5ab49a36fb9881a26457efeee0bb89. The local platform checkout used for source checks was release/verawood at 259473c5dfd1c82eac5e6c4d14bf6095cb25824d; these are different commits, with matching shared dependency pins. requirements/verawood.txt records the shared pins from the exact release. They are compatibility baselines, not a claim that they are the newest security fixes. Review newer fixes with the platform maintainer; do not upgrade the LMS SDK independently or install development locks into the LMS. Package requirements admit Verawood's AWS SDK without the old forced downgrade to 1.40.62.

Use an isolated Python 3.12 environment:

python3.12 -m venv .venv
.venv/bin/pip install -r requirements/test.txt -e .
.venv/bin/pytest
.venv/bin/python manage.py check
.venv/bin/python manage.py makemigrations --check --dry-run
.venv/bin/pip check

To recompile the dependent locks with Python 3.12, run pip-compile --constraint requirements/verawood.txt --output-file requirements/NAME.txt requirements/NAME.in for base, test, doc, quality, ci, then dev, in that order. Add --allow-unsafe when compiling quality and dev so pip-tools includes setuptools, which is required to lint setup.py and is not bundled with Python 3.12 virtual environments. The inputs also include the Verawood constraints, so direct compilation preserves the platform pins. Existing compatible lock pins are retained without --upgrade; new or incompatible dependencies may resolve to newer versions from the index. Do not use --no-index unless you provide an offline package source. To deliberately upgrade other dependencies, use make upgrade: it updates unconstrained transitives while retaining the Verawood pins, including Django. Review the lock diffs and rerun CI after either operation. Recheck the release constraints whenever the target platform commit changes. Published package requirements come from requirements/runtime.in, which keeps compatible ranges instead of imposing the development locks on the LMS.

Verawood access and migration checks

Dashboard embedding now enforces the existing access endpoint's policy: DEMO/FREE allow superusers; SAAS/CUSTOM allow explicit dashboard grants, superusers, or authenticated learners when student view is enabled. Console embedding additionally requires the explicit AUTHOR role, including for superusers. Both embedding endpoints require HTTPS. Authentication failures retain DRF's configured session/JWT behavior; denied grants return 403 before any provider request. Provider timeouts return 504; malformed JSON, SDK and connection failures return 502; missing configuration returns 400. Upstream 401/403 remain access errors, without leaking response bodies or credentials. Successful response envelopes are unchanged.

Apply committed migration 0008_normalize_reader_role with migrate (never generate migrations during initialization). It changes only historical Reader values to READER and updates the default. Inspect existing roles before upgrading with UserAccessConfiguration.objects.values('role').annotate( count=Count('id')) in the LMS shell (import Count from django.db.models). Other unexpected spellings are left for explicit operator review. Reversing this migration retains normalized data because the original spelling cannot be reconstructed safely.

Student URL parameters userId and lms are client-controlled display filters, not authorization. Before enabling student view, verify dataset-side learner/tenant isolation with two students and tampered fragment parameters. This repository cannot establish isolation for deployed datasets.

Local regression tests use SQLite and mocked providers. Staging still needs the final Verawood LMS image's plugin discovery, URL inclusion, settings, migrate, pip check, session/JWT login/expiry, real profile lookup, and registered-user dashboard/console embedding. No external services are needed for the local tests, and no local test proves production QuickSight isolation.

Please see the Open edX documentation for guidance on Python development in this repo.

Deploying

To deploy for development, add a simple Tutor plugin with:

from tutor import hooks as tutor_hooks

tutor_hooks.Filters.MOUNTED_DIRECTORIES.add_item(("openedx", "panorama-openedx-backend"))

Then use tutor mounts to mount your local copy of the repo.

Getting Help

Contact

Contact us at https://aulasneo.com if you need support.

License

The code in this repository is licensed under the Not open source unless otherwise noted.

Please see LICENSE.txt for details.

Contributing

Contributions are very welcome.

This project is currently accepting all types of contributions, bug fixes, security fixes, maintenance work, or new features. However, please make sure to have a discussion about your new feature idea with the maintainers prior to beginning development to maximize the chances of your change being accepted. You can start a conversation by creating a new issue on this repo summarizing your idea.

Reporting Security Issues

Please do not report security issues in public. Please email info@aulasneo.com.

Metadata

Release files for panorama-openedx-backend 22.0.0

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

Source distribution (sdist)

Source distribution for panorama-openedx-backend 22.0.0
File Size Uploaded
panorama_openedx_backend-22.0.0.tar.gz 26.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for panorama-openedx-backend 22.0.0
File Interpreter ABI Platform
panorama_openedx_backend-22.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 48.3 kB

Release files / panorama_openedx_backend-22.0.0.tar.gz

Download URL panorama_openedx_backend-22.0.0.tar.gz
Size 26.7 kB
Tags Source
SHA-256 checksum
How to use checksums
7cbae722a58dac54732cdaa034076334a95ccd36f37688359903188ed4122512
BLAKE2b-256 checksum
How to use checksums
fea843f9dceea183d3c623110e1f622c2f955ce03ac83ef1fe8b91bbe78db877
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release files / panorama_openedx_backend-22.0.0-py3-none-any.whl

Download URL panorama_openedx_backend-22.0.0-py3-none-any.whl
Size 21.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3dd11e0fc413e5c4e023d372c5355c06ca21177f448ece26de5271c572c8b6ad
BLAKE2b-256 checksum
How to use checksums
22e175771b02606ecaf5c98c83614065e965251b544e2aebe2e09a5a0697a118
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

22.0.0 This release

2 release files

20.0.4

2 release files

20.0.3

2 release files

20.0.2

2 release files

20.0.1

2 release files

20.0.0

2 release files

16.0.9

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