Releases: openedx/openedx-core
0.43.0
Release Notes: v0.39.2 → v0.43.0
Generated by Claude based on the commit messages, reviewed by @kdmccormick .
This release is dominated by the "keys cleanup" initiative (#322, OEP-68). Various key fields throughout the codebase have been renamed to be more descriptive and intentional: collection_code, component_code, container_code, entity_ref, package_ref, and path. The goal is to stop treating these fields as parseable pseudo-keys and instead make their roles explicit: "codes" are human-readable slugs scoped within a LearningPackage, while "refs" are opaque externally-supplied identifiers whose internal structure should not be assumed.
Additionally, PublishLogRecord now tracks whether each record was a direct or indirect result of a publish action, enabling richer publish history UX.
Backup-restore continues to read and write the old key field names in TOML files for backwards compatibility with Ulmo-era archives. This may change in a future "v2" format.
openedx_django_lib
- Renamed
key_field(...)→ref_field(...).
models
- Renamed
LearningPackage.key→LearningPackage.package_ref. - Renamed
PublishableEntity.key→PublishableEntity.entity_ref. - Renamed
PublishableEntityMixin.key→PublishableEntityMixin.entity_ref. - Renamed property
PublishableEntityVersion.key→PublishableEntityVersion.entity_ref. - Renamed
Collection.key→Collection.collection_code. Now validates against[A-Za-z0-9\-\_\.]+. - Renamed
Component.local_key→Component.component_code. Now validates against[A-Za-z0-9\-\_\.]+withmax_length=255(was 500). - Added
Container.container_codefield andContainer.learning_packageFK.UniqueConstrainton(learning_package, container_code)— unlike components, container codes are not scoped by type. For existing containers,container_codeis backfilled from the entity key via data migration. - Renamed
ComponentVersionMedia.key→ComponentVersionMedia.path. - Added
PublishLogRecord.directfield (nullable boolean).True= explicitly requested by the author,False= indirectly published/affected,None= pre-existing record where intent cannot be determined retroactively.
publishing
- In
create_learning_package(...),update_learning_package(...),learning_package_exists(...): renamed paramkey→package_ref. - In
create_publishable_entity(...): renamed paramkey→entity_ref. - Renamed
get_publishable_entity_by_key(...)→get_publishable_entity_by_ref(...), paramkey→entity_ref. - Renamed
get_learning_package_by_key(...)→get_learning_package_by_ref(...), paramkey→package_ref. PublishLogRecord.directis now populated during publish operations to distinguish direct vs. indirect publish records.
components
- Renamed
Component.local_key→Component.component_codein all API functions:create_component(...),create_component_and_version(...),get_component_by_key(...)→get_component_by_code(...),component_exists_by_key(...)→component_exists_by_code(...). - Removed
get_or_create_component_type_by_entity_key().
containers
create_container(...),create_container_and_version(...), and their typed wrappers (create_unit_and_version(...),create_subsection_and_version(...),create_section_and_version(...)): paramkey→container_code.- Renamed
get_container_by_key(...)→get_container_by_code(...), paramkey→container_code. - Renamed
get_container_children_entities_keys(...)→get_container_children_entity_refs(...).
collections
- All API functions (
create_collection,get_collection,update_collection,delete_collection,restore_collection,add_to_collection,remove_from_collection,get_collection_entities): paramkey/collection_key→collection_code. - In
get_entity_collections(...): renamed paramentity_key→entity_ref.
media
- In
create_component_version_media(...): renamed paramkey→path. - In
look_up_component_version_media(...): renamed paramkey→path,learning_package_key→learning_package_ref,component_key→entity_ref. - In the
add_assets_to_componentmanagement command: renamed argumentslearning_package_key→learning_package_ref,component_key→entity_ref.
backup_restore
- In
load_learning_package(...): renamed paramkey→package_ref. - In the return dict, within
["lp_restored_data"]: renamed["key"]→["package_ref"],["archive_lp_key"]→["archive_package_ref"],["archive_org_key"]→["archive_org_code"],["archive_slug"]→["archive_package_code"]. Ifarchive_package_refcannot be parsed into{prefix}:{org_code}:{package_code}, thenarchive_org_codeandarchive_package_codewill beNone(previously raisedValueError). - Fixed a bug where
version_numwas incorrectly passed tocreate_next_container_version()when restoring archives with published containers, causing aTypeError.
Other
- Upgraded Python testing requirements.
Full changelog
v0.39.2
What's Changed
- Better handling of IntegrityError in tagging REST APIs by @jesperhodge in #536
- Tagging APIs can properly report implicit tag usage counts by @tbain in #506
New Contributors
Full Changelog: v0.39.0...v0.39.2
v0.39.0
What's Changed
- Add type annotations for primary key types by model by @bradenmacdonald in #534
Full Changelog: v0.38.3...v0.39.0
v0.38.3
What's Changed
- docs: update ADRs with "Status" notes as of 2026 by @bradenmacdonald in #531
- chore: Upgrade Python requirements by @edx-requirements-bot in #532
- chore: Upgrade Python requirements by @edx-requirements-bot in #537
- fix: Update Search Index after Tag update by @jesperhodge in #530
New Contributors
- @jesperhodge made their first contribution in #530
Full Changelog: v0.38.2...v0.38.3
v0.38.2
v0.38.1
What's Changed
- docs: update docstring to reflect Content->Media rename by @ormsbee in https://github.com/openedx/openedx-
- Remove "descendant_count" to optimize large taxonomies by @bradenmacdonald in #517
- fix: Make container_type backfill reversible by @kdmccormick in #528
Full Changelog: v0.38.0...v0.38.1
v0.38.0
What's Changed
- chore: Upgrade Python requirements by @edx-requirements-bot in #503
- chore: Upgrade Python requirements by @edx-requirements-bot in #512
- feat: Improve handling of deep taxonomies (perf + limits + bugfixes) by @bradenmacdonald in #511
- docs: add ADR 0022 assessment criteria model by @mgwozdz-unicon in #474
- Add ContainerTypes to openedx-core by @bradenmacdonald in #495
Full Changelog: v0.37.0...v0.38.0
v0.37.0
v0.36.0
What's Changed
- chore: Upgrade Python requirements by @edx-requirements-bot in #490
- chore: Upgrade Python requirements by @edx-requirements-bot in #494
- build: Restore py.typed so that our code exports with typing info by @kdmccormick in #493
- chore: Upgrade Python requirements by @edx-requirements-bot in #498
- CBE assessment criteria location adr by @mgwozdz-unicon in #475
- An openedx_catalog app with a representation for CourseRuns by @bradenmacdonald in #479
New Contributors
- @mgwozdz-unicon made their first contribution in #475
Full Changelog: v0.35.0...v0.36.0