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
d7cf8b7f
Commit
d7cf8b7f
authored
Jul 09, 2014
by
Nimisha Asthagiri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement close_connections and drop_database on modulestores.
parent
bc03fb08
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
121 additions
and
97 deletions
+121
-97
cms/djangoapps/contentstore/management/commands/tests/test_migrate_to_split.py
+1
-1
cms/djangoapps/contentstore/tests/test_contentstore.py
+1
-9
cms/djangoapps/contentstore/tests/test_crud.py
+1
-1
cms/djangoapps/contentstore/tests/test_export_git.py
+0
-5
cms/djangoapps/contentstore/tests/test_import.py
+0
-9
cms/djangoapps/contentstore/tests/test_transcripts_utils.py
+1
-7
cms/djangoapps/contentstore/views/tests/test_import_export.py
+0
-5
cms/djangoapps/contentstore/views/tests/test_transcripts.py
+1
-5
common/djangoapps/contentserver/tests/test.py
+1
-6
common/djangoapps/terrain/browser.py
+3
-7
common/djangoapps/terrain/course_helpers.py
+5
-6
common/lib/xmodule/xmodule/contentstore/mongo.py
+9
-2
common/lib/xmodule/xmodule/modulestore/__init__.py
+41
-5
common/lib/xmodule/xmodule/modulestore/mixed.py
+12
-5
common/lib/xmodule/xmodule/modulestore/mongo/base.py
+18
-0
common/lib/xmodule/xmodule/modulestore/split_mongo/split.py
+18
-0
common/lib/xmodule/xmodule/modulestore/tests/django_utils.py
+6
-18
common/lib/xmodule/xmodule/modulestore/tests/test_contentstore.py
+1
-1
common/lib/xmodule/xmodule/modulestore/tests/test_mongo.py
+0
-1
common/lib/xmodule/xmodule/modulestore/tests/test_xml_importer.py
+2
-4
No files found.
cms/djangoapps/contentstore/management/commands/tests/test_migrate_to_split.py
View file @
d7cf8b7f
...
@@ -56,7 +56,7 @@ class TestMigrateToSplit(ModuleStoreTestCase):
...
@@ -56,7 +56,7 @@ class TestMigrateToSplit(ModuleStoreTestCase):
password
=
'foo'
password
=
'foo'
self
.
user
=
User
.
objects
.
create_user
(
uname
,
email
,
password
)
self
.
user
=
User
.
objects
.
create_user
(
uname
,
email
,
password
)
self
.
course
=
CourseFactory
()
self
.
course
=
CourseFactory
()
self
.
addCleanup
(
ModuleStoreTestCase
.
drop_mongo_collections
,
ModuleStoreEnum
.
Type
.
split
)
self
.
addCleanup
(
ModuleStoreTestCase
.
drop_mongo_collections
)
self
.
addCleanup
(
clear_existing_modulestores
)
self
.
addCleanup
(
clear_existing_modulestores
)
def
test_user_email
(
self
):
def
test_user_email
(
self
):
...
...
cms/djangoapps/contentstore/tests/test_contentstore.py
View file @
d7cf8b7f
...
@@ -22,7 +22,7 @@ from django.test.utils import override_settings
...
@@ -22,7 +22,7 @@ from django.test.utils import override_settings
from
contentstore.tests.utils
import
parse_json
,
AjaxEnabledTestClient
,
CourseTestCase
from
contentstore.tests.utils
import
parse_json
,
AjaxEnabledTestClient
,
CourseTestCase
from
contentstore.views.component
import
ADVANCED_COMPONENT_TYPES
from
contentstore.views.component
import
ADVANCED_COMPONENT_TYPES
from
xmodule.contentstore.django
import
contentstore
,
_CONTENTSTORE
from
xmodule.contentstore.django
import
contentstore
from
xmodule.contentstore.utils
import
restore_asset_from_trashcan
,
empty_asset_trashcan
from
xmodule.contentstore.utils
import
restore_asset_from_trashcan
,
empty_asset_trashcan
from
xmodule.exceptions
import
NotFoundError
,
InvalidVersionError
from
xmodule.exceptions
import
NotFoundError
,
InvalidVersionError
from
xmodule.modulestore
import
ModuleStoreEnum
from
xmodule.modulestore
import
ModuleStoreEnum
...
@@ -74,10 +74,6 @@ class ContentStoreToyCourseTest(ContentStoreTestCase):
...
@@ -74,10 +74,6 @@ class ContentStoreToyCourseTest(ContentStoreTestCase):
Tests that rely on the toy courses.
Tests that rely on the toy courses.
TODO: refactor using CourseFactory so they do not.
TODO: refactor using CourseFactory so they do not.
"""
"""
def
tearDown
(
self
):
contentstore
()
.
drop_database
()
_CONTENTSTORE
.
clear
()
def
check_components_on_page
(
self
,
component_types
,
expected_types
):
def
check_components_on_page
(
self
,
component_types
,
expected_types
):
"""
"""
Ensure that the right types end up on the page.
Ensure that the right types end up on the page.
...
@@ -947,10 +943,6 @@ class ContentStoreTest(ContentStoreTestCase):
...
@@ -947,10 +943,6 @@ class ContentStoreTest(ContentStoreTestCase):
'run'
:
'2013_Spring'
'run'
:
'2013_Spring'
}
}
def
tearDown
(
self
):
contentstore
()
.
drop_database
()
_CONTENTSTORE
.
clear
()
def
assert_created_course
(
self
,
number_suffix
=
None
):
def
assert_created_course
(
self
,
number_suffix
=
None
):
"""
"""
Checks that the course was created properly.
Checks that the course was created properly.
...
...
cms/djangoapps/contentstore/tests/test_crud.py
View file @
d7cf8b7f
...
@@ -20,7 +20,7 @@ class TemplateTests(unittest.TestCase):
...
@@ -20,7 +20,7 @@ class TemplateTests(unittest.TestCase):
def
setUp
(
self
):
def
setUp
(
self
):
clear_existing_modulestores
()
# redundant w/ cleanup but someone was getting errors
clear_existing_modulestores
()
# redundant w/ cleanup but someone was getting errors
self
.
addCleanup
(
ModuleStoreTestCase
.
drop_mongo_collections
,
ModuleStoreEnum
.
Type
.
split
)
self
.
addCleanup
(
ModuleStoreTestCase
.
drop_mongo_collections
)
self
.
addCleanup
(
clear_existing_modulestores
)
self
.
addCleanup
(
clear_existing_modulestores
)
self
.
split_store
=
modulestore
()
.
_get_modulestore_by_type
(
ModuleStoreEnum
.
Type
.
split
)
self
.
split_store
=
modulestore
()
.
_get_modulestore_by_type
(
ModuleStoreEnum
.
Type
.
split
)
...
...
cms/djangoapps/contentstore/tests/test_export_git.py
View file @
d7cf8b7f
...
@@ -13,7 +13,6 @@ from django.test.utils import override_settings
...
@@ -13,7 +13,6 @@ from django.test.utils import override_settings
from
.utils
import
CourseTestCase
from
.utils
import
CourseTestCase
import
contentstore.git_export_utils
as
git_export_utils
import
contentstore.git_export_utils
as
git_export_utils
from
xmodule.contentstore.django
import
_CONTENTSTORE
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore.django
import
modulestore
from
contentstore.utils
import
reverse_course_url
from
contentstore.utils
import
reverse_course_url
...
@@ -35,10 +34,6 @@ class TestExportGit(CourseTestCase):
...
@@ -35,10 +34,6 @@ class TestExportGit(CourseTestCase):
self
.
course_module
=
modulestore
()
.
get_course
(
self
.
course
.
id
)
self
.
course_module
=
modulestore
()
.
get_course
(
self
.
course
.
id
)
self
.
test_url
=
reverse_course_url
(
'export_git'
,
self
.
course
.
id
)
self
.
test_url
=
reverse_course_url
(
'export_git'
,
self
.
course
.
id
)
def
tearDown
(
self
):
modulestore
()
.
contentstore
.
drop_database
()
_CONTENTSTORE
.
clear
()
def
test_giturl_missing
(
self
):
def
test_giturl_missing
(
self
):
"""
"""
Test to make sure an appropriate error is displayed
Test to make sure an appropriate error is displayed
...
...
cms/djangoapps/contentstore/tests/test_import.py
View file @
d7cf8b7f
...
@@ -9,16 +9,11 @@ from django.test.utils import override_settings
...
@@ -9,16 +9,11 @@ from django.test.utils import override_settings
from
django.conf
import
settings
from
django.conf
import
settings
import
copy
import
copy
from
django.contrib.auth.models
import
User
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore.django
import
modulestore
from
xmodule.contentstore.django
import
contentstore
from
xmodule.contentstore.django
import
contentstore
from
opaque_keys.edx.locations
import
SlashSeparatedCourseKey
,
AssetLocation
from
opaque_keys.edx.locations
import
SlashSeparatedCourseKey
,
AssetLocation
from
xmodule.modulestore.xml_importer
import
import_from_xml
from
xmodule.modulestore.xml_importer
import
import_from_xml
from
xmodule.contentstore.django
import
_CONTENTSTORE
from
xmodule.exceptions
import
NotFoundError
from
xmodule.exceptions
import
NotFoundError
from
uuid
import
uuid4
from
uuid
import
uuid4
...
@@ -38,10 +33,6 @@ class ContentStoreImportTest(ModuleStoreTestCase):
...
@@ -38,10 +33,6 @@ class ContentStoreImportTest(ModuleStoreTestCase):
self
.
client
=
Client
()
self
.
client
=
Client
()
self
.
client
.
login
(
username
=
self
.
user
.
username
,
password
=
password
)
self
.
client
.
login
(
username
=
self
.
user
.
username
,
password
=
password
)
def
tearDown
(
self
):
contentstore
()
.
drop_database
()
_CONTENTSTORE
.
clear
()
def
load_test_import_course
(
self
):
def
load_test_import_course
(
self
):
'''
'''
Load the standard course used to test imports
Load the standard course used to test imports
...
...
cms/djangoapps/contentstore/tests/test_transcripts_utils.py
View file @
d7cf8b7f
...
@@ -18,7 +18,7 @@ from xmodule.modulestore.tests.factories import CourseFactory
...
@@ -18,7 +18,7 @@ from xmodule.modulestore.tests.factories import CourseFactory
from
xmodule.contentstore.content
import
StaticContent
from
xmodule.contentstore.content
import
StaticContent
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.exceptions
import
NotFoundError
from
xmodule.exceptions
import
NotFoundError
from
xmodule.contentstore.django
import
contentstore
,
_CONTENTSTORE
from
xmodule.contentstore.django
import
contentstore
from
xmodule.video_module
import
transcripts_utils
from
xmodule.video_module
import
transcripts_utils
TEST_DATA_CONTENTSTORE
=
copy
.
deepcopy
(
settings
.
CONTENTSTORE
)
TEST_DATA_CONTENTSTORE
=
copy
.
deepcopy
(
settings
.
CONTENTSTORE
)
...
@@ -151,8 +151,6 @@ class TestSaveSubsToStore(ModuleStoreTestCase):
...
@@ -151,8 +151,6 @@ class TestSaveSubsToStore(ModuleStoreTestCase):
def
tearDown
(
self
):
def
tearDown
(
self
):
self
.
clear_subs_content
()
self
.
clear_subs_content
()
contentstore
()
.
drop_database
()
_CONTENTSTORE
.
clear
()
@override_settings
(
CONTENTSTORE
=
TEST_DATA_CONTENTSTORE
)
@override_settings
(
CONTENTSTORE
=
TEST_DATA_CONTENTSTORE
)
...
@@ -189,10 +187,6 @@ class TestDownloadYoutubeSubs(ModuleStoreTestCase):
...
@@ -189,10 +187,6 @@ class TestDownloadYoutubeSubs(ModuleStoreTestCase):
self
.
course
=
CourseFactory
.
create
(
self
.
course
=
CourseFactory
.
create
(
org
=
self
.
org
,
number
=
self
.
number
,
display_name
=
self
.
display_name
)
org
=
self
.
org
,
number
=
self
.
number
,
display_name
=
self
.
display_name
)
def
tearDown
(
self
):
contentstore
()
.
drop_database
()
_CONTENTSTORE
.
clear
()
def
test_success_downloading_subs
(
self
):
def
test_success_downloading_subs
(
self
):
response
=
textwrap
.
dedent
(
"""<?xml version="1.0" encoding="utf-8" ?>
response
=
textwrap
.
dedent
(
"""<?xml version="1.0" encoding="utf-8" ?>
...
...
cms/djangoapps/contentstore/views/tests/test_import_export.py
View file @
d7cf8b7f
...
@@ -9,20 +9,17 @@ import shutil
...
@@ -9,20 +9,17 @@ import shutil
import
tarfile
import
tarfile
import
tempfile
import
tempfile
from
path
import
path
from
path
import
path
from
pymongo
import
MongoClient
from
uuid
import
uuid4
from
uuid
import
uuid4
from
django.test.utils
import
override_settings
from
django.test.utils
import
override_settings
from
django.conf
import
settings
from
django.conf
import
settings
from
contentstore.utils
import
reverse_course_url
from
contentstore.utils
import
reverse_course_url
from
xmodule.contentstore.django
import
_CONTENTSTORE
from
xmodule.modulestore.tests.factories
import
ItemFactory
from
xmodule.modulestore.tests.factories
import
ItemFactory
from
contentstore.tests.utils
import
CourseTestCase
from
contentstore.tests.utils
import
CourseTestCase
from
student
import
auth
from
student
import
auth
from
student.roles
import
CourseInstructorRole
,
CourseStaffRole
from
student.roles
import
CourseInstructorRole
,
CourseStaffRole
from
xmodule.modulestore.django
import
modulestore
TEST_DATA_CONTENTSTORE
=
copy
.
deepcopy
(
settings
.
CONTENTSTORE
)
TEST_DATA_CONTENTSTORE
=
copy
.
deepcopy
(
settings
.
CONTENTSTORE
)
TEST_DATA_CONTENTSTORE
[
'DOC_STORE_CONFIG'
][
'db'
]
=
'test_xcontent_
%
s'
%
uuid4
()
.
hex
TEST_DATA_CONTENTSTORE
[
'DOC_STORE_CONFIG'
][
'db'
]
=
'test_xcontent_
%
s'
%
uuid4
()
.
hex
...
@@ -70,8 +67,6 @@ class ImportTestCase(CourseTestCase):
...
@@ -70,8 +67,6 @@ class ImportTestCase(CourseTestCase):
def
tearDown
(
self
):
def
tearDown
(
self
):
shutil
.
rmtree
(
self
.
content_dir
)
shutil
.
rmtree
(
self
.
content_dir
)
modulestore
()
.
contentstore
.
drop_database
()
_CONTENTSTORE
.
clear
()
def
test_no_coursexml
(
self
):
def
test_no_coursexml
(
self
):
"""
"""
...
...
cms/djangoapps/contentstore/views/tests/test_transcripts.py
View file @
d7cf8b7f
...
@@ -15,7 +15,7 @@ from django.conf import settings
...
@@ -15,7 +15,7 @@ from django.conf import settings
from
contentstore.tests.utils
import
CourseTestCase
from
contentstore.tests.utils
import
CourseTestCase
from
cache_toolbox.core
import
del_cached_content
from
cache_toolbox.core
import
del_cached_content
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore.django
import
modulestore
from
xmodule.contentstore.django
import
contentstore
,
_CONTENTSTORE
from
xmodule.contentstore.django
import
contentstore
from
xmodule.contentstore.content
import
StaticContent
from
xmodule.contentstore.content
import
StaticContent
from
xmodule.exceptions
import
NotFoundError
from
xmodule.exceptions
import
NotFoundError
from
opaque_keys.edx.keys
import
UsageKey
from
opaque_keys.edx.keys
import
UsageKey
...
@@ -80,10 +80,6 @@ class Basetranscripts(CourseTestCase):
...
@@ -80,10 +80,6 @@ class Basetranscripts(CourseTestCase):
1.5
:
item
.
youtube_id_1_5
1.5
:
item
.
youtube_id_1_5
}
}
def
tearDown
(
self
):
contentstore
()
.
drop_database
()
_CONTENTSTORE
.
clear
()
class
TestUploadtranscripts
(
Basetranscripts
):
class
TestUploadtranscripts
(
Basetranscripts
):
"""Tests for '/transcripts/upload' url."""
"""Tests for '/transcripts/upload' url."""
...
...
common/djangoapps/contentserver/tests/test.py
View file @
d7cf8b7f
...
@@ -11,7 +11,7 @@ from django.test.utils import override_settings
...
@@ -11,7 +11,7 @@ from django.test.utils import override_settings
from
student.models
import
CourseEnrollment
from
student.models
import
CourseEnrollment
from
xmodule.contentstore.django
import
contentstore
,
_CONTENTSTORE
from
xmodule.contentstore.django
import
contentstore
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore.django
import
modulestore
from
opaque_keys.edx.locations
import
SlashSeparatedCourseKey
from
opaque_keys.edx.locations
import
SlashSeparatedCourseKey
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
...
@@ -55,11 +55,6 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase):
...
@@ -55,11 +55,6 @@ class ContentStoreToyCourseTest(ModuleStoreTestCase):
self
.
contentstore
.
set_attr
(
self
.
locked_asset
,
'locked'
,
True
)
self
.
contentstore
.
set_attr
(
self
.
locked_asset
,
'locked'
,
True
)
def
tearDown
(
self
):
contentstore
()
.
drop_database
()
_CONTENTSTORE
.
clear
()
def
test_unlocked_asset
(
self
):
def
test_unlocked_asset
(
self
):
"""
"""
Test that unlocked assets are being served.
Test that unlocked assets are being served.
...
...
common/djangoapps/terrain/browser.py
View file @
d7cf8b7f
...
@@ -16,10 +16,9 @@ import requests
...
@@ -16,10 +16,9 @@ import requests
from
base64
import
encodestring
from
base64
import
encodestring
from
json
import
dumps
from
json
import
dumps
from
pymongo
import
MongoClient
import
xmodule.modulestore.django
import
xmodule.modulestore.django
from
xmodule.contentstore.django
import
_CONTENTSTORE
from
xmodule.modulestore
import
ModuleStoreEnum
from
xmodule.modulestore
import
ModuleStoreEnum
from
xmodule.contentstore.django
import
_CONTENTSTORE
# There is an import issue when using django-staticfiles with lettuce
# There is an import issue when using django-staticfiles with lettuce
# Lettuce assumes that we are using django.contrib.staticfiles,
# Lettuce assumes that we are using django.contrib.staticfiles,
...
@@ -186,12 +185,9 @@ def reset_databases(scenario):
...
@@ -186,12 +185,9 @@ def reset_databases(scenario):
whereas modulestore data is in unique collection names. This data is created implicitly during the scenarios.
whereas modulestore data is in unique collection names. This data is created implicitly during the scenarios.
If no data is created during the test, these lines equivilently do nothing.
If no data is created during the test, these lines equivilently do nothing.
'''
'''
modulestore
=
xmodule
.
modulestore
.
django
.
modulestore
()
.
_get_modulestore_by_type
(
ModuleStoreEnum
.
Type
.
mongo
)
xmodule
.
modulestore
.
django
.
modulestore
()
.
_drop_database
()
# pylint: disable=protected-access
modulestore
.
contentstore
.
drop_database
()
_CONTENTSTORE
.
clear
()
modulestore
.
collection
.
drop
()
xmodule
.
modulestore
.
django
.
clear_existing_modulestores
()
xmodule
.
modulestore
.
django
.
clear_existing_modulestores
()
_CONTENTSTORE
.
clear
()
@world.absorb
@world.absorb
...
...
common/djangoapps/terrain/course_helpers.py
View file @
d7cf8b7f
...
@@ -5,9 +5,8 @@ import urllib
...
@@ -5,9 +5,8 @@ import urllib
from
lettuce
import
world
from
lettuce
import
world
from
django.contrib.auth.models
import
User
,
Group
from
django.contrib.auth.models
import
User
,
Group
from
student.models
import
CourseEnrollment
from
student.models
import
CourseEnrollment
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore.django
import
modulestore
,
clear_existing_modulestores
from
xmodule.modulestore
import
ModuleStoreEnum
from
xmodule.contentstore.django
import
_CONTENTSTORE
from
xmodule.contentstore.django
import
contentstore
@world.absorb
@world.absorb
...
@@ -72,6 +71,6 @@ def clear_courses():
...
@@ -72,6 +71,6 @@ def clear_courses():
# (though it shouldn't), do this manually
# (though it shouldn't), do this manually
# from the bash shell to drop it:
# from the bash shell to drop it:
# $ mongo test_xmodule --eval "db.dropDatabase()"
# $ mongo test_xmodule --eval "db.dropDatabase()"
store
=
modulestore
()
.
_get_modulestore_by_type
(
ModuleStoreEnum
.
Type
.
mongo
)
modulestore
()
.
_drop_database
()
# pylint: disable=protected-access
store
.
collection
.
drop
()
_CONTENTSTORE
.
clear
()
c
ontentstore
()
.
fs_files
.
drop
()
c
lear_existing_modulestores
()
common/lib/xmodule/xmodule/contentstore/mongo.py
View file @
d7cf8b7f
...
@@ -42,11 +42,18 @@ class MongoContentStore(ContentStore):
...
@@ -42,11 +42,18 @@ class MongoContentStore(ContentStore):
self
.
fs_files
=
_db
[
bucket
+
".files"
]
# the underlying collection GridFS uses
self
.
fs_files
=
_db
[
bucket
+
".files"
]
# the underlying collection GridFS uses
def
drop_database
(
self
):
def
close_connections
(
self
):
"""
"""
Only for use by test code. Removes the database!
Closes any open connections to the underlying databases
"""
"""
self
.
fs_files
.
database
.
connection
.
close
()
self
.
fs_files
.
database
.
connection
.
close
()
def
_drop_database
(
self
):
"""
A destructive operation to drop the underlying database and close all connections.
Intended to be used by test code for cleanup.
"""
self
.
close_connections
()
self
.
fs_files
.
database
.
connection
.
drop_database
(
self
.
fs_files
.
database
)
self
.
fs_files
.
database
.
connection
.
drop_database
(
self
.
fs_files
.
database
)
def
save
(
self
,
content
):
def
save
(
self
,
content
):
...
...
common/lib/xmodule/xmodule/modulestore/__init__.py
View file @
d7cf8b7f
...
@@ -298,6 +298,14 @@ class ModuleStoreRead(object):
...
@@ -298,6 +298,14 @@ class ModuleStoreRead(object):
"""
"""
pass
pass
@abstractmethod
def
close_connections
(
self
):
"""
Closes any open connections to the underlying databases
"""
pass
class
ModuleStoreWrite
(
ModuleStoreRead
):
class
ModuleStoreWrite
(
ModuleStoreRead
):
"""
"""
An abstract interface for a database backend that stores XModuleDescriptor
An abstract interface for a database backend that stores XModuleDescriptor
...
@@ -387,6 +395,14 @@ class ModuleStoreWrite(ModuleStoreRead):
...
@@ -387,6 +395,14 @@ class ModuleStoreWrite(ModuleStoreRead):
"""
"""
pass
pass
@abstractmethod
def
_drop_database
(
self
):
"""
A destructive operation to drop the underlying database and close all connections.
Intended to be used by test code for cleanup.
"""
pass
class
ModuleStoreReadBase
(
ModuleStoreRead
):
class
ModuleStoreReadBase
(
ModuleStoreRead
):
'''
'''
...
@@ -396,6 +412,7 @@ class ModuleStoreReadBase(ModuleStoreRead):
...
@@ -396,6 +412,7 @@ class ModuleStoreReadBase(ModuleStoreRead):
def
__init__
(
def
__init__
(
self
,
self
,
contentstore
=
None
,
doc_store_config
=
None
,
# ignore if passed up
doc_store_config
=
None
,
# ignore if passed up
metadata_inheritance_cache_subsystem
=
None
,
request_cache
=
None
,
metadata_inheritance_cache_subsystem
=
None
,
request_cache
=
None
,
xblock_mixins
=
(),
xblock_select
=
None
,
xblock_mixins
=
(),
xblock_select
=
None
,
...
@@ -412,6 +429,7 @@ class ModuleStoreReadBase(ModuleStoreRead):
...
@@ -412,6 +429,7 @@ class ModuleStoreReadBase(ModuleStoreRead):
self
.
request_cache
=
request_cache
self
.
request_cache
=
request_cache
self
.
xblock_mixins
=
xblock_mixins
self
.
xblock_mixins
=
xblock_mixins
self
.
xblock_select
=
xblock_select
self
.
xblock_select
=
xblock_select
self
.
contentstore
=
contentstore
def
get_course_errors
(
self
,
course_key
):
def
get_course_errors
(
self
,
course_key
):
"""
"""
...
@@ -484,6 +502,14 @@ class ModuleStoreReadBase(ModuleStoreRead):
...
@@ -484,6 +502,14 @@ class ModuleStoreReadBase(ModuleStoreRead):
# default is to say yes by not raising an exception
# default is to say yes by not raising an exception
return
{
'default_impl'
:
True
}
return
{
'default_impl'
:
True
}
def
close_connections
(
self
):
"""
Closes any open connections to the underlying databases
"""
if
self
.
contentstore
:
self
.
contentstore
.
close_connections
()
super
(
ModuleStoreReadBase
,
self
)
.
close_connections
()
@contextmanager
@contextmanager
def
default_store
(
self
,
store_type
):
def
default_store
(
self
,
store_type
):
"""
"""
...
@@ -511,9 +537,8 @@ class ModuleStoreWriteBase(ModuleStoreReadBase, ModuleStoreWrite):
...
@@ -511,9 +537,8 @@ class ModuleStoreWriteBase(ModuleStoreReadBase, ModuleStoreWrite):
Implement interface functionality that can be shared.
Implement interface functionality that can be shared.
'''
'''
def
__init__
(
self
,
contentstore
,
**
kwargs
):
def
__init__
(
self
,
contentstore
,
**
kwargs
):
super
(
ModuleStoreWriteBase
,
self
)
.
__init__
(
**
kwargs
)
super
(
ModuleStoreWriteBase
,
self
)
.
__init__
(
contentstore
=
contentstore
,
**
kwargs
)
self
.
contentstore
=
contentstore
# TODO: Don't have a runtime just to generate the appropriate mixin classes (cpennington)
# TODO: Don't have a runtime just to generate the appropriate mixin classes (cpennington)
# This is only used by partition_fields_by_scope, which is only needed because
# This is only used by partition_fields_by_scope, which is only needed because
# the split mongo store is used for item creation as well as item persistence
# the split mongo store is used for item creation as well as item persistence
...
@@ -585,8 +610,9 @@ class ModuleStoreWriteBase(ModuleStoreReadBase, ModuleStoreWrite):
...
@@ -585,8 +610,9 @@ class ModuleStoreWriteBase(ModuleStoreReadBase, ModuleStoreWrite):
content.
content.
"""
"""
# copy the assets
# copy the assets
self
.
contentstore
.
copy_all_course_assets
(
source_course_id
,
dest_course_id
)
if
self
.
contentstore
:
super
(
ModuleStoreWriteBase
,
self
)
.
clone_course
(
source_course_id
,
dest_course_id
,
user_id
)
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
return
dest_course_id
def
delete_course
(
self
,
course_key
,
user_id
):
def
delete_course
(
self
,
course_key
,
user_id
):
...
@@ -595,9 +621,19 @@ class ModuleStoreWriteBase(ModuleStoreReadBase, ModuleStoreWrite):
...
@@ -595,9 +621,19 @@ class ModuleStoreWriteBase(ModuleStoreReadBase, ModuleStoreWrite):
content.
content.
"""
"""
# delete the assets
# delete the assets
self
.
contentstore
.
delete_all_course_assets
(
course_key
)
if
self
.
contentstore
:
self
.
contentstore
.
delete_all_course_assets
(
course_key
)
super
(
ModuleStoreWriteBase
,
self
)
.
delete_course
(
course_key
,
user_id
)
super
(
ModuleStoreWriteBase
,
self
)
.
delete_course
(
course_key
,
user_id
)
def
_drop_database
(
self
):
"""
A destructive operation to drop the underlying database and close all connections.
Intended to be used by test code for cleanup.
"""
if
self
.
contentstore
:
self
.
contentstore
.
_drop_database
()
# pylint: disable=protected-access
super
(
ModuleStoreWriteBase
,
self
)
.
_drop_database
()
# pylint: disable=protected-access
@contextmanager
@contextmanager
def
bulk_write_operations
(
self
,
course_id
):
def
bulk_write_operations
(
self
,
course_id
):
"""
"""
...
...
common/lib/xmodule/xmodule/modulestore/mixed.py
View file @
d7cf8b7f
...
@@ -393,11 +393,18 @@ class MixedModuleStore(ModuleStoreWriteBase):
...
@@ -393,11 +393,18 @@ class MixedModuleStore(ModuleStoreWriteBase):
"""
"""
Close all db connections
Close all db connections
"""
"""
for
mstore
in
self
.
modulestores
:
for
modulestore
in
self
.
modulestores
:
if
hasattr
(
mstore
,
'database'
):
modulestore
.
close_connections
()
mstore
.
database
.
connection
.
close
()
elif
hasattr
(
mstore
,
'db'
):
def
_drop_database
(
self
):
mstore
.
db
.
connection
.
close
()
"""
A destructive operation to drop all databases and close all db connections.
Intended to be used by test code for cleanup.
"""
for
modulestore
in
self
.
modulestores
:
# drop database if the store supports it (read-only stores do not)
if
hasattr
(
modulestore
,
'_drop_database'
):
modulestore
.
_drop_database
()
# pylint: disable=protected-access
def
create_xmodule
(
self
,
location
,
definition_data
=
None
,
metadata
=
None
,
runtime
=
None
,
fields
=
{}):
def
create_xmodule
(
self
,
location
,
definition_data
=
None
,
metadata
=
None
,
runtime
=
None
,
fields
=
{}):
"""
"""
...
...
common/lib/xmodule/xmodule/modulestore/mongo/base.py
View file @
d7cf8b7f
...
@@ -394,6 +394,24 @@ class MongoModuleStore(ModuleStoreWriteBase):
...
@@ -394,6 +394,24 @@ class MongoModuleStore(ModuleStoreWriteBase):
self
.
ignore_write_events_on_courses
=
set
()
self
.
ignore_write_events_on_courses
=
set
()
self
.
_course_run_cache
=
{}
self
.
_course_run_cache
=
{}
def
close_connections
(
self
):
"""
Closes any open connections to the underlying database
"""
self
.
collection
.
database
.
connection
.
close
()
def
_drop_database
(
self
):
"""
A destructive operation to drop the underlying database and close all connections.
Intended to be used by test code for cleanup.
"""
# drop the assets
super
(
MongoModuleStore
,
self
)
.
_drop_database
()
connection
=
self
.
collection
.
database
.
connection
connection
.
drop_database
(
self
.
collection
.
database
)
connection
.
close
()
def
_begin_bulk_write_operation
(
self
,
course_id
):
def
_begin_bulk_write_operation
(
self
,
course_id
):
"""
"""
Prevent updating the meta-data inheritance cache for the given course
Prevent updating the meta-data inheritance cache for the given course
...
...
common/lib/xmodule/xmodule/modulestore/split_mongo/split.py
View file @
d7cf8b7f
...
@@ -135,6 +135,24 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
...
@@ -135,6 +135,24 @@ class SplitMongoModuleStore(ModuleStoreWriteBase):
self
.
render_template
=
render_template
self
.
render_template
=
render_template
self
.
i18n_service
=
i18n_service
self
.
i18n_service
=
i18n_service
def
close_connections
(
self
):
"""
Closes any open connections to the underlying databases
"""
self
.
db
.
connection
.
close
()
def
_drop_database
(
self
):
"""
A destructive operation to drop the underlying database and close all connections.
Intended to be used by test code for cleanup.
"""
# drop the assets
super
(
SplitMongoModuleStore
,
self
)
.
_drop_database
()
connection
=
self
.
db
.
connection
connection
.
drop_database
(
self
.
db
.
name
)
connection
.
close
()
def
cache_items
(
self
,
system
,
base_block_ids
,
course_key
,
depth
=
0
,
lazy
=
True
):
def
cache_items
(
self
,
system
,
base_block_ids
,
course_key
,
depth
=
0
,
lazy
=
True
):
'''
'''
Handles caching of items once inheritance and any other one time
Handles caching of items once inheritance and any other one time
...
...
common/lib/xmodule/xmodule/modulestore/tests/django_utils.py
View file @
d7cf8b7f
...
@@ -8,6 +8,7 @@ from django.contrib.auth.models import User
...
@@ -8,6 +8,7 @@ from django.contrib.auth.models import User
from
xmodule.modulestore.django
import
(
from
xmodule.modulestore.django
import
(
modulestore
,
clear_existing_modulestores
,
loc_mapper
modulestore
,
clear_existing_modulestores
,
loc_mapper
)
)
from
xmodule.contentstore.django
import
_CONTENTSTORE
from
xmodule.modulestore
import
ModuleStoreEnum
from
xmodule.modulestore
import
ModuleStoreEnum
...
@@ -187,27 +188,14 @@ class ModuleStoreTestCase(TestCase):
...
@@ -187,27 +188,14 @@ class ModuleStoreTestCase(TestCase):
return
updated_course
return
updated_course
@staticmethod
@staticmethod
def
drop_mongo_collections
(
modulestore_type
=
ModuleStoreEnum
.
Type
.
mongo
):
def
drop_mongo_collections
():
"""
"""
If using a Mongo-backed modulestore & contentstore, drop the collections.
If using a Mongo-backed modulestore & contentstore, drop the collections.
"""
"""
store
=
modulestore
()
module_store
=
modulestore
()
if
hasattr
(
store
,
'_get_modulestore_by_type'
):
if
hasattr
(
module_store
,
'_drop_database'
):
store
=
store
.
_get_modulestore_by_type
(
modulestore_type
)
# pylint: disable=W0212
module_store
.
_drop_database
()
# pylint: disable=protected-access
if
hasattr
(
store
,
'collection'
):
_CONTENTSTORE
.
clear
()
connection
=
store
.
collection
.
database
.
connection
store
.
collection
.
drop
()
connection
.
drop_database
(
store
.
collection
.
database
.
name
)
connection
.
close
()
elif
hasattr
(
store
,
'close_all_connections'
):
store
.
close_all_connections
()
elif
hasattr
(
store
,
'db'
):
connection
=
store
.
db
.
connection
connection
.
drop_database
(
store
.
db
.
name
)
connection
.
close
()
if
hasattr
(
store
,
'contentstore'
):
store
.
contentstore
.
drop_database
()
location_mapper
=
loc_mapper
()
location_mapper
=
loc_mapper
()
if
location_mapper
.
db
:
if
location_mapper
.
db
:
...
...
common/lib/xmodule/xmodule/modulestore/tests/test_contentstore.py
View file @
d7cf8b7f
...
@@ -57,7 +57,7 @@ class TestContentstore(unittest.TestCase):
...
@@ -57,7 +57,7 @@ class TestContentstore(unittest.TestCase):
# since MongoModuleStore and MongoContentStore are basically assumed to be together, create this class
# since MongoModuleStore and MongoContentStore are basically assumed to be together, create this class
# as well
# as well
self
.
contentstore
=
MongoContentStore
(
HOST
,
DB
,
port
=
PORT
)
self
.
contentstore
=
MongoContentStore
(
HOST
,
DB
,
port
=
PORT
)
self
.
addCleanup
(
self
.
contentstore
.
drop_database
)
self
.
addCleanup
(
self
.
contentstore
.
_drop_database
)
# pylint: disable=protected-access
setattr
(
AssetLocation
,
'deprecated'
,
deprecated
)
setattr
(
AssetLocation
,
'deprecated'
,
deprecated
)
setattr
(
SlashSeparatedCourseKey
,
'deprecated'
,
deprecated
)
setattr
(
SlashSeparatedCourseKey
,
'deprecated'
,
deprecated
)
...
...
common/lib/xmodule/xmodule/modulestore/tests/test_mongo.py
View file @
d7cf8b7f
...
@@ -74,7 +74,6 @@ class TestMongoModuleStore(unittest.TestCase):
...
@@ -74,7 +74,6 @@ class TestMongoModuleStore(unittest.TestCase):
tz_aware
=
True
,
tz_aware
=
True
,
document_class
=
dict
,
document_class
=
dict
,
)
)
cls
.
connection
.
drop_database
(
DB
)
# NOTE: Creating a single db for all the tests to save time. This
# NOTE: Creating a single db for all the tests to save time. This
# is ok only as long as none of the tests modify the db.
# is ok only as long as none of the tests modify the db.
...
...
common/lib/xmodule/xmodule/modulestore/tests/test_xml_importer.py
View file @
d7cf8b7f
...
@@ -50,10 +50,8 @@ class ModuleStoreNoSettings(unittest.TestCase):
...
@@ -50,10 +50,8 @@ class ModuleStoreNoSettings(unittest.TestCase):
"""
"""
cleanup
cleanup
"""
"""
if
modulestore
:
if
self
.
modulestore
:
connection
=
self
.
modulestore
.
database
.
connection
self
.
modulestore
.
_drop_database
()
# pylint: disable=protected-access
connection
.
drop_database
(
self
.
modulestore
.
database
)
connection
.
close
()
def
setUp
(
self
):
def
setUp
(
self
):
"""
"""
...
...
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