# Get the sections scope
scope = _get_key(key, scopes)
- # If the scope is a callable (as described in https://mustache.github.io/mustache.5.html)
+ # If the scope is a callable (as described in
+ # https://mustache.github.io/mustache.5.html)
if type(scope) is function:
- # Gather up all the tags inside the section and generate a template text
- tags = []
-
+ # Generate template text from tags
text = unicode('', 'utf-8')
for tag in tokens:
if tag == ('end', key):
elif tag_type == 'no escape':
text += "%s& %s %s" % (def_ldel, tag_key, def_rdel)
else:
- text += "%s%s %s%s" % (def_ldel,{
+ text += "%s%s %s%s" % (def_ldel, {
'commment': '!',
'section': '#',
'inverted section': '^',
'no escape': '&'
}[tag_type], tag_key, def_rdel)
- tags.append(tag)
-
rend = scope(text, lambda template, data=None: render(template,
- data={},
- partials_path=partials_path,
- partials_ext=partials_ext,
- partials_dict=partials_dict,
- padding=padding,
- def_ldel=def_ldel, def_rdel=def_rdel,
- scopes=data and [data]+scopes or scopes))
+ data={},
+ partials_path=partials_path,
+ partials_ext=partials_ext,
+ partials_dict=partials_dict,
+ padding=padding,
+ def_ldel=def_ldel, def_rdel=def_rdel,
+ scopes=data and [data]+scopes or scopes))
if python3:
output += rend
import json
import chevron
-from textwrap import dedent
SPECS_PATH = os.path.join('spec', 'specs')
if os.path.exists(SPECS_PATH):
# https://github.com/noahmorrison/chevron/issues/17
def test_callable_1(self):
args_passed = {}
+
def first(content, render):
args_passed['content'] = content
args_passed['render'] = render
return "not implemented"
args = {
- 'template': '{{{postcode}}} {{#first}} {{{city}}} || {{{town}}} || {{{village}}} || {{{state}}} {{/first}}',
+ 'template': '{{{postcode}}} {{#first}} {{{city}}} || {{{town}}} '
+ '|| {{{village}}} || {{{state}}} {{/first}}',
'data': {
"postcode": "1234",
"city": "Mustache City",
result = chevron.render(**args)
expected = '1234 not implemented'
- template_content = " {{& city }} || {{& town }} || {{& village }} || {{& state }} "
+ template_content = " {{& city }} || {{& town }} || {{& village }} "\
+ "|| {{& state }} "
self.assertEqual(result, expected)
self.assertEqual(args_passed['content'], template_content)
def test_callable_2(self):
- args_passed = {}
+
def first(content, render):
result = render(content)
- result = [ x.strip() for x in result.split(" || ") if x.strip() ]
+ result = [x.strip() for x in result.split(" || ") if x.strip()]
return result[0]
args = {
- 'template': '{{{postcode}}} {{#first}} {{{city}}} || {{{town}}} || {{{village}}} || {{{state}}} {{/first}}',
+ 'template': '{{{postcode}}} {{#first}} {{{city}}} || {{{town}}} '
+ '|| {{{village}}} || {{{state}}} {{/first}}',
'data': {
"postcode": "1234",
"town": "Mustache Town",
result = chevron.render(**args)
expected = '1234 Mustache Town'
- template_content = " {{& city }} || {{& town }} || {{& village }} || {{& state }} "
self.assertEqual(result, expected)
def test_callable_3(self):
'''Test generating some data within the function
'''
- args_passed = {}
+
def first(content, render):
result = render(content, {'city': "Injected City"})
- result = [ x.strip() for x in result.split(" || ") if x.strip() ]
+ result = [x.strip() for x in result.split(" || ") if x.strip()]
return result[0]
args = {
- 'template': '{{{postcode}}} {{#first}} {{{city}}} || {{{town}}} || {{{village}}} || {{{state}}} {{/first}}',
+ 'template': '{{{postcode}}} {{#first}} {{{city}}} || {{{town}}} '
+ '|| {{{village}}} || {{{state}}} {{/first}}',
'data': {
"postcode": "1234",
"town": "Mustache Town",
result = chevron.render(**args)
expected = '1234 Injected City'
- template_content = " {{& city }} || {{& town }} || {{& village }} || {{& state }} "
self.assertEqual(result, expected)