Commit d4561648 by Calen Pennington

Use django-pipeline to read course static files.

Requires the replacement of {COURSE_STATIC_URL} with just /static/
in about/overview.html files.
parent 194c2dd7
<%! <%!
from staticfiles.storage import staticfiles_storage from staticfiles.storage import staticfiles_storage
from pipeline_mako import compressed_css, compressed_js from pipeline_mako import compressed_css, compressed_js
from static_replace import replace_urls
%> %>
<%def name='url(file)'>${staticfiles_storage.url(file)}</%def> <%def name='url(file)'>${staticfiles_storage.url(file)}</%def>
...@@ -24,5 +23,3 @@ from static_replace import replace_urls ...@@ -24,5 +23,3 @@ from static_replace import replace_urls
% endfor % endfor
%endif %endif
</%def> </%def>
<%def name='replace_urls(text)'>${replace_urls(text)}</%def>
...@@ -9,18 +9,21 @@ from django.http import Http404 ...@@ -9,18 +9,21 @@ from django.http import Http404
from xmodule.course_module import CourseDescriptor from xmodule.course_module import CourseDescriptor
from xmodule.modulestore.django import modulestore from xmodule.modulestore.django import modulestore
from xmodule.modulestore.exceptions import ItemNotFoundError from xmodule.modulestore.exceptions import ItemNotFoundError
from static_replace import replace_urls
from staticfiles.storage import staticfiles_storage
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
def check_course(course_id, course_must_be_open=True, course_required=True): def check_course(course_id, course_must_be_open=True, course_required=True):
""" """
Given a course_id, this returns the course object. By default, Given a course_id, this returns the course object. By default,
if the course is not found or the course is not open yet, this if the course is not found or the course is not open yet, this
method will raise a 404. method will raise a 404.
If course_must_be_open is False, the course will be returned If course_must_be_open is False, the course will be returned
without a 404 even if it is not open. without a 404 even if it is not open.
If course_required is False, a course_id of None is acceptable. The If course_required is False, a course_id of None is acceptable. The
course returned will be None. Even if the course is not required, course returned will be None. Even if the course is not required,
if a course_id is given that does not exist a 404 will be raised. if a course_id is given that does not exist a 404 will be raised.
...@@ -32,22 +35,17 @@ def check_course(course_id, course_must_be_open=True, course_required=True): ...@@ -32,22 +35,17 @@ def check_course(course_id, course_must_be_open=True, course_required=True):
course = modulestore().get_item(course_loc) course = modulestore().get_item(course_loc)
except (KeyError, ItemNotFoundError): except (KeyError, ItemNotFoundError):
raise Http404("Course not found.") raise Http404("Course not found.")
if course_must_be_open and not course.has_started(): if course_must_be_open and not course.has_started():
raise Http404("This course has not yet started.") raise Http404("This course has not yet started.")
return course
return course
### These methods look like they should be on the course_module object itself, but they rely
### on the lms. Maybe they should be added dynamically to the class?
def course_static_url(course):
return settings.STATIC_URL + "/" + course.metadata['data_dir'] + "/"
def course_image_url(course): def course_image_url(course):
return course_static_url(course) + "images/course_image.jpg" return staticfiles_storage.url(course.metadata['data_dir'] + "/images/course_image.jpg")
def get_course_about_section(course, section_key): def get_course_about_section(course, section_key):
""" """
This returns the snippet of html to be rendered on the course about page, given the key for the section. This returns the snippet of html to be rendered on the course about page, given the key for the section.
...@@ -78,7 +76,7 @@ def get_course_about_section(course, section_key): ...@@ -78,7 +76,7 @@ def get_course_about_section(course, section_key):
'effort', 'end_date', 'prerequisites']: 'effort', 'end_date', 'prerequisites']:
try: try:
with course.system.resources_fs.open(path("about") / section_key + ".html") as htmlFile: with course.system.resources_fs.open(path("about") / section_key + ".html") as htmlFile:
return htmlFile.read().decode('utf-8').format(COURSE_STATIC_URL = course_static_url(course) ) return replace_urls(htmlFile.read().decode('utf-8'), course.metadata['data_dir'])
except ResourceNotFoundError: except ResourceNotFoundError:
log.warning("Missing about section {key} in course {url}".format(key=section_key, url=course.location.url())) log.warning("Missing about section {key} in course {url}".format(key=section_key, url=course.location.url()))
return None return None
...@@ -114,4 +112,4 @@ def get_course_info_section(course, section_key): ...@@ -114,4 +112,4 @@ def get_course_info_section(course, section_key):
raise KeyError("Invalid about key " + str(section_key)) raise KeyError("Invalid about key " + str(section_key))
\ No newline at end of file
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