Skip to content

Commit

Permalink
Better API for ftl_conf template tag
Browse files Browse the repository at this point in the history
  • Loading branch information
spookylukey committed May 27, 2018
1 parent f137c7c commit 9b2c715
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 9 deletions.
17 changes: 12 additions & 5 deletions django_ftl/templatetags/ftl.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,17 @@
@register.simple_tag
def ftl(mode, bundle_id, message_id, **kwargs):
bundle = import_string(bundle_id)
validate_mode(mode)
return do_render(mode, bundle, message_id, kwargs)


@register.simple_tag(takes_context=True)
def ftl_conf(context, mode, bundle_id):
context['__ftl_mode'] = mode
context['__ftl_bundle'] = import_string(bundle_id)
def ftl_conf(context, mode=None, bundle=None):
if mode is not None:
validate_mode(mode)
context['__ftl_mode'] = mode
if bundle is not None:
context['__ftl_bundle'] = import_string(bundle)
return ''


Expand All @@ -33,8 +37,11 @@ def ftl_message(context, message_id, **kwargs):


def do_render(mode, bundle, message_id, kwargs):
if mode == MODE_SERVER:
return bundle.format(message_id, kwargs)


def validate_mode(mode):
if mode not in MODES:
raise ValueError("mode '{0}' not understood, must be one of {2}"
.format(mode, MODES))
if mode == MODE_SERVER:
return bundle.format(message_id, kwargs)
18 changes: 14 additions & 4 deletions tests/test_templatetags.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,17 @@ def setUp(self):
def test_good(self):
t = Template("""
{% load ftl %}
{% ftl_conf 'server' 'tests.test_templatetags.main_bundle' %}
{% ftl_conf mode='server' bundle='tests.test_templatetags.main_bundle' %}
{% ftl_message 'simple' %}
""")
self.assertEqual(t.render(Context({})).strip(),
"Simple")

def test_good_split(self):
t = Template("""
{% load ftl %}
{% ftl_conf mode='server' %}
{% ftl_conf bundle='tests.test_templatetags.main_bundle' %}
{% ftl_message 'simple' %}
""")
self.assertEqual(t.render(Context({})).strip(),
Expand All @@ -66,7 +76,7 @@ def test_good(self):
def test_missing(self):
t = Template("""
{% load ftl %}
{% ftl_conf 'server' 'tests.test_templatetags.main_bundle' %}
{% ftl_conf mode='server' bundle='tests.test_templatetags.main_bundle' %}
{% ftl_message 'missing-message' %}
""")
self.assertEqual(t.render(Context({})).strip(),
Expand All @@ -75,7 +85,7 @@ def test_missing(self):
def test_args(self):
t = Template("""
{% load ftl %}
{% ftl_conf 'server' 'tests.test_templatetags.main_bundle' %}
{% ftl_conf mode='server' bundle='tests.test_templatetags.main_bundle' %}
{% ftl_message 'with-argument' user=user %}
""")
self.assertEqual(t.render(Context({'user': 'Mary'})).strip(),
Expand All @@ -84,7 +94,7 @@ def test_args(self):
def test_xss(self):
t = Template("""
{% load ftl %}
{% ftl_conf 'server' 'tests.test_templatetags.main_bundle' %}
{% ftl_conf mode='server' bundle='tests.test_templatetags.main_bundle' %}
{% ftl_message 'with-argument' user=user %}
""")
self.assertEqual(t.render(Context({'user': 'Mary & Jane'})).strip(),
Expand Down

0 comments on commit 9b2c715

Please sign in to comment.