0.2.0 - added "attr" accessor to namespaces. Returns attributes configured as module level attributes, i.e. within <%! %> sections [ticket:62] - 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] - 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] 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.