Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
fe4bce8b
Commit
fe4bce8b
authored
Jul 27, 2014
by
Nimisha Asthagiri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
clone_course: Add fields parameter to support new display_name.
parent
538bec92
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
25 additions
and
15 deletions
+25
-15
common/lib/xmodule/xmodule/modulestore/__init__.py
+2
-3
common/lib/xmodule/xmodule/modulestore/mixed.py
+4
-4
common/lib/xmodule/xmodule/modulestore/mongo/draft.py
+10
-3
common/lib/xmodule/xmodule/modulestore/split_migrator.py
+6
-2
common/lib/xmodule/xmodule/modulestore/split_mongo/split.py
+3
-3
No files found.
common/lib/xmodule/xmodule/modulestore/__init__.py
View file @
fe4bce8b
...
...
@@ -396,7 +396,7 @@ class ModuleStoreWrite(ModuleStoreRead):
pass
@abstractmethod
def
clone_course
(
self
,
source_course_id
,
dest_course_id
,
user_id
):
def
clone_course
(
self
,
source_course_id
,
dest_course_id
,
user_id
,
fields
=
None
):
"""
Sets up source_course_id to point a course with the same content as the desct_course_id. This
operation may be cheap or expensive. It may have to copy all assets and all xblock content or
...
...
@@ -577,7 +577,7 @@ class ModuleStoreWriteBase(ModuleStoreReadBase, ModuleStoreWrite):
result
[
field
.
scope
][
field_name
]
=
value
return
result
def
clone_course
(
self
,
source_course_id
,
dest_course_id
,
user_id
):
def
clone_course
(
self
,
source_course_id
,
dest_course_id
,
user_id
,
fields
=
None
):
"""
This base method just copies the assets. The lower level impls must do the actual cloning of
content.
...
...
@@ -585,7 +585,6 @@ class ModuleStoreWriteBase(ModuleStoreReadBase, ModuleStoreWrite):
# copy the assets
if
self
.
contentstore
:
self
.
contentstore
.
copy_all_course_assets
(
source_course_id
,
dest_course_id
)
super
(
ModuleStoreWriteBase
,
self
)
.
clone_course
(
source_course_id
,
dest_course_id
,
user_id
)
return
dest_course_id
def
delete_course
(
self
,
course_key
,
user_id
):
...
...
common/lib/xmodule/xmodule/modulestore/mixed.py
View file @
fe4bce8b
...
...
@@ -288,7 +288,7 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
store
=
self
.
_verify_modulestore_support
(
None
,
'create_course'
)
return
store
.
create_course
(
org
,
course
,
run
,
user_id
,
**
kwargs
)
def
clone_course
(
self
,
source_course_id
,
dest_course_id
,
user_id
):
def
clone_course
(
self
,
source_course_id
,
dest_course_id
,
user_id
,
fields
=
None
):
"""
See the superclass for the general documentation.
...
...
@@ -303,16 +303,16 @@ class MixedModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase):
# to have only course re-runs go to split. This code, however, uses the config'd priority
dest_modulestore
=
self
.
_get_modulestore_for_courseid
(
dest_course_id
)
if
source_modulestore
==
dest_modulestore
:
return
source_modulestore
.
clone_course
(
source_course_id
,
dest_course_id
,
user_id
)
return
source_modulestore
.
clone_course
(
source_course_id
,
dest_course_id
,
user_id
,
fields
)
# ensure super's only called once. The delegation above probably calls it; so, don't move
# the invocation above the delegation call
super
(
MixedModuleStore
,
self
)
.
clone_course
(
source_course_id
,
dest_course_id
,
user_id
)
super
(
MixedModuleStore
,
self
)
.
clone_course
(
source_course_id
,
dest_course_id
,
user_id
,
fields
)
if
dest_modulestore
.
get_modulestore_type
()
==
ModuleStoreEnum
.
Type
.
split
:
split_migrator
=
SplitMigrator
(
dest_modulestore
,
source_modulestore
)
split_migrator
.
migrate_mongo_course
(
source_course_id
,
user_id
,
dest_course_id
.
org
,
dest_course_id
.
course
,
dest_course_id
.
run
source_course_id
,
user_id
,
dest_course_id
.
org
,
dest_course_id
.
course
,
dest_course_id
.
run
,
fields
)
def
create_item
(
self
,
user_id
,
course_key
,
block_type
,
block_id
=
None
,
fields
=
None
,
**
kwargs
):
...
...
common/lib/xmodule/xmodule/modulestore/mongo/draft.py
View file @
fe4bce8b
...
...
@@ -155,7 +155,7 @@ class DraftModuleStore(MongoModuleStore):
course_query
=
self
.
_course_key_to_son
(
course_key
)
self
.
collection
.
remove
(
course_query
,
multi
=
True
)
def
clone_course
(
self
,
source_course_id
,
dest_course_id
,
user_id
):
def
clone_course
(
self
,
source_course_id
,
dest_course_id
,
user_id
,
fields
=
None
):
"""
Only called if cloning within this store or if env doesn't set up mixed.
* copy the courseware
...
...
@@ -177,13 +177,20 @@ class DraftModuleStore(MongoModuleStore):
)
# clone the assets
super
(
DraftModuleStore
,
self
)
.
clone_course
(
source_course_id
,
dest_course_id
,
user_id
)
super
(
DraftModuleStore
,
self
)
.
clone_course
(
source_course_id
,
dest_course_id
,
user_id
,
fields
)
# get the whole old course
new_course
=
self
.
get_course
(
dest_course_id
)
if
new_course
is
None
:
# create_course creates the about overview
new_course
=
self
.
create_course
(
dest_course_id
.
org
,
dest_course_id
.
course
,
dest_course_id
.
run
,
user_id
)
new_course
=
self
.
create_course
(
dest_course_id
.
org
,
dest_course_id
.
course
,
dest_course_id
.
run
,
user_id
,
fields
=
fields
)
else
:
# update fields on existing course
for
key
,
value
in
fields
.
iteritems
():
setattr
(
new_course
,
key
,
value
)
self
.
update_item
(
new_course
,
user_id
)
# Get all modules under this namespace which is (tag, org, course) tuple
modules
=
self
.
get_items
(
source_course_id
,
revision
=
ModuleStoreEnum
.
RevisionOption
.
published_only
)
...
...
common/lib/xmodule/xmodule/modulestore/split_migrator.py
View file @
fe4bce8b
...
...
@@ -25,7 +25,7 @@ class SplitMigrator(object):
self
.
split_modulestore
=
split_modulestore
self
.
source_modulestore
=
source_modulestore
def
migrate_mongo_course
(
self
,
source_course_key
,
user_id
,
new_org
=
None
,
new_course
=
None
,
new_run
=
None
):
def
migrate_mongo_course
(
self
,
source_course_key
,
user_id
,
new_org
=
None
,
new_course
=
None
,
new_run
=
None
,
fields
=
None
):
"""
Create a new course in split_mongo representing the published and draft versions of the course from the
original mongo store. And return the new CourseLocator
...
...
@@ -51,10 +51,14 @@ class SplitMigrator(object):
new_course
=
source_course_key
.
course
if
new_run
is
None
:
new_run
=
source_course_key
.
run
new_course_key
=
CourseLocator
(
new_org
,
new_course
,
new_run
,
branch
=
ModuleStoreEnum
.
BranchName
.
published
)
new_fields
=
self
.
_get_json_fields_translate_references
(
original_course
,
new_course_key
,
None
)
if
fields
:
new_fields
.
update
(
fields
)
new_course
=
self
.
split_modulestore
.
create_course
(
new_org
,
new_course
,
new_run
,
user_id
,
fields
=
self
.
_get_json_fields_translate_references
(
original_course
,
new_course_key
,
None
)
,
fields
=
new_fields
,
master_branch
=
ModuleStoreEnum
.
BranchName
.
published
,
)
...
...
common/lib/xmodule/xmodule/modulestore/split_mongo/split.py
View file @
fe4bce8b
...
...
@@ -938,17 +938,17 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
# don't need to update the index b/c create_item did it for this version
return
xblock
def
clone_course
(
self
,
source_course_id
,
dest_course_id
,
user_id
):
def
clone_course
(
self
,
source_course_id
,
dest_course_id
,
user_id
,
fields
=
None
):
"""
See :meth: `.ModuleStoreWrite.clone_course` for documentation.
In split, other than copying the assets, this is cheap as it merely creates a new version of the
existing course.
"""
super
(
SplitMongoModuleStore
,
self
)
.
clone_course
(
source_course_id
,
dest_course_id
,
user_id
)
super
(
SplitMongoModuleStore
,
self
)
.
clone_course
(
source_course_id
,
dest_course_id
,
user_id
,
fields
)
source_index
=
self
.
get_course_index_info
(
source_course_id
)
return
self
.
create_course
(
dest_course_id
.
org
,
dest_course_id
.
course
,
dest_course_id
.
run
,
user_id
,
fields
=
None
,
# override start_date?
dest_course_id
.
org
,
dest_course_id
.
course
,
dest_course_id
.
run
,
user_id
,
fields
=
fields
,
versions_dict
=
source_index
[
'versions'
],
search_targets
=
source_index
[
'search_targets'
]
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment