Overview
edx-when is designed to be the central source of dates for the LMS. This repository is deployed to PyPI and designed to be installed and imported by an installation of edx-platform. As part of being integrated into edx-platform, edx-when shares the same database as the rest of the platform. It is written to by Studio when a Course is published (via https://github.com/openedx/edx-platform/blob/master/openedx/core/djangoapps/course_date_signals/handlers.py) and then the LMS reads from it in several locations. This repo contains start, end, and due dates for Courses and offers the functionality to have both absolute and relative dates.
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
Contributions are very welcome.
Please read How To Contribute for details.
PR description template should be automatically applied if you are sending PR from github interface; otherwise you can find it it at PULL_REQUEST_TEMPLATE.md
Issue report template should be automatically applied if you are sending it from github UI as well; otherwise you can find it at ISSUE_TEMPLATE.md
Reporting Security Issues
Please do not report security issues in public. Please email security@openedx.org.
Getting Help
Have a question about this repository, or about Open edX in general? Please refer to this list of resources if you need any assistance.
Change Log
Unreleased
[4.1.0] - 2026-08-13
Add update_or_create_assignments_due_dates API to bulk upsert assignment due dates into ContentDate inside a single transaction.
Add the Assignment dataclass used as the input type of that API.
Extract _set_content_date_policy out of set_date_for_block so both write paths reuse an existing DatePolicy instead of creating duplicates.
[3.2.1] - 2026-02-20
Add distinct query by block and user in get_overrides_for_course to prevent duplicate overrides when a user has multiple overrides for the same block.
[3.2.0] - 2026-01-12
Extend ContentDate/UserDate models to support enhanced assignment metadata and future scheduling use cases.
[3.1.0] - 2026-01-09
Add get_overrides_for_course API to retrieve all overrides for a course.
Update get_overrides_for_block to also return email and location.
[3.0.0] - 2025-05-15
Dropped support for Python 3.8.
Added support for Python 3.12.
[2.5.1] - 2024-08-06
Reduce schedule queries by using a request cache for get_schedule_for_user.
[2.5.0] - 2024-04-02
Add support for Python 3.11. Dropped django32 support.
Switch from edx-sphinx-theme to sphinx-book-theme since the former is deprecated
[2.4.0] - 2023-06-21
Support added for Django 4.2
[2.3.0] - 2022-02-15
Added Django40 support
Dropped Django22, 30 and 31 support
[2.2.2] - 2021-10-21
Bug fix to bust cache when Personalized Learner Schedules are updated.
[2.2.1] - 2021-09-15
Bug fix for optimization in 2.2.0, to account for missing block_type data.
[2.2.0] - 2021-08-27
Added optimization when requesting course block dates for an outline, where block dates below subsections are unneeded.
Use current version of the course to improve the cache key, along with using the TieredCache to cache date data.
[2.1.0] - 2021-07-23
Added Django 3.2 Support
[2.0.0] - 2021-01-19
Dropped python3.5 support.
[1.3.2] - 2021-01-15
Don’t warn about missing schedules for relative dates. It happens for legitimate reasons, and the layer above can check instead.
[1.3.1] - 2020-11-19
Updated travis badge in README.rst to point to travis-ci.com instead of travis-ci.org
[1.3.0] - 2020-07-16
Django 3.x deprecation warnings are fixed
[1.2.9] - 2020-06-30
Don’t return due dates for enrollments originally created too close to the course end to allow for finishing the course in time.
[1.2.8] - 2020-06-17
Don’t return due dates for enrollments created after course end
[1.2.4] - 2020-06-01
Updates function in API for finding learners with a specific Schedule that has an assignment on a given day, to also be inclusive of absolute date schedules (everyone active in the course without an override).
[1.2.3] - 2020-04-30
Dropped support for Django versions below 2.2
Added support for python 3.8
[1.1.4] - 2019-03-30
Drop the active index from ContentDate. It has low cardinality and Aurora was doing a lot of extra work to try to do an intersect query with that and the course_id index, when using the latter by itself would be far more efficient.
[1.1.3] - 2019-03-25
Use memcache to cache ContentDate information in get_dates_for_course
[0.1.0] - 2019-03-04
Added
First release on PyPI.
Metadata
Release files for edx-when 4.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| edx_when-4.1.0.tar.gz | 46.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| edx_when-4.1.0-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 83.4 kB
Release files / edx_when-4.1.0.tar.gz
| Download URL | edx_when-4.1.0.tar.gz |
|---|---|
| Size | 46.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
72a7eb7ae2ceedbe688be6ca916e518270f42f3b2d5131ff259aeb5953877ddf
|
|
BLAKE2b-256 checksum How to use checksums |
37078520e1dd2f6f3a46716dba18d31cdb3805d54ccdb3f22f3cbcb1c87f2230
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / edx_when-4.1.0-py2.py3-none-any.whl
| Download URL | edx_when-4.1.0-py2.py3-none-any.whl |
|---|---|
| Size | 36.8 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
e40d9093233beea00b717d38ac70a974b6d7b443e8dc5847579da144387f06ee
|
|
BLAKE2b-256 checksum How to use checksums |
cffae6adfe0253a9ac7ebcf4892997104fa9c2823409317e7f4007c3b9fb07bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|