| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825 |
- 0.7.2
- - [bug] Fixed regression in 0.7.1 where AST
- parsing for Py2.4 was broken.
- [ticket:193]
- 0.7.1
- - [feature] Control lines with no bodies will
- now succeed, as "pass" is added for these
- when no statements are otherwise present.
- Courtesy Ben Trofatter [ticket:146]
- - [bug] Fixed some long-broken scoping behavior
- involving variables declared in defs and such,
- which only became apparent when
- the strict_undefined flag was turned on.
- [ticket:192]
- - [bug] Can now use strict_undefined at the
- same time args passed to def() are used
- by other elements of the <%def> tag.
- [ticket:191]
- 0.7.0
- - [feature] Added new "loop" variable to templates,
- is provided within a % for block to provide
- info about the loop such as index, first/last,
- odd/even, etc. A migration path is also provided
- for legacy templates via the "enable_loop" argument
- available on Template, TemplateLookup, and <%page>.
- Thanks to Ben Trofatter for all
- the work on this [ticket:125]
- - [feature] Added a real check for "reserved"
- names, that is names which are never pulled
- from the context and cannot be passed to
- the template.render() method. Current names
- are "context", "loop", "UNDEFINED".
- - [feature] The html_error_template() will now
- apply Pygments highlighting to the source
- code displayed in the traceback, if Pygments
- if available. Courtesy Ben Trofatter
- [ticket:95]
- - [feature] Added support for context managers,
- i.e. "% with x as e:/ % endwith" support.
- Courtesy Ben Trofatter [ticket:147]
- - [feature] Added class-level flag to CacheImpl
- "pass_context"; when True, the keyword argument
- 'context' will be passed to get_or_create()
- containing the Mako Context object.
- [ticket:185]
- - [bug] Fixed some Py3K resource warnings due
- to filehandles being implicitly closed.
- [ticket:182]
- - [bug] Fixed endless recursion bug when
- nesting multiple def-calls with content.
- Thanks to Jeff Dairiki. [ticket:186]
- - [feature] Added Jinja2 to the example
- benchmark suite, courtesy Vincent Férotin
- 0.6.2
- - [bug] The ${{"foo":"bar"}} parsing issue is fixed!!
- The legendary Eevee has slain the dragon!
- [ticket:20]. Also fixes quoting issue
- at [ticket:86].
- 0.6.1
- - [bug] Added special compatibility for the 0.5.0
- Cache() constructor, which was preventing file
- version checks and not allowing Mako 0.6 to
- recompile the module files.
- 0.6.0
- - [feature] Template caching has been converted into a plugin
- system, whereby the usage of Beaker is just the
- default plugin. Template and TemplateLookup
- now accept a string "cache_impl" parameter which
- refers to the name of a cache plugin, defaulting
- to the name 'beaker'. New plugins can be
- registered as pkg_resources entrypoints under
- the group "mako.cache", or registered directly
- using mako.cache.register_plugin(). The
- core plugin is the mako.cache.CacheImpl
- class.
- - [feature] Added support for Beaker cache regions
- in templates. Usage of regions should be considered
- as superseding the very obsolete idea of passing in
- backend options, timeouts, etc. within templates.
- - [feature] The 'put' method on Cache is now
- 'set'. 'put' is there for backwards compatibility.
- - [feature] The <%def>, <%block> and <%page> tags now accept
- any argument named "cache_*", and the key
- minus the "cache_" prefix will be passed as keyword
- arguments to the CacheImpl methods.
- - [feature] Template and TemplateLookup now accept an argument
- cache_args, which refers to a dictionary containing
- cache parameters. The cache_dir, cache_url, cache_type,
- cache_timeout arguments are deprecated (will probably
- never be removed, however) and can be passed
- now as cache_args={'url':<some url>, 'type':'memcached',
- 'timeout':50, 'dir':'/path/to/some/directory'}
- - [feature/bug] Can now refer to context variables
- within extra arguments to <%block>, <%def>, i.e.
- <%block name="foo" cache_key="${somekey}">.
- Filters can also be used in this way, i.e.
- <%def name="foo()" filter="myfilter">
- then template.render(myfilter=some_callable)
- [ticket:180]
- - [feature] Added "--var name=value" option to the mako-render
- script, allows passing of kw to the template from
- the command line. [ticket:178]
- - [feature] Added module_writer argument to Template,
- TemplateLookup, allows a callable to be passed which
- takes over the writing of the template's module source
- file, so that special environment-specific steps
- can be taken. [ticket:181]
- - [bug] The exception message in the html_error_template
- is now escaped with the HTML filter. [ticket:142]
- - [bug] Added "white-space:pre" style to html_error_template()
- for code blocks so that indentation is preserved
- [ticket:173]
- - [bug] The "benchmark" example is now Python 3 compatible
- (even though several of those old template libs aren't
- available on Py3K, so YMMV) [ticket:175]
- 0.5
- - A Template is explicitly disallowed
- from having a url that normalizes to relative outside
- of the root. That is, if the Lookup is based
- at /home/mytemplates, an include that would place
- the ultimate template at
- /home/mytemplates/../some_other_directory,
- i.e. outside of /home/mytemplates,
- is disallowed. This usage was never intended
- despite the lack of an explicit check.
- The main issue this causes
- is that module files can be written outside
- of the module root (or raise an error, if file perms aren't
- set up), and can also lead to the same template being
- cached in the lookup under multiple, relative roots.
- TemplateLookup instead has always supported multiple
- file roots for this purpose.
- [ticket:174]
- 0.4.2
- - Fixed bug regarding <%call>/def calls w/ content
- whereby the identity of the "caller" callable
- inside the <%def> would be corrupted by the
- presence of another <%call> in the same block.
- [ticket:170]
- - Fixed the babel plugin to accommodate <%block>
- [ticket:169]
- 0.4.1
- - New tag: <%block>. A variant on <%def> that
- evaluates its contents in-place.
- Can be named or anonymous,
- the named version is intended for inheritance
- layouts where any given section can be
- surrounded by the <%block> tag in order for
- it to become overrideable by inheriting
- templates, without the need to specify a
- top-level <%def> plus explicit call.
- Modified scoping and argument rules as well as a
- more strictly enforced usage scheme make it ideal
- for this purpose without at all replacing most
- other things that defs are still good for.
- Lots of new docs. [ticket:164]
- - a slight adjustment to the "highlight" logic
- for generating template bound stacktraces.
- Will stick to known template source lines
- without any extra guessing. [ticket:165]
- 0.4.0
- - A 20% speedup for a basic two-page
- inheritance setup rendering
- a table of escaped data
- (see http://techspot.zzzeek.org/2010/11/19/quick-mako-vs.-jinja-speed-test/).
- A few configurational changes which
- affect those in the I-don't-do-unicode
- camp should be noted below.
- - The FastEncodingBuffer is now used
- by default instead of cStringIO or StringIO,
- regardless of whether output_encoding
- is set to None or not. FEB is faster than
- both. Only StringIO allows bytestrings
- of unknown encoding to pass right
- through, however - while it is of course
- not recommended to send bytestrings of unknown
- encoding to the output stream, this
- mode of usage can be re-enabled by
- setting the flag bytestring_passthrough
- to True.
- - disable_unicode mode requires that
- output_encoding be set to None - it also
- forces the bytestring_passthrough flag
- to True.
- - the <%namespace> tag raises an error
- if the 'template' and 'module' attributes
- are specified at the same time in
- one tag. A different class is used
- for each case which allows a reduction in
- runtime conditional logic and function
- call overhead. [ticket:156]
- - the keys() in the Context, as well as
- it's internal _data dictionary, now
- include just what was specified to
- render() as well as Mako builtins
- 'caller', 'capture'. The contents
- of __builtin__ are no longer copied.
- Thanks to Daniel Lopez for pointing
- this out. [ticket:159]
- 0.3.6
- - Documentation is on Sphinx.
- [ticket:126]
- - Beaker is now part of "extras" in
- setup.py instead of "install_requires".
- This to produce a lighter weight install
- for those who don't use the caching
- as well as to conform to Pyramid
- deployment practices. [ticket:154]
- - The Beaker import (or attempt thereof)
- is delayed until actually needed;
- this to remove the performance penalty
- from startup, particularly for
- "single execution" environments
- such as shell scripts. [ticket:153]
- - Patch to lexer to not generate an empty
- '' write in the case of backslash-ended
- lines. [ticket:155]
- - Fixed missing **extra collection in
- setup.py which prevented setup.py
- from running 2to3 on install.
- [ticket:148]
- - New flag on Template, TemplateLookup -
- strict_undefined=True, will cause
- variables not found in the context to
- raise a NameError immediately, instead of
- defaulting to the UNDEFINED value.
- - The range of Python identifiers that
- are considered "undefined", meaning they
- are pulled from the context, has been
- trimmed back to not include variables
- declared inside of expressions (i.e. from
- list comprehensions), as well as
- in the argument list of lambdas. This
- to better support the strict_undefined
- feature. The change should be
- fully backwards-compatible but involved
- a little bit of tinkering in the AST code,
- which hadn't really been touched for
- a couple of years, just FYI.
- 0.3.5
- - The <%namespace> tag allows expressions
- for the `file` argument, i.e. with ${}.
- The `context` variable, if needed,
- must be referenced explicitly.
- [ticket:141]
- - ${} expressions embedded in tags,
- such as <%foo:bar x="${...}">, now
- allow multiline Python expressions.
- - Fixed previously non-covered regular
- expression, such that using a ${} expression
- inside of a tag element that doesn't allow
- them raises a CompileException instead of
- silently failing.
- - Added a try/except around "import markupsafe".
- This to support GAE which can't run markupsafe.
- [ticket:151] No idea whatsoever if the
- install_requires in setup.py also breaks GAE,
- couldn't get an answer on this.
- 0.3.4
- - Now using MarkupSafe for HTML escaping,
- i.e. in place of cgi.escape(). Faster
- C-based implementation and also escapes
- single quotes for additional security.
- Supports the __html__ attribute for
- the given expression as well.
- When using "disable_unicode" mode,
- a pure Python HTML escaper function
- is used which also quotes single quotes.
- Note that Pylons by default doesn't
- use Mako's filter - check your
- environment.py file.
- - Fixed call to "unicode.strip" in
- exceptions.text_error_template which
- is not Py3k compatible. [ticket:137]
- 0.3.3
- - Added conditional to RichTraceback
- such that if no traceback is passed
- and sys.exc_info() has been reset,
- the formatter just returns blank
- for the "traceback" portion.
- [ticket:135]
- - Fixed sometimes incorrect usage of
- exc.__class__.__name__
- in html/text error templates when using
- Python 2.4 [ticket:131]
- - Fixed broken @property decorator on
- template.last_modified
- - Fixed error formatting when a stacktrace
- line contains no line number, as in when
- inside an eval/exec-generated function.
- [ticket:132]
- - When a .py is being created, the tempfile
- where the source is stored temporarily is
- now made in the same directory as that of
- the .py file. This ensures that the two
- files share the same filesystem, thus
- avoiding cross-filesystem synchronization
- issues. Thanks to Charles Cazabon.
- 0.3.2
- - Calling a def from the top, via
- template.get_def(...).render() now checks the
- argument signature the same way as it did in
- 0.2.5, so that TypeError is not raised.
- reopen of [ticket:116]
- 0.3.1
- - Fixed incorrect dir name in setup.py
- [ticket:129]
- 0.3
- - Python 2.3 support is dropped. [ticket:123]
- - Python 3 support is added ! See README.py3k
- for installation and testing notes.
- [ticket:119]
- - Unit tests now run with nose. [ticket:127]
- - Source code escaping has been simplified.
- In particular, module source files are now
- generated with the Python "magic encoding
- comment", and source code is passed through
- mostly unescaped, except for that code which
- is regenerated from parsed Python source.
- This fixes usage of unicode in
- <%namespace:defname> tags. [ticket:99]
- - RichTraceback(), html_error_template().render(),
- text_error_template().render() now accept "error"
- and "traceback" as optional arguments, and
- these are now actually used. [ticket:122]
- - The exception output generated when
- format_exceptions=True will now be as a Python
- unicode if it occurred during render_unicode(),
- or an encoded string if during render().
- - A percent sign can be emitted as the first
- non-whitespace character on a line by escaping
- it as in "%%". [ticket:112]
- - Template accepts empty control structure, i.e.
- % if: %endif, etc. [ticket:94]
- - The <%page args> tag can now be used in a base
- inheriting template - the full set of render()
- arguments are passed down through the inherits
- chain. Undeclared arguments go into **pageargs
- as usual. [ticket:116]
- - defs declared within a <%namespace> section, an
- uncommon feature, have been improved. The defs
- no longer get doubly-rendered in the body() scope,
- and now allow local variable assignment without
- breakage. [ticket:109]
- - Windows paths are handled correctly if a Template
- is passed only an absolute filename (i.e. with c:
- drive etc.) and no URI - the URI is converted
- to a forward-slash path and module_directory
- is treated as a windows path. [ticket:128]
- - TemplateLookup raises TopLevelLookupException for
- a given path that is a directory, not a filename,
- instead of passing through to the template to
- generate IOError. [ticket:73]
- 0.2.6
- - Fix mako function decorators to preserve the
- original function's name in all cases. Patch
- from Scott Torborg.
- - Support the <%namespacename:defname> syntax in
- the babel extractor. [ticket:118]
- - Further fixes to unicode handling of .py files with the
- html_error_template. [ticket:88]
- 0.2.5
- - Added a "decorator" kw argument to <%def>,
- allows custom decoration functions to wrap
- rendering callables. Mainly intended for
- custom caching algorithms, not sure what
- other uses there may be (but there may be).
- Examples are in the "filtering" docs.
- - When Mako creates subdirectories in which
- to store templates, it uses the more
- permissive mode of 0775 instead of 0750,
- helping out with certain multi-process
- scenarios. Note that the mode is always
- subject to the restrictions of the existing
- umask. [ticket:101]
- - Fixed namespace.__getattr__() to raise
- AttributeError on attribute not found
- instead of RuntimeError. [ticket:104]
- - Added last_modified accessor to Template,
- returns the time.time() when the module
- was created. [ticket:97]
- - Fixed lexing support for whitespace
- around '=' sign in defs. [ticket:102]
- - Removed errant "lower()" in the lexer which
- was causing tags to compile with
- case-insensitive names, thus messing up
- custom <%call> names. [ticket:108]
- - added "mako.__version__" attribute to
- the base module. [ticket:110]
- 0.2.4
- - Fixed compatibility with Jython 2.5b1.
- 0.2.3
- - the <%namespacename:defname> syntax described at
- http://techspot.zzzeek.org/?p=28 has now
- been added as a built in syntax, and is recommended
- as a more modern syntax versus <%call expr="expression">.
- The %call tag itself will always remain,
- with <%namespacename:defname> presenting a more HTML-like
- alternative to calling defs, both plain and
- nested. Many examples of the new syntax are in the
- "Calling a def with embedded content" section
- of the docs.
- - added support for Jython 2.5.
- - cache module now uses Beaker's CacheManager
- object directly, so that all cache types are included.
- memcached is available as both "ext:memcached" and
- "memcached", the latter for backwards compatibility.
- - added "cache" accessor to Template, Namespace.
- e.g. ${local.cache.get('somekey')} or
- template.cache.invalidate_body()
- - added "cache_enabled=True" flag to Template,
- TemplateLookup. Setting this to False causes cache
- operations to "pass through" and execute every time;
- this flag should be integrated in Pylons with its own
- cache_enabled configuration setting.
- - the Cache object now supports invalidate_def(name),
- invalidate_body(), invalidate_closure(name),
- invalidate(key), which will remove the given key
- from the cache, if it exists. The cache arguments
- (i.e. storage type) are derived from whatever has
- been already persisted for that template.
- [ticket:92]
- - For cache changes to work fully, Beaker 1.1 is required.
- 1.0.1 and up will work as well with the exception of
- cache expiry. Note that Beaker 1.1 is **required**
- for applications which use dynamically generated keys,
- since previous versions will permanently store state in memory
- for each individual key, thus consuming all available
- memory for an arbitrarily large number of distinct
- keys.
- - fixed bug whereby an <%included> template with
- <%page> args named the same as a __builtin__ would not
- honor the default value specified in <%page> [ticket:93]
- - fixed the html_error_template not handling tracebacks from
- normal .py files with a magic encoding comment [ticket:88]
- - RichTraceback() now accepts an optional traceback object
- to be used in place of sys.exc_info()[2]. html_error_template()
- and text_error_template() accept an optional
- render()-time argument "traceback" which is passed to the
- RichTraceback object.
- - added ModuleTemplate class, which allows the construction
- of a Template given a Python module generated by a previous
- Template. This allows Python modules alone to be used
- as templates with no compilation step. Source code
- and template source are optional but allow error reporting
- to work correctly.
- - fixed Python 2.3 compat. in mako.pyparser [ticket:90]
- - fix Babel 0.9.3 compatibility; stripping comment tags is now
- optional (and enabled by default).
- 0.2.2
- - cached blocks now use the current context when rendering
- an expired section, instead of the original context
- passed in [ticket:87]
- - fixed a critical issue regarding caching, whereby
- a cached block would raise an error when called within a
- cache-refresh operation that was initiated after the
- initiating template had completed rendering.
- 0.2.1
- - fixed bug where 'output_encoding' parameter would prevent
- render_unicode() from returning a unicode object.
- - bumped magic number, which forces template recompile for
- this version (fixes incompatible compile symbols from 0.1
- series).
- - added a few docs for cache options, specifically those that
- help with memcached.
- 0.2.0
- - Speed improvements (as though we needed them, but people
- contributed and there you go):
- - added "bytestring passthru" mode, via
- `disable_unicode=True` argument passed to Template or
- TemplateLookup. All unicode-awareness and filtering is
- turned off, and template modules are generated with
- the appropriate magic encoding comment. In this mode,
- template expressions can only receive raw bytestrings
- or Unicode objects which represent straight ASCII, and
- render_unicode() may not be used if multibyte
- characters are present. When enabled, speed
- improvement around 10-20%. [ticket:77] (courtesy
- anonymous guest)
- - inlined the "write" function of Context into a local
- template variable. This affords a 12-30% speedup in
- template render time. (idea courtesy same anonymous
- guest) [ticket:76]
- - New Features, API changes:
- - added "attr" accessor to namespaces. Returns
- attributes configured as module level attributes, i.e.
- within <%! %> sections. [ticket:62] i.e.:
- # somefile.html
- <%!
- foo = 27
- %>
- # some other template
- <%namespace name="myns" file="somefile.html"/>
- ${myns.attr.foo}
- The slight backwards incompatibility here is, you
- can't have namespace defs named "attr" since the
- "attr" descriptor will occlude it.
- - cache_key argument can now render arguments passed
- directly to the %page or %def, i.e. <%def
- name="foo(x)" cached="True" cache_key="${x}"/>
- [ticket:78]
- - some functions on Context are now private:
- _push_buffer(), _pop_buffer(),
- caller_stack._push_frame(), caller_stack._pop_frame().
- - added a runner script "mako-render" which renders
- standard input as a template to stdout [ticket:81]
- [ticket:56]
- - Bugfixes:
- - can now use most names from __builtins__ as variable
- names without explicit declaration (i.e. 'id',
- 'exception', 'range', etc.) [ticket:83] [ticket:84]
- - can also use builtin names as local variable names
- (i.e. dict, locals) (came from fix for [ticket:84])
- - fixed bug in python generation when variable names are
- used with identifiers like "else", "finally", etc.
- inside them [ticket:68]
- - fixed codegen bug which occured when using <%page>
- level caching, combined with an expression-based
- cache_key, combined with the usage of <%namespace
- import="*"/> - fixed lexer exceptions not cleaning up
- temporary files, which could lead to a maximum number
- of file descriptors used in the process [ticket:69]
- - fixed issue with inline format_exceptions that was
- producing blank exception pages when an inheriting
- template is present [ticket:71]
- - format_exceptions will apply the encoding options of
- html_error_template() to the buffered output
- - rewrote the "whitespace adjuster" function to work
- with more elaborate combinations of quotes and
- comments [ticket:75]
- 0.1.10
- - fixed propagation of 'caller' such that nested %def calls
- within a <%call> tag's argument list propigates 'caller'
- to the %call function itself (propigates to the inner
- calls too, this is a slight side effect which previously
- existed anyway)
- - fixed bug where local.get_namespace() could put an
- incorrect "self" in the current context
- - fixed another namespace bug where the namespace functions
- did not have access to the correct context containing
- their 'self' and 'parent'
- 0.1.9
- - filters.Decode filter can also accept a non-basestring
- object and will call str() + unicode() on it [ticket:47]
- - comments can be placed at the end of control lines,
- i.e. if foo: # a comment, [ticket:53], thanks to
- Paul Colomiets
- - fixed expressions and page tag arguments and with embedded
- newlines in CRLF templates, follow up to [ticket:16], thanks
- Eric Woroshow
- - added an IOError catch for source file not found in RichTraceback
- exception reporter [ticket:51]
- 0.1.8
- - variable names declared in render methods by internal
- codegen prefixed by "__M_" to prevent name collisions
- with user code
- - added a Babel (http://babel.edgewall.org/) extractor entry
- point, allowing extraction of gettext messages directly from
- mako templates via Babel [ticket:45]
- - fix to turbogears plugin to work with dot-separated names
- (i.e. load_template('foo.bar')). also takes file extension
- as a keyword argument (default is 'mak').
- - more tg fix: fixed [ticket:35], allowing string-based
- templates with tgplugin even if non-compatible args were sent
- 0.1.7
- - one small fix to the unit tests to support python 2.3
- - a slight hack to how cache.py detects Beaker's memcached,
- works around unexplained import behavior observed on some
- python 2.3 installations
- 0.1.6
- - caching is now supplied directly by Beaker, which has
- all of MyghtyUtils merged into it now. The latest Beaker
- (0.7.1) also fixes a bug related to how Mako was using the
- cache API.
- - fix to module_directory path generation when the path is "./"
- [ticket:34]
- - TGPlugin passes options to string-based templates [ticket:35]
- - added an explicit stack frame step to template runtime, which
- allows much simpler and hopefully bug-free tracking of 'caller',
- fixes #28
- - if plain Python defs are used with <%call>, a decorator
- @runtime.supports_callable exists to ensure that the "caller"
- stack is properly handled for the def.
- - fix to RichTraceback and exception reporting to get template
- source code as a unicode object #37
- - html_error_template includes options "full=True", "css=True"
- which control generation of HTML tags, CSS [ticket:39]
- - added the 'encoding_errors' parameter to Template/TemplateLookup
- for specifying the error handler associated with encoding to
- 'output_encoding' [ticket:40]
- - the Template returned by html_error_template now defaults to
- output_encoding=sys.getdefaultencoding(),
- encoding_errors='htmlentityreplace' [ticket:37]
- - control lines, i.e. % lines, support backslashes to continue long
- lines (#32)
- - fixed codegen bug when defining <%def> within <%call> within <%call>
- - leading utf-8 BOM in template files is honored according to pep-0263
- 0.1.5
- - AST expression generation - added in just about everything
- expression-wise from the AST module [ticket:26]
- - AST parsing, properly detects imports of the form "import foo.bar"
- [ticket:27]
- - fix to lexing of <%docs> tag nested in other tags
- - fix to context-arguments inside of <%include> tag which broke
- during 0.1.4 [ticket:29]
- - added "n" filter, disables *all* filters normally applied to an expression
- via <%page> or default_filters (but not those within the filter)
- - added buffer_filters argument, defines filters applied to the return value
- of buffered/cached/filtered %defs, after all filters defined with the %def
- itself have been applied. allows the creation of default expression filters
- that let the output of return-valued %defs "opt out" of that filtering
- via passing special attributes or objects.
- 0.1.4
- - got defs-within-defs to be cacheable
- - fixes to code parsing/whitespace adjusting where plain python comments
- may contain quote characters [ticket:23]
- - fix to variable scoping for identifiers only referenced within
- functions
- - added a path normalization step to lookup so URIs like
- "/foo/bar/../etc/../foo" pre-process the ".." tokens before checking
- the filesystem
- - fixed/improved "caller" semantics so that undefined caller is
- "UNDEFINED", propigates __nonzero__ method so it evaulates to False if
- not present, True otherwise. this way you can say % if caller:\n
- ${caller.body()}\n% endif
- - <%include> has an "args" attribute that can pass arguments to the
- called template (keyword arguments only, must be declared in that
- page's <%page> tag.)
- - <%include> plus arguments is also programmatically available via
- self.include_file(<filename>, **kwargs)
- - further escaping added for multibyte expressions in %def, %call
- attributes [ticket:24]
- 0.1.3
- - ***Small Syntax Change*** - the single line comment character is now
- *two* hash signs, i.e. "## this is a comment". This avoids a common
- collection with CSS selectors.
- - the magic "coding" comment (i.e. # coding:utf-8) will still work with
- either one "#" sign or two for now; two is preferred going forward, i.e.
- ## coding:<someencoding>.
- - new multiline comment form: "<%doc> a comment </%doc>"
- - UNDEFINED evaluates to False
- - improvement to scoping of "caller" variable when using <%call> tag
- - added lexer error for unclosed control-line (%) line
- - added "preprocessor" argument to Template, TemplateLookup - is a single
- callable or list of callables which will be applied to the template text
- before lexing. given the text as an argument, returns the new text.
- - added mako.ext.preprocessors package, contains one preprocessor so far:
- 'convert_comments', which will convert single # comments to the new ##
- format
- 0.1.2
- - fix to parsing of code/expression blocks to insure that non-ascii
- characters, combined with a template that indicates a non-standard
- encoding, are expanded into backslash-escaped glyphs before being AST
- parsed [ticket:11]
- - all template lexing converts the template to unicode first, to
- immediately catch any encoding issues and ensure internal unicode
- representation.
- - added module_filename argument to Template to allow specification of a
- specific module file
- - added modulename_callable to TemplateLookup to allow a function to
- determine module filenames (takes filename, uri arguments). used for
- [ticket:14]
- - added optional input_encoding flag to Template, to allow sending a
- unicode() object with no magic encoding comment
- - "expression_filter" argument in <%page> applies only to expressions
- - added "default_filters" argument to Template, TemplateLookup. applies only
- to expressions, gets prepended to "expression_filter" arg from <%page>.
- defaults to ["unicode"], so that all expressions get stringified into u''
- by default (this is what Mako already does). By setting to [], expressions
- are passed through raw.
- - added "imports" argument to Template, TemplateLookup. so you can predefine
- a list of import statements at the top of the template. can be used in
- conjunction with default_filters.
- - support for CRLF templates...whoops ! welcome to all the windows users.
- [ticket:16]
- - small fix to local variable propigation for locals that are conditionally
- declared
- - got "top level" def calls to work, i.e. template.get_def("somedef").render()
- 0.1.1
- - buffet plugin supports string-based templates, allows ToscaWidgets to work
- [ticket:8]
- - AST parsing fixes: fixed TryExcept identifier parsing
- - removed textmate tmbundle from contrib and into separate SVN location;
- windows users cant handle those files, setuptools not very good at
- "pruning" certain directories
- - fix so that "cache_timeout" parameter is propigated
- - fix to expression filters so that string conversion (actually unicode)
- properly occurs before filtering
- - better error message when a lookup is attempted with a template that has no
- lookup
- - implemented "module" attribute for namespace
- - fix to code generation to correctly track multiple defs with the same name
- - "directories" can be passed to TemplateLookup as a scalar in which case it
- gets converted to a list [ticket:9]
- 0.1.0
- Initial release.
|