Commit 0684f6a4 by Don Mitchell

Merge pull request #1878 from edx/dhm/pymongo_client

Upgrade pymongo usage from deprecated connection to client
parents f7ffc1d2 298e7a23
...@@ -1604,7 +1604,7 @@ class ContentStoreTest(ModuleStoreTestCase): ...@@ -1604,7 +1604,7 @@ class ContentStoreTest(ModuleStoreTestCase):
data = parse_json(resp) data = parse_json(resp)
self.assertRegexpMatches( self.assertRegexpMatches(
data['locator'], data['locator'],
r"^MITx.999.Robot_Super_Course/branch/draft/block/chapter([0-9]|[a-f]){3}$" r"^MITx.999.Robot_Super_Course/branch/draft/block/chapter([0-9]|[a-f]){3,}$"
) )
def test_capa_module(self): def test_capa_module(self):
......
from pymongo import Connection import pymongo
import gridfs import gridfs
from gridfs.errors import NoFile from gridfs.errors import NoFile
...@@ -24,8 +24,14 @@ class MongoContentStore(ContentStore): ...@@ -24,8 +24,14 @@ class MongoContentStore(ContentStore):
:param collection: ignores but provided for consistency w/ other doc_store_config patterns :param collection: ignores but provided for consistency w/ other doc_store_config patterns
""" """
logging.debug('Using MongoDB for static content serving at host={0} db={1}'.format(host, db)) logging.debug('Using MongoDB for static content serving at host={0} db={1}'.format(host, db))
_db = pymongo.database.Database(
_db = Connection(host=host, port=port, **kwargs)[db] pymongo.MongoClient(
host=host,
port=port,
**kwargs
),
db
)
if user is not None and password is not None: if user is not None and password is not None:
_db.authenticate(user, password) _db.authenticate(user, password)
......
...@@ -274,25 +274,29 @@ class MongoModuleStore(ModuleStoreWriteBase): ...@@ -274,25 +274,29 @@ class MongoModuleStore(ModuleStoreWriteBase):
""" """
Create & open the connection, authenticate, and provide pointers to the collection Create & open the connection, authenticate, and provide pointers to the collection
""" """
self.collection = pymongo.connection.Connection( self.database = pymongo.database.Database(
host=host, pymongo.MongoClient(
port=port, host=host,
tz_aware=tz_aware, port=port,
**kwargs tz_aware=tz_aware,
)[db][collection] **kwargs
),
db
)
self.collection = self.database[collection]
if user is not None and password is not None: if user is not None and password is not None:
self.collection.database.authenticate(user, password) self.database.authenticate(user, password)
do_connection(**doc_store_config) do_connection(**doc_store_config)
# Force mongo to report errors, at the expense of performance # Force mongo to report errors, at the expense of performance
self.collection.safe = True self.collection.write_concern = {'w': 1}
# Force mongo to maintain an index over _id.* that is in the same order # Force mongo to maintain an index over _id.* that is in the same order
# that is used when querying by a location # that is used when querying by a location
self.collection.ensure_index( self.collection.ensure_index(
zip(('_id.' + field for field in Location._fields), repeat(1)) zip(('_id.' + field for field in Location._fields), repeat(1)),
) )
if default_class is not None: if default_class is not None:
......
...@@ -55,7 +55,7 @@ def mongo_store_config(data_dir): ...@@ -55,7 +55,7 @@ def mongo_store_config(data_dir):
'DOC_STORE_CONFIG': { 'DOC_STORE_CONFIG': {
'host': 'localhost', 'host': 'localhost',
'db': 'test_xmodule', 'db': 'test_xmodule',
'collection': 'modulestore_%s' % uuid4().hex, 'collection': 'modulestore{0}'.format(uuid4().hex[:5]),
}, },
'OPTIONS': { 'OPTIONS': {
'default_class': 'xmodule.raw_module.RawDescriptor', 'default_class': 'xmodule.raw_module.RawDescriptor',
...@@ -86,7 +86,7 @@ def draft_mongo_store_config(data_dir): ...@@ -86,7 +86,7 @@ def draft_mongo_store_config(data_dir):
'DOC_STORE_CONFIG': { 'DOC_STORE_CONFIG': {
'host': 'localhost', 'host': 'localhost',
'db': 'test_xmodule', 'db': 'test_xmodule',
'collection': 'modulestore_%s' % uuid4().hex, 'collection': 'modulestore{0}'.format(uuid4().hex[:5]),
}, },
'OPTIONS': modulestore_options 'OPTIONS': modulestore_options
} }
...@@ -121,7 +121,7 @@ def studio_store_config(data_dir): ...@@ -121,7 +121,7 @@ def studio_store_config(data_dir):
store_config = { store_config = {
'host': 'localhost', 'host': 'localhost',
'db': 'test_xmodule', 'db': 'test_xmodule',
'collection': 'modulestore_%s' % uuid4().hex, 'collection': 'modulestore{0}'.format(uuid4().hex[:5]),
} }
options = { options = {
'default_class': 'xmodule.raw_module.RawDescriptor', 'default_class': 'xmodule.raw_module.RawDescriptor',
......
...@@ -20,7 +20,7 @@ class TestLocationMapper(unittest.TestCase): ...@@ -20,7 +20,7 @@ class TestLocationMapper(unittest.TestCase):
modulestore_options = { modulestore_options = {
'host': 'localhost', 'host': 'localhost',
'db': 'test_xmodule', 'db': 'test_xmodule',
'collection': 'modulestore{0}'.format(uuid.uuid4().hex), 'collection': 'modulestore{0}'.format(uuid.uuid4().hex[:5]),
} }
# pylint: disable=W0142 # pylint: disable=W0142
......
...@@ -21,7 +21,7 @@ from xmodule.modulestore.mixed import MixedModuleStore ...@@ -21,7 +21,7 @@ from xmodule.modulestore.mixed import MixedModuleStore
HOST = 'localhost' HOST = 'localhost'
PORT = 27017 PORT = 27017
DB = 'test_mongo_%s' % uuid4().hex DB = 'test_mongo_%s' % uuid4().hex[:5]
COLLECTION = 'modulestore' COLLECTION = 'modulestore'
FS_ROOT = DATA_DIR FS_ROOT = DATA_DIR
DEFAULT_CLASS = 'xmodule.raw_module.RawDescriptor' DEFAULT_CLASS = 'xmodule.raw_module.RawDescriptor'
...@@ -69,7 +69,11 @@ class TestMixedModuleStore(object): ...@@ -69,7 +69,11 @@ class TestMixedModuleStore(object):
""" """
Set up the database for testing Set up the database for testing
""" """
cls.connection = pymongo.connection.Connection(HOST, PORT) cls.connection = pymongo.MongoClient(
host=HOST,
port=PORT,
tz_aware=True,
)
cls.connection.drop_database(DB) cls.connection.drop_database(DB)
cls.fake_location = Location(['i4x', 'foo', 'bar', 'vertical', 'baz']) cls.fake_location = Location(['i4x', 'foo', 'bar', 'vertical', 'baz'])
cls.import_org, cls.import_course, cls.import_run = IMPORT_COURSEID.split('/') cls.import_org, cls.import_course, cls.import_run = IMPORT_COURSEID.split('/')
......
...@@ -20,7 +20,7 @@ from xmodule.modulestore.xml_importer import import_from_xml, perform_xlint ...@@ -20,7 +20,7 @@ from xmodule.modulestore.xml_importer import import_from_xml, perform_xlint
from xmodule.contentstore.mongo import MongoContentStore from xmodule.contentstore.mongo import MongoContentStore
from xmodule.modulestore.tests.test_modulestore import check_path_to_location from xmodule.modulestore.tests.test_modulestore import check_path_to_location
from IPython.testing.nose_assert_methods import assert_in, assert_not_in from IPython.testing.nose_assert_methods import assert_in
from xmodule.exceptions import NotFoundError from xmodule.exceptions import NotFoundError
from xmodule.modulestore.exceptions import InsufficientSpecificationError from xmodule.modulestore.exceptions import InsufficientSpecificationError
...@@ -28,7 +28,7 @@ log = logging.getLogger(__name__) ...@@ -28,7 +28,7 @@ log = logging.getLogger(__name__)
HOST = 'localhost' HOST = 'localhost'
PORT = 27017 PORT = 27017
DB = 'test_mongo_%s' % uuid4().hex DB = 'test_mongo_%s' % uuid4().hex[:5]
COLLECTION = 'modulestore' COLLECTION = 'modulestore'
FS_ROOT = DATA_DIR # TODO (vshnayder): will need a real fs_root for testing load_item FS_ROOT = DATA_DIR # TODO (vshnayder): will need a real fs_root for testing load_item
DEFAULT_CLASS = 'xmodule.raw_module.RawDescriptor' DEFAULT_CLASS = 'xmodule.raw_module.RawDescriptor'
...@@ -39,7 +39,11 @@ class TestMongoModuleStore(object): ...@@ -39,7 +39,11 @@ class TestMongoModuleStore(object):
'''Tests!''' '''Tests!'''
@classmethod @classmethod
def setupClass(cls): def setupClass(cls):
cls.connection = pymongo.connection.Connection(HOST, PORT) cls.connection = pymongo.MongoClient(
host=HOST,
port=PORT,
tz_aware=True,
)
cls.connection.drop_database(DB) 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
...@@ -50,8 +54,8 @@ class TestMongoModuleStore(object): ...@@ -50,8 +54,8 @@ class TestMongoModuleStore(object):
@classmethod @classmethod
def teardownClass(cls): def teardownClass(cls):
cls.connection = pymongo.connection.Connection(HOST, PORT) if cls.connection:
cls.connection.drop_database(DB) cls.connection.drop_database(DB)
@staticmethod @staticmethod
def initdb(): def initdb():
......
...@@ -33,7 +33,7 @@ class TestOrphan(unittest.TestCase): ...@@ -33,7 +33,7 @@ class TestOrphan(unittest.TestCase):
split_course_id = 'test_org.test_course.runid' split_course_id = 'test_org.test_course.runid'
def setUp(self): def setUp(self):
self.db_config['collection'] = 'modulestore{0}'.format(uuid.uuid4().hex) self.db_config['collection'] = 'modulestore{0}'.format(uuid.uuid4().hex[:5])
self.userid = random.getrandbits(32) self.userid = random.getrandbits(32)
super(TestOrphan, self).setUp() super(TestOrphan, self).setUp()
......
...@@ -34,7 +34,7 @@ class TestPublish(unittest.TestCase): ...@@ -34,7 +34,7 @@ class TestPublish(unittest.TestCase):
} }
def setUp(self): def setUp(self):
self.db_config['collection'] = 'modulestore{0}'.format(uuid.uuid4().hex) self.db_config['collection'] = 'modulestore{0}'.format(uuid.uuid4().hex[:5])
self.old_mongo = MongoModuleStore(self.db_config, **self.modulestore_options) self.old_mongo = MongoModuleStore(self.db_config, **self.modulestore_options)
self.draft_mongo = DraftMongoModuleStore(self.db_config, **self.modulestore_options) self.draft_mongo = DraftMongoModuleStore(self.db_config, **self.modulestore_options)
......
...@@ -31,7 +31,7 @@ class TestMigration(unittest.TestCase): ...@@ -31,7 +31,7 @@ class TestMigration(unittest.TestCase):
db_config = { db_config = {
'host': 'localhost', 'host': 'localhost',
'db': 'test_xmodule', 'db': 'test_xmodule',
'collection': 'modulestore{0}'.format(uuid.uuid4().hex), 'collection': 'modulestore{0}'.format(uuid.uuid4().hex[:5]),
} }
modulestore_options = { modulestore_options = {
......
...@@ -32,7 +32,7 @@ class SplitModuleTest(unittest.TestCase): ...@@ -32,7 +32,7 @@ class SplitModuleTest(unittest.TestCase):
DOC_STORE_CONFIG = { DOC_STORE_CONFIG = {
'host': 'localhost', 'host': 'localhost',
'db': 'test_xmodule', 'db': 'test_xmodule',
'collection': 'modulestore{0}'.format(uuid.uuid4().hex), 'collection': 'modulestore{0}'.format(uuid.uuid4().hex[:5]),
} }
modulestore_options = { modulestore_options = {
'default_class': 'xmodule.raw_module.RawDescriptor', 'default_class': 'xmodule.raw_module.RawDescriptor',
......
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