Skip to main content

Open edX Core: Foundational Packages for a Teaching & Learning Platform

Project description

PyPI CI Codecov Documentation Supported Python versions License

Overview

Formerly known as “Learning Core” or “openedx-learning”.

The openedx-core project holds Django apps which represent core teaching & learning platform concepts.

Each app exposes stable, public API of Python functions and Django models. Some apps additionally provides REST APIs. These APIs are suitable for use in openedx-platform as well as in community-developed Open edX plugins.

Motivation

The short term goal of this project is to create a small, extensible core that is easier to reason about and write extensions for than openedx-platform. The longer term goal is to create a more nimble core learning platform, enabling rapid experimentation and drastic changes to the learner experience that are difficult to implement with Open edX today.

Replacing openedx-platform is explicitly not a goal of this project, as only a small fraction of the concepts in openedx-platform make sense to carry over here. When these core concepts are extracted and the data migrated, openedx-platform will import apps from this repo and make use of their public in-process APIs.

Architecture

Open edX Core Package Dependencies

Open edX Core code should never import from openedx-platform.

We want to be very strict about dependency management internally as well. Please read the .importlinter config file file and the Python API Conventions ADR for more details.

Model Conventions

We have a few different identifier types in the schema, and we try to avoid _id for this because Django uses that convention to reference IDs in other models/tables. So instead we have:

  • id is the auto-generated, internal row ID and primary key. This never changes. Data models should make foreign keys to this field, as per Django convention.

  • uuid is a randomly generated UUID4. This is the stable way to refer to a row/resource from an external service. This never changes. This is separate from id mostly because there are performance penalties when using UUIDs as primary keys with MySQL.

  • key is intended to be a case-sensitive, alphanumeric key, which holds some meaning to library clients. This is usually stable, but can be changed, depending on the business logic of the client. The apps in this repo should make no assumptions about it being stable. It can be used as a suffix. Since key is a reserved name on certain database systems, the database field is _key.

  • num is like key, but for use when it’s strictly numeric. It can also be used as a suffix.

See Also

The structure of this repo follows [OEP-0049](https://open-edx-proposals.readthedocs.io/en/latest/architectural-decisions/oep-0049-django-app-patterns.html) where possible, and also borrows inspiration from:

Code Overview

  • ./src/: All published code. Packages are importable relative to this directory (e.g., import openedx_content). See readme.rst in each sub-folder.

  • ./tests/: Unit tests (not published).

  • ./test_utils/: Internal helpers for unit tests (not published).

  • ./olx_importer/: Internal utility for importing data for development (not published).

License

The code in this repository is licensed under the AGPL 3.0 unless otherwise noted.

Please see LICENSE.txt for details.

How To Contribute

This repo is in a very experimental state. Discussion using GitHub Issues is welcome, but you probably don’t want to make contributions as everything can shift around drastically with little notice.

Reporting Security Issues

Please do not report security issues in public. Please email security@openedx.org.

Help

If you’re having trouble, we have discussion forums at https://discuss.openedx.org where you can connect with others in the community.

Our real-time conversations are on Slack. You can request a Slack invitation, then join our community Slack workspace.

For more information about these options, see the Getting Help page.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openedx_core-0.38.2.tar.gz (207.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openedx_core-0.38.2-py2.py3-none-any.whl (281.4 kB view details)

Uploaded Python 2Python 3

File details

Details for the file openedx_core-0.38.2.tar.gz.

File metadata

  • Download URL: openedx_core-0.38.2.tar.gz
  • Upload date:
  • Size: 207.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for openedx_core-0.38.2.tar.gz
Algorithm Hash digest
SHA256 969f1334b297df84576ed2f128f6aa8b050f654c651d694d817f7692a2803417
MD5 8bb2600e194250880750b35fae6fa166
BLAKE2b-256 6af9d0721e367a515eebea2854fa96f9377fcd44d0989582e4c80a5cb36500f3

See more details on using hashes here.

File details

Details for the file openedx_core-0.38.2-py2.py3-none-any.whl.

File metadata

  • Download URL: openedx_core-0.38.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 281.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for openedx_core-0.38.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f24ef0edc250fa9733b76e0d3db8c93c893f7fc03365cde89ab38b5e61a63b7e
MD5 010c6ac381a77e6cbaf997dd5482a7e0
BLAKE2b-256 8ab792baa520e4bb99380d8e2138e48be3f50ea8d6398e971dfde2f4b65bbdbb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page