diff --git a/cms/djangoapps/contentstore/migrations/0015_alter_componentlink_upstream_block_and_more.py b/cms/djangoapps/contentstore/migrations/0015_alter_componentlink_upstream_block_and_more.py new file mode 100644 index 000000000000..b57da0da34f1 --- /dev/null +++ b/cms/djangoapps/contentstore/migrations/0015_alter_componentlink_upstream_block_and_more.py @@ -0,0 +1,31 @@ +# Generated by Django 5.2.10 on 2026-01-25 21:52 + +import django.db.models.deletion +from django.db import migrations, models +from django.db.migrations.operations.special import SeparateDatabaseAndState + + +class Migration(migrations.Migration): + + dependencies = [ + ('contentstore', '0014_remove_componentlink_downstream_is_modified_and_more'), + ('openedx_content', '0001_initial'), + ] + + operations = [ + SeparateDatabaseAndState( + database_operations=[], + state_operations=[ + migrations.AlterField( + model_name='componentlink', + name='upstream_block', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='links', to='openedx_content.component'), + ), + migrations.AlterField( + model_name='containerlink', + name='upstream_container', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='links', to='openedx_content.container'), + ), + ] + ), + ] diff --git a/cms/djangoapps/modulestore_migrator/migrations/0007_alter_modulestoreblockmigration_change_log_record_and_more.py b/cms/djangoapps/modulestore_migrator/migrations/0007_alter_modulestoreblockmigration_change_log_record_and_more.py new file mode 100644 index 000000000000..c5b504b6ae67 --- /dev/null +++ b/cms/djangoapps/modulestore_migrator/migrations/0007_alter_modulestoreblockmigration_change_log_record_and_more.py @@ -0,0 +1,46 @@ +# Generated by Django 5.2.10 on 2026-01-25 21:52 + +import django.db.models.deletion +from django.db import migrations, models +from django.db.migrations.operations.special import SeparateDatabaseAndState + + +class Migration(migrations.Migration): + + dependencies = [ + ('modulestore_migrator', '0006_alter_modulestoreblocksource_forwarded_and_more'), + ('openedx_content', '0001_initial'), + ] + + operations = [ + SeparateDatabaseAndState( + database_operations=[], + state_operations=[ + migrations.AlterField( + model_name='modulestoreblockmigration', + name='change_log_record', + field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='openedx_content.draftchangelogrecord'), + ), + migrations.AlterField( + model_name='modulestoreblockmigration', + name='target', + field=models.ForeignKey(blank=True, help_text='The target entity of this block migration, set to null if it fails to migrate', null=True, on_delete=django.db.models.deletion.CASCADE, to='openedx_content.publishableentity'), + ), + migrations.AlterField( + model_name='modulestoremigration', + name='change_log', + field=models.ForeignKey(help_text='Changelog entry in the target learning package which records this migration', null=True, on_delete=django.db.models.deletion.SET_NULL, to='openedx_content.draftchangelog'), + ), + migrations.AlterField( + model_name='modulestoremigration', + name='target', + field=models.ForeignKey(help_text='Content will be imported into this library', on_delete=django.db.models.deletion.CASCADE, to='openedx_content.learningpackage'), + ), + migrations.AlterField( + model_name='modulestoremigration', + name='target_collection', + field=models.ForeignKey(blank=True, help_text='Optional - Collection (within the target library) into which imported content will be grouped', null=True, on_delete=django.db.models.deletion.SET_NULL, to='openedx_content.collection'), + ), + ] + ), + ] diff --git a/cms/envs/common.py b/cms/envs/common.py index ceaa86756caa..f0371952f833 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -45,6 +45,7 @@ from datetime import timedelta from django.utils.translation import gettext_lazy as _ +from openedx_learning.api.django import openedx_learning_apps_to_install from openedx.envs.common import * # pylint: disable=wildcard-import @@ -897,14 +898,7 @@ def make_lms_template_path(settings): 'openedx_events', - # Learning Core Apps, used by v2 content libraries (content_libraries app) - "openedx_learning.apps.authoring.collections", - "openedx_learning.apps.authoring.components", - "openedx_learning.apps.authoring.contents", - "openedx_learning.apps.authoring.publishing", - "openedx_learning.apps.authoring.units", - "openedx_learning.apps.authoring.subsections", - "openedx_learning.apps.authoring.sections", + *openedx_learning_apps_to_install(), ] ### Apps only installed in some instances diff --git a/lms/envs/common.py b/lms/envs/common.py index 0419633f583e..935bfb6d973e 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -60,6 +60,7 @@ PROVISIONING_PENDING_ENTERPRISE_CUSTOMER_ADMIN_ROLE, DEFAULT_ENTERPRISE_ENROLLMENT_INTENTIONS_ROLE, ) +from openedx_learning.api.django import openedx_learning_apps_to_install from openedx.core.lib.derived import Derived from openedx.envs.common import * # pylint: disable=wildcard-import @@ -2019,14 +2020,15 @@ 'openedx_events', - # Learning Core Apps, used by v2 content libraries (content_libraries app) - "openedx_learning.apps.authoring.collections", - "openedx_learning.apps.authoring.components", - "openedx_learning.apps.authoring.contents", - "openedx_learning.apps.authoring.publishing", - "openedx_learning.apps.authoring.units", - "openedx_learning.apps.authoring.subsections", - "openedx_learning.apps.authoring.sections", + # The openedx_learning apps require contentstore, modulestore_migrator, + # content.search, and content_staging to be in INSTALLED_APPS. If they are + # not here and LMS migrations are run before CMS migrations, it will cause + # errors (certain openedx_learning apps ) + *openedx_learning_apps_to_install(), + 'cms.djangoapps.contentstore', + 'cms.djangoapps.modulestore_migrator', + 'openedx.core.djangoapps.content.search', + 'openedx.core.djangoapps.content_staging', ] # Add LMS specific optional apps diff --git a/openedx/core/djangoapps/content_libraries/migrations/0012_alter_contentlibrary_learning_package.py b/openedx/core/djangoapps/content_libraries/migrations/0012_alter_contentlibrary_learning_package.py new file mode 100644 index 000000000000..774875597bc1 --- /dev/null +++ b/openedx/core/djangoapps/content_libraries/migrations/0012_alter_contentlibrary_learning_package.py @@ -0,0 +1,26 @@ +# Generated by Django 5.2.9 on 2026-01-25 19:44 + +import django.db.models.deletion +from django.db import migrations, models +from django.db.migrations.operations.special import SeparateDatabaseAndState + + +class Migration(migrations.Migration): + + dependencies = [ + ('content_libraries', '0011_remove_contentlibrary_bundle_uuid_and_more'), + ('openedx_content', '0001_initial'), + ] + + operations = [ + SeparateDatabaseAndState( + database_operations=[], + state_operations=[ + migrations.AlterField( + model_name='contentlibrary', + name='learning_package', + field=models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.RESTRICT, to='openedx_content.learningpackage'), + ), + ] + ), + ] diff --git a/requirements/constraints.txt b/requirements/constraints.txt index d4b7fcb7cf46..39d038294c80 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -63,7 +63,7 @@ numpy<2.0.0 # Date: 2023-09-18 # pinning this version to avoid updates while the library is being developed # Issue for unpinning: https://github.com/openedx/edx-platform/issues/35269 -openedx-learning==0.30.2 +# openedx-learning==0.30.1 # Date: 2023-11-29 # Open AI version 1.0.0 dropped support for openai.ChatCompletion which is currently in use in enterprise. diff --git a/requirements/edx/base.txt b/requirements/edx/base.txt index d59b577a21dc..fa1d48847408 100644 --- a/requirements/edx/base.txt +++ b/requirements/edx/base.txt @@ -834,7 +834,7 @@ openedx-filters==2.1.0 # ora2 openedx-forum==0.4.0 # via -r requirements/edx/kernel.in -openedx-learning==0.30.2 +git+https://github.com/ormsbee/openedx-learning.git@big-authoring#egg=openedx_learning # via # -c requirements/constraints.txt # -r requirements/edx/kernel.in diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index b24c0fb4bebe..88a39e5c2ea1 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -1404,7 +1404,7 @@ openedx-forum==0.4.0 # via # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt -openedx-learning==0.30.2 +git+https://github.com/ormsbee/openedx-learning.git@big-authoring#egg=openedx_learning # via # -c requirements/constraints.txt # -r requirements/edx/doc.txt diff --git a/requirements/edx/doc.txt b/requirements/edx/doc.txt index c721a39e06fb..b4ed9843329c 100644 --- a/requirements/edx/doc.txt +++ b/requirements/edx/doc.txt @@ -1013,7 +1013,7 @@ openedx-filters==2.1.0 # ora2 openedx-forum==0.4.0 # via -r requirements/edx/base.txt -openedx-learning==0.30.2 +git+https://github.com/ormsbee/openedx-learning.git@big-authoring#egg=openedx_learning # via # -c requirements/constraints.txt # -r requirements/edx/base.txt diff --git a/requirements/edx/testing.txt b/requirements/edx/testing.txt index 20cf145c3c2a..b17bb26aecae 100644 --- a/requirements/edx/testing.txt +++ b/requirements/edx/testing.txt @@ -1063,7 +1063,7 @@ openedx-filters==2.1.0 # ora2 openedx-forum==0.4.0 # via -r requirements/edx/base.txt -openedx-learning==0.30.2 +git+https://github.com/ormsbee/openedx-learning.git@big-authoring#egg=openedx_learning # via # -c requirements/constraints.txt # -r requirements/edx/base.txt