Rc@szdZddlZddlmZddlmZmZddlmZm Z eZ defdYZ dZ dS( s jinja2.testsuite.filters ~~~~~~~~~~~~~~~~~~~~~~~~ Tests for the jinja filters. :copyright: (c) 2010 by the Jinja Team. :license: BSD, see LICENSE for more details. iN(t JinjaTestCase(tMarkupt Environment(t text_typetimplements_to_stringtFilterTestCasecBs?eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@RS(?cCs/tjddddg}|j|ddS(Ntsumiiii(tenvt call_filtert assert_equal(tselftrv((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_filter_callingscCs+tjd}|jdks'tdS(Ns{{ "foo bar"|capitalize }}sFoo bar(Rt from_stringtrendertAssertionError(R ttmpl((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_capitalizescCs+tjd}|jdks'tdS(Ns{{ "foo"|center(9) }}s foo (RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_centerscCs1tjd}|jdddks-tdS(Nso{{ missing|default('no') }}|{{ false|default('no') }}|{{ false|default('no', true) }}|{{ given|default('no') }}tgiventyessno|False|no|yes(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_default"s cCsStjd}|jdidd6dd6dd6d d 6}|d ksOtdS( NsN{{ foo|dictsort }}|{{ foo|dictsort(true) }}|{{ foo|dictsort(false, "value") }}tfooitaaitbitcitABs[('aa', 0), ('AB', 3), ('b', 1), ('c', 2)]|[('AB', 3), ('aa', 0), ('b', 1), ('c', 2)]|[('aa', 0), ('b', 1), ('c', 2), ('AB', 3)](RR RR(R Rtout((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_dictsort)s .cCsCtjd}|jdttd}|dks?tdS(Ns4{{ foo|batch(3)|list }}|{{ foo|batch(3, 'X')|list }}Ri sW[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]|[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 'X', 'X']](RR RtlisttrangeR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_batch4scCsCtjd}|jdttd}|dks?tdS(Ns4{{ foo|slice(3)|list }}|{{ foo|slice(3, "X")|list }}Ri sS[[0, 1, 2, 3], [4, 5, 6], [7, 8, 9]]|[[0, 1, 2, 3], [4, 5, 6, 'X'], [7, 8, 9, 'X']](RR RRRR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_slice;scCs1tjd}|j}|dks-tdS(Ns{{ '<">&'|escape }}s<">&(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_escapeBs cCs7tjd}|jdd}|dks3tdS(Ns{{ foo|striptags }}Rss

just a small example link

to a webpage

s&just a small example link to a webpage(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_striptagsGscCs/tjd}|j}|j|ddS(NsC{{ 100|filesizeformat }}|{{ 1000|filesizeformat }}|{{ 1000000|filesizeformat }}|{{ 1000000000|filesizeformat }}|{{ 1000000000000|filesizeformat }}|{{ 100|filesizeformat(true) }}|{{ 1000|filesizeformat(true) }}|{{ 1000000|filesizeformat(true) }}|{{ 1000000000|filesizeformat(true) }}|{{ 1000000000000|filesizeformat(true) }}sX100 Bytes|1.0 kB|1.0 MB|1.0 GB|1.0 TB|100 Bytes|1000 Bytes|976.6 KiB|953.7 MiB|931.3 GiB(RR RR (R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_filesizeformatNs   cCs/tjd}|j}|j|ddS(Ns{{ 300|filesizeformat }}|{{ 3000|filesizeformat }}|{{ 3000000|filesizeformat }}|{{ 3000000000|filesizeformat }}|{{ 3000000000000|filesizeformat }}|{{ 300|filesizeformat(true) }}|{{ 3000|filesizeformat(true) }}|{{ 3000000|filesizeformat(true) }}s?300 Bytes|3.0 kB|3.0 MB|3.0 GB|3.0 TB|300 Bytes|2.9 KiB|2.9 MiB(RR RR (R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_filesizeformat_issue59as   cCsCtjd}|jdttd}|dks?tdS(Ns{{ foo|first }}Ri t0(RR RRRR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_firstsscCs1tjd}|j}|dks-tdS(Ns={{ "42"|float }}|{{ "ajsghasjgd"|float }}|{{ "32.32"|float }}s42.0|0.0|32.32(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_floatxs cCs1tjd}|j}|dks-tdS(Ns{{ "%s|%s"|format("a", "b") }}sa|b(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_formats cCs`tjd}djdjddgdgd}|jd|}|dks\tdS(Ns-{{ foo|indent(2) }}|{{ foo|indent(2, true) }}s t RtbarisEfoo bar foo bar foo bar foo bar| foo bar foo bar foo bar foo bar(RR tjoinRR(R RttextR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_indents)cCs1tjd}|j}|dks-tdS(Ns7{{ "42"|int }}|{{ "ajsghasjgd"|int }}|{{ "32.32"|int }}s42|0|32(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_ints cCsgtjd}|j}|dks-ttdt}|jd}|jdksctdS(Ns{{ [1, 2, 3]|join("|") }}s1|2|3t autoescapes-{{ ["", "foo"|safe]|join }}s<foo>foo(RR RRRtTrue(R RRtenv2((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_joins  cCsVdtfdY}tjd}|jdt|ddgdksRtdS(NtUsercBseZdZRS(cSs ||_dS(N(tusername(R R4((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt__init__s(t__name__t __module__R5(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR3ss"{{ users|join(', ', 'username') }}tusersRR*sfoo, bar(tobjectRR RtmapR(R R3R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_join_attributescCsCtjd}|jdttd}|dks?tdS(Ns{{ foo|last }}Ri t9(RR RRRR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_lastscCs1tjd}|j}|dks-tdS(Ns{{ "hello world"|length }}t11(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_lengths cCs1tjd}|j}|dks-tdS(Ns{{ "FOO"|lower }}R(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_lowers cCsYddlm}tjd}ttd}|jd|||ksUtdS(Ni(tpformats{{ data|pprint }}itdata(tpprintRARR RRRR(R RARRB((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_pprintscCs`tjd}ttd}x8tdD]*}t|jd||ks.tq.WdS(Ns{{ seq|random }}idi tseq(RR RRtintRR(R RREt_((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_randomscCs+tjd}|jdks'tdS(Ns8{{ "foobar"|reverse|join }}|{{ [1, 2, 3]|reverse|list }}sraboof|[3, 2, 1](RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_reversescCsLdddddg}tjd}|jd|t|ksHtdS(Niiiiis{{ obj|string }}tobj(RR RRR(R txR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_stringscCstjd}|jdks'ttjd}|jdksNttjd}|jdksuttjd}|jdksttjd }|jd ksttjd }|jd ksttjd }|jd kstdS(Ns{{ "foo bar"|title }}sFoo Bars{{ "foo's bar"|title }}s Foo's Bars{{ "foo bar"|title }}s Foo Bars{{ "f bar f"|title }}sF Bar Fs{{ "foo-bar"|title }}sFoo-Bars{{ "foo bar"|title }}sFoo Bars{{ "FOO BAR"|title }}(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_titlescCsAtjd}|jddddd}|dks=tdS(Nsg{{ data|truncate(15, true, ">>>") }}|{{ data|truncate(15, false, ">>>") }}|{{ smalldata|truncate(15) }}RBsfoobar baz barit smalldatas0foobar baz barf>>>|foobar baz >>>|foobar baz bar(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_truncates   cCs+tjd}|jdks'tdS(Ns{{ "foo"|upper }}tFOO(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_upperscCs+tjd}|jdks'tdS(Ns.{{ "foo http://www.example.com/ bar"|urlize }}sEfoo http://www.example.com/ bar(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_urlizescCs+tjd}|jdks'tdS(Ns{{ "foo bar baz"|wordcount }}t3(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_wordcountscCs+tjd}|jdks'tdS(Ns.{% filter lower|escape %}{% endfilter %}s <hehe>(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_blockscCs+tjd}|jdks'tdS(Ns+{{ ['', '']|first|upper|escape }}s <FOO>(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_chainingscCs+tjd}|jdks'tdS(Ns{{ [1, 2, 3, 4, 5, 6]|sum }}t21(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_sumscCsOtjd}|jdidd6idd6idd6gdksKtdS(Ns{{ values|sum('value') }}tvaluesitvalueiit42(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_sum_attributess    cCsdtjd}|jdiidd6d6iidd6d6iidd6d6gdks`tdS( Ns{{ values|sum('real.value') }}RYiRZtrealiiR[(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_sum_attributes_nesteds  cCsFtjd}|jdidd6dd6dd6d ksBtdS( Ns{{ values.items()|sum('1') }}RYiRiR*itbazR[(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_sum_attributes_tuple s   cCs7tjd}|jdks3t|jdS(Ns{{ -1|abs }}|{{ 1|abs }}s1|1(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_absscCs7tjd}|jdks3t|jdS(NsY{{ 2.7|round }}|{{ 2.1|round }}|{{ 2.1234|round(3, 'floor') }}|{{ 2.1|round(0, 'ceil') }}s3.0|2.0|2.123|3.0(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_round_positivescCs7tjd}|jdks3t|jdS(NsL{{ 21.3|round(-1)}}|{{ 21.3|round(-1, 'ceil')}}|{{ 21.3|round(-1, 'floor')}}s20.0|30.0|20.0(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_round_negativescCsstjd}|jj}t|dks9td|ksKtd|ks]td|ksotdS(NsW{{ {'foo': 42, 'bar': 23, 'fish': none, 'spam': missing, 'blub:blub': ''}|xmlattr }}isfoo="42"sbar="23"sblub:blub="<?>"(RR RtsplittlenR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_xmlattr!s cCs+tjd}|jdks'tdS(Ns/{{ [2, 3, 1]|sort }}|{{ [2, 3, 1]|sort(true) }}s[1, 2, 3]|[3, 2, 1](RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_sort1*scCs+tjd}|jdks'tdS(Ns({{ "".join(["c", "A", "b", "D"]|sort) }}tAbcD(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_sort2.scCs+tjd}|jdks'tdS(Ns!{{ ['foo', 'Bar', 'blah']|sort }}s['Bar', 'blah', 'foo'](RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_sort32scCsbtdtfdY}tjd}|jdt|ddddgd ks^tdS( NtMagiccBseZdZdZRS(cSs ||_dS(N(RZ(R RZ((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR59scSs t|jS(N(RRZ(R ((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt__str__;s(R6R7R5Rl(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyRk7s s({{ items|sort(attribute='value')|join }}titemsiiiit1234(RR9RR RR:R(R RkR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_sort46scCs@tjd}|jjdddddgks<tdS(Ns] {%- for grouper, list in [{'foo': 1, 'bar': 2}, {'foo': 2, 'bar': 3}, {'foo': 1, 'bar': 1}, {'foo': 3, 'bar': 4}]|groupby('foo') -%} {{ grouper }}{% for x in list %}: {{ x.foo }}, {{ x.bar }}{% endfor %}| {%- endfor %}t|s 1: 1, 2: 1, 1s2: 2, 3s3: 3, 4t(RR RRdR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_groupby@s cCs+tjd}|jdks'tdS(Ns {%- for grouper, list in [('a', 1), ('a', 2), ('b', 1)]|groupby(0) -%} {{ grouper }}{% for x in list %}:{{ x.1 }}{% endfor %}| {%- endfor %}s a:1:2|b:1|(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_groupby_tuple_indexOs csdtfdYdtffdY}|dddd|dd dd|d d dd|d ddd g}tjd}|jd|jddddgkstdS(NtDatecBseZdZRS(cSs||_||_||_dS(N(tdaytmonthtyear(R RuRvRw((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR5Xs  (R6R7R5(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyRtWstArticlecseZfdZRS(cs||_||_dS(N(tdatettitle(R RzRy(Rt(s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR5]s(R6R7R5((Rt(s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyRx\stahaiit interestingisreally?is totally notis {%- for year, list in articles|groupby('date.year') -%} {{ year }}{% for x in list %}[{{ x.title }}]{% endfor %}| {%- endfor %}tarticlesRps1970[aha][interesting][really?]s1971[totally not]Rq(R9RR RRdR(R RxR}R((Rts</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_groupby_multidotVs cCs+tjd}|jdks'tdS(Ns={% filter upper|replace('FOO', 'foo') %}foobar{% endfilter %}tfooBAR(RR RR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_filtertagpscCst}|jd}|jdddks6ttdt}|jd}|jdddksrt|jd}|jdddkst|jd }|jdtd d kstdS( Ns{{ string|replace("o", 42) }}tstringssR/s <f4242>s{{ string|replace("<", 42) }}s 42foo>s {{ string|replace("o", ">x<") }}Rsf>x<>x<(RR RRR0R(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_replaceus cCs7tjd}|jdtddks3tdS(Ns{{ x|forceescape }}RKs
u <div />(RR RRR(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_forceescapescCsatdt}|jd}|jdks6t|jd}|jdks]tdS(NR/s{{ "
foo
"|safe }}s
foo
s{{ "
foo
" }}s<div>foo</div>(RR0R RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt test_safes cCstdt}|jd}|jdks6t|jd}|jdddksct|jddd kst|jdddfd kst|jdddkst|jdid d6dkst|jdid d6dks tdS(NR/s{{ "Hello, world!"|urlencode }}sHello%2C%20world%21s{{ o|urlencode }}touHello, world‽sHello%2C%20world%E2%80%BDtfisf=1tzis f=1&z=2u‽s %E2%80%BD=1is0=1(Ri((Ri(Ri(Ri(u‽i((u‽i(RR0R RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_urlencodes$%cCs2t}|jd}|j|jddS(Ns${{ ["1", "2", "3"]|map("int")|sum }}t6(RR t assertEqualR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_simple_maps cCsodtfdY}t}|d|d|dg}|jd}|j|jd|ddS( NR3cBseZdZRS(cSs ||_dS(N(tname(R R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR5s(R6R7R5(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR3stjohntjanetmikes+{{ users|map(attribute="name")|join("|") }}R8sjohn|jane|mike(R9RR RR(R R3RR8R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_attribute_maps   cCs2t}|jd}|j|jddS(Ns{{ none|map("upper")|list }}s[](RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_empty_maps cCs2t}|jd}|j|jddS(Ns-{{ [1, 2, 3, 4, 5]|select("odd")|join("|") }}s1|3|5(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_simple_selects cCs2t}|jd}|j|jddS(Ns6{{ [none, false, 0, 1, 2, 3, 4, 5]|select|join("|") }}s 1|2|3|4|5(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_bool_selects cCs2t}|jd}|j|jddS(Ns-{{ [1, 2, 3, 4, 5]|reject("odd")|join("|") }}s2|4(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_simple_rejects cCs2t}|jd}|j|jddS(Ns6{{ [none, false, 0, 1, 2, 3, 4, 5]|reject|join("|") }}s None|False|0(RR RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_bool_rejects cCsxdtfdY}t}|dt|dt|dtg}|jd}|j|jd|ddS( NR3cBseZdZRS(cSs||_||_dS(N(Rt is_active(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR5s (R6R7R5(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR3sRRRsC{{ users|selectattr("is_active")|map(attribute="name")|join("|") }}R8s john|jane(R9RR0tFalseR RR(R R3RR8R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_simple_select_attrs   cCsxdtfdY}t}|dt|dt|dtg}|jd}|j|jd|ddS(NR3cBseZdZRS(cSs||_||_dS(N(RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR5s (R6R7R5(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR3sRRRsC{{ users|rejectattr("is_active")|map(attribute="name")|join("|") }}R8(R9RR0RR RR(R R3RR8R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_simple_reject_attrs   cCsxdtfdY}t}|dd|dd|ddg}|jd }|j|jd |d dS( NR3cBseZdZRS(cSs||_||_dS(N(tidR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR5s (R6R7R5(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR3siRiRiRsC{{ users|selectattr("id", "odd")|map(attribute="name")|join("|") }}R8s john|mike(R9RR RR(R R3RR8R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_func_select_attrs   cCsxdtfdY}t}|dd|dd|ddg}|jd }|j|jd |ddS( NR3cBseZdZRS(cSs||_||_dS(N(RR(R RR((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR5s (R6R7R5(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyR3siRiRiRsC{{ users|rejectattr("id", "odd")|map(attribute="name")|join("|") }}R8(R9RR RR(R R3RR8R((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyttest_func_reject_attrs   (AR6R7R RRRRRR R!R"R#R$R&R'R(R-R.R2R;R=R?R@RDRHRIRLRMRORQRRRTRURVRXR\R^R`RaRbRcRfRgRiRjRoRrRsR~RRRRRRRRRRRRRRRR(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyRs~                                                      cCs&tj}|jtjt|S(N(tunittestt TestSuitetaddTestt makeSuiteR(tsuite((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyRs ( t__doc__Rtjinja2.testsuiteRtjinja2RRtjinja2._compatRRRRR(((s</usr/lib/python2.7/site-packages/jinja2/testsuite/filters.pyt s