Releases: sqlalchemy/mako
0.7.1
0.7.1
Released: Sun Jul 8 2012
-
[feature] Control lines with no bodies will
now succeed, as "pass" is added for these
when no statements are otherwise present.
Courtesy Ben TrofatterReferences: #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.References: #192
-
[bug] Can now use strict_undefined at the
same time args passed to def() are used
by other elements of the <%def> tag.References: #191
0.7.0
0.7.0
Released: Fri Mar 30 2012
-
[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 thisReferences: #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 TrofatterReferences: #95
-
[feature] Added support for context managers,
i.e. "% with x as e:/ % endwith" support.
Courtesy Ben TrofatterReferences: #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.References: #185
-
[bug] Fixed some Py3K resource warnings due
to filehandles being implicitly closed.References: #182
-
[bug] Fixed endless recursion bug when
nesting multiple def-calls with content.
Thanks to Jeff Dairiki.References: #186
-
[feature] Added Jinja2 to the example
benchmark suite, courtesy Vincent Férotin
0.6.2
0.6.1
0.6.1
Released: Sat Jan 28 2012
- [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
0.6.0
Released: Sat Jan 21 2012
-
[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':, '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)References: #180
-
[feature] Added "--var name=value" option to the mako-render
script, allows passing of kw to the template from
the command line.References: #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.References: #181
-
[bug] The exception message in the html_error_template
is now escaped with the HTML filter.References: #142
-
[bug] Added "white-space:pre" style to html_error_template()
for code blocks so that indentation is preservedReferences: #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)References: #175
0.5.0
0.5.0
Released: Wed Sep 28 2011
-
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.References: #174
0.4.2
0.4.1
0.4.1
Released: Wed Apr 6 2011
-
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.References: #164
-
a slight adjustment to the "highlight" logic
for generating template bound stacktraces.
Will stick to known template source lines
without any extra guessing.References: #165
0.4.0
0.4.0
Released: Sun Mar 6 2011
-
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.References: #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.References: #159
0.3.6
0.3.6
Released: Sat Nov 13 2010
-
Documentation is on Sphinx.
References: #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.References: #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.References: #153
-
Patch to lexer to not generate an empty
'' write in the case of backslash-ended
lines.References: #155
-
Fixed missing **extra collection in
setup.py which prevented setup.py
from running 2to3 on install.References: #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.