- 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
- 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'
- 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
- fixed expressions and page tag arguments and with embedded
newlines in CRLF templates, follow up to [ticket:16], thanks
- added an IOError catch for source file not found in RichTraceback
exception reporter [ticket:51]
- 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
- 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
- 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
- fix to module_directory path generation when the path is "./"
- 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',
- 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
- the Template returned by html_error_template now defaults to
- control lines, i.e. % lines, support backslashes to continue long
- fixed codegen bug when defining <%def> within <%call> within <%call>
- leading utf-8 BOM in template files is honored according to pep-0263
- 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"
- 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.
- 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
- added a path normalization step to lookup so URIs like
"/foo/bar/../etc/../foo" pre-process the ".." tokens before checking
- 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
- <%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
- further escaping added for multibyte expressions in %def, %call
- ***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.
- 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 ##
- 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
- all template lexing converts the template to unicode first, to
immediately catch any encoding issues and ensure internal unicode
- 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
- 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.
- small fix to local variable propigation for locals that are conditionally
- got "top level" def calls to work, i.e. template.get_def("somedef").render()
- buffet plugin supports string-based templates, allows ToscaWidgets to work
- 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
- 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]