コード例 #1
0
ファイル: test_text.py プロジェクト: moreati/kajiki
    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
コード例 #2
0
    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
            )
コード例 #3
0
 def test_expr_multiline(self):
     tpl = TextTemplate(
         source="""Hello, ${{'name': 'Rick',
                                            'age': 26}['name']}"""
     )
     rsp = tpl().render()
     assert rsp == "Hello, Rick", (rsp, "Hello, Rick")
コード例 #4
0
 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)
コード例 #5
0
    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),
        )
コード例 #6
0
    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"
コード例 #7
0
ファイル: test_text.py プロジェクト: moreati/kajiki
    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'
コード例 #8
0
    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
コード例 #9
0
ファイル: test_text.py プロジェクト: moreati/kajiki
    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'
コード例 #10
0
    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
コード例 #11
0
    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"
コード例 #12
0
ファイル: test_text.py プロジェクト: moreati/kajiki
    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
コード例 #13
0
ファイル: test_text.py プロジェクト: moreati/kajiki
    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
コード例 #14
0
    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
コード例 #15
0
ファイル: test_text.py プロジェクト: moreati/kajiki
    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
コード例 #16
0
    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
コード例 #17
0
ファイル: test_text.py プロジェクト: moreati/kajiki
    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
コード例 #18
0
ファイル: test_text.py プロジェクト: moreati/kajiki
    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
コード例 #19
0
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())
コード例 #20
0
    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
コード例 #21
0
ファイル: test_text.py プロジェクト: moreati/kajiki
    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
コード例 #22
0
 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))
コード例 #23
0
 def test_expr_brace(self):
     tpl = TextTemplate(source="Hello, ${name}\n")
     rsp = tpl(dict(name="Rick")).render()
     assert rsp == "Hello, Rick\n", rsp
コード例 #24
0
ファイル: test_text.py プロジェクト: moreati/kajiki
    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
コード例 #25
0
ファイル: test_text.py プロジェクト: moreati/kajiki
 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
コード例 #26
0
ファイル: test_text.py プロジェクト: moreati/kajiki
 def test_expr_None(self):
     tpl = TextTemplate(source='Hello, ${name}\n')
     rsp = tpl(dict(name=None)).render()
     assert rsp == 'Hello, \n', rsp
コード例 #27
0
ファイル: test_text.py プロジェクト: moreati/kajiki
 def test_expr_brace(self):
     tpl = TextTemplate(source='Hello, ${name}\n')
     rsp = tpl(dict(name='Rick')).render()
     assert rsp == 'Hello, Rick\n', rsp
コード例 #28
0
ファイル: test_text.py プロジェクト: moreati/kajiki
 def test_auto_escape(self):
     tpl = TextTemplate(source="${'<h1>'}", autoescape=True)
     rsp = tpl().render()
     assert rsp == '&lt;h1&gt;', rsp