Commit ca370529 by Calen Pennington

Merge pull request #464 from MITx/kimth/textbook

Kimth/textbook
parents fd55da6e 848cf599
from fs.errors import ResourceNotFoundError from fs.errors import ResourceNotFoundError
import time import time
import logging import logging
import requests
from lxml import etree from lxml import etree
from xmodule.util.decorators import lazyproperty from xmodule.util.decorators import lazyproperty
...@@ -15,18 +16,44 @@ class CourseDescriptor(SequenceDescriptor): ...@@ -15,18 +16,44 @@ class CourseDescriptor(SequenceDescriptor):
module_class = SequenceModule module_class = SequenceModule
class Textbook: class Textbook:
def __init__(self, title, table_of_contents_url): def __init__(self, title, book_url):
self.title = title self.title = title
self.table_of_contents_url = table_of_contents_url self.book_url = book_url
self.table_of_contents = self._get_toc_from_s3()
@classmethod @classmethod
def from_xml_object(cls, xml_object): def from_xml_object(cls, xml_object):
return cls(xml_object.get('title'), xml_object.get('table_of_contents_url')) return cls(xml_object.get('title'), xml_object.get('book_url'))
@property @property
def table_of_contents(self): def table_of_contents(self):
raw_table_of_contents = open(self.table_of_contents_url, 'r') # TODO: This will need to come from S3 return self.table_of_contents
table_of_contents = etree.parse(raw_table_of_contents).getroot()
def _get_toc_from_s3(self):
'''
Accesses the textbook's table of contents (default name "toc.xml") at the URL self.book_url
Returns XML tree representation of the table of contents
'''
toc_url = self.book_url + 'toc.xml'
# Get the table of contents from S3
log.info("Retrieving textbook table of contents from %s" % toc_url)
try:
r = requests.get(toc_url)
except Exception as err:
msg = 'Error %s: Unable to retrieve textbook table of contents at %s' % (err, toc_url)
log.error(msg)
raise Exception(msg)
# TOC is XML. Parse it
try:
table_of_contents = etree.fromstring(r.text)
except Exception as err:
msg = 'Error %s: Unable to parse XML for textbook table of contents at %s' % (err, toc_url)
log.error(msg)
raise Exception(msg)
return table_of_contents return table_of_contents
......
from django.conf import settings
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from mitxmako.shortcuts import render_to_response from mitxmako.shortcuts import render_to_response
...@@ -14,7 +15,7 @@ def index(request, course_id, book_index, page=0): ...@@ -14,7 +15,7 @@ def index(request, course_id, book_index, page=0):
table_of_contents = textbook.table_of_contents table_of_contents = textbook.table_of_contents
return render_to_response('staticbook.html', return render_to_response('staticbook.html',
{'page': int(page), 'course': course, {'page': int(page), 'course': course, 'book_url': textbook.book_url,
'table_of_contents': table_of_contents, 'table_of_contents': table_of_contents,
'staff_access': staff_access}) 'staff_access': staff_access})
......
...@@ -32,7 +32,7 @@ function goto_page(n) { ...@@ -32,7 +32,7 @@ function goto_page(n) {
if(n<10) { if(n<10) {
prefix="00"; prefix="00";
} }
$("#bookpage").attr("src","${ settings.BOOK_URL }p"+prefix+n+".png"); $("#bookpage").attr("src","${ book_url }p"+prefix+n+".png");
$.cookie("book_page", n, {'expires':3650, 'path':'/'}); $.cookie("book_page", n, {'expires':3650, 'path':'/'});
}; };
...@@ -113,7 +113,7 @@ $("#open_close_accordion a").click(function(){ ...@@ -113,7 +113,7 @@ $("#open_close_accordion a").click(function(){
</ul> </ul>
</nav> </nav>
<img id="bookpage" src="${ settings.BOOK_URL }p${ "%03i"%(page) }.png"> <img id="bookpage" src="${ book_url }p${ "%03i"%(page) }.png">
</section> </section>
</section> </section>
</div> </div>
......
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