Product
Introducing License Enforcement in Socket
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
|pypi-badge| |ci-badge| |codecov-badge| |doc-badge| |pyversions-badge| |license-badge|
The openedx_learning
package holds Django apps that represent core learning concepts and data models that have been extracted from edx-platform. At the moment, this repo also contains the openedx_tagging
package, but this will likely be moved out in the future.
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.
Parts
* ``openedx_learning.lib`` is for shared utilities, and may include things like custom field types, plugin registration code, etc.
* ``openedx_learning.apps`` contains our Learning Core Django apps, where foundational data structures and APIs will live. The first of these is ``authoring``, which holds apps related to the editing and publishing of learning content.
* ``openedx_tagging.core`` contains the core Tagging app, which provides data structures and apis for tagging Open edX objects.
Learning Core Package Dependencies
Learning Core code should never import from edx-platform
.
We want to be very strict about dependency management internally as well. Please read the .importlinter config file <.importlinter>
_ file and the Python API Conventions ADR <docs/decisions/0016-python-public-api-conventions>
_ 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:
* [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.
Development Workflow
--------------------
One Time Setup
~~~~~~~~~~~~~~
.. code-block::
# 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.11 openedx-learning
Every time you develop something in this repo
.. code-block::
workon openedx-learning
git checkout master git pull
make requirements
make validate
git checkout -b <your_github_username>/<short_description>
vim …
pytest ./path/to/new/tests
make validate
git commit … git push
The code in this repository is licensed under the AGPL 3.0 unless otherwise noted.
Please see LICENSE.txt <LICENSE.txt>
_ for details.
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.
Please do not report security issues in public. Please email security@openedx.org.
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.
.. _Slack invitation: https://openedx.org/slack .. _community Slack workspace: https://openedx.slack.com/ .. _Getting Help: https://openedx.org/getting-help
.. |pypi-badge| image:: https://img.shields.io/pypi/v/openedx-learning.svg :target: https://pypi.python.org/pypi/openedx-learning/ :alt: PyPI
.. |ci-badge| image:: https://github.com/openedx/openedx-learning/workflows/Python%20CI/badge.svg?branch=master :target: https://github.com/openedx/openedx-learning/actions :alt: CI
.. |codecov-badge| image:: https://codecov.io/github/edx/openedx-learning/coverage.svg?branch=master :target: https://codecov.io/github/edx/openedx-learning?branch=master :alt: Codecov
.. |doc-badge| image:: https://readthedocs.org/projects/openedx-learning/badge/?version=latest :target: https://openedx-learning.readthedocs.io/en/latest/ :alt: Documentation
.. |pyversions-badge| image:: https://img.shields.io/pypi/pyversions/openedx-learning.svg :target: https://pypi.python.org/pypi/openedx-learning/ :alt: Supported Python versions
.. |license-badge| image:: https://img.shields.io/github/license/edx/openedx-learning.svg :target: https://github.com/openedx/openedx-learning/blob/master/LICENSE.txt :alt: License
.. All enhancements and patches to openedx-learning will be documented in this file. It adheres to the structure of https://keepachangelog.com/ , but in reStructuredText instead of Markdown (for ease of incorporation into Sphinx documentation and the PyPI description).
This project adheres to Semantic Versioning (https://semver.org/).
.. There should always be an "Unreleased" section for changes pending release.
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
FAQs
Open edX Learning Core and Tagging.
We found that openedx-learning demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
Product
We're launching a new set of license analysis and compliance features for analyzing, managing, and complying with licenses across a range of supported languages and ecosystems.
Product
We're excited to introduce Socket Optimize, a powerful CLI command to secure open source dependencies with tested, optimized package overrides.