Commit 4c95294b by chrisndodge

Merge pull request #1810 from MITx/feature/cdodge/integrity-check-mongo-course

pylint/pep8 fixes
parents f467d93f 02dfa09c
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from xmodule.contentstore.django import contentstore
from xmodule.modulestore.xml_importer import check_module_metadata_editability from xmodule.modulestore.xml_importer import check_module_metadata_editability
from xmodule.course_module import CourseDescriptor from xmodule.course_module import CourseDescriptor
from request_cache.middleware import RequestCache from request_cache.middleware import RequestCache
from django.core.cache import get_cache, InvalidCacheBackendError
class Command(BaseCommand): class Command(BaseCommand):
help = '''Enumerates through the course and find common errors''' help = '''Enumerates through the course and find common errors'''
def handle(self, *args, **options): def handle(self, *args, **options):
if len(args) != 1 : if len(args) != 1:
raise CommandError("check_course requires one argument: <location>") raise CommandError("check_course requires one argument: <location>")
loc_str = args[0] loc_str = args[0]
loc = CourseDescriptor.id_to_location(loc_str) loc = CourseDescriptor.id_to_location(loc_str)
store = modulestore() store = modulestore()
# setup a request cache so we don't throttle the DB with all the metadata inheritance requests # setup a request cache so we don't throttle the DB with all the metadata inheritance requests
store.request_cache = RequestCache.get_request_cache() store.request_cache = RequestCache.get_request_cache()
course = store.get_item(loc, depth=3) course = store.get_item(loc, depth=3)
err_cnt = 0 err_cnt = 0
def _xlint_metadata(module): def _xlint_metadata(module):
err_cnt = check_module_metadata_editability(module) err_cnt = check_module_metadata_editability(module)
for child in module.get_children(): for child in module.get_children():
err_cnt = err_cnt + _xlint_metadata(child) err_cnt = err_cnt + _xlint_metadata(child)
return err_cnt return err_cnt
_xlint_metadata(course) err_cnt = err_cnt + _xlint_metadata(course)
# we've had a bug where the xml_attributes field can we rewritten as a string rather than a dict # we've had a bug where the xml_attributes field can we rewritten as a string rather than a dict
def _check_xml_attributes_field(module): def _check_xml_attributes_field(module):
...@@ -45,7 +43,7 @@ class Command(BaseCommand): ...@@ -45,7 +43,7 @@ class Command(BaseCommand):
err_cnt = err_cnt + _check_xml_attributes_field(child) err_cnt = err_cnt + _check_xml_attributes_field(child)
return err_cnt return err_cnt
_check_xml_attributes_field(course) err_cnt = err_cnt + _check_xml_attributes_field(course)
# check for dangling discussion items, this can cause errors in the forums # check for dangling discussion items, this can cause errors in the forums
def _get_discussion_items(module): def _get_discussion_items(module):
...@@ -58,17 +56,13 @@ class Command(BaseCommand): ...@@ -58,17 +56,13 @@ class Command(BaseCommand):
return discussion_items return discussion_items
discussion_items =_get_discussion_items(course) discussion_items = _get_discussion_items(course)
# now query all discussion items via get_items() and compare with the tree-traversal # now query all discussion items via get_items() and compare with the tree-traversal
queried_discussion_items = store.get_items(['i4x', course.location.org, course.location.course, queried_discussion_items = store.get_items(['i4x', course.location.org, course.location.course,
'discussion', None, None]) 'discussion', None, None])
for item in queried_discussion_items: for item in queried_discussion_items:
if item.location.url() not in discussion_items: if item.location.url() not in discussion_items:
print 'Found dangling discussion module = {0}'.format(item.location.url()) print 'Found dangling discussion module = {0}'.format(item.location.url())
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