def test_basic(self): parent = TextTemplate(''' %def header() # Header name=$name %end %def footer() # Footer %end %def body() ## Parent Body id() = ${id()} local.id() = ${local.id()} self.id() = ${self.id()} child.id() = ${child.id()} %end %def id() parent\\ %end ${header()}${body()}${footer()}''') mid = TextTemplate('''%extends "parent.txt" %def id() mid\\ %end ''') child = TextTemplate('''%extends "mid.txt" %def id() child\\ %end %def body() ## Child Body ${parent.body()}\\ %end ''') loader = MockLoader({ 'parent.txt': parent, 'mid.txt': mid, 'child.txt': child }) tpl = loader.import_('child.txt') rsp = tpl(dict(name='Rick')).render() assert (rsp == '# Header name=Rick\n' '## Child Body\n' '## Parent Body\n' 'id() = child\n' 'local.id() = parent\n' 'self.id() = child\n' 'child.id() = mid\n' '# Footer\n'), rsp
def _load(self, name, encoding="utf-8", *args, **kwargs): """Text templates are read in text mode and XML templates are read in binary mode. Thus, the ``encoding`` argument is only used for reading text template files. """ from kajiki import TextTemplate, XMLTemplate options = self._template_options.copy() options.update(kwargs) filename = self._filename(name) if filename is None: raise IOError("Unknown template %r" % name) self._timestamps[name] = os.stat(filename).st_mtime if self._force_mode == "text": return TextTemplate( filename=filename, autoescape=self._autoescape_text, *args, **options ) elif self._force_mode: return XMLTemplate( filename=filename, mode=self._force_mode, autoblocks=self._xml_autoblocks, *args, **options ) else: ext = os.path.splitext(filename)[1][1:] return self.extension_map[ext]( source=None, filename=filename, *args, **options )
def test_expr_multiline(self): tpl = TextTemplate( source="""Hello, ${{'name': 'Rick', 'age': 26}['name']}""" ) rsp = tpl().render() assert rsp == "Hello, Rick", (rsp, "Hello, Rick")
def _load(self, name, encoding='utf-8', *args, **kwargs): '''Text templates are read in text mode and XML templates are read in binary mode. Thus, the ``encoding`` argument is only used for reading text template files. ''' from kajiki import XMLTemplate, TextTemplate filename = self._filename(name) self._timestamps[name] = os.stat(filename).st_mtime if self._force_mode == 'text': return TextTemplate(filename=filename, autoescape=self._autoescape_text, *args, **kwargs) elif self._force_mode: return XMLTemplate(filename=filename, mode=self._force_mode, autoblocks=self._xml_autoblocks, *args, **kwargs) else: ext = os.path.splitext(filename)[1][1:] return self.extension_map[ext](source=None, filename=filename, *args, **kwargs)
def __init__( self, path, reload=True, force_mode=None, autoescape_text=False, xml_autoblocks=None, **template_options ): super().__init__() from kajiki import TextTemplate, XMLTemplate if isinstance(path, str): self.path = path.split(";") else: self.path = path self._timestamps = {} self._reload = reload self._force_mode = force_mode self._autoescape_text = autoescape_text self._xml_autoblocks = xml_autoblocks self._template_options = template_options self.extension_map = dict( txt=lambda *a, **kw: TextTemplate( autoescape=self._autoescape_text, *a, **kw ), xml=XMLTemplate, html=lambda *a, **kw: XMLTemplate(mode="html", *a, **kw), html5=lambda *a, **kw: XMLTemplate(mode="html5", *a, **kw), )
def test_short(self): tpl = TextTemplate( """%py import os ${os.path.join('a','b','c')}""" ) rsp = tpl(dict(name="Rick")).render() assert rsp == "a/b/c"
def test_basic(self): tpl = TextTemplate('''%py import os %end ${os.path.join('a','b','c')}''') rsp = tpl(dict(name='Rick')).render() assert rsp == 'a/b/c'
def test_block(self): loader = MockLoader( { "parent.txt": TextTemplate( """%def greet(name) Hello, $name!\\ %end %def sign(name) Sincerely, $name\\ %end ${greet(to)} %block body It was good seeing you last Friday. Thanks for the gift! %end ${sign(from_)} """ ), "child.txt": TextTemplate( """%extends "parent.txt" %def greet(name) Dear $name:\\ %end %block body ${parent_block()}\\ And don't forget you owe me money! %end """ ), } ) child = loader.import_("child.txt") rsp = child({"to": "Mark", "from_": "Rick"}).render() assert ( rsp == """Dear Mark: It was good seeing you last Friday. Thanks for the gift! And don't forget you owe me money! Sincerely, Rick """ ), rsp
def test_mod(self): tpl = TextTemplate('''%py% import os %def test() ${os.path.join('a','b','c')}\\ %end ${test()}''') rsp = tpl(dict(name='Rick')).render() assert rsp == 'a/b/c'
def test_rstrip(self): tpl = TextTemplate( """ %for i in range(2) $i is {%switch i % 2 %}{%case 0-%} even\n{%else%}odd\n{%end%}\\ %end""" ) rsp = tpl(dict(name="Rick")).render() assert rsp == "0 is even\n1 is odd\n", rsp
def test_mod(self): tpl = TextTemplate( """%py% import os %def test() ${os.path.join('a','b','c')}\\ %end ${test()}""" ) rsp = tpl(dict(name="Rick")).render() assert rsp == "a/b/c"
def test_dynamic(self): loader = MockLoader({ 'parent0.txt': TextTemplate('Parent 0'), 'parent1.txt': TextTemplate('Parent 1'), 'child.txt': TextTemplate('''%if p == 0 %extends "parent0.txt" %else %extends "parent1.txt" %end ''') }) tpl = loader.import_('child.txt') rsp = tpl(dict(p=0)).render() assert rsp == 'Parent 0', rsp rsp = tpl(dict(p=1)).render() assert rsp == 'Parent 1', rsp
def test_function(self): tpl = TextTemplate('''%def evenness(n) {%if n % 2 == 0 %}even{%else%}odd{%end%}\\ %end %for i in range(2) $i is ${evenness(i)} %end ''') rsp = tpl(dict(name='Rick')).render() assert rsp == '0 is even\n1 is odd\n', rsp
def test_dynamic(self): loader = MockLoader( { "parent0.txt": TextTemplate("Parent 0"), "parent1.txt": TextTemplate("Parent 1"), "child.txt": TextTemplate( """%if p == 0 %extends "parent0.txt" %else %extends "parent1.txt" %end """ ), } ) tpl = loader.import_("child.txt") rsp = tpl(dict(p=0)).render() assert rsp == "Parent 0", rsp rsp = tpl(dict(p=1)).render() assert rsp == "Parent 1", rsp
def test(self): tpl = TextTemplate('''%def add(x) %def inner(y) ${x+y}\\ %end ${inner(x*2)}\\ %end ${add(5)} ''') rsp = tpl(dict(name='Rick')).render() assert rsp == '15\n', rsp
def test_function(self): tpl = TextTemplate( """%def evenness(n) {%if n % 2 == 0 %}even{%else%}odd{%end%}\\ %end %for i in range(2) $i is ${evenness(i)} %end """ ) rsp = tpl(dict(name="Rick")).render() assert rsp == "0 is even\n1 is odd\n", rsp
def test_call(self): tpl = TextTemplate('''%def quote(caller, speaker) %for i in range(2) Quoth $speaker, "${caller(i)}." %end %end %call(n) quote(%caller ,'the raven') Nevermore $n\\ %end''') rsp = tpl(dict(name='Rick')).render() assert (rsp == 'Quoth the raven, "Nevermore 0."\n' 'Quoth the raven, "Nevermore 1."\n'), rsp
def test_block(self): loader = MockLoader({ 'parent.txt': TextTemplate('''%def greet(name) Hello, $name!\\ %end %def sign(name) Sincerely, $name\\ %end ${greet(to)} %block body It was good seeing you last Friday. Thanks for the gift! %end ${sign(from_)} '''), 'child.txt': TextTemplate('''%extends "parent.txt" %def greet(name) Dear $name:\\ %end %block body ${parent_block()}\\ And don't forget you owe me money! %end ''') }) child = loader.import_('child.txt') rsp = child({'to': 'Mark', 'from_': 'Rick'}).render() assert (rsp == '''Dear Mark: It was good seeing you last Friday. Thanks for the gift! And don't forget you owe me money! Sincerely, Rick '''), rsp
def generate_config(args): """Generates a configuration file based on the default_config.txt template. """ tmpl = TextTemplate(resource_string('wte', 'scripts/templates/default_config.txt').decode('utf-8')) params = {'encrypt_key': uuid.uuid1(), 'validate_key': uuid.uuid1()} if args.sqla_connection_string: params['sqlalchemy_url'] = args.sqla_connection_string else: params['sqlalchemy_url'] = get_user_parameter('SQL Alchemy Connection String', 'sqlite:///%(here)s/wte_test.db') with open(args.filename, 'w') as out_f: out_f.write(tmpl(params).render())
def test(self): tpl = TextTemplate( """%def add(x) %def inner(y) ${x+y}\\ %end ${inner(x*2)}\\ %end ${add(5)} """ ) rsp = tpl(dict(name="Rick")).render() assert rsp == "15\n", rsp
def test_import_auto(self): lib = TextTemplate('''%def evenness(n) %if n % 2 == 0 even\\ %else odd\\ %end %end %def half_evenness(n) half of $n is ${evenness(n/2)}\\ %end''') tpl = TextTemplate('''%import "lib.txt" %for i in range(4) $i is ${lib.evenness(i)}${lib.half_evenness(i)} %end''') loader = MockLoader({'lib.txt': lib, 'tpl.txt': tpl}) tpl = loader.import_('tpl.txt') rsp = tpl(dict(name='Rick')).render() assert (rsp == '0 is even half of 0 is even\n' '1 is odd half of 1 is odd\n' '2 is even half of 2 is odd\n' '3 is odd half of 3 is odd\n'), rsp
def __init__(self, path, reload=True, force_mode=None, autoescape_text=False, xml_autoblocks=None): super(FileLoader, self).__init__() from kajiki import XMLTemplate, TextTemplate if isinstance(path, basestring): self.path = path.split(';') else: self.path = path self._timestamps = {} self._reload = reload self._force_mode = force_mode self._autoescape_text = autoescape_text self._xml_autoblocks = xml_autoblocks self.extension_map = dict( txt=lambda *a, **kw: TextTemplate( autoescape=self._autoescape_text, *a, **kw), xml=XMLTemplate, html=lambda *a, **kw: XMLTemplate(mode='html', *a, **kw), html5=lambda *a, **kw: XMLTemplate(mode='html5', *a, **kw))
def test_expr_brace(self): tpl = TextTemplate(source="Hello, ${name}\n") rsp = tpl(dict(name="Rick")).render() assert rsp == "Hello, Rick\n", rsp
def test_rstrip(self): tpl = TextTemplate(''' %for i in range(2) $i is {%switch i % 2 %}{%case 0-%} even\n{%else%}odd\n{%end%}\\ %end''') rsp = tpl(dict(name='Rick')).render() assert rsp == '0 is even\n1 is odd\n', rsp
def test_expr_brace_complex(self): tpl = TextTemplate(source="Hello, ${{'name':name}['name']}\n") rsp = tpl(dict(name='Rick')).render() assert rsp == 'Hello, Rick\n', rsp
def test_expr_None(self): tpl = TextTemplate(source='Hello, ${name}\n') rsp = tpl(dict(name=None)).render() assert rsp == 'Hello, \n', rsp
def test_expr_brace(self): tpl = TextTemplate(source='Hello, ${name}\n') rsp = tpl(dict(name='Rick')).render() assert rsp == 'Hello, Rick\n', rsp
def test_auto_escape(self): tpl = TextTemplate(source="${'<h1>'}", autoescape=True) rsp = tpl().render() assert rsp == '<h1>', rsp