Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: third_party/jinja2/filters.py

Issue 2316103002: binding: Updates Jinja2 from 2.7.1 to 2.8. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/jinja2/ext.py ('k') | third_party/jinja2/get_jinja2.sh » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/jinja2/filters.py
diff --git a/third_party/jinja2/filters.py b/third_party/jinja2/filters.py
index fd0db04aa41026500910347cf401fe620c556188..e5c7a1ab439f803d76563a4cd77695bc92cfb539 100644
--- a/third_party/jinja2/filters.py
+++ b/third_party/jinja2/filters.py
@@ -18,7 +18,7 @@ from jinja2.utils import Markup, escape, pformat, urlize, soft_unicode, \
unicode_urlencode
from jinja2.runtime import Undefined
from jinja2.exceptions import FilterArgumentError
-from jinja2._compat import next, imap, string_types, text_type, iteritems
+from jinja2._compat import imap, string_types, text_type, iteritems
_word_re = re.compile(r'\w+(?u)')
@@ -94,7 +94,8 @@ def do_urlencode(value):
if itemiter is None:
return unicode_urlencode(value)
return u'&'.join(unicode_urlencode(k) + '=' +
- unicode_urlencode(v) for k, v in itemiter)
+ unicode_urlencode(v, for_qs=True)
+ for k, v in itemiter)
@evalcontextfilter
@@ -183,7 +184,7 @@ def do_title(s):
uppercase letters, all remaining characters are lowercase.
"""
rv = []
- for item in re.compile(r'([-\s]+)(?u)').split(s):
+ for item in re.compile(r'([-\s]+)(?u)').split(soft_unicode(s)):
if not item:
continue
rv.append(item[0].upper() + item[1:].lower())
@@ -204,8 +205,7 @@ def do_dictsort(value, case_sensitive=False, by='key'):
sort the dict by key, case sensitive
{% for item in mydict|dictsort(false, 'value') %}
- sort the dict by key, case insensitive, sorted
- normally and ordered by value.
+ sort the dict by value, case insensitive
"""
if by == 'key':
pos = 0
@@ -409,7 +409,8 @@ def do_pprint(value, verbose=False):
@evalcontextfilter
-def do_urlize(eval_ctx, value, trim_url_limit=None, nofollow=False):
+def do_urlize(eval_ctx, value, trim_url_limit=None, nofollow=False,
+ target=None):
"""Converts URLs in plain text into clickable links.
If you pass the filter an additional integer it will shorten the urls
@@ -420,8 +421,18 @@ def do_urlize(eval_ctx, value, trim_url_limit=None, nofollow=False):
{{ mytext|urlize(40, true) }}
links are shortened to 40 chars and defined with rel="nofollow"
+
+ If *target* is specified, the ``target`` attribute will be added to the
+ ``<a>`` tag:
+
+ .. sourcecode:: jinja
+
+ {{ mytext|urlize(40, target='_blank') }}
+
+ .. versionchanged:: 2.8+
+ The *target* parameter was added.
"""
- rv = urlize(value, trim_url_limit, nofollow)
+ rv = urlize(value, trim_url_limit, nofollow, target)
if eval_ctx.autoescape:
rv = Markup(rv)
return rv
@@ -456,25 +467,22 @@ def do_truncate(s, length=255, killwords=False, end='...'):
.. sourcecode:: jinja
- {{ "foo bar"|truncate(5) }}
+ {{ "foo bar baz"|truncate(9) }}
-> "foo ..."
- {{ "foo bar"|truncate(5, True) }}
- -> "foo b..."
+ {{ "foo bar baz"|truncate(9, True) }}
+ -> "foo ba..."
+
"""
if len(s) <= length:
return s
elif killwords:
- return s[:length] + end
- words = s.split(' ')
- result = []
- m = 0
- for word in words:
- m += len(word) + 1
- if m > length:
- break
- result.append(word)
- result.append(end)
- return u' '.join(result)
+ return s[:length - len(end)] + end
+
+ result = s[:length - len(end)].rsplit(' ', 1)[0]
+ if len(result) < length:
+ result += ' '
+ return result + end
+
@environmentfilter
def do_wordwrap(environment, s, width=79, break_long_words=True,
@@ -503,13 +511,16 @@ def do_wordcount(s):
return len(_word_re.findall(s))
-def do_int(value, default=0):
+def do_int(value, default=0, base=10):
"""Convert the value into an integer. If the
conversion doesn't work it will return ``0``. You can
- override this default using the first parameter.
+ override this default using the first parameter. You
+ can also override the default base (10) in the second
+ parameter, which handles input with prefixes such as
+ 0b, 0o and 0x for bases 2, 8 and 16 respectively.
"""
try:
- return int(value)
+ return int(value, base)
except (TypeError, ValueError):
# this quirk is necessary so that "42.23"|int gives 42.
try:
@@ -612,7 +623,6 @@ def do_batch(value, linecount, fill_with=None):
{%- endfor %}
</table>
"""
- result = []
tmp = []
for item in value:
if len(tmp) == linecount:
@@ -753,7 +763,7 @@ def do_mark_unsafe(value):
def do_reverse(value):
- """Reverse the object or return an iterator the iterates over it the other
+ """Reverse the object or return an iterator that iterates over it the other
way round.
"""
if isinstance(value, string_types):
@@ -772,7 +782,7 @@ def do_reverse(value):
@environmentfilter
def do_attr(environment, obj, name):
"""Get an attribute of an object. ``foo|attr("bar")`` works like
- ``foo["bar"]`` just that always an attribute is returned and items are not
+ ``foo.bar`` just that always an attribute is returned and items are not
looked up.
See :ref:`Notes on subscriptions <notes-on-subscriptions>` for more details.
@@ -842,14 +852,15 @@ def do_map(*args, **kwargs):
@contextfilter
def do_select(*args, **kwargs):
- """Filters a sequence of objects by appying a test to either the object
- or the attribute and only selecting the ones with the test succeeding.
+ """Filters a sequence of objects by applying a test to the object and only
+ selecting the ones with the test succeeding.
Example usage:
.. sourcecode:: jinja
{{ numbers|select("odd") }}
+ {{ numbers|select("odd") }}
.. versionadded:: 2.7
"""
@@ -858,8 +869,8 @@ def do_select(*args, **kwargs):
@contextfilter
def do_reject(*args, **kwargs):
- """Filters a sequence of objects by appying a test to either the object
- or the attribute and rejecting the ones with the test succeeding.
+ """Filters a sequence of objects by applying a test to the object and
+ rejecting the ones with the test succeeding.
Example usage:
@@ -874,8 +885,8 @@ def do_reject(*args, **kwargs):
@contextfilter
def do_selectattr(*args, **kwargs):
- """Filters a sequence of objects by appying a test to either the object
- or the attribute and only selecting the ones with the test succeeding.
+ """Filters a sequence of objects by applying a test to an attribute of an
+ object and only selecting the ones with the test succeeding.
Example usage:
@@ -891,8 +902,8 @@ def do_selectattr(*args, **kwargs):
@contextfilter
def do_rejectattr(*args, **kwargs):
- """Filters a sequence of objects by appying a test to either the object
- or the attribute and rejecting the ones with the test succeeding.
+ """Filters a sequence of objects by applying a test to an attribute of an
+ object or the attribute and rejecting the ones with the test succeeding.
.. sourcecode:: jinja
@@ -933,55 +944,53 @@ def _select_or_reject(args, kwargs, modfunc, lookup_attr):
FILTERS = {
+ 'abs': abs,
'attr': do_attr,
- 'replace': do_replace,
- 'upper': do_upper,
- 'lower': do_lower,
- 'escape': escape,
- 'e': escape,
- 'forceescape': do_forceescape,
+ 'batch': do_batch,
'capitalize': do_capitalize,
- 'title': do_title,
- 'default': do_default,
- 'd': do_default,
- 'join': do_join,
+ 'center': do_center,
'count': len,
+ 'd': do_default,
+ 'default': do_default,
'dictsort': do_dictsort,
- 'sort': do_sort,
- 'length': len,
- 'reverse': do_reverse,
- 'center': do_center,
- 'indent': do_indent,
- 'title': do_title,
- 'capitalize': do_capitalize,
+ 'e': escape,
+ 'escape': escape,
+ 'filesizeformat': do_filesizeformat,
'first': do_first,
+ 'float': do_float,
+ 'forceescape': do_forceescape,
+ 'format': do_format,
+ 'groupby': do_groupby,
+ 'indent': do_indent,
+ 'int': do_int,
+ 'join': do_join,
'last': do_last,
+ 'length': len,
+ 'list': do_list,
+ 'lower': do_lower,
'map': do_map,
+ 'pprint': do_pprint,
'random': do_random,
'reject': do_reject,
'rejectattr': do_rejectattr,
- 'filesizeformat': do_filesizeformat,
- 'pprint': do_pprint,
- 'truncate': do_truncate,
- 'wordwrap': do_wordwrap,
- 'wordcount': do_wordcount,
- 'int': do_int,
- 'float': do_float,
- 'string': soft_unicode,
- 'list': do_list,
- 'urlize': do_urlize,
- 'format': do_format,
- 'trim': do_trim,
- 'striptags': do_striptags,
+ 'replace': do_replace,
+ 'reverse': do_reverse,
+ 'round': do_round,
+ 'safe': do_mark_safe,
'select': do_select,
'selectattr': do_selectattr,
'slice': do_slice,
- 'batch': do_batch,
+ 'sort': do_sort,
+ 'string': soft_unicode,
+ 'striptags': do_striptags,
'sum': do_sum,
- 'abs': abs,
- 'round': do_round,
- 'groupby': do_groupby,
- 'safe': do_mark_safe,
+ 'title': do_title,
+ 'trim': do_trim,
+ 'truncate': do_truncate,
+ 'upper': do_upper,
+ 'urlencode': do_urlencode,
+ 'urlize': do_urlize,
+ 'wordcount': do_wordcount,
+ 'wordwrap': do_wordwrap,
'xmlattr': do_xmlattr,
- 'urlencode': do_urlencode
}
« no previous file with comments | « third_party/jinja2/ext.py ('k') | third_party/jinja2/get_jinja2.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698