Commit e9db4ad1 by Nimisha Asthagiri

LMS-11019 Add feature flag to create Split Course

parent ec301163
...@@ -26,7 +26,8 @@ from xmodule.partitions.partitions import UserPartition, Group ...@@ -26,7 +26,8 @@ from xmodule.partitions.partitions import UserPartition, Group
from xmodule.modulestore.exceptions import ItemNotFoundError, InvalidLocationError from xmodule.modulestore.exceptions import ItemNotFoundError, InvalidLocationError
from opaque_keys import InvalidKeyError from opaque_keys import InvalidKeyError
from opaque_keys.edx.locations import Location, SlashSeparatedCourseKey from opaque_keys.edx.locations import Location
from opaque_keys.edx.locator import CourseLocator
from contentstore.course_info_model import get_course_updates, update_course_updates, delete_course_update from contentstore.course_info_model import get_course_updates, update_course_updates, delete_course_update
from contentstore.utils import ( from contentstore.utils import (
...@@ -460,7 +461,7 @@ def _create_or_rerun_course(request): ...@@ -460,7 +461,7 @@ def _create_or_rerun_course(request):
status=400 status=400
) )
course_key = SlashSeparatedCourseKey(org, number, run) course_key = CourseLocator(org, number, run)
fields = {'display_name': display_name} if display_name is not None else {} fields = {'display_name': display_name} if display_name is not None else {}
if 'source_course_key' in request.json: if 'source_course_key' in request.json:
...@@ -492,6 +493,7 @@ def _create_new_course(request, course_key, fields): ...@@ -492,6 +493,7 @@ def _create_new_course(request, course_key, fields):
""" """
Create a new course. Create a new course.
Returns the URL for the course overview page. Returns the URL for the course overview page.
Raises InvalidLocationError if the course already exists
""" """
# Set a unique wiki_slug for newly created courses. To maintain active wiki_slugs for # Set a unique wiki_slug for newly created courses. To maintain active wiki_slugs for
# existing xml courses this cannot be changed in CourseDescriptor. # existing xml courses this cannot be changed in CourseDescriptor.
...@@ -501,6 +503,8 @@ def _create_new_course(request, course_key, fields): ...@@ -501,6 +503,8 @@ def _create_new_course(request, course_key, fields):
definition_data = {'wiki_slug': wiki_slug} definition_data = {'wiki_slug': wiki_slug}
fields.update(definition_data) fields.update(definition_data)
store = modulestore()
with store.default_store(settings.FEATURES.get('DEFAULT_STORE_FOR_NEW_COURSE', 'mongo')):
# Creating the course raises InvalidLocationError if an existing course with this org/name is found # Creating the course raises InvalidLocationError if an existing course with this org/name is found
new_course = modulestore().create_course( new_course = modulestore().create_course(
course_key.org, course_key.org,
......
...@@ -424,6 +424,11 @@ def _create_item(request): ...@@ -424,6 +424,11 @@ def _create_item(request):
if display_name is not None: if display_name is not None:
metadata['display_name'] = display_name metadata['display_name'] = display_name
# TODO need to fix components that are sending definition_data as strings, instead of as dicts
# For now, migrate them into dicts here.
if isinstance(data, basestring):
data = {'data': data}
created_block = store.create_child( created_block = store.create_child(
request.user.id, request.user.id,
usage_key, usage_key,
......
...@@ -106,6 +106,9 @@ FEATURES = { ...@@ -106,6 +106,9 @@ FEATURES = {
# Toggles Group Configuration editing functionality # Toggles Group Configuration editing functionality
'ENABLE_GROUP_CONFIGURATIONS': os.environ.get('FEATURE_GROUP_CONFIGURATIONS'), 'ENABLE_GROUP_CONFIGURATIONS': os.environ.get('FEATURE_GROUP_CONFIGURATIONS'),
# Modulestore to use for new courses
'DEFAULT_STORE_FOR_NEW_COURSE': 'mongo',
} }
ENABLE_JASMINE = False ENABLE_JASMINE = False
......
...@@ -151,6 +151,8 @@ class CachingDescriptorSystem(MakoDescriptorSystem): ...@@ -151,6 +151,8 @@ class CachingDescriptorSystem(MakoDescriptorSystem):
edit_info = json_data.get('edit_info', {}) edit_info = json_data.get('edit_info', {})
module.edited_by = edit_info.get('edited_by') module.edited_by = edit_info.get('edited_by')
module.edited_on = edit_info.get('edited_on') module.edited_on = edit_info.get('edited_on')
module.published_by = None # TODO
module.published_date = None # TODO
module.previous_version = edit_info.get('previous_version') module.previous_version = edit_info.get('previous_version')
module.update_version = edit_info.get('update_version') module.update_version = edit_info.get('update_version')
module.source_version = edit_info.get('source_version', None) module.source_version = edit_info.get('source_version', None)
......
...@@ -820,6 +820,12 @@ class SplitMongoModuleStore(ModuleStoreWriteBase): ...@@ -820,6 +820,12 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
the course id'd by version_guid but instead in one w/ a new version_guid. Ensure in this case that you get the course id'd by version_guid but instead in one w/ a new version_guid. Ensure in this case that you get
the new version_guid from the locator in the returned object! the new version_guid from the locator in the returned object!
""" """
# split handles all the fields in one dict not separated by scope
fields = kwargs.get('fields', {})
fields.update(kwargs.pop('metadata', {}) or {})
fields.update(kwargs.pop('definition_data', {}) or {})
kwargs['fields'] = fields
# find course_index entry if applicable and structures entry # find course_index entry if applicable and structures entry
index_entry = self._get_index_if_valid(course_key, force, continue_version) index_entry = self._get_index_if_valid(course_key, force, continue_version)
structure = self._lookup_course(course_key)['structure'] structure = self._lookup_course(course_key)['structure']
...@@ -1844,6 +1850,7 @@ class SplitMongoModuleStore(ModuleStoreWriteBase): ...@@ -1844,6 +1850,7 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
destination_block['edit_info']['previous_version'] = previous_version destination_block['edit_info']['previous_version'] = previous_version
destination_block['edit_info']['update_version'] = destination_version destination_block['edit_info']['update_version'] = destination_version
destination_block['edit_info']['edited_by'] = user_id destination_block['edit_info']['edited_by'] = user_id
destination_block['edit_info']['edited_on'] = datetime.datetime.now(UTC)
else: else:
destination_block = self._new_block( destination_block = self._new_block(
user_id, new_block['category'], user_id, new_block['category'],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment