Commit 9867dcec by Victor Shnayder

Load templates at descriptor load

* instead of being lazy
parent 9d87710f
...@@ -2,7 +2,6 @@ from xmodule.x_module import XModule ...@@ -2,7 +2,6 @@ from xmodule.x_module import XModule
from xmodule.raw_module import RawDescriptor from xmodule.raw_module import RawDescriptor
from lxml import etree from lxml import etree
from mako.template import Template from mako.template import Template
from xmodule.util.decorators import lazyproperty
class CustomTagModule(XModule): class CustomTagModule(XModule):
...@@ -31,33 +30,37 @@ class CustomTagModule(XModule): ...@@ -31,33 +30,37 @@ class CustomTagModule(XModule):
instance_state=None, shared_state=None, **kwargs): instance_state=None, shared_state=None, **kwargs):
XModule.__init__(self, system, location, definition, descriptor, XModule.__init__(self, system, location, definition, descriptor,
instance_state, shared_state, **kwargs) instance_state, shared_state, **kwargs)
self.html = definition['html']
xmltree = etree.fromstring(self.definition['data']) def get_html(self):
return self.html
class CustomTagDescriptor(RawDescriptor):
""" Descriptor for custom tags. Loads the template when created."""
module_class = CustomTagModule
@classmethod
def definition_from_xml(cls, xml_object, system):
definition = RawDescriptor.definition_from_xml(xml_object, system)
# Render the template and save it.
xmltree = etree.fromstring(definition['data'])
if 'impl' in xmltree.attrib: if 'impl' in xmltree.attrib:
self._template_name = xmltree.attrib['impl'] template_name = xmltree.attrib['impl']
else: else:
# VS[compat] backwards compatibility with old nested customtag structure # VS[compat] backwards compatibility with old nested customtag structure
child_impl = xmltree.find('impl') child_impl = xmltree.find('impl')
if child_impl is not None: if child_impl is not None:
self._template_name = child_impl.text template_name = child_impl.text
else: else:
# TODO (vshnayder): better exception type # TODO (vshnayder): better exception type
raise Exception("Could not find impl attribute in customtag {0}" raise Exception("Could not find impl attribute in customtag {0}"
.format(location)) .format(location))
self._params = dict(xmltree.items())
params = dict(xmltree.items())
with system.resources_fs.open('custom_tags/{name}'
.format(name=template_name)) as template:
definition['html'] = Template(template.read()).render(**params)
@lazyproperty return definition
def html(self):
with self.system.filestore.open(
'custom_tags/{name}'.format(name=self._template_name)) as template:
return Template(template.read()).render(**self._params)
def get_html(self):
return self.html
class CustomTagDescriptor(RawDescriptor):
module_class = CustomTagModule
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