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
749a4472
Commit
749a4472
authored
Sep 18, 2014
by
Don Mitchell
Committed by
Zia Fazal
Apr 06, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upgrade pymongo
LMS-11437
parent
e483b35e
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
26 additions
and
23 deletions
+26
-23
cms/djangoapps/contentstore/tests/utils.py
+2
-2
common/lib/xmodule/xmodule/modulestore/mongo/base.py
+4
-6
common/lib/xmodule/xmodule/modulestore/mongo/draft.py
+5
-1
common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py
+0
-1
common/lib/xmodule/xmodule/modulestore/split_mongo/split.py
+1
-0
common/lib/xmodule/xmodule/modulestore/tests/factories.py
+2
-1
common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py
+8
-8
common/lib/xmodule/xmodule/modulestore/tests/test_mongo.py
+1
-0
common/lib/xmodule/xmodule/modulestore/tests/test_publish.py
+2
-3
requirements/edx/base.txt
+1
-1
No files found.
cms/djangoapps/contentstore/tests/utils.py
View file @
749a4472
...
@@ -73,10 +73,10 @@ class CourseTestCase(ModuleStoreTestCase):
...
@@ -73,10 +73,10 @@ class CourseTestCase(ModuleStoreTestCase):
will be cleared out before each test case execution and deleted
will be cleared out before each test case execution and deleted
afterwards.
afterwards.
"""
"""
user_password
=
super
(
CourseTestCase
,
self
)
.
setUp
()
self
.
user_password
=
super
(
CourseTestCase
,
self
)
.
setUp
()
self
.
client
=
AjaxEnabledTestClient
()
self
.
client
=
AjaxEnabledTestClient
()
self
.
client
.
login
(
username
=
self
.
user
.
username
,
password
=
user_password
)
self
.
client
.
login
(
username
=
self
.
user
.
username
,
password
=
self
.
user_password
)
self
.
course
=
CourseFactory
.
create
()
self
.
course
=
CourseFactory
.
create
()
...
...
common/lib/xmodule/xmodule/modulestore/mongo/base.py
View file @
749a4472
...
@@ -1146,7 +1146,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
...
@@ -1146,7 +1146,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
'''
'''
return
self
.
get_course
(
location
.
course_key
,
depth
)
return
self
.
get_course
(
location
.
course_key
,
depth
)
def
_update_single_item
(
self
,
location
,
update
):
def
_update_single_item
(
self
,
location
,
update
,
allow_not_found
=
False
):
"""
"""
Set update on the specified item, and raises ItemNotFoundError
Set update on the specified item, and raises ItemNotFoundError
if the location doesn't exist
if the location doesn't exist
...
@@ -1159,10 +1159,8 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
...
@@ -1159,10 +1159,8 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
{
'_id'
:
location
.
to_deprecated_son
()},
{
'_id'
:
location
.
to_deprecated_son
()},
{
'$set'
:
update
},
{
'$set'
:
update
},
multi
=
False
,
multi
=
False
,
upsert
=
True
,
upsert
=
allow_not_found
,
# Must include this to avoid the django debug toolbar (which defines the deprecated "safe=False")
w
=
1
,
# wait until primary commits
# from overriding our default value set in the init method.
safe
=
self
.
collection
.
safe
)
)
if
result
[
'n'
]
==
0
:
if
result
[
'n'
]
==
0
:
raise
ItemNotFoundError
(
location
)
raise
ItemNotFoundError
(
location
)
...
@@ -1214,7 +1212,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
...
@@ -1214,7 +1212,7 @@ class MongoModuleStore(ModuleStoreDraftAndPublished, ModuleStoreWriteBase, Mongo
if
xblock
.
has_children
:
if
xblock
.
has_children
:
children
=
self
.
_serialize_scope
(
xblock
,
Scope
.
children
)
children
=
self
.
_serialize_scope
(
xblock
,
Scope
.
children
)
payload
.
update
({
'definition.children'
:
children
[
'children'
]})
payload
.
update
({
'definition.children'
:
children
[
'children'
]})
self
.
_update_single_item
(
xblock
.
scope_ids
.
usage_id
,
payload
)
self
.
_update_single_item
(
xblock
.
scope_ids
.
usage_id
,
payload
,
allow_not_found
=
allow_not_found
)
# update subtree edited info for ancestors
# update subtree edited info for ancestors
# don't update the subtree info for descendants of the publish root for efficiency
# don't update the subtree info for descendants of the publish root for efficiency
...
...
common/lib/xmodule/xmodule/modulestore/mongo/draft.py
View file @
749a4472
...
@@ -677,7 +677,11 @@ class DraftModuleStore(MongoModuleStore):
...
@@ -677,7 +677,11 @@ class DraftModuleStore(MongoModuleStore):
# So, do not delete the child. It will be published when the new parent is published.
# So, do not delete the child. It will be published when the new parent is published.
pass
pass
super
(
DraftModuleStore
,
self
)
.
update_item
(
item
,
user_id
,
isPublish
=
True
,
is_publish_root
=
is_root
)
# update the published (not draft) item (ignoring that item is "draft"). The published
# may not exist; (if original_published is None); so, allow_not_found
super
(
DraftModuleStore
,
self
)
.
update_item
(
item
,
user_id
,
isPublish
=
True
,
is_publish_root
=
is_root
,
allow_not_found
=
True
)
to_be_deleted
.
append
(
as_draft
(
item_location
)
.
to_deprecated_son
())
to_be_deleted
.
append
(
as_draft
(
item_location
)
.
to_deprecated_son
())
# verify input conditions
# verify input conditions
...
...
common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py
View file @
749a4472
...
@@ -303,4 +303,3 @@ class MongoConnection(object):
...
@@ -303,4 +303,3 @@ class MongoConnection(object):
],
],
unique
=
True
unique
=
True
)
)
common/lib/xmodule/xmodule/modulestore/split_mongo/split.py
View file @
749a4472
...
@@ -196,6 +196,7 @@ class SplitBulkWriteMixin(BulkOperationsMixin):
...
@@ -196,6 +196,7 @@ class SplitBulkWriteMixin(BulkOperationsMixin):
course_key
.
replace
(
org
=
None
,
course
=
None
,
run
=
None
,
branch
=
None
)
course_key
.
replace
(
org
=
None
,
course
=
None
,
run
=
None
,
branch
=
None
)
]
]
# handle ignore case and general use
return
super
(
SplitBulkWriteMixin
,
self
)
.
_get_bulk_ops_record
(
return
super
(
SplitBulkWriteMixin
,
self
)
.
_get_bulk_ops_record
(
course_key
.
replace
(
branch
=
None
,
version_guid
=
None
),
ignore_case
course_key
.
replace
(
branch
=
None
,
version_guid
=
None
),
ignore_case
)
)
...
...
common/lib/xmodule/xmodule/modulestore/tests/factories.py
View file @
749a4472
...
@@ -299,7 +299,8 @@ def check_mongo_calls(num_finds=0, num_sends=None):
...
@@ -299,7 +299,8 @@ def check_mongo_calls(num_finds=0, num_sends=None):
if
num_sends
is
not
None
:
if
num_sends
is
not
None
:
with
check_sum_of_calls
(
with
check_sum_of_calls
(
pymongo
.
message
,
pymongo
.
message
,
[
'insert'
,
'update'
,
'delete'
],
# mongo < 2.6 uses insert, update, delete and _do_batched_insert. >= 2.6 _do_batched_write
[
'insert'
,
'update'
,
'delete'
,
'_do_batched_write_command'
,
'_do_batched_insert'
,
],
num_sends
,
num_sends
,
num_sends
num_sends
):
):
...
...
common/lib/xmodule/xmodule/modulestore/tests/test_mixed_modulestore.py
View file @
749a4472
...
@@ -660,12 +660,12 @@ class TestMixedModuleStore(CourseComparisonTest):
...
@@ -660,12 +660,12 @@ class TestMixedModuleStore(CourseComparisonTest):
# Draft
# Draft
# Find: find parents (definition.children query), get parent, get course (fill in run?),
# Find: find parents (definition.children query), get parent, get course (fill in run?),
# find parents of the parent (course), get inheritance items,
# find parents of the parent (course), get inheritance items,
# get
errors, get
item (to delete subtree), get inheritance again.
# get item (to delete subtree), get inheritance again.
# Sends: delete item, update parent
# Sends: delete item, update parent
# Split
# Split
# Find: active_versions, 2 structures (published & draft), definition (unnecessary)
# Find: active_versions, 2 structures (published & draft), definition (unnecessary)
# Sends: updated draft and published structures and active_versions
# Sends: updated draft and published structures and active_versions
@ddt.data
((
'draft'
,
8
,
2
),
(
'split'
,
4
,
3
))
@ddt.data
((
'draft'
,
7
,
2
),
(
'split'
,
4
,
3
))
@ddt.unpack
@ddt.unpack
def
test_delete_item
(
self
,
default_ms
,
max_find
,
max_send
):
def
test_delete_item
(
self
,
default_ms
,
max_find
,
max_send
):
"""
"""
...
@@ -690,12 +690,12 @@ class TestMixedModuleStore(CourseComparisonTest):
...
@@ -690,12 +690,12 @@ class TestMixedModuleStore(CourseComparisonTest):
# Draft:
# Draft:
# queries: find parent (definition.children), count versions of item, get parent, count grandparents,
# queries: find parent (definition.children), count versions of item, get parent, count grandparents,
# inheritance items, draft item, draft child,
get errors,
inheritance
# inheritance items, draft item, draft child, inheritance
# sends: delete draft vertical and update parent
# sends: delete draft vertical and update parent
# Split:
# Split:
# queries: active_versions, draft and published structures, definition (unnecessary)
# queries: active_versions, draft and published structures, definition (unnecessary)
# sends: update published (why?), draft, and active_versions
# sends: update published (why?), draft, and active_versions
@ddt.data
((
'draft'
,
9
,
2
),
(
'split'
,
4
,
3
))
@ddt.data
((
'draft'
,
8
,
2
),
(
'split'
,
4
,
3
))
@ddt.unpack
@ddt.unpack
def
test_delete_private_vertical
(
self
,
default_ms
,
max_find
,
max_send
):
def
test_delete_private_vertical
(
self
,
default_ms
,
max_find
,
max_send
):
"""
"""
...
@@ -741,12 +741,12 @@ class TestMixedModuleStore(CourseComparisonTest):
...
@@ -741,12 +741,12 @@ class TestMixedModuleStore(CourseComparisonTest):
self
.
assertNotIn
(
vert_loc
,
course
.
children
)
self
.
assertNotIn
(
vert_loc
,
course
.
children
)
# Draft:
# Draft:
# find: find parent (definition.children) 2x, find draft item,
check error state,
get inheritance items
# find: find parent (definition.children) 2x, find draft item, get inheritance items
# send: one delete query for specific item
# send: one delete query for specific item
# Split:
# Split:
# find: active_version & structure
# find: active_version & structure
# send: update structure and active_versions
# send: update structure and active_versions
@ddt.data
((
'draft'
,
5
,
1
),
(
'split'
,
2
,
2
))
@ddt.data
((
'draft'
,
4
,
1
),
(
'split'
,
2
,
2
))
@ddt.unpack
@ddt.unpack
def
test_delete_draft_vertical
(
self
,
default_ms
,
max_find
,
max_send
):
def
test_delete_draft_vertical
(
self
,
default_ms
,
max_find
,
max_send
):
"""
"""
...
@@ -1292,7 +1292,7 @@ class TestMixedModuleStore(CourseComparisonTest):
...
@@ -1292,7 +1292,7 @@ class TestMixedModuleStore(CourseComparisonTest):
self
.
assertEqual
(
len
(
self
.
store
.
get_courses_for_wiki
(
'no_such_wiki'
)),
0
)
self
.
assertEqual
(
len
(
self
.
store
.
get_courses_for_wiki
(
'no_such_wiki'
)),
0
)
# Draft:
# Draft:
# Find: find vertical, find children
, get last error
# Find: find vertical, find children
# Sends:
# Sends:
# 1. delete all of the published nodes in subtree
# 1. delete all of the published nodes in subtree
# 2. insert vertical as published (deleted in step 1) w/ the deleted problems as children
# 2. insert vertical as published (deleted in step 1) w/ the deleted problems as children
...
@@ -1301,7 +1301,7 @@ class TestMixedModuleStore(CourseComparisonTest):
...
@@ -1301,7 +1301,7 @@ class TestMixedModuleStore(CourseComparisonTest):
# Sends:
# Sends:
# - insert structure
# - insert structure
# - write index entry
# - write index entry
@ddt.data
((
'draft'
,
3
,
6
),
(
'split'
,
3
,
2
))
@ddt.data
((
'draft'
,
2
,
6
),
(
'split'
,
3
,
2
))
@ddt.unpack
@ddt.unpack
def
test_unpublish
(
self
,
default_ms
,
max_find
,
max_send
):
def
test_unpublish
(
self
,
default_ms
,
max_find
,
max_send
):
"""
"""
...
...
common/lib/xmodule/xmodule/modulestore/tests/test_mongo.py
View file @
749a4472
...
@@ -573,6 +573,7 @@ class TestMongoModuleStore(unittest.TestCase):
...
@@ -573,6 +573,7 @@ class TestMongoModuleStore(unittest.TestCase):
'published_by'
:
published_by
,
'published_by'
:
published_by
,
},
},
},
},
allow_not_found
=
True
,
)
)
# Retrieve the block and verify its fields
# Retrieve the block and verify its fields
...
...
common/lib/xmodule/xmodule/modulestore/tests/test_publish.py
View file @
749a4472
...
@@ -98,13 +98,12 @@ class TestPublish(SplitWMongoCourseBoostrapper):
...
@@ -98,13 +98,12 @@ class TestPublish(SplitWMongoCourseBoostrapper):
# 12-15 get each ancestor (count then get): (2 x 2),
# 12-15 get each ancestor (count then get): (2 x 2),
# 16 then fail count of course parent (1)
# 16 then fail count of course parent (1)
# 17 compute inheritance
# 17 compute inheritance
# 18 get last error
# 18-19 get draft and published vert
# 19-20 get draft and published vert
# Sends:
# Sends:
# delete the subtree of drafts (1 call),
# delete the subtree of drafts (1 call),
# update the published version of each node in subtree (4 calls),
# update the published version of each node in subtree (4 calls),
# update the ancestors up to course (2 calls)
# update the ancestors up to course (2 calls)
with
check_mongo_calls
(
20
,
7
):
with
check_mongo_calls
(
19
,
7
):
self
.
draft_mongo
.
publish
(
item
.
location
,
self
.
user_id
)
self
.
draft_mongo
.
publish
(
item
.
location
,
self
.
user_id
)
# verify status
# verify status
...
...
requirements/edx/base.txt
View file @
749a4472
...
@@ -61,7 +61,7 @@ polib==1.0.3
...
@@ -61,7 +61,7 @@ polib==1.0.3
pycrypto>=2.6
pycrypto>=2.6
pygments==1.6
pygments==1.6
pygraphviz==1.1
pygraphviz==1.1
pymongo==2.
4.1
pymongo==2.
7.2
pyparsing==2.0.1
pyparsing==2.0.1
python-memcached==1.48
python-memcached==1.48
python-openid==2.2.5
python-openid==2.2.5
...
...
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