=========
Changelog
=========

1.0
===

.. changelog::
    :version: 1.0.5

    .. change::
        :tags: bug

      Updated the Sphinx documentation builder to work with recent
      versions of Sphinx.

.. changelog::
    :version: 1.0.4
    :released: Thu Mar 10 2016

    .. change::
        :tags: feature, test

      The default test runner is now py.test.  Running "python setup.py test"
      will make use of py.test instead of nose.  nose still works as a test
      runner as well, however.

    .. change::
        :tags: bug, lexer
        :pullreq: github:19

      Major improvements to lexing of intricate Python sections which may
      contain complex backslash sequences, as well as support for the bitwise
      operator (e.g. pipe symbol) inside of expression sections distinct
      from the Mako "filter" operator, provided the operator is enclosed
      within parentheses or brackets.  Pull request courtesy Daniel Martin.

    .. change::
        :tags: feature
        :pullreq: bitbucket:16

      Added new method :meth:`.Template.list_defs`.   Pull request courtesy
      Jonathan Vanasco.

.. changelog::
    :version: 1.0.3
    :released: Tue Oct 27 2015

    .. change::
        :tags: bug, babel
        :pullreq: bitbucket:21

      Fixed an issue where the Babel plugin would not handle a translation
      symbol that contained non-ascii characters.  Pull request courtesy
      Roman Imankulov.

.. changelog::
    :version: 1.0.2
    :released: Wed Aug 26 2015

    .. change::
        :tags: bug, installation
        :tickets: 249

      The "universal wheel" marker is removed from setup.cfg, because
      our setup.py currently makes use of conditional dependencies.
      In :ticket:`249`, the discussion is ongoing on how to correct our
      setup.cfg / setup.py fully so that we can handle the per-version
      dependency changes while still maintaining optimal wheel settings,
      so this issue is not yet fully resolved.

    .. change::
        :tags: bug, py3k
        :tickets: 250

      Repair some calls within the ast module that no longer work on Python3.5;
      additionally replace the use of ``inspect.getargspec()`` under
      Python 3 (seems to be called from the TG plugin) to avoid deprecation
      warnings.

    .. change::
        :tags: bug
        :pullreq: bitbucket:18

      Update the Lingua translation extraction plugin to correctly
      handle templates mixing Python control statements (such as if,
      for and while) with template fragments. Pull request courtesy
      Laurent Daverio.

    .. change::
        :tags: feature
        :tickets: 236

      Added ``STOP_RENDERING`` keyword for returning/exiting from a
      template early, which is a synonym for an empty string ``""``.
      Previously, the docs suggested a bare
      ``return``, but this could cause ``None`` to appear in the
      rendered template result.

      .. seealso::

        :ref:`syntax_exiting_early`

.. changelog::
    :version: 1.0.1
    :released: Thu Jan 22 2015

    .. change::
        :tags: feature
        :pullreq: bitbucket:9

      Added support for Lingua, a translation extraction system as an
      alternative to Babel.  Pull request courtesy Wichert Akkerman.

    .. change::
        :tags: bug, py3k
        :pullreq: bitbucket:11

      Modernized the examples/wsgi/run_wsgi.py file for Py3k.
      Pull requset courtesy Cody Taylor.

.. changelog::
    :version: 1.0.0
    :released: Sun Jun 8 2014

    .. change::
        :tags: bug, py2k
        :pullreq: bitbucket:8

      Improved the error re-raise operation when a custom
      :paramref:`.Template.error_handler` is used that does not handle
      the exception; the original stack trace etc. is now preserved.
      Pull request courtesy Manfred Haltner.

    .. change::
        :tags: bug, py2k, filters
        :pullreq: bitbucket:7

      Added an html_escape filter that works in "non unicode" mode.
      Previously, when using ``disable_unicode=True``, the ``u`` filter
      would fail to handle non-ASCII bytes properly.  Pull request
      courtesy George Xie.

    .. change::
        :tags: general

      Compatibility changes; in order to modernize the codebase, Mako
      is now dropping support for Python 2.4 and Python 2.5 altogether.
      The source base is now targeted at Python 2.6 and forwards.

    .. change::
        :tags: feature

      Template modules now generate a JSON "metadata" structure at the bottom
      of the source file which includes parseable information about the
      templates' source file, encoding etc. as well as a mapping of module
      source lines to template lines, thus replacing the "# SOURCE LINE"
      markers throughout the source code.  The structure also indicates those
      lines that are explicitly not part of the template's source; the goal
      here is to allow better integration with coverage and other tools.

    .. change::
        :tags: bug, py3k

      Fixed bug in ``decode.<encoding>`` filter where a non-string object
      would not be correctly interpreted in Python 3.

    .. change::
        :tags: bug, py3k
        :tickets: 227

      Fixed bug in Python parsing logic which would fail on Python 3
      when a "try/except" targeted a tuple of exception types, rather
      than a single exception.

    .. change::
        :tags: feature
        :pullreq: bitbucket:5

      mako-render is now implemented as a setuptools entrypoint script;
      a standalone mako.cmd.cmdline() callable is now available, and the
      system also uses argparse now instead of optparse.  Pull request
      courtesy Derek Harland.

    .. change::
        :tags: feature
        :pullreq: bitbucket:4

      The mako-render script will now catch exceptions and run them
      into the text error handler, and exit with a non-zero exit code.
      Pull request courtesy Derek Harland.

    .. change::
        :tags: bug
        :pullreq: bitbucket:2

      A rework of the mako-render script allows the script to run
      correctly when given a file pathname that is outside of the current
      directory, e.g. ``mako-render ../some_template.mako``.  In this case,
      the "template root" defaults to the directory in which the template
      is located, instead of ".".  The script also accepts a new argument
      ``--template-dir`` which can be specified multiple times to establish
      template lookup directories.  Standard input for templates also works
      now too.  Pull request courtesy Derek Harland.

    .. change::
        :tags: feature, py3k
        :pullreq: github:7

      Support is added for Python 3 "keyword only" arguments, as used in
      defs.  Pull request courtesy Eevee.


0.9
===

.. changelog::
    :version: 0.9.1
    :released: Thu Dec 26 2013

    .. change::
        :tags: bug
        :tickets: 225

      Fixed bug in Babel plugin where translator comments
      would be lost if intervening text nodes were encountered.
      Fix courtesy Ned Batchelder.

    .. change::
        :tags: bug
        :tickets:

      Fixed TGPlugin.render method to support unicode template
      names in Py2K - courtesy Vladimir Magamedov.

    .. change::
        :tags: bug
        :tickets:

      Fixed an AST issue that was preventing correct operation
      under alpha versions of Python 3.4.  Pullreq courtesy Zer0-.

    .. change::
        :tags: bug
        :tickets:

      Changed the format of the "source encoding" header output
      by the code generator to use the format ``# -*- coding:%s -*-``
      instead of ``# -*- encoding:%s -*-``; the former is more common
      and compatible with emacs.  Courtesy Martin Geisler.

    .. change::
        :tags: bug
        :tickets: 224

      Fixed issue where an old lexer rule prevented a template line
      which looked like "#*" from being correctly parsed.

.. changelog::
    :version: 0.9.0
    :released: Tue Aug 27 2013

    .. change::
        :tags: bug
        :tickets: 219

      The Context.locals_() method becomes a private underscored
      method, as this method has a specific internal use. The purpose
      of Context.kwargs has been clarified, in that it only delivers
      top level keyword arguments originally passed to template.render().

    .. change::
        :tags: bug
        :tickets:

      Fixed the babel plugin to properly interpret ${} sections
      inside of a "call" tag, i.e. <%self:some_tag attr="${_('foo')}"/>.
      Code that's subject to babel escapes in here needs to be
      specified as a Python expression, not a literal.  This change
      is backwards incompatible vs. code that is relying upon a _('')
      translation to be working within a call tag.

    .. change::
        :tags: bug
        :tickets: 187

      The Babel plugin has been repaired to work on Python 3.

    .. change::
        :tags: bug
        :tickets: 207

      Using <%namespace import="*" module="somemodule"/> now
      skips over module elements that are not explcitly callable,
      avoiding TypeError when trying to produce partials.

    .. change::
        :tags: bug
        :tickets: 190

      Fixed Py3K bug where a "lambda" expression was not
      interpreted correctly within a template tag; also
      fixed in Py2.4.

0.8
===

.. changelog::
    :version: 0.8.1
    :released: Fri May 24 2013

    .. change::
        :tags: bug
        :tickets: 216

      Changed setup.py to skip installing markupsafe
      if Python version is < 2.6 or is between 3.0 and
      less than 3.3, as Markupsafe now only supports 2.6->2.X,
      3.3->3.X.

    .. change::
        :tags: bug
        :tickets: 214

      Fixed regression where "entity" filter wasn't
      converted for py3k properly (added tests.)

    .. change::
        :tags: bug
        :tickets: 212

      Fixed bug where mako-render script wasn't
      compatible with Py3k.

    .. change::
        :tags: bug
        :tickets: 213

      Cleaned up all the various deprecation/
      file warnings when running the tests under
      various Pythons with warnings turned on.

.. changelog::
    :version: 0.8.0
    :released: Wed Apr 10 2013

    .. change::
        :tags: feature
        :tickets:

      Performance improvement to the
      "legacy" HTML escape feature, used for XML
      escaping and when markupsafe isn't present,
      courtesy George Xie.

    .. change::
        :tags: bug
        :tickets: 209

      Fixed bug whereby an exception in Python 3
      against a module compiled to the filesystem would
      fail trying to produce a RichTraceback due to the
      content being in bytes.

    .. change::
        :tags: bug
        :tickets: 208

      Change default for compile()->reserved_names
      from tuple to frozenset, as this is expected to be
      a set by default.

    .. change::
        :tags: feature
        :tickets:

      Code has been reworked to support Python 2.4->
      Python 3.xx in place.  2to3 no longer needed.

    .. change::
        :tags: feature
        :tickets:

      Added lexer_cls argument to Template,
      TemplateLookup, allows alternate Lexer classes
      to be used.

    .. change::
        :tags: feature
        :tickets:

      Added future_imports parameter to Template
      and TemplateLookup, renders the __future__ header
      with desired capabilities at the top of the generated
      template module.  Courtesy Ben Trofatter.

0.7
===

.. changelog::
    :version: 0.7.3
    :released: Wed Nov 7 2012

    .. change::
        :tags: bug
        :tickets:

      legacy_html_escape function, used when
      Markupsafe isn't installed, was using an inline-compiled
      regexp which causes major slowdowns on Python 3.3;
      is now precompiled.

    .. change::
        :tags: bug
        :tickets: 201

      AST supporting now supports tuple-packed
      function arguments inside pure-python def
      or lambda expressions.

    .. change::
        :tags: bug
        :tickets:

      Fixed Py3K bug in the Babel extension.

    .. change::
        :tags: bug
        :tickets:

      Fixed the "filter" attribute of the
      <%text> tag so that it pulls locally specified
      identifiers from the context the same
      way as that of <%block> and <%filter>.

    .. change::
        :tags: bug
        :tickets:

      Fixed bug in plugin loader to correctly
      raise exception when non-existent plugin
      is specified.

.. changelog::
    :version: 0.7.2
    :released: Fri Jul 20 2012

    .. change::
        :tags: bug
        :tickets: 193

      Fixed regression in 0.7.1 where AST
      parsing for Py2.4 was broken.

.. changelog::
    :version: 0.7.1
    :released: Sun Jul 8 2012

    .. change::
        :tags: feature
        :tickets: 146

      Control lines with no bodies will
      now succeed, as "pass" is added for these
      when no statements are otherwise present.
      Courtesy Ben Trofatter

    .. change::
        :tags: bug
        :tickets: 192

      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.

    .. change::
        :tags: bug
        :tickets: 191

      Can now use strict_undefined at the
      same time args passed to def() are used
      by other elements of the <%def> tag.

.. changelog::
    :version: 0.7.0
    :released: Fri Mar 30 2012

    .. change::
        :tags: feature
        :tickets: 125

      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

    .. change::
        :tags: feature
        :tickets:

      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".

    .. change::
        :tags: feature
        :tickets: 95

      The html_error_template() will now
      apply Pygments highlighting to the source
      code displayed in the traceback, if Pygments
      if available.  Courtesy Ben Trofatter

    .. change::
        :tags: feature
        :tickets: 147

      Added support for context managers,
      i.e. "% with x as e:/ % endwith" support.
      Courtesy Ben Trofatter

    .. change::
        :tags: feature
        :tickets: 185

      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.

    .. change::
        :tags: bug
        :tickets: 182

      Fixed some Py3K resource warnings due
      to filehandles being implicitly closed.

    .. change::
        :tags: bug
        :tickets: 186

      Fixed endless recursion bug when
      nesting multiple def-calls with content.
      Thanks to Jeff Dairiki.

    .. change::
        :tags: feature
        :tickets:

      Added Jinja2 to the example
      benchmark suite, courtesy Vincent Férotin

Older Versions
==============

.. changelog::
    :version: 0.6.2
    :released: Thu Feb 2 2012

    .. change::
        :tags: bug
        :tickets: 86, 20

      The ${{"foo":"bar"}} parsing issue is fixed!!
      The legendary Eevee has slain the dragon!.  Also fixes quoting issue
      at.

.. changelog::
    :version: 0.6.1
    :released: Sat Jan 28 2012

    .. change::
        :tags: bug
        :tickets:

      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.

.. changelog::
    :version: 0.6.0
    :released: Sat Jan 21 2012

    .. change::
        :tags: feature
        :tickets:

      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.

    .. change::
        :tags: feature
        :tickets:

      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.

    .. change::
        :tags: feature
        :tickets:

      The 'put' method on Cache is now
      'set'.  'put' is there for backwards compatibility.

    .. change::
        :tags: feature
        :tickets:

      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.

    .. change::
        :tags: feature
        :tickets:

      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'}

    .. change::
        :tags: feature/bug
        :tickets: 180

      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)

    .. change::
        :tags: feature
        :tickets: 178

      Added "--var name=value" option to the mako-render
      script, allows passing of kw to the template from
      the command line.

    .. change::
        :tags: feature
        :tickets: 181

      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.

    .. change::
        :tags: bug
        :tickets: 142

      The exception message in the html_error_template
      is now escaped with the HTML filter.

    .. change::
        :tags: bug
        :tickets: 173

      Added "white-space:pre" style to html_error_template()
      for code blocks so that indentation is preserved

    .. change::
        :tags: bug
        :tickets: 175

      The "benchmark" example is now Python 3 compatible
      (even though several of those old template libs aren't
      available on Py3K, so YMMV)


.. changelog::
    :version: 0.5.0
    :released: Wed Sep 28 2011

    .. change::
        :tags:
        :tickets: 174

      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.


.. changelog::
    :version: 0.4.2
    :released: Fri Aug 5 2011

    .. change::
        :tags:
        :tickets: 170

      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.

    .. change::
        :tags:
        :tickets: 169

      Fixed the babel plugin to accommodate <%block>

.. changelog::
    :version: 0.4.1
    :released: Wed Apr 6 2011

    .. change::
        :tags:
        :tickets: 164

      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.

    .. change::
        :tags:
        :tickets: 165

      a slight adjustment to the "highlight" logic
      for generating template bound stacktraces.
      Will stick to known template source lines
      without any extra guessing.

.. changelog::
    :version: 0.4.0
    :released: Sun Mar 6 2011

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets:

      disable_unicode mode requires that
      output_encoding be set to None - it also
      forces the bytestring_passthrough flag
      to True.

    .. change::
        :tags:
        :tickets: 156

      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.

    .. change::
        :tags:
        :tickets: 159

      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.


.. changelog::
    :version: 0.3.6
    :released: Sat Nov 13 2010

    .. change::
        :tags:
        :tickets: 126

      Documentation is on Sphinx.

    .. change::
        :tags:
        :tickets: 154

      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.

    .. change::
        :tags:
        :tickets: 153

      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.

    .. change::
        :tags:
        :tickets: 155

      Patch to lexer to not generate an empty
      '' write in the case of backslash-ended
      lines.

    .. change::
        :tags:
        :tickets: 148

      Fixed missing **extra collection in
      setup.py which prevented setup.py
      from running 2to3 on install.

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets:

      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.

.. changelog::
    :version: 0.3.5
    :released: Sun Oct 24 2010

    .. change::
        :tags:
        :tickets: 141

      The <%namespace> tag allows expressions
      for the `file` argument, i.e. with ${}.
      The `context` variable, if needed,
      must be referenced explicitly.

    .. change::
        :tags:
        :tickets:

      ${} expressions embedded in tags,
      such as <%foo:bar x="${...}">, now
      allow multiline Python expressions.

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets: 151

      Added a try/except around "import markupsafe".
      This to support GAE which can't run markupsafe. No idea whatsoever if the
      install_requires in setup.py also breaks GAE,
      couldn't get an answer on this.

.. changelog::
    :version: 0.3.4
    :released: Tue Jun 22 2010

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets: 137

      Fixed call to "unicode.strip" in
      exceptions.text_error_template which
      is not Py3k compatible.

.. changelog::
    :version: 0.3.3
    :released: Mon May 31 2010

    .. change::
        :tags:
        :tickets: 135

      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.

    .. change::
        :tags:
        :tickets: 131

      Fixed sometimes incorrect usage of
      exc.__class__.__name__
      in html/text error templates when using
      Python 2.4

    .. change::
        :tags:
        :tickets:

      Fixed broken @property decorator on
      template.last_modified

    .. change::
        :tags:
        :tickets: 132

      Fixed error formatting when a stacktrace
      line contains no line number, as in when
      inside an eval/exec-generated function.

    .. change::
        :tags:
        :tickets:

      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.

.. changelog::
    :version: 0.3.2
    :released: Thu Mar 11 2010

    .. change::
        :tags:
        :tickets: 116

      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

.. changelog::
    :version: 0.3.1
    :released: Sun Mar 7 2010

    .. change::
        :tags:
        :tickets: 129

      Fixed incorrect dir name in setup.py

.. changelog::
    :version: 0.3.0
    :released: Fri Mar 5 2010

    .. change::
        :tags:
        :tickets: 123

      Python 2.3 support is dropped.

    .. change::
        :tags:
        :tickets: 119

      Python 3 support is added ! See README.py3k
      for installation and testing notes.

    .. change::
        :tags:
        :tickets: 127

      Unit tests now run with nose.

    .. change::
        :tags:
        :tickets: 99

      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.

    .. change::
        :tags:
        :tickets: 122

      RichTraceback(), html_error_template().render(),
      text_error_template().render() now accept "error"
      and "traceback" as optional arguments, and
      these are now actually used.

    .. change::
        :tags:
        :tickets:

      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().

    .. change::
        :tags:
        :tickets: 112

      A percent sign can be emitted as the first
      non-whitespace character on a line by escaping
      it as in "%%".

    .. change::
        :tags:
        :tickets: 94

      Template accepts empty control structure, i.e.
      % if: %endif, etc.

    .. change::
        :tags:
        :tickets: 116

      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.

    .. change::
        :tags:
        :tickets: 109

      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.

    .. change::
        :tags:
        :tickets: 128

      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.

    .. change::
        :tags:
        :tickets: 73

      TemplateLookup raises TopLevelLookupException for
      a given path that is a directory, not a filename,
      instead of passing through to the template to
      generate IOError.


.. changelog::
    :version: 0.2.6
    :released:

    .. change::
        :tags:
        :tickets:

      Fix mako function decorators to preserve the
      original function's name in all cases. Patch
      from Scott Torborg.

    .. change::
        :tags:
        :tickets: 118

      Support the <%namespacename:defname> syntax in
      the babel extractor.

    .. change::
        :tags:
        :tickets: 88

      Further fixes to unicode handling of .py files with the
      html_error_template.

.. changelog::
    :version: 0.2.5
    :released: Mon Sep  7 2009

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets: 101

      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.

    .. change::
        :tags:
        :tickets: 104

      Fixed namespace.__getattr__() to raise
      AttributeError on attribute not found
      instead of RuntimeError.

    .. change::
        :tags:
        :tickets: 97

      Added last_modified accessor to Template,
      returns the time.time() when the module
      was created.

    .. change::
        :tags:
        :tickets: 102

      Fixed lexing support for whitespace
      around '=' sign in defs.

    .. change::
        :tags:
        :tickets: 108

      Removed errant "lower()" in the lexer which
      was causing tags to compile with
      case-insensitive names, thus messing up
      custom <%call> names.

    .. change::
        :tags:
        :tickets: 110

      added "mako.__version__" attribute to
      the base module.

.. changelog::
    :version: 0.2.4
    :released: Tue Dec 23 2008

    .. change::
        :tags:
        :tickets:

      Fixed compatibility with Jython 2.5b1.

.. changelog::
    :version: 0.2.3
    :released: Sun Nov 23 2008

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets:

      added support for Jython 2.5.

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets:

      added "cache" accessor to Template, Namespace.
      e.g.  ${local.cache.get('somekey')} or
      template.cache.invalidate_body()

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets: 92

      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.

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets: 93

      fixed bug whereby an <%included> template with
      <%page> args named the same as a __builtin__ would not
      honor the default value specified in <%page>

    .. change::
        :tags:
        :tickets: 88

      fixed the html_error_template not handling tracebacks from
      normal .py files with a magic encoding comment

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets: 90

      fixed Python 2.3 compat. in mako.pyparser

    .. change::
        :tags:
        :tickets:

      fix Babel 0.9.3 compatibility; stripping comment tags is now
      optional (and enabled by default).

.. changelog::
    :version: 0.2.2
    :released: Mon Jun 23 2008

    .. change::
        :tags:
        :tickets: 87

      cached blocks now use the current context when rendering
      an expired section, instead of the original context
      passed in

    .. change::
        :tags:
        :tickets:

      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.

.. changelog::
    :version: 0.2.1
    :released: Mon Jun 16 2008

    .. change::
        :tags:
        :tickets:

      fixed bug where 'output_encoding' parameter would prevent
      render_unicode() from returning a unicode object.

    .. change::
        :tags:
        :tickets:

      bumped magic number, which forces template recompile for
      this version (fixes incompatible compile symbols from 0.1
      series).

    .. change::
        :tags:
        :tickets:

      added a few docs for cache options, specifically those that
      help with memcached.

.. changelog::
    :version: 0.2.0
    :released: Tue Jun  3 2008

    .. change::
        :tags:
        :tickets:

      Speed improvements (as though we needed them, but people
      contributed and there you go):

    .. change::
        :tags:
        :tickets: 77

      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%. (courtesy
      anonymous guest)

    .. change::
        :tags:
        :tickets: 76

      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)

    .. change::
        :tags:
        :tickets:

      New Features, API changes:

    .. change::
        :tags:
        :tickets: 62

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

    .. change::
        :tags:
        :tickets: 78

      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}"/>

    .. change::
        :tags:
        :tickets:

      some functions on Context are now private:
      _push_buffer(), _pop_buffer(),
      caller_stack._push_frame(), caller_stack._pop_frame().

    .. change::
        :tags:
        :tickets: 56, 81

      added a runner script "mako-render" which renders
      standard input as a template to stdout

    .. change::
        :tags: bugfixes
        :tickets: 83, 84

      can now use most names from __builtins__ as variable
      names without explicit declaration (i.e. 'id',
      'exception', 'range', etc.)

    .. change::
        :tags: bugfixes
        :tickets: 84

      can also use builtin names as local variable names
      (i.e. dict, locals) (came from fix for)

    .. change::
        :tags: bugfixes
        :tickets: 68

      fixed bug in python generation when variable names are
      used with identifiers like "else", "finally", etc.
      inside them

    .. change::
        :tags: bugfixes
        :tickets: 69

      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

    .. change::
        :tags: bugfixes
        :tickets: 71

      fixed issue with inline format_exceptions that was
      producing blank exception pages when an inheriting
      template is present

    .. change::
        :tags: bugfixes
        :tickets:

      format_exceptions will apply the encoding options of
      html_error_template() to the buffered output

    .. change::
        :tags: bugfixes
        :tickets: 75

      rewrote the "whitespace adjuster" function to work
      with more elaborate combinations of quotes and
      comments


.. changelog::
    :version: 0.1.10
    :released:

    .. change::
        :tags:
        :tickets:

      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)

    .. change::
        :tags:
        :tickets:

      fixed bug where local.get_namespace() could put an
      incorrect "self" in the current context

    .. change::
        :tags:
        :tickets:

      fixed another namespace bug where the namespace functions
      did not have access to the correct context containing
      their 'self' and 'parent'

.. changelog::
    :version: 0.1.9
    :released:

    .. change::
        :tags:
        :tickets: 47

      filters.Decode filter can also accept a non-basestring
      object and will call str() + unicode() on it

    .. change::
        :tags:
        :tickets: 53

      comments can be placed at the end of control lines,
      i.e. if foo: # a comment,, thanks to
      Paul Colomiets

    .. change::
        :tags:
        :tickets: 16

      fixed expressions and page tag arguments and with embedded
      newlines in CRLF templates, follow up to, thanks
      Eric Woroshow

    .. change::
        :tags:
        :tickets: 51

      added an IOError catch for source file not found in RichTraceback
      exception reporter

.. changelog::
    :version: 0.1.8
    :released: Tue Jun 26 2007

    .. change::
        :tags:
        :tickets:

      variable names declared in render methods by internal
      codegen prefixed by "__M_" to prevent name collisions
      with user code

    .. change::
        :tags:
        :tickets: 45

      added a Babel (http://babel.edgewall.org/) extractor entry
      point, allowing extraction of gettext messages directly from
      mako templates via Babel

    .. change::
        :tags:
        :tickets:

      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').

    .. change::
        :tags:
        :tickets: 35

      more tg fix:  fixed, allowing string-based
      templates with tgplugin even if non-compatible args were sent

.. changelog::
    :version: 0.1.7
    :released: Wed Jun 13 2007

    .. change::
        :tags:
        :tickets:

      one small fix to the unit tests to support python 2.3

    .. change::
        :tags:
        :tickets:

      a slight hack to how cache.py detects Beaker's memcached,
      works around unexplained import behavior observed on some
      python 2.3 installations

.. changelog::
    :version: 0.1.6
    :released: Fri May 18 2007

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets: 34

      fix to module_directory path generation when the path is "./"

    .. change::
        :tags:
        :tickets: 35

      TGPlugin passes options to string-based templates

    .. change::
        :tags:
        :tickets: 28

      added an explicit stack frame step to template runtime, which
      allows much simpler and hopefully bug-free tracking of 'caller',
      fixes

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets: 37

      fix to RichTraceback and exception reporting to get template
      source code as a unicode object

    .. change::
        :tags:
        :tickets: 39

      html_error_template includes options "full=True", "css=True"
      which control generation of HTML tags, CSS

    .. change::
        :tags:
        :tickets: 40

      added the 'encoding_errors' parameter to Template/TemplateLookup
      for specifying the error handler associated with encoding to
      'output_encoding'

    .. change::
        :tags:
        :tickets: 37

      the Template returned by html_error_template now defaults to
      output_encoding=sys.getdefaultencoding(),
      encoding_errors='htmlentityreplace'

    .. change::
        :tags:
        :tickets:

      control lines, i.e. % lines, support backslashes to continue long
      lines (#32)

    .. change::
        :tags:
        :tickets:

      fixed codegen bug when defining <%def> within <%call> within <%call>

    .. change::
        :tags:
        :tickets:

      leading utf-8 BOM in template files is honored according to pep-0263

.. changelog::
    :version: 0.1.5
    :released: Sat Mar 31 2007

    .. change::
        :tags:
        :tickets: 26

      AST expression generation - added in just about everything
      expression-wise from the AST module

    .. change::
        :tags:
        :tickets: 27

      AST parsing, properly detects imports of the form "import foo.bar"

    .. change::
        :tags:
        :tickets:

      fix to lexing of <%docs> tag nested in other tags

    .. change::
        :tags:
        :tickets: 29

      fix to context-arguments inside of <%include> tag which broke
      during 0.1.4

    .. change::
        :tags:
        :tickets:

      added "n" filter, disables *all* filters normally applied to an expression
      via <%page> or default_filters (but not those within the filter)

    .. change::
        :tags:
        :tickets:

      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.

.. changelog::
    :version: 0.1.4
    :released: Sat Mar 10 2007

    .. change::
        :tags:
        :tickets:

      got defs-within-defs to be cacheable

    .. change::
        :tags:
        :tickets: 23

      fixes to code parsing/whitespace adjusting where plain python comments
      may contain quote characters

    .. change::
        :tags:
        :tickets:

      fix to variable scoping for identifiers only referenced within
      functions

    .. change::
        :tags:
        :tickets:

      added a path normalization step to lookup so URIs like
      "/foo/bar/../etc/../foo" pre-process the ".." tokens before checking
      the filesystem

    .. change::
        :tags:
        :tickets:

      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

    .. change::
        :tags:
        :tickets:

      <%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.)

    .. change::
        :tags:
        :tickets:

      <%include> plus arguments is also programmatically available via
      self.include_file(<filename>, **kwargs)

    .. change::
        :tags:
        :tickets: 24

      further escaping added for multibyte expressions in %def, %call
      attributes

.. changelog::
    :version: 0.1.3
    :released: Wed Feb 21 2007

    .. change::
        :tags:
        :tickets:

      ***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.

    .. change::
        :tags:
        :tickets:

      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>.

    .. change::
        :tags:
        :tickets:

      new multiline comment form: "<%doc> a comment </%doc>"

    .. change::
        :tags:
        :tickets:

      UNDEFINED evaluates to False

    .. change::
        :tags:
        :tickets:

      improvement to scoping of "caller" variable when using <%call> tag

    .. change::
        :tags:
        :tickets:

      added lexer error for unclosed control-line (%) line

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets:

      added mako.ext.preprocessors package, contains one preprocessor so far:
      'convert_comments', which will convert single # comments to the new ##
      format

.. changelog::
    :version: 0.1.2
    :released: Thu Feb  1 2007

    .. change::
        :tags:
        :tickets: 11

      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

    .. change::
        :tags:
        :tickets:

      all template lexing converts the template to unicode first, to
      immediately catch any encoding issues and ensure internal unicode
      representation.

    .. change::
        :tags:
        :tickets:

      added module_filename argument to Template to allow specification of a
      specific module file

    .. change::
        :tags:
        :tickets: 14

      added modulename_callable to TemplateLookup to allow a function to
      determine module filenames (takes filename, uri arguments). used for

    .. change::
        :tags:
        :tickets:

      added optional input_encoding flag to Template, to allow sending a
      unicode() object with no magic encoding comment

    .. change::
        :tags:
        :tickets:

      "expression_filter" argument in <%page> applies only to expressions

    .. change::
        :tags: "unicode"
        :tickets:

      added "default_filters" argument to Template, TemplateLookup. applies only
      to expressions, gets prepended to "expression_filter" arg from <%page>.
      defaults to, so that all expressions get stringified into u''
      by default (this is what Mako already does). By setting to [], expressions
      are passed through raw.

    .. change::
        :tags:
        :tickets:

      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.

    .. change::
        :tags:
        :tickets: 16

      support for CRLF templates...whoops ! welcome to all the windows users.

    .. change::
        :tags:
        :tickets:

      small fix to local variable propigation for locals that are conditionally
      declared

    .. change::
        :tags:
        :tickets:

      got "top level" def calls to work, i.e. template.get_def("somedef").render()

.. changelog::
    :version: 0.1.1
    :released: Sun Jan 14 2007

    .. change::
        :tags:
        :tickets: 8

      buffet plugin supports string-based templates, allows ToscaWidgets to work

    .. change::
        :tags:
        :tickets:

      AST parsing fixes: fixed TryExcept identifier parsing

    .. change::
        :tags:
        :tickets:

      removed textmate tmbundle from contrib and into separate SVN location;
      windows users cant handle those files, setuptools not very good at
      "pruning" certain directories

    .. change::
        :tags:
        :tickets:

      fix so that "cache_timeout" parameter is propigated

    .. change::
        :tags:
        :tickets:

      fix to expression filters so that string conversion (actually unicode)
      properly occurs before filtering

    .. change::
        :tags:
        :tickets:

      better error message when a lookup is attempted with a template that has no
      lookup

    .. change::
        :tags:
        :tickets:

      implemented "module" attribute for namespace

    .. change::
        :tags:
        :tickets:

      fix to code generation to correctly track multiple defs with the same name

    .. change::
        :tags:
        :tickets: 9

      "directories" can be passed to TemplateLookup as a scalar in which case it
      gets converted to a list
