-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implemented/overhauled template tags, plus docs.
- Loading branch information
1 parent
c01f416
commit 72c551e
Showing
8 changed files
with
330 additions
and
56 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
================= | ||
API documentation | ||
================= | ||
|
||
.. toctree:: | ||
:maxdepth: 2 | ||
|
||
activator | ||
bundle |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,6 +13,7 @@ Contents: | |
|
||
installation | ||
usage | ||
api/index | ||
contributing | ||
authors | ||
history |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,47 +1,110 @@ | ||
from __future__ import absolute_import, print_function, unicode_literals | ||
|
||
import contextlib | ||
import six | ||
|
||
from django import template | ||
from django.template.base import token_kwargs | ||
from django.utils.module_loading import import_string | ||
|
||
import django_ftl | ||
|
||
register = template.Library() | ||
|
||
MODE_SERVER = 'server' | ||
MODES = [ | ||
MODE_SERVER | ||
] | ||
|
||
|
||
@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) | ||
_MODE_VAR_NAME = '__ftl_mode' | ||
_BUNDLE_VAR_NAME = '__ftl_bundle' | ||
|
||
|
||
@register.simple_tag(takes_context=True) | ||
def ftl_conf(context, mode=None, bundle=None): | ||
def ftlconf(context, mode=None, bundle=None): | ||
if mode is not None: | ||
validate_mode(mode) | ||
context['__ftl_mode'] = mode | ||
context[_MODE_VAR_NAME] = mode | ||
if bundle is not None: | ||
context['__ftl_bundle'] = import_string(bundle) | ||
context[_BUNDLE_VAR_NAME] = resolve_bundle(bundle) | ||
return '' | ||
|
||
|
||
@register.simple_tag(takes_context=True) | ||
def ftl_message(context, message_id, **kwargs): | ||
return do_render(context['__ftl_mode'], | ||
context['__ftl_bundle'], | ||
message_id, | ||
kwargs) | ||
def resolve_bundle(bundle): | ||
if isinstance(bundle, six.text_type): | ||
return import_string(bundle) | ||
else: | ||
return bundle | ||
|
||
|
||
def do_render(mode, bundle, message_id, kwargs): | ||
@register.simple_tag(takes_context=True) | ||
def ftlmsg(context, message_id, **kwargs): | ||
try: | ||
mode = context[_MODE_VAR_NAME] | ||
except KeyError: | ||
raise ValueError("No mode set for ftl - using ftlconf/withftl have been used to set mode") | ||
try: | ||
bundle = context[_BUNDLE_VAR_NAME] | ||
except KeyError: | ||
raise ValueError("No bundle set for ftl - using ftlconf/withftl have been used to set bundle") | ||
if mode == MODE_SERVER: | ||
return bundle.format(message_id, kwargs) | ||
raise AssertionError("Not reached") | ||
|
||
|
||
def validate_mode(mode): | ||
if mode not in MODES: | ||
raise ValueError("mode '{0}' not understood, must be one of {2}" | ||
.format(mode, MODES)) | ||
|
||
|
||
class WithFtlNode(template.Node): | ||
def __init__(self, nodelist, language=None, mode=None, bundle=None): | ||
self.nodelist = nodelist | ||
self.language = language | ||
self.mode = mode | ||
self.bundle = bundle | ||
|
||
def __repr__(self): | ||
return '<%s>' % self.__class__.__name__ | ||
|
||
def render(self, context): | ||
language = None if self.language is None else self.language.resolve(context) | ||
mode = None if self.mode is None else self.mode.resolve(context) | ||
bundle = None if self.bundle is None else resolve_bundle(self.bundle.resolve(context)) | ||
new_context = {} | ||
if mode is not None: | ||
new_context[_MODE_VAR_NAME] = mode | ||
if bundle is not None: | ||
new_context[_BUNDLE_VAR_NAME] = bundle | ||
if language is not None: | ||
lang_ctx = django_ftl.override(language) | ||
else: | ||
lang_ctx = null_ctx() | ||
|
||
with context.push(**new_context): | ||
with lang_ctx: | ||
return self.nodelist.render(context) | ||
|
||
|
||
@register.tag('withftl') | ||
def withftl(parser, token): | ||
conf = token_kwargs(token.split_contents()[1:], parser, support_legacy=False) | ||
language = conf.pop('language', None) | ||
mode = conf.pop('mode', None) | ||
bundle = conf.pop('bundle', None) | ||
if conf: | ||
raise ValueError("withftl tag received unexpected keyword arguments: {0}" | ||
.format(", ".join(conf.keys()))) | ||
nodelist = parser.parse(('endwithftl',)) | ||
parser.delete_first_token() | ||
|
||
return WithFtlNode(nodelist, | ||
language=language, | ||
mode=mode, | ||
bundle=bundle) | ||
|
||
|
||
@contextlib.contextmanager | ||
def null_ctx(): | ||
yield |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
other-message = Other-message |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
other-message = Başka-mesaj |
Oops, something went wrong.