diff --git a/.github/workflows/unit-test-shards.json b/.github/workflows/unit-test-shards.json index 7184bf917ecb..784f607f06ba 100644 --- a/.github/workflows/unit-test-shards.json +++ b/.github/workflows/unit-test-shards.json @@ -238,7 +238,6 @@ "cms/djangoapps/cms_user_tasks/", "cms/djangoapps/course_creators/", "cms/djangoapps/export_course_metadata/", - "cms/djangoapps/import_from_modulestore/", "cms/djangoapps/maintenance/", "cms/djangoapps/models/", "cms/djangoapps/pipeline_js/", diff --git a/cms/djangoapps/import_from_modulestore/__init__.py b/cms/djangoapps/import_from_modulestore/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/cms/djangoapps/import_from_modulestore/apps.py b/cms/djangoapps/import_from_modulestore/apps.py deleted file mode 100644 index 81b4471daceb..000000000000 --- a/cms/djangoapps/import_from_modulestore/apps.py +++ /dev/null @@ -1,13 +0,0 @@ -""" -App for importing from the modulestore tools. -""" - -from django.apps import AppConfig - - -class ImportFromModulestoreConfig(AppConfig): - """ - App for importing legacy content from the modulestore. - """ - - name = 'cms.djangoapps.import_from_modulestore' diff --git a/cms/djangoapps/import_from_modulestore/data.py b/cms/djangoapps/import_from_modulestore/data.py deleted file mode 100644 index 998ea8dfc745..000000000000 --- a/cms/djangoapps/import_from_modulestore/data.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -This module contains the data models for the import_from_modulestore app. -""" -from collections import namedtuple -from enum import Enum -from openedx.core.djangoapps.content_libraries import api as content_libraries_api - -from django.db.models import TextChoices -from django.utils.translation import gettext_lazy as _ - - -class ImportStatus(TextChoices): - """ - The status of this modulestore-to-learning-core import. - """ - - NOT_STARTED = 'not_started', _('Waiting to stage content') - STAGING = 'staging', _('Staging content for import') - STAGING_FAILED = _('Failed to stage content') - STAGED = 'staged', _('Content is staged and ready for import') - IMPORTING = 'importing', _('Importing staged content') - IMPORTING_FAILED = 'importing_failed', _('Failed to import staged content') - IMPORTED = 'imported', _('Successfully imported content') - CANCELED = 'canceled', _('Canceled') - - -class CompositionLevel(Enum): - """ - Enumeration of composition levels for course content. - Defines the different levels of composition for course content, - including chapters, sequentials, verticals, and xblocks. - It also categorizes these levels into complicated and flat - levels for easier processing. - """ - - CHAPTER = content_libraries_api.ContainerType.Section - SEQUENTIAL = content_libraries_api.ContainerType.Subsection - VERTICAL = content_libraries_api.ContainerType.Unit - COMPONENT = 'component' - OLX_COMPLEX_LEVELS = [ - VERTICAL.olx_tag, - SEQUENTIAL.olx_tag, - CHAPTER.olx_tag, - ] - - @classmethod - def values(cls): - """ - Returns all levels of composition levels. - """ - return [composition_level.value for composition_level in cls] - - -PublishableVersionWithMapping = namedtuple('PublishableVersionWithMapping', ['publishable_version', 'mapping']) diff --git a/cms/djangoapps/import_from_modulestore/migrations/0001_initial.py b/cms/djangoapps/import_from_modulestore/migrations/0001_initial.py deleted file mode 100644 index a61040b9f19e..000000000000 --- a/cms/djangoapps/import_from_modulestore/migrations/0001_initial.py +++ /dev/null @@ -1,82 +0,0 @@ -# Generated by Django 4.2.20 on 2025-04-21 16:23 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields -import opaque_keys.edx.django.models -import uuid - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('content_staging', '0005_stagedcontent_version_num'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('oel_publishing', '0008_alter_draftchangelogrecord_options_and_more'), - ] - - operations = [ - migrations.CreateModel( - name='Import', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('status', models.CharField(choices=[('not_started', 'Waiting to stage content'), ('staging', 'Staging content for import'), ('Failed to stage content', 'Staging Failed'), ('staged', 'Content is staged and ready for import'), ('importing', 'Importing staged content'), ('importing_failed', 'Failed to import staged content'), ('imported', 'Successfully imported content'), ('canceled', 'Canceled')], db_index=True, default='not_started', max_length=100)), - ('source_key', opaque_keys.edx.django.models.LearningContextKeyField(db_index=True, help_text='The modulestore course', max_length=255)), - ('target_change', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='oel_publishing.draftchangelog')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name': 'Import from modulestore', - 'verbose_name_plural': 'Imports from modulestore', - }, - ), - migrations.CreateModel( - name='PublishableEntityMapping', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('source_usage_key', opaque_keys.edx.django.models.UsageKeyField(help_text='Original usage key/ID of the thing that has been imported.', max_length=255)), - ('target_entity', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='oel_publishing.publishableentity')), - ('target_package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='oel_publishing.learningpackage')), - ], - options={ - 'unique_together': {('source_usage_key', 'target_package')}, - }, - ), - migrations.CreateModel( - name='StagedContentForImport', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('source_usage_key', opaque_keys.edx.django.models.UsageKeyField(help_text='The original Usage key of the highest-level component that was saved in StagedContent.', max_length=255)), - ('import_event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='staged_content_for_import', to='import_from_modulestore.import')), - ('staged_content', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='staged_content_for_import', to='content_staging.stagedcontent')), - ], - options={ - 'unique_together': {('import_event', 'staged_content')}, - }, - ), - migrations.CreateModel( - name='PublishableEntityImport', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('import_event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='import_from_modulestore.import')), - ('resulting_change', models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='oel_publishing.draftchangelogrecord')), - ('resulting_mapping', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='import_from_modulestore.publishableentitymapping')), - ], - options={ - 'unique_together': {('import_event', 'resulting_mapping')}, - }, - ), - ] diff --git a/cms/djangoapps/import_from_modulestore/migrations/0002_drop_import_from_modulestore_all.py b/cms/djangoapps/import_from_modulestore/migrations/0002_drop_import_from_modulestore_all.py deleted file mode 100644 index 81639e71baf8..000000000000 --- a/cms/djangoapps/import_from_modulestore/migrations/0002_drop_import_from_modulestore_all.py +++ /dev/null @@ -1,65 +0,0 @@ -# Generated by Django 4.2.23 on 2025-08-19 16:21 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('import_from_modulestore', '0001_initial'), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='publishableentityimport', - unique_together=None, - ), - migrations.RemoveField( - model_name='publishableentityimport', - name='import_event', - ), - migrations.RemoveField( - model_name='publishableentityimport', - name='resulting_change', - ), - migrations.RemoveField( - model_name='publishableentityimport', - name='resulting_mapping', - ), - migrations.AlterUniqueTogether( - name='publishableentitymapping', - unique_together=None, - ), - migrations.RemoveField( - model_name='publishableentitymapping', - name='target_entity', - ), - migrations.RemoveField( - model_name='publishableentitymapping', - name='target_package', - ), - migrations.AlterUniqueTogether( - name='stagedcontentforimport', - unique_together=None, - ), - migrations.RemoveField( - model_name='stagedcontentforimport', - name='import_event', - ), - migrations.RemoveField( - model_name='stagedcontentforimport', - name='staged_content', - ), - migrations.DeleteModel( - name='Import', - ), - migrations.DeleteModel( - name='PublishableEntityImport', - ), - migrations.DeleteModel( - name='PublishableEntityMapping', - ), - migrations.DeleteModel( - name='StagedContentForImport', - ), - ] diff --git a/cms/djangoapps/import_from_modulestore/migrations/__init__.py b/cms/djangoapps/import_from_modulestore/migrations/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/cms/djangoapps/import_from_modulestore/models.py b/cms/djangoapps/import_from_modulestore/models.py deleted file mode 100644 index a682631b08c8..000000000000 --- a/cms/djangoapps/import_from_modulestore/models.py +++ /dev/null @@ -1,3 +0,0 @@ -""" -Models for the course to library import app (TO BE DELETED) -""" diff --git a/cms/envs/common.py b/cms/envs/common.py index 9dfa2f107eac..ee0e61c0d0f1 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -1497,7 +1497,6 @@ 'openedx.core.djangoapps.course_groups', # not used in cms (yet), but tests run 'cms.djangoapps.xblock_config.apps.XBlockConfig', 'cms.djangoapps.export_course_metadata.apps.ExportCourseMetadataConfig', - 'cms.djangoapps.import_from_modulestore.apps.ImportFromModulestoreConfig', # New (Learning-Core-based) XBlock runtime 'openedx.core.djangoapps.xblock.apps.StudioXBlockAppConfig', diff --git a/mypy.ini b/mypy.ini index f0267364ffb0..72937e1034c4 100644 --- a/mypy.ini +++ b/mypy.ini @@ -9,7 +9,6 @@ files = cms/lib/xblock/upstream_sync.py, cms/lib/xblock/upstream_sync_container.py, cms/djangoapps/contentstore/rest_api/v2/views/downstreams.py, - cms/djangoapps/import_from_modulestore, openedx/core/djangoapps/content/learning_sequences, # FIXME: need to solve type issues and add 'search' app here: # openedx/core/djangoapps/content/search,