def __init__(self, site_path, builders=None): self.site_path = site_path self._default_template_path = os.path.join(site_path, self.DEFAULT_TEMPLATE) self._default = None self.templates_path = os.path.join(site_path, self.TEMPLATES_DIR) self._templates = {} self._builders = builders if builders is None: # Set default builders. self._jinja_builder = JinjaTemplateBuilder(self.templates_path) self._builders = { '.html': StringTemplate, '.j2': self._jinja_builder.build }
class TestJinjaTemplateBuilder(unittest.TestCase): def setUp(self): self.templates = tempfile.mkdtemp() self.builder = JinjaTemplateBuilder(self.templates) self.base_file = os.path.join(self.templates, 'base.j2') open(self.base_file, 'w').close() def test_builds_template(self): template = self.builder.build(self.base_file) self.assertTrue(isinstance(template, jinja2.Template)) def test_aborts_with_bad_template(self): with open(self.base_file, 'w') as f: f.write('{%') # No closing template marker with self.assertRaises(AbortError): self.builder.build(self.base_file) def test_last_modified_with_newer_parent(self): template_file = os.path.join(self.templates, 'derived.j2') with open(template_file, 'w') as f: f.write('{% extends "base.j2" %}') # Fast file systems make mtime equal for both files. Set to the future. template_mtime = os.path.getmtime(template_file) future = template_mtime + 1 os.utime(self.base_file, (future, future)) template = self.builder.build(template_file) self.assertEqual( os.path.getmtime(self.base_file), template.last_modified) def test_skips_nonetype_parent(self): with open(self.base_file, 'w') as f: f.write('{% include helper %}') # Non-existent "parent" template = self.builder.build(self.base_file) self.assertTrue(isinstance(template, jinja2.Template)) def test_gets_cached_modified_time(self): template = self.builder.build(self.base_file) template = self.builder.build(self.base_file) self.assertTrue(isinstance(template, jinja2.Template))
def setUp(self): self.templates = tempfile.mkdtemp() self.builder = JinjaTemplateBuilder(self.templates) self.base_file = os.path.join(self.templates, 'base.j2') open(self.base_file, 'w').close()