An experiment.
Project description
This is experimentation/prototyping and not in any way production ready!
Overview
The Open edX Learning repository holds Django apps that represent core learning concepts and data models that have been extracted from edx-platform.
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 edx-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 edx-platform is explicitly not a goal of this project, as only a small fraction of the concepts in edx-platform make sense to carry over here. When these core concepts are extracted and the data migrated, edx-platform will import apps from this repo and make use of their public in-process APIs.
Architecture
Parts
openedx_learning.lib is for shared utilities, and may include things like custom field types, plugin registration code, etc.
openedx_learning.core contains our Core Django apps, where foundational data structures and APIs will live.
openedx_tagging.core contains the core Tagging app, which provides data structures and apis for tagging Open edX objects.
App Dependencies
Anything can import from openedx_learning.lib.
Core apps can import from each other, but cannot import from other apps outside of core. For those apps:
learning_publishing has no dependencies. All the other apps depend on it.
learning_composition and learning_navigation both depend on learning_partitioning
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.
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:
[Scaling Django to 500 apps](https://2021.djangocon.us/talks/scaling-django-to-500-apps/) (Dan Palmer, DjangoCon US 2021)
[Django structure for scale and longevity](https://www.youtube.com/watch?v=yG3ZdxBb1oo) (Radoslav Georgiev, EuroPython 2018)
Code Overview
The openedx_learning.apps package contains all our Django applications. All apps are named with a learning_ prefix to better avoid name conflicts, because Django’s app namespace is flat. Apps will adhere to OEP-0049: Django App Patterns.
Development Workflow
One Time Setup
# Clone the repository
git clone git@github.com:ormsbee/openedx-learning.git
cd openedx-learning
# Set up a virtualenv using virtualenvwrapper with the same name as the repo and activate it
mkvirtualenv -p python3.8 openedx-learning
Every time you develop something in this repo
# Activate the virtualenv
workon openedx-learning
# Grab the latest code
git checkout master
git pull
# Install/update the dev requirements
make requirements
# Run the tests and quality checks (to verify the status before you make any changes)
make validate
# Make a new branch for your changes
git checkout -b <your_github_username>/<short_description>
# Using your favorite editor, edit the code to make your change.
vim …
# Run your new tests
pytest ./path/to/new/tests
# Run all the tests and quality checks
make validate
# Commit all your changes
git commit …
git push
# Open a PR and ask for review.
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.
Change Log
Unreleased
Removed usage of tox-battery and added support for tox 4.0
Switch from edx-sphinx-theme to sphinx-book-theme since the former is deprecated. See https://github.com/openedx/edx-sphinx-theme/issues/184 for more details.
[0.1.0] - 2021-08-08
Added
First release on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for openedx_learning-0.6.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8b25b32b5fb515f8f3f68f4a86b61cc6e39fdb4e83af53c30951a1756484f017 |
|
MD5 | fb4334453a5cd703c2836a4e46838527 |
|
BLAKE2b-256 | b4e89df4940cda8abe21d6c272ecb13c1e03d8ea75a5e06604fe55bbc0c42685 |