Use new restful pattern instead

This commit is contained in:
Don Mitchell
2013-10-23 08:50:45 -04:00
parent 8bbaf0065b
commit f45abe3d9f
5 changed files with 46 additions and 52 deletions

View File

@@ -855,27 +855,13 @@ class MongoModuleStore(ModuleStoreBase):
"""
return MONGO_MODULESTORE_TYPE
COURSE_ID_RE = re.compile(r'(?P<org>[^.]+)\.(?P<course_id>.+)')
def parse_course_id(self, course_id):
def get_orphans(self, course_location, detached_categories, _branch):
"""
Parse a Locator style course_id into a dict w/ the org and course_id
:param course_id: a string looking like 'org.course.id.part'
Return an array all of the locations for orphans in the course.
"""
match = self.COURSE_ID_RE.match(course_id)
if match is None:
raise ValueError(course_id)
return match.groupdict()
def get_orphans(self, course_id, detached_categories, _branch):
"""
Return a dict of all of the orphans in the course.
:param course_id:
"""
locator_dict = self.parse_course_id(course_id)
all_items = self.collection.find({
'_id.org': locator_dict['org'],
'_id.course': locator_dict['course_id'],
'_id.org': course_location.org,
'_id.course': course_location.course,
'_id.category': {'$nin': detached_categories}
})
all_reachable = set()

View File

@@ -23,12 +23,12 @@ class TestOrphan(unittest.TestCase):
'db': 'test_xmodule',
}
modulestore_options = dict({
modulestore_options = {
'default_class': 'xmodule.raw_module.RawDescriptor',
'fs_root': '',
'render_template': mock.Mock(return_value=""),
'xblock_mixins': (InheritanceMixin,)
})
}
split_course_id = 'test_org.test_course.runid'
@@ -41,25 +41,35 @@ class TestOrphan(unittest.TestCase):
self.db_config,
**self.modulestore_options
)
self.addCleanup(self.tearDownSplit)
self.addCleanup(self.tear_down_split)
self.old_mongo = MongoModuleStore(self.db_config, **self.modulestore_options)
self.addCleanup(self.tearDownMongo)
self.addCleanup(self.tear_down_mongo)
self.course_location = None
self._create_course()
def tearDownSplit(self):
def tear_down_split(self):
"""
Remove the test collections, close the db connection
"""
split_db = self.split_mongo.db
split_db.drop_collection(split_db.course_index)
split_db.drop_collection(split_db.structures)
split_db.drop_collection(split_db.definitions)
split_db.connection.close()
def tearDownMongo(self):
def tear_down_mongo(self):
"""
Remove the test collections, close the db connection
"""
split_db = self.split_mongo.db
# old_mongo doesn't give a db attr, but all of the dbs are the same
split_db.drop_collection(self.old_mongo.collection)
def _create_item(self, category, name, data, metadata, parent_category, parent_name, runtime):
"""
Create the item of the given category and block id in split and old mongo, add it to the optional
parent. The parent category is only needed because old mongo requires it for the id.
"""
location = Location('i4x', 'test_org', 'test_course', category, name)
self.old_mongo.create_and_save_xmodule(location, data, metadata, runtime)
if isinstance(data, basestring):
@@ -125,7 +135,7 @@ class TestOrphan(unittest.TestCase):
"""
Test that old mongo finds the orphans
"""
orphans = self.old_mongo.get_orphans('test_org.test_course', ['static_tab', 'about', 'course_info'], None)
orphans = self.old_mongo.get_orphans(self.course_location, ['static_tab', 'about', 'course_info'], None)
self.assertEqual(len(orphans), 3, "Wrong # {}".format(orphans))
location = self.course_location.replace(category='chapter', name='OrphanChapter')
self.assertIn(location.url(), orphans)