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
0895e90a
Commit
0895e90a
authored
Mar 07, 2014
by
Don Mitchell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Generate split test data via split
parent
542b146f
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
62 additions
and
91 deletions
+62
-91
cms/djangoapps/contentstore/tests/test_crud.py
+17
-60
common/lib/xmodule/xmodule/modulestore/locator.py
+6
-4
common/lib/xmodule/xmodule/modulestore/split_mongo/split.py
+39
-3
common/lib/xmodule/xmodule/modulestore/tests/test_split_modulestore.py
+0
-0
common/test/data/splitmongo_json/active_versions.json
+0
-24
common/test/data/splitmongo_json/definitions.json
+0
-0
common/test/data/splitmongo_json/structures.json
+0
-0
No files found.
cms/djangoapps/contentstore/tests/test_crud.py
View file @
0895e90a
import
unittest
from
django.conf
import
settings
from
xmodule
import
templates
from
xmodule.modulestore.tests
import
persistent_factories
...
...
@@ -10,8 +9,6 @@ from xmodule.capa_module import CapaDescriptor
from
xmodule.modulestore.locator
import
CourseLocator
,
BlockUsageLocator
,
LocalId
from
xmodule.modulestore.exceptions
import
ItemNotFoundError
,
DuplicateCourseError
from
xmodule.html_module
import
HtmlDescriptor
from
xmodule.modulestore
import
inheritance
from
xblock.core
import
XBlock
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
...
...
@@ -81,25 +78,25 @@ class TemplateTests(unittest.TestCase):
def
test_temporary_xblocks
(
self
):
"""
Test
using load_from_json
to create non persisted xblocks
Test
create_xblock
to create non persisted xblocks
"""
test_course
=
persistent_factories
.
PersistentCourseFactory
.
create
(
course_id
=
'testx.tempcourse'
,
org
=
'testx'
,
course_id
=
'testx.tempcourse'
,
org
=
'testx'
,
display_name
=
'fun test course'
,
user_id
=
'testbot'
)
test_chapter
=
self
.
load_from_json
({
'category'
:
'chapter'
,
'fields'
:
{
'display_name'
:
'chapter n'
}},
test_course
.
system
,
parent_xblock
=
test_course
)
test_chapter
=
modulestore
(
'split'
)
.
create_xblock
(
test_course
.
system
,
'chapter'
,
{
'display_name'
:
'chapter n'
},
parent_xblock
=
test_course
)
self
.
assertIsInstance
(
test_chapter
,
SequenceDescriptor
)
self
.
assertEqual
(
test_chapter
.
display_name
,
'chapter n'
)
self
.
assertIn
(
test_chapter
,
test_course
.
get_children
())
# test w/ a definition (e.g., a problem)
test_def_content
=
'<problem>boo</problem>'
test_problem
=
self
.
load_from_json
({
'category'
:
'problem'
,
'fields'
:
{
'data'
:
test_def_content
}},
test_course
.
system
,
parent_xblock
=
test_chapter
)
test_problem
=
modulestore
(
'split'
)
.
create_xblock
(
test_course
.
system
,
'problem'
,
{
'data'
:
test_def_content
},
parent_xblock
=
test_chapter
)
self
.
assertIsInstance
(
test_problem
,
CapaDescriptor
)
self
.
assertEqual
(
test_problem
.
data
,
test_def_content
)
self
.
assertIn
(
test_problem
,
test_chapter
.
get_children
())
...
...
@@ -114,18 +111,19 @@ class TemplateTests(unittest.TestCase):
course_id
=
'testx.tempcourse'
,
org
=
'testx'
,
display_name
=
'fun test course'
,
user_id
=
'testbot'
)
test_chapter
=
self
.
load_from_json
({
'category'
:
'chapter'
,
'fields'
:
{
'display_name'
:
'chapter n'
}},
test_course
.
system
,
parent_xblock
=
test_course
)
test_chapter
=
modulestore
(
'split'
)
.
create_xblock
(
test_course
.
system
,
'chapter'
,
{
'display_name'
:
'chapter n'
},
parent_xblock
=
test_course
)
self
.
assertEqual
(
test_chapter
.
display_name
,
'chapter n'
)
test_def_content
=
'<problem>boo</problem>'
# create child
new_block
=
self
.
load_from_json
({
'category'
:
'problem'
,
'fields'
:
{
new_block
=
modulestore
(
'split'
)
.
create_xblock
(
test_course
.
system
,
'problem'
,
fields
=
{
'data'
:
test_def_content
,
'display_name'
:
'problem'
}},
test_course
.
system
,
},
parent_xblock
=
test_chapter
)
self
.
assertIsNotNone
(
new_block
.
definition_locator
)
...
...
@@ -242,44 +240,3 @@ class TemplateTests(unittest.TestCase):
mapper
=
loc_mapper
()
self
.
assertEqual
(
modulestore
(
'split'
)
.
loc_mapper
,
mapper
)
# ================================= JSON PARSING ===========================
# These are example methods for creating xmodules in memory w/o persisting them.
# They were in x_module but since xblock is not planning to support them but will
# allow apps to use this type of thing, I put it here.
@staticmethod
def
load_from_json
(
json_data
,
system
,
default_class
=
None
,
parent_xblock
=
None
):
"""
This method instantiates the correct subclass of XModuleDescriptor based
on the contents of json_data. It does not persist it and can create one which
has no usage id.
parent_xblock is used to compute inherited metadata as well as to append the new xblock.
json_data:
- 'location' : must have this field
- 'category': the xmodule category (required or location must be a Location)
- 'metadata': a dict of locally set metadata (not inherited)
- 'children': a list of children's usage_ids w/in this course
- 'definition':
- '_id' (optional): the usage_id of this. Will generate one if not given one.
"""
class_
=
XBlock
.
load_class
(
json_data
.
get
(
'category'
,
json_data
.
get
(
'location'
,
{})
.
get
(
'category'
)),
default_class
,
select
=
settings
.
XBLOCK_SELECT_FUNCTION
)
usage_id
=
json_data
.
get
(
'_id'
,
None
)
if
not
'_inherited_settings'
in
json_data
and
parent_xblock
is
not
None
:
json_data
[
'_inherited_settings'
]
=
parent_xblock
.
xblock_kvs
.
inherited_settings
.
copy
()
json_fields
=
json_data
.
get
(
'fields'
,
{})
for
field_name
in
inheritance
.
InheritanceMixin
.
fields
:
if
field_name
in
json_fields
:
json_data
[
'_inherited_settings'
][
field_name
]
=
json_fields
[
field_name
]
new_block
=
system
.
xblock_from_json
(
class_
,
usage_id
,
json_data
)
if
parent_xblock
is
not
None
:
parent_xblock
.
children
.
append
(
new_block
.
scope_ids
.
usage_id
)
# decache pending children field settings
parent_xblock
.
save
()
return
new_block
common/lib/xmodule/xmodule/modulestore/locator.py
View file @
0895e90a
...
...
@@ -22,12 +22,14 @@ log = logging.getLogger(__name__)
class
LocalId
(
object
):
"""
Class for local ids for non-persisted xblocks
Should be hashable and distinguishable, but nothing else
Class for local ids for non-persisted xblocks (which can have hardcoded block_ids if necessary)
"""
def
__init__
(
self
,
block_id
=
None
):
self
.
block_id
=
block_id
super
(
LocalId
,
self
)
.
__init__
()
def
__str__
(
self
):
return
"localid_{}"
.
format
(
id
(
self
))
return
"localid_{}"
.
format
(
self
.
block_id
or
id
(
self
))
class
Locator
(
object
):
...
...
common/lib/xmodule/xmodule/modulestore/split_mongo/split.py
View file @
0895e90a
...
...
@@ -953,7 +953,7 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
# check children
original_entry
=
self
.
_get_block_from_structure
(
original_structure
,
descriptor
.
location
.
block_id
)
is_updated
=
is_updated
or
(
descriptor
.
has_children
and
original_entry
[
'fields'
]
[
'children'
]
!=
descriptor
.
children
descriptor
.
has_children
and
original_entry
[
'fields'
]
.
get
(
'children'
,
[])
!=
descriptor
.
children
)
# check metadata
if
not
is_updated
:
...
...
@@ -992,6 +992,40 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
# nothing changed, just return the one sent in
return
descriptor
def
create_xblock
(
self
,
runtime
,
category
,
fields
=
None
,
block_id
=
None
,
definition_id
=
None
,
parent_xblock
=
None
):
"""
This method instantiates the correct subclass of XModuleDescriptor based
on the contents of json_data. It does not persist it and can create one which
has no usage id.
parent_xblock is used to compute inherited metadata as well as to append the new xblock.
json_data:
- 'category': the xmodule category
- 'fields': a dict of locally set fields (not inherited) in json format not pythonic typed format!
- 'definition': the object id of the existing definition
"""
xblock_class
=
runtime
.
load_block_type
(
category
)
json_data
=
{
'category'
:
category
,
'fields'
:
fields
or
{},
}
if
definition_id
is
not
None
:
json_data
[
'definition'
]
=
definition_id
if
parent_xblock
is
not
None
:
json_data
[
'_inherited_settings'
]
=
parent_xblock
.
xblock_kvs
.
inherited_settings
.
copy
()
if
fields
is
not
None
:
for
field_name
in
inheritance
.
InheritanceMixin
.
fields
:
if
field_name
in
fields
:
json_data
[
'_inherited_settings'
][
field_name
]
=
fields
[
field_name
]
new_block
=
runtime
.
xblock_from_json
(
xblock_class
,
block_id
,
json_data
)
if
parent_xblock
is
not
None
:
parent_xblock
.
children
.
append
(
new_block
.
scope_ids
.
usage_id
)
# decache pending children field settings
parent_xblock
.
save
()
return
new_block
def
persist_xblock_dag
(
self
,
xblock
,
user_id
,
force
=
False
):
"""
create or update the xblock and all of its children. The xblock's location must specify a course.
...
...
@@ -1050,8 +1084,10 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
# generate an id
is_new
=
True
is_updated
=
True
block_id
=
self
.
_generate_block_id
(
structure_blocks
,
xblock
.
category
)
encoded_block_id
=
block_id
block_id
=
getattr
(
xblock
.
scope_ids
.
usage_id
.
block_id
,
'block_id'
,
None
)
if
block_id
is
None
:
block_id
=
self
.
_generate_block_id
(
structure_blocks
,
xblock
.
category
)
encoded_block_id
=
LocMapperStore
.
encode_key_for_mongo
(
block_id
)
xblock
.
scope_ids
.
usage_id
.
block_id
=
block_id
else
:
is_new
=
False
...
...
common/lib/xmodule/xmodule/modulestore/tests/test_split_modulestore.py
View file @
0895e90a
This diff is collapsed.
Click to expand it.
common/test/data/splitmongo_json/active_versions.json
deleted
100644 → 0
View file @
542b146f
[{
"_id"
:
"GreekHero"
,
"org"
:
"testx"
,
"versions"
:
{
"draft"
:
{
"$oid"
:
"1d00000000000000dddd0000"
}
},
"edited_on"
:
{
"$date"
:
1364481713238
},
"edited_by"
:
"test@edx.org"
},
{
"_id"
:
"wonderful"
,
"org"
:
"testx"
,
"versions"
:
{
"draft"
:
{
"$oid"
:
"1d00000000000000dddd2222"
},
"published"
:
{
"$oid"
:
"1d00000000000000eeee0000"
}
},
"edited_on"
:
{
"$date"
:
1364481313238
},
"edited_by"
:
"test@edx.org"
},
{
"_id"
:
"contender"
,
"org"
:
"guestx"
,
"versions"
:
{
"draft"
:
{
"$oid"
:
"1d00000000000000dddd5555"
}},
"edited_on"
:
{
"$date"
:
1364491313238
},
"edited_by"
:
"test@guestx.edu"
}
]
common/test/data/splitmongo_json/definitions.json
deleted
100644 → 0
View file @
542b146f
This diff is collapsed.
Click to expand it.
common/test/data/splitmongo_json/structures.json
deleted
100644 → 0
View file @
542b146f
This diff is collapsed.
Click to expand it.
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