.. -*-coding: utf-8-*- ====================================== Pyratemp doctest/examples for Python 3 ====================================== :Version: 0.3.0 init:: >>> from pyratemp import * :Example: quickstart:: >>> t = Template("hello @!name!@") >>> print(t(name="marvin")) hello marvin quickstart with a template-file:: # >>> t = Template(filename="mytemplate.tmpl") # >>> print(t(name="marvin")) # hello marvin generic usage:: >>> t = Template("output is in Unicode äöü€") >>> t #doctest: +ELLIPSIS <...Template object at 0x...> >>> t() 'output is in Unicode äöü€' with data:: >>> t = Template("hello @!name!@", data={"name":"world"}) >>> t() 'hello world' >>> t(name="worlds") 'hello worlds' # >>> t(note="data must be Unicode or ASCII", name="ä") # 'hello ä' escaping:: >>> t = Template("hello escaped: @!name!@, unescaped: $!name!$") >>> t(name='''<>&'"''') 'hello escaped: <>&'", unescaped: <>&\'"' result-encoding:: # encode the unicode-object to your encoding with encode() >>> t = Template("hello \xe4\xf6\xfc\u20ac") >>> result = t() >>> result 'hello äöü€' >>> result.encode("utf-8") b'hello \xc3\xa4\xc3\xb6\xc3\xbc\xe2\x82\xac' >>> result.encode("ascii") Traceback (most recent call last): ... UnicodeEncodeError: 'ascii' codec can't encode characters in position 6-9: ordinal not in range(128) >>> result.encode("ascii", 'xmlcharrefreplace') b'hello äöü€' Python-expressions:: >>> Template('formatted: @! "%8.5f" % value !@')(value=3.141592653) 'formatted: 3.14159' >>> Template("hello --@!name.upper().center(20)!@--")(name="world") 'hello -- WORLD --' >>> Template("calculate @!var*5+7!@")(var=7) 'calculate 42' blocks (if/for/macros/...):: >>> t = Template("barbazunknown(@!foo!@)") >>> t(foo=2) 'baz' >>> t(foo=5) 'unknown(5)' >>> t = Template("@!i!@ (empty)") >>> t(mylist=[]) '(empty)' >>> t(mylist=[1,2,3]) '1 2 3 ' >>> t = Template(" - @!i!@: @!elem!@") >>> t(mylist=["a","b","c"]) ' - 0: a - 1: b - 2: c' >>> t = Template('hello @!name!@ @!greetings(name=user)!@') >>> t(user="monty") ' hello monty' exists:: >>> t = Template('YESNO') >>> t() 'NO' >>> t(foo=1) 'YES' >>> t(foo=None) # note this difference to 'default()' 'YES' default-values:: # non-existing variables raise an error >>> Template('hi @!optional!@')() Traceback (most recent call last): ... pyratemp.TemplateRenderError: Cannot eval expression 'optional'. (NameError: name 'optional' is not defined) >>> t = Template('hi @!default("optional","anyone")!@') >>> t() 'hi anyone' >>> t(optional=None) 'hi anyone' >>> t(optional="there") 'hi there' # the 1st parameter can be any eval-expression >>> t = Template('@!default("5*var1+var2","missing variable")!@') >>> t(var1=10) 'missing variable' >>> t(var1=10, var2=2) '52' # also in blocks >>> t = Template('yesno') >>> t() 'no' >>> t(opt1=23, opt2=42) 'yes' >>> t = Template('@!i!@') >>> t() '' >>> t(optional_list=[1,2,3]) '123' # but make sure to put the expression in quotation marks, otherwise: >>> Template('@!default(optional,"fallback")!@')() Traceback (most recent call last): ... pyratemp.TemplateRenderError: Cannot eval expression 'default(optional,"fallback")'. (NameError: name 'optional' is not defined) setvar:: >>> t = Template('$!setvar("i", "i+1")!$@!i!@') >>> t(i=6) '7' >>> t = Template('''$!setvar("s", '"\\\\\\\\n".join(s)')!$@!s!@''') >>> t(isinstance=isinstance, s="123") '123' >>> t(isinstance=isinstance, s=["123", "456"]) '123\\n456'