Commit 98535e12 by Calen Pennington

Fix check_course command

parent 383d323e
...@@ -193,50 +193,6 @@ def replace_custom_tags(tree): ...@@ -193,50 +193,6 @@ def replace_custom_tags(tree):
replace_custom_tags_dir(tree, settings.DATA_DIR+'/custom_tags') replace_custom_tags_dir(tree, settings.DATA_DIR+'/custom_tags')
def course_file(user, coursename=None):
''' Given a user, return an xml tree object for the course file.
Handles getting the right file, and processing it depending on the
groups the user is in. Does caching of the xml strings.
'''
if user.is_authenticated():
# use user.profile_cache.courseware?
filename = UserProfile.objects.get(user=user).courseware
else:
filename = 'guest_course.xml'
# if a specific course is specified, then use multicourse to get
# the right path to the course XML directory
if coursename and settings.ENABLE_MULTICOURSE:
xp = multicourse_settings.get_course_xmlpath(coursename)
filename = xp + filename # prefix the filename with the path
groups = user_groups(user)
options = get_options(user)
# Try the cache...
cache_key = "{0}_processed?dev_content:{1}&groups:{2}".format(
filename,
options['dev_content'],
sorted(groups))
if "dev" in settings.DEFAULT_GROUPS:
tree_string = None
else:
tree_string = cache.get(cache_key)
if tree_string:
tree = etree.XML(tree_string)
else:
tree = parse_course_file(filename, options, namespace='course')
# Cache it
tree_string = etree.tostring(tree)
cache.set(cache_key, tree_string, 60)
return tree
def sections_dir(coursename=None): def sections_dir(coursename=None):
''' Get directory where sections information is stored. ''' Get directory where sections information is stored.
''' '''
......
...@@ -6,50 +6,36 @@ from django.core.management.base import BaseCommand ...@@ -6,50 +6,36 @@ from django.core.management.base import BaseCommand
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from courseware.content_parser import course_file
import courseware.module_render
import xmodule import xmodule
import mitxmako.middleware as middleware import mitxmako.middleware as middleware
middleware.MakoMiddleware() middleware.MakoMiddleware()
from keystore.django import keystore
from courseware.models import StudentModuleCache
from courseware.module_render import get_module
def check_names(user, course):
'''
Complain if any problems have non alphanumeric names.
TODO (vshnayder): there are some in 6.002x that don't. Is that actually a problem?
'''
all_ok = True
print "Confirming all problems have alphanumeric names"
for problem in course.xpath('//problem'):
filename = problem.get('filename')
if not filename.isalnum():
print "==============> Invalid (non-alphanumeric) filename", filename
all_ok = False
return all_ok
def check_rendering(user, course): def check_rendering(module):
'''Check that all modules render''' '''Check that all modules render'''
all_ok = True all_ok = True
print "Confirming all modules render. Nothing should print during this step. " print "Confirming all modules render. Nothing should print during this step. "
for module in course.xpath('//problem|//html|//video|//vertical|//sequential|/tab'):
module_class = xmodule.modx_modules[module.tag] def _check_module(module):
# TODO: Abstract this out in render_module.py try:
try: module.get_html()
module_class(etree.tostring(module),
module.get('id'),
ajax_url='',
state=None,
track_function = lambda x,y,z:None,
render_function = lambda x: {'content':'','type':'video'})
except Exception as ex: except Exception as ex:
print "==============> Error in ", etree.tostring(module) print "==============> Error in ", module.id
print "" print ""
print ex print ex
all_ok = False all_ok = False
for child in module.get_children():
_check_module(child)
_check_module(module)
print "Module render check finished" print "Module render check finished"
return all_ok return all_ok
def check_sections(user, course):
def check_sections(course):
all_ok = True all_ok = True
sections_dir = settings.DATA_DIR + "/sections" sections_dir = settings.DATA_DIR + "/sections"
print "Checking that all sections exist and parse properly" print "Checking that all sections exist and parse properly"
...@@ -69,11 +55,13 @@ def check_sections(user, course): ...@@ -69,11 +55,13 @@ def check_sections(user, course):
all_ok = False all_ok = False
print "checked all sections" print "checked all sections"
else: else:
print "Skipping check of include files -- no section includes dir ("+sections_dir+")" print "Skipping check of include files -- no section includes dir (" + sections_dir + ")"
return all_ok return all_ok
class Command(BaseCommand): class Command(BaseCommand):
help = "Does basic validity tests on course.xml." help = "Does basic validity tests on course.xml."
def handle(self, *args, **options): def handle(self, *args, **options):
all_ok = True all_ok = True
...@@ -86,22 +74,25 @@ class Command(BaseCommand): ...@@ -86,22 +74,25 @@ class Command(BaseCommand):
sample_user = User.objects.all()[0] sample_user = User.objects.all()[0]
print "Attempting to load courseware" print "Attempting to load courseware"
course = course_file(sample_user)
# TODO (cpennington): Get coursename in a legitimate way
to_run = [check_names, course_location = 'i4x://edx/6002xs12/course/6.002_Spring_2012'
# TODO (vshnayder) : make check_rendering work (use module_render.py), student_module_cache = StudentModuleCache(sample_user, keystore().get_item(course_location))
# turn it on (course, _, _, _) = get_module(sample_user, None, course_location, student_module_cache)
# check_rendering,
check_sections, to_run = [
] #TODO (vshnayder) : make check_rendering work (use module_render.py),
# turn it on
check_rendering,
check_sections,
]
for check in to_run: for check in to_run:
all_ok = check(sample_user, course) and all_ok all_ok = check(course) and all_ok
# TODO: print "Checking course properly annotated with preprocess.py" # TODO: print "Checking course properly annotated with preprocess.py"
if all_ok: if all_ok:
print 'Courseware passes all checks!' print 'Courseware passes all checks!'
else: else:
print "Courseware fails some checks" print "Courseware fails some checks"
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