diff --git a/CHANGES.rst b/CHANGES.rst index 4d5ba6deb..7be9103d9 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,522 +3,568 @@ Version 2.9.7 ------------- -(bugfix release, in development) +Unreleased -- ``tojson`` filter marks output as safe to match documented behavior. - (`#718`_) -- Resolved a bug where getting debug locals for tracebacks could - modify template context. -- Fixed a bug where having many `{% elif ... %}` blocks resulted in a - "too many levels of indentation" error. These blocks now compile to - native `elif ..:` instead of `else: if ..:` (#759) +- ``tojson`` filter marks output as safe to match documented behavior. + :pr:`718` +- Resolved a bug where getting debug locals for tracebacks could + modify template context. +- Fixed a bug where having many ``{% elif ... %}`` blocks resulted in + a "too many levels of indentation" error. These blocks now compile + to native ``elif ..:`` instead of ``else: if ..:`` :issue:`759` -.. _#718: https://github.com/pallets/jinja/pull/718 Version 2.9.6 ------------- -(bugfix release, released on April 3rd 2017) -- Fixed custom context behavior in fast resolve mode (#675) +Released 2017-04-03 + +- Fixed custom context behavior in fast resolve mode :issue:`675` + Version 2.9.5 ------------- -(bugfix release, released on January 28th 2017) - -- Restored the original repr of the internal `_GroupTuple` because this - caused issues with ansible and it was an unintended change. (#654) -- Added back support for custom contexts that override the old `resolve` - method since it was hard for people to spot that this could cause a - regression. -- Correctly use the buffer for the else block of for loops. This caused - invalid syntax errors to be caused on 2.x and completely wrong behavior - on Python 3 (#669) -- Resolve an issue where the `{% extends %}` tag could not be used with - async environments. (#668) -- Reduce memory footprint slightly by reducing our unicode database dump - we use for identifier matching on Python 3 (#666) -- Fixed autoescaping not working for macros in async compilation mode. (#671) + +Released 2017-01-28 + +- Restored the original repr of the internal ``_GroupTuple`` because + this caused issues with ansible and it was an unintended change. + :issue:`654` +- Added back support for custom contexts that override the old + ``resolve`` method since it was hard for people to spot that this + could cause a regression. +- Correctly use the buffer for the else block of for loops. This + caused invalid syntax errors to be caused on 2.x and completely + wrong behavior on Python 3 :issue:`669` +- Resolve an issue where the ``{% extends %}`` tag could not be used + with async environments. :issue:`668` +- Reduce memory footprint slightly by reducing our unicode database + dump we use for identifier matching on Python 3 :issue:`666` +- Fixed autoescaping not working for macros in async compilation mode. + :issue:`671` + Version 2.9.4 ------------- -(bugfix release, released on January 10th 2017) - -- Solved some warnings for string literals. (#646) -- Increment the bytecode cache version which was not done due to an - oversight before. -- Corrected bad code generation and scoping for filtered loops. (#649) -- Resolved an issue where top-level output silencing after known extend - blocks could generate invalid code when blocks where contained in if - statements. (#651) -- Made the `truncate.leeway` default configurable to improve compatibility - with older templates. + +Released 2017-01-10 + +- Solved some warnings for string literals. :issue:`646` +- Increment the bytecode cache version which was not done due to an + oversight before. +- Corrected bad code generation and scoping for filtered loops. + :issue:`649` +- Resolved an issue where top-level output silencing after known + extend blocks could generate invalid code when blocks where + contained in if statements. :issue:`651` +- Made the ``truncate.leeway`` default configurable to improve + compatibility with older templates. + Version 2.9.3 ------------- -(bugfix release, released on January 8th 2017) - -- Restored the use of blocks in macros to the extend that was possible - before. On Python 3 it would render a generator repr instead of - the block contents. (#645) -- Set a consistent behavior for assigning of variables in inner scopes - when the variable is also read from an outer scope. This now sets the - intended behavior in all situations however it does not restore the - old behavior where limited assignments to outer scopes was possible. - For more information and a discussion see #641 -- Resolved an issue where `block scoped` would not take advantage of the - new scoping rules. In some more exotic cases a variable overriden in a - local scope would not make it into a block. -- Change the code generation of the `with` statement to be in line with the - new scoping rules. This resolves some unlikely bugs in edge cases. This - also introduces a new internal `With` node that can be used by extensions. + +Released 2017-01-08 + +- Restored the use of blocks in macros to the extend that was possible + before. On Python 3 it would render a generator repr instead of the + block contents. :issue:`645` +- Set a consistent behavior for assigning of variables in inner scopes + when the variable is also read from an outer scope. This now sets + the intended behavior in all situations however it does not restore + the old behavior where limited assignments to outer scopes was + possible. For more information and a discussion see :issue:`641` +- Resolved an issue where ``block scoped`` would not take advantage of + the new scoping rules. In some more exotic cases a variable + overriden in a local scope would not make it into a block. +- Change the code generation of the ``with`` statement to be in line + with the new scoping rules. This resolves some unlikely bugs in edge + cases. This also introduces a new internal ``With`` node that can be + used by extensions. + Version 2.9.2 ------------- -(bugfix release, released on January 8th 2017) - -- Fixed a regression that caused for loops to not be able to use the same - variable for the target as well as source iterator. (#640) -- Add support for a previously unknown behavior of macros. It used to be - possible in some circumstances to explicitly provide a caller argument - to macros. While badly buggy and unintended it turns out that this is a - common case that gets copy pasted around. To not completely break backwards - compatibility with the most common cases it's now possible to provide an - explicit keyword argument for caller if it's given an explicit default. - (#642) + +Released 2017-01-08 + +- Fixed a regression that caused for loops to not be able to use the + same variable for the target as well as source iterator. + :issue:`640` +- Add support for a previously unknown behavior of macros. It used to + be possible in some circumstances to explicitly provide a caller + argument to macros. While badly buggy and unintended it turns out + that this is a common case that gets copy pasted around. To not + completely break backwards compatibility with the most common cases + it's now possible to provide an explicit keyword argument for caller + if it's given an explicit default. :issue:`642` + Version 2.9.1 ------------- -(bugfix release, released on January 7th 2017) -- Resolved a regression with call block scoping for macros. Nested caller - blocks that used the same identifiers as outer macros could refer to the - wrong variable incorrectly. +Released 2017-01-07 + +- Resolved a regression with call block scoping for macros. Nested + caller blocks that used the same identifiers as outer macros could + refer to the wrong variable incorrectly. + Version 2.9 ----------- -(codename Derivation, released on January 7th 2017) - -- Change cache key definition in environment. This fixes a performance - regression introduced in 2.8. -- Added support for `generator_stop` on supported Python versions - (Python 3.5 and later) -- Corrected a long standing issue with operator precedence of math operations - not being what was expected. -- Added support for Python 3.6 async iterators through a new async mode. -- Added policies for filter defaults and similar things. -- urlize now sets "rel noopener" by default. -- Support attribute fallback for old-style classes in 2.x. -- Support toplevel set statements in extend situations. -- Restored behavior of Cycler for Python 3 users. -- Subtraction now follows the same behavior as other operators on undefined - values. -- `map` and friends will now give better error messages if you forgot to - quote the parameter. -- Depend on MarkupSafe 0.23 or higher. -- Improved the `truncate` filter to support better truncation in case - the string is barely truncated at all. -- Change the logic for macro autoescaping to be based on the runtime - autoescaping information at call time instead of macro define time. -- Ported a modified version of the `tojson` filter from Flask to Jinja2 - and hooked it up with the new policy framework. -- Block sets are now marked `safe` by default. -- On Python 2 the asciification of ASCII strings can now be disabled with - the `compiler.ascii_str` policy. -- Tests now no longer accept an arbitrary expression as first argument but - a restricted one. This means that you can now properly use multiple - tests in one expression without extra parentheses. In particular you can - now write ``foo is divisibleby 2 or foo is divisibleby 3`` - as you would expect. -- Greatly changed the scoping system to be more consistent with what template - designers and developers expect. There is now no more magic difference - between the different include and import constructs. Context is now always - propagated the same way. The only remaining differences is the defaults - for `with context` and `without context`. -- The `with` and `autoescape` tags are now built-in. -- Added the new `select_autoescape` function which helps configuring better - autoescaping easier. - -Version 2.8.2 -------------- -(bugfix release, unreleased) +Released 2017-01-07, codename Derivation + +- Change cache key definition in environment. This fixes a performance + regression introduced in 2.8. +- Added support for ``generator_stop`` on supported Python versions + (Python 3.5 and later) +- Corrected a long standing issue with operator precedence of math + operations not being what was expected. +- Added support for Python 3.6 async iterators through a new async + mode. +- Added policies for filter defaults and similar things. +- Urlize now sets "rel noopener" by default. +- Support attribute fallback for old-style classes in 2.x. +- Support toplevel set statements in extend situations. +- Restored behavior of Cycler for Python 3 users. +- Subtraction now follows the same behavior as other operators on + undefined values. +- ``map`` and friends will now give better error messages if you + forgot to quote the parameter. +- Depend on MarkupSafe 0.23 or higher. +- Improved the ``truncate`` filter to support better truncation in + case the string is barely truncated at all. +- Change the logic for macro autoescaping to be based on the runtime + autoescaping information at call time instead of macro define time. +- Ported a modified version of the ``tojson`` filter from Flask to + Jinja2 and hooked it up with the new policy framework. +- Block sets are now marked ``safe`` by default. +- On Python 2 the asciification of ASCII strings can now be disabled + with the ``compiler.ascii_str`` policy. +- Tests now no longer accept an arbitrary expression as first argument + but a restricted one. This means that you can now properly use + multiple tests in one expression without extra parentheses. In + particular you can now write ``foo is divisibleby 2 or foo is + divisibleby 3`` as you would expect. +- Greatly changed the scoping system to be more consistent with what + template designers and developers expect. There is now no more magic + difference between the different include and import constructs. + Context is now always propagated the same way. The only remaining + differences is the defaults for ``with context`` and ``without + context``. +- The ``with`` and ``autoescape`` tags are now built-in. +- Added the new ``select_autoescape`` function which helps configuring + better autoescaping easier. +- Fixed a runtime error in the sandbox when attributes of async + generators were accessed. -- Fixed a runtime error in the sandbox when attributes of async generators - were accessed. Version 2.8.1 ------------- -(bugfix release, released on December 29th 2016) +Released 2016-12-29 + +- Fixed the ``for_qs`` flag for ``urlencode``. +- Fixed regression when applying ``int`` to non-string values. +- SECURITY: if the sandbox mode is used format expressions are now + sandboxed with the same rules as in Jinja. This solves various + information leakage problems that can occur with format strings. -- Fixed the `for_qs` flag for `urlencode`. -- Fixed regression when applying `int` to non-string values. -- SECURITY: if the sandbox mode is used format expressions are now sandboxed - with the same rules as in Jinja. This solves various information leakage - problems that can occur with format strings. Version 2.8 ----------- -(codename Replacement, released on July 26th 2015) - -- Added `target` parameter to urlize function. -- Added support for `followsymlinks` to the file system loader. -- The truncate filter now counts the length. -- Added equalto filter that helps with select filters. -- Changed cache keys to use absolute file names if available - instead of load names. -- Fixed loop length calculation for some iterators. -- Changed how Jinja2 enforces strings to be native strings in - Python 2 to work when people break their default encoding. -- Added :func:`make_logging_undefined` which returns an undefined - object that logs failures into a logger. -- If unmarshalling of cached data fails the template will be - reloaded now. -- Implemented a block ``set`` tag. -- Default cache size was increased to 400 from a low 50. -- Fixed ``is number`` test to accept long integers in all Python versions. -- Changed ``is number`` to accept Decimal as a number. -- Added a check for default arguments followed by non-default arguments. This - change makes ``{% macro m(x, y=1, z) %}...{% endmacro %}`` a syntax error. The - previous behavior for this code was broken anyway (resulting in the default - value being applied to `y`). -- Add ability to use custom subclasses of ``jinja2.compiler.CodeGenerator`` and - ``jinja2.runtime.Context`` by adding two new attributes to the environment - (`code_generator_class` and `context_class`) (pull request ``#404``). -- added support for context/environment/evalctx decorator functions on - the finalize callback of the environment. -- escape query strings for urlencode properly. Previously slashes were not - escaped in that place. -- Add 'base' parameter to 'int' filter. + +Released 2015-07-26, codename Replacement + +- Added ``target`` parameter to urlize function. +- Added support for ``followsymlinks`` to the file system loader. +- The truncate filter now counts the length. +- Added equalto filter that helps with select filters. +- Changed cache keys to use absolute file names if available instead + of load names. +- Fixed loop length calculation for some iterators. +- Changed how Jinja2 enforces strings to be native strings in Python 2 + to work when people break their default encoding. +- Added :func:`make_logging_undefined` which returns an undefined + object that logs failures into a logger. +- If unmarshalling of cached data fails the template will be reloaded + now. +- Implemented a block ``set`` tag. +- Default cache size was increased to 400 from a low 50. +- Fixed ``is number`` test to accept long integers in all Python + versions. +- Changed ``is number`` to accept Decimal as a number. +- Added a check for default arguments followed by non-default + arguments. This change makes ``{% macro m(x, y=1, z) %}`` a syntax + error. The previous behavior for this code was broken anyway + (resulting in the default value being applied to ``y``). +- Add ability to use custom subclasses of + ``jinja2.compiler.CodeGenerator`` and ``jinja2.runtime.Context`` by + adding two new attributes to the environment + (``code_generator_class`` and ``context_class``) (pull request + ``:issue:`404```). +- Added support for context/environment/evalctx decorator functions on + the finalize callback of the environment. +- Escape query strings for urlencode properly. Previously slashes were + not escaped in that place. +- Add 'base' parameter to 'int' filter. + Version 2.7.3 ------------- -(bugfix release, released on June 6th 2014) -- Security issue: Corrected the security fix for the cache folder. This - fix was provided by RedHat. +Released 2014-06-06 + +- Security issue: Corrected the security fix for the cache folder. + This fix was provided by RedHat. + Version 2.7.2 ------------- -(bugfix release, released on January 10th 2014) -- Prefix loader was not forwarding the locals properly to - inner loaders. This is now fixed. -- Security issue: Changed the default folder for the filesystem cache to be - user specific and read and write protected on UNIX systems. See - `Debian bug 734747`_ for more information. +Released 2014-01-10 + +- Prefix loader was not forwarding the locals properly to inner + loaders. This is now fixed. +- Security issue: Changed the default folder for the filesystem cache + to be user specific and read and write protected on UNIX systems. + See `Debian bug 734747`_ for more information. .. _Debian bug 734747: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=734747 + Version 2.7.1 ------------- -(bugfix release, released on August 7th 2013) - -- Fixed a bug with ``call_filter`` not working properly on environment - and context filters. -- Fixed lack of Python 3 support for bytecode caches. -- Reverted support for defining blocks in included templates as this - broke existing templates for users. -- Fixed some warnings with hashing of undefineds and nodes if Python - is run with warnings for Python 3. -- Added support for properly hashing undefined objects. -- Fixed a bug with the title filter not working on already uppercase - strings. + +Released 2013-08-07 + +- Fixed a bug with ``call_filter`` not working properly on environment + and context filters. +- Fixed lack of Python 3 support for bytecode caches. +- Reverted support for defining blocks in included templates as this + broke existing templates for users. +- Fixed some warnings with hashing of undefineds and nodes if Python + is run with warnings for Python 3. +- Added support for properly hashing undefined objects. +- Fixed a bug with the title filter not working on already uppercase + strings. + Version 2.7 ----------- -(codename Translation, released on May 20th 2013) - -- Choice and prefix loaders now dispatch source and template lookup - separately in order to work in combination with module loaders as - advertised. -- Fixed filesizeformat. -- Added a non-silent option for babel extraction. -- Added `urlencode` filter that automatically quotes values for - URL safe usage with utf-8 as only supported encoding. If applications - want to change this encoding they can override the filter. -- Added `keep-trailing-newline` configuration to environments and - templates to optionally preserve the final trailing newline. -- Accessing `last` on the loop context no longer causes the iterator - to be consumed into a list. -- Python requirement changed: 2.6, 2.7 or >= 3.3 are required now, - supported by same source code, using the "six" compatibility library. -- Allow `contextfunction` and other decorators to be applied to `__call__`. -- Added support for changing from newline to different signs in the `wordwrap` - filter. -- Added support for ignoring memcache errors silently. -- Added support for keeping the trailing newline in templates. -- Added finer grained support for stripping whitespace on the left side - of blocks. -- Added `map`, `select`, `reject`, `selectattr` and `rejectattr` - filters. -- Added support for `loop.depth` to figure out how deep inside a recursive - loop the code is. -- Disabled py_compile for pypy and python 3. + +Released 2013-05-20, codename Translation + +- Choice and prefix loaders now dispatch source and template lookup + separately in order to work in combination with module loaders as + advertised. +- Fixed filesizeformat. +- Added a non-silent option for babel extraction. +- Added ``urlencode`` filter that automatically quotes values for URL + safe usage with utf-8 as only supported encoding. If applications + want to change this encoding they can override the filter. +- Added ``keep-trailing-newline`` configuration to environments and + templates to optionally preserve the final trailing newline. +- Accessing ``last`` on the loop context no longer causes the iterator + to be consumed into a list. +- Python requirement changed: 2.6, 2.7 or >= 3.3 are required now, + supported by same source code, using the "six" compatibility + library. +- Allow ``contextfunction`` and other decorators to be applied to + ``__call__``. +- Added support for changing from newline to different signs in the + ``wordwrap`` filter. +- Added support for ignoring memcache errors silently. +- Added support for keeping the trailing newline in templates. +- Added finer grained support for stripping whitespace on the left + side of blocks. +- Added ``map``, ``select``, ``reject``, ``selectattr`` and + ``rejectattr`` filters. +- Added support for ``loop.depth`` to figure out how deep inside a + recursive loop the code is. +- Disabled py_compile for pypy and python 3. + Version 2.6 ----------- -(codename Convolution, released on July 24th 2011) - -- internal attributes now raise an internal attribute error now instead - of returning an undefined. This fixes problems when passing undefined - objects to Python semantics expecting APIs. -- traceback support now works properly for PyPy. (Tested with 1.4) -- implemented operator intercepting for sandboxed environments. This - allows application developers to disable builtin operators for better - security. (For instance limit the mathematical operators to actual - integers instead of longs) -- groupby filter now supports dotted notation for grouping by attributes - of attributes. -- scoped blocks now properly treat toplevel assignments and imports. - Previously an import suddenly "disappeared" in a scoped block. -- automatically detect newer Python interpreter versions before loading code - from bytecode caches to prevent segfaults on invalid opcodes. The segfault - in earlier Jinja2 versions here was not a Jinja2 bug but a limitation in - the underlying Python interpreter. If you notice Jinja2 segfaulting in - earlier versions after an upgrade of the Python interpreter you don't have - to upgrade, it's enough to flush the bytecode cache. This just no longer - makes this necessary, Jinja2 will automatically detect these cases now. -- the sum filter can now sum up values by attribute. This is a backwards - incompatible change. The argument to the filter previously was the - optional starting index which defaults to zero. This now became the - second argument to the function because it's rarely used. -- like sum, sort now also makes it possible to order items by attribute. -- like sum and sort, join now also is able to join attributes of objects - as string. -- the internal eval context now has a reference to the environment. -- added a mapping test to see if an object is a dict or an object with - a similar interface. + +Released 2011-07-24, codename Convolution + +- Internal attributes now raise an internal attribute error now + instead of returning an undefined. This fixes problems when passing + undefined objects to Python semantics expecting APIs. +- Traceback support now works properly for PyPy. (Tested with 1.4) +- Implemented operator intercepting for sandboxed environments. This + allows application developers to disable builtin operators for + better security. (For instance limit the mathematical operators to + actual integers instead of longs) +- Groupby filter now supports dotted notation for grouping by + attributes of attributes. +- Scoped blocks now properly treat toplevel assignments and imports. + Previously an import suddenly "disappeared" in a scoped block. +- Automatically detect newer Python interpreter versions before + loading code from bytecode caches to prevent segfaults on invalid + opcodes. The segfault in earlier Jinja2 versions here was not a + Jinja2 bug but a limitation in the underlying Python interpreter. If + you notice Jinja2 segfaulting in earlier versions after an upgrade + of the Python interpreter you don't have to upgrade, it's enough to + flush the bytecode cache. This just no longer makes this necessary, + Jinja2 will automatically detect these cases now. +- The sum filter can now sum up values by attribute. This is a + backwards incompatible change. The argument to the filter previously + was the optional starting index which defaults to zero. This now + became the second argument to the function because it's rarely used. +- Like sum, sort now also makes it possible to order items by + attribute. +- Like sum and sort, join now also is able to join attributes of + objects as string. +- The internal eval context now has a reference to the environment. +- Added a mapping test to see if an object is a dict or an object with + a similar interface. + Version 2.5.5 ------------- -(re-release of 2.5.4 with built documentation removed for filesize. - Released on October 18th 2010) -- built documentation is no longer part of release. +Released 2010-10-18 + +- Built documentation is no longer part of release. + Version 2.5.4 ------------- -(bugfix release, released on October 17th 2010) -- Fixed extensions not loading properly with overlays. -- Work around a bug in cpython for the debugger that causes segfaults - on 64bit big-endian architectures. +Released 2010-10-17 + +- Fixed extensions not loading properly with overlays. +- Work around a bug in cpython for the debugger that causes segfaults + on 64bit big-endian architectures. + Version 2.5.3 ------------- -(bugfix release, released on October 17th 2010) -- fixed an operator precedence error introduced in 2.5.2. Statements - like "-foo.bar" had their implicit parentheses applied around the - first part of the expression ("(-foo).bar") instead of the more - correct "-(foo.bar)". +Released 2010-10-17 + +- Fixed an operator precedence error introduced in 2.5.2. Statements + like "-foo.bar" had their implicit parentheses applied around the + first part of the expression ("(-foo).bar") instead of the more + correct "-(foo.bar)". + Version 2.5.2 ------------- -(bugfix release, released on August 18th 2010) -- improved setup.py script to better work with assumptions people - might still have from it (``--with-speedups``). -- fixed a packaging error that excluded the new debug support. +Released 2010-08-18 + +- Improved setup.py script to better work with assumptions people + might still have from it (``--with-speedups``). +- Fixed a packaging error that excluded the new debug support. + Version 2.5.1 ------------- -(bugfix release, released on August 17th 2010) - -- StopIteration exceptions raised by functions called from templates - are now intercepted and converted to undefineds. This solves a - lot of debugging grief. (StopIteration is used internally to - abort template execution) -- improved performance of macro calls slightly. -- babel extraction can now properly extract newstyle gettext calls. -- using the variable `num` in newstyle gettext for something else - than the pluralize count will no longer raise a :exc:`KeyError`. -- removed builtin markup class and switched to markupsafe. For backwards - compatibility the pure Python implementation still exists but is - pulled from markupsafe by the Jinja2 developers. The debug support - went into a separate feature called "debugsupport" and is disabled - by default because it is only relevant for Python 2.4 -- fixed an issue with unary operators having the wrong precedence. + +Released 2010-08-17 + +- StopIteration exceptions raised by functions called from templates + are now intercepted and converted to undefineds. This solves a lot + of debugging grief. (StopIteration is used internally to abort + template execution) +- Improved performance of macro calls slightly. +- Babel extraction can now properly extract newstyle gettext calls. +- Using the variable ``num`` in newstyle gettext for something else + than the pluralize count will no longer raise a :exc:`KeyError`. +- Removed builtin markup class and switched to markupsafe. For + backwards compatibility the pure Python implementation still exists + but is pulled from markupsafe by the Jinja2 developers. The debug + support went into a separate feature called "debugsupport" and is + disabled by default because it is only relevant for Python 2.4 +- Fixed an issue with unary operators having the wrong precedence. + Version 2.5 ----------- -(codename Incoherence, released on May 29th 2010) -- improved the sort filter (should have worked like this for a - long time) by adding support for case insensitive searches. -- fixed a bug for getattribute constant folding. -- support for newstyle gettext translations which result in a - nicer in-template user interface and more consistent - catalogs. (:ref:`newstyle-gettext`) -- it's now possible to register extensions after an environment - was created. +Released 2010-05-29, codename Incoherence + +- Improved the sort filter (should have worked like this for a long + time) by adding support for case insensitive searches. +- Fixed a bug for getattribute constant folding. +- Support for newstyle gettext translations which result in a nicer + in-template user interface and more consistent catalogs. + (:ref:`newstyle-gettext`) +- It's now possible to register extensions after an environment was + created. + Version 2.4.1 ------------- -(bugfix release, released on April 20th 2010) -- fixed an error reporting bug for undefineds. +Released 2010-04-20 + +- Fixed an error reporting bug for undefined. + Version 2.4 ----------- -(codename Correlation, released on April 13th 2010) - -- the environment template loading functions now transparently - pass through a template object if it was passed to it. This - makes it possible to import or extend from a template object - that was passed to the template. -- added a :class:`ModuleLoader` that can load templates from - precompiled sources. The environment now features a method - to compile the templates from a configured loader into a zip - file or folder. -- the _speedups C extension now supports Python 3. -- added support for autoescaping toggling sections and support - for evaluation contexts (:ref:`eval-context`). -- extensions have a priority now. -Version 2.3.1 -------------- -(bugfix release, released on February 19th 2010) +Released 2010-04-13, codename Correlation -- fixed an error reporting bug on all python versions -- fixed an error reporting bug on Python 2.4 +- The environment template loading functions now transparently pass + through a template object if it was passed to it. This makes it + possible to import or extend from a template object that was passed + to the template. +- Added a :class:`ModuleLoader` that can load templates from + precompiled sources. The environment now features a method to + compile the templates from a configured loader into a zip file or + folder. +- The _speedups C extension now supports Python 3. +- Added support for autoescaping toggling sections and support for + evaluation contexts (:ref:`eval-context`). +- Extensions have a priority now. -Version 2.3 ------------ -(3000 Pythons, released on February 10th 2010) - -- fixes issue with code generator that causes unbound variables - to be generated if set was used in if-blocks and other small - identifier problems. -- include tags are now able to select between multiple templates - and take the first that exists, if a list of templates is - given. -- fixed a problem with having call blocks in outer scopes that - have an argument that is also used as local variable in an - inner frame (#360). -- greatly improved error message reporting (#339) -- implicit tuple expressions can no longer be totally empty. - This change makes ``{% if %}...{% endif %}`` a syntax error - now. (#364) -- added support for translator comments if extracted via babel. -- added with-statement extension. -- experimental Python 3 support. -Version 2.2.1 +Version 2.3.1 ------------- -(bugfix release, released on September 14th 2009) -- fixes some smaller problems for Jinja2 on Jython. +Released 2010-02-19 -Version 2.2 ------------ -(codename Kong, released on September 13th 2009) - -- Include statements can now be marked with ``ignore missing`` to skip - non existing templates. -- Priority of `not` raised. It's now possible to write `not foo in bar` - as an alias to `foo not in bar` like in python. Previously the grammar - required parentheses (`not (foo in bar)`) which was odd. -- Fixed a bug that caused syntax errors when defining macros or using the - `{% call %}` tag inside loops. -- Fixed a bug in the parser that made ``{{ foo[1, 2] }}`` impossible. -- Made it possible to refer to names from outer scopes in included templates - that were unused in the callers frame (#327) -- Fixed a bug that caused internal errors if names where used as iteration - variable and regular variable *after* the loop if that variable was unused - *before* the loop. (#331) -- Added support for optional `scoped` modifier to blocks. -- Added support for line-comments. -- Added the `meta` module. -- Renamed (undocumented) attribute "overlay" to "overlayed" on the - environment because it was clashing with a method of the same name. -- speedup extension is now disabled by default. - -Version 2.1.1 -------------- -(Bugfix release) +- Fixed an error reporting bug on all python versions +- Fixed an error reporting bug on Python 2.4 -- Fixed a translation error caused by looping over empty recursive loops. -Version 2.1 +Version 2.3 ----------- -(codename Yasuzō, released on November 23rd 2008) - -- fixed a bug with nested loops and the special loop variable. Before the - change an inner loop overwrote the loop variable from the outer one after - iteration. -- fixed a bug with the i18n extension that caused the explicit pluralization - block to look up the wrong variable. +Released 2010-02-10, codename 3000 Pythons -- fixed a limitation in the lexer that made ``{{ foo.0.0 }}`` impossible. +- Fixes issue with code generator that causes unbound variables to be + generated if set was used in if-blocks and other small identifier + problems. +- Include tags are now able to select between multiple templates and + take the first that exists, if a list of templates is given. +- Fixed a problem with having call blocks in outer scopes that have an + argument that is also used as local variable in an inner frame + :issue:`360`. +- Greatly improved error message reporting :pr:`339` +- Implicit tuple expressions can no longer be totally empty. This + change makes ``{% if %}`` a syntax error now. :issue:`364` +- Added support for translator comments if extracted via babel. +- Added with-statement extension. +- Experimental Python 3 support. -- index based subscribing of variables with a constant value returns an - undefined object now instead of raising an index error. This was a bug - caused by eager optimizing. -- the i18n extension looks up `foo.ugettext` now followed by `foo.gettext` - if an translations object is installed. This makes dealing with custom - translations classes easier. +Version 2.2.1 +------------- -- fixed a confusing behavior with conditional extending. loops were partially - executed under some conditions even though they were not part of a visible - area. +Released 2009-09-14 -- added `sort` filter that works like `dictsort` but for arbitrary sequences. +- Fixes some smaller problems for Jinja2 on Jython. -- fixed a bug with empty statements in macros. -- implemented a bytecode cache system. (:ref:`bytecode-cache`) +Version 2.2 +----------- -- the template context is now weakref-able +Released 2009-09-13, codename Kong + +- Include statements can now be marked with ``ignore missing`` to skip + non existing templates. +- Priority of ``not`` raised. It's now possible to write ``not foo in + bar`` as an alias to ``foo not in bar`` like in python. Previously + the grammar required parentheses (``not (foo in bar)``) which was + odd. +- Fixed a bug that caused syntax errors when defining macros or using + the ``{% call %}`` tag inside loops. +- Fixed a bug in the parser that made ``{{ foo[1, 2] }}`` impossible. +- Made it possible to refer to names from outer scopes in included + templates that were unused in the callers frame :issue:`327` +- Fixed a bug that caused internal errors if names where used as + iteration variable and regular variable *after* the loop if that + variable was unused *before* the loop. :pr:`331` +- Added support for optional ``scoped`` modifier to blocks. +- Added support for line-comments. +- Added the ``meta`` module. +- Renamed (undocumented) attribute "overlay" to "overlayed" on the + environment because it was clashing with a method of the same name. +- Speedup extension is now disabled by default. -- inclusions and imports "with context" forward all variables now, not only - the initial context. -- added a cycle helper called `cycler`. +Version 2.1.1 +------------- -- added a joining helper called `joiner`. +Released 2008-12-25 -- added a `compile_expression` method to the environment that allows compiling - of Jinja expressions into callable Python objects. +- Fixed a translation error caused by looping over empty recursive + loops. -- fixed an escaping bug in urlize -Version 2.0 +Version 2.1 ----------- -(codename jinjavitus, released on July 17th 2008) - -- the subscribing of objects (looking up attributes and items) changed from - slightly. It's now possible to give attributes or items a higher priority - by either using dot-notation lookup or the bracket syntax. This also - changed the AST slightly. `Subscript` is gone and was replaced with - :class:`~jinja2.nodes.Getitem` and :class:`~jinja2.nodes.Getattr`. - - For more information see :ref:`the implementation details `. - -- added support for preprocessing and token stream filtering for extensions. - This would allow extensions to allow simplified gettext calls in template - data and something similar. -- added :meth:`jinja2.environment.TemplateStream.dump`. +Released 2008-11-23, codename Yasuzō + +- Fixed a bug with nested loops and the special loop variable. Before + the change an inner loop overwrote the loop variable from the outer + one after iteration. +- Fixed a bug with the i18n extension that caused the explicit + pluralization block to look up the wrong variable. +- Fixed a limitation in the lexer that made ``{{ foo.0.0 }}`` + impossible. +- Index based subscribing of variables with a constant value returns + an undefined object now instead of raising an index error. This was + a bug caused by eager optimizing. +- The i18n extension looks up ``foo.ugettext`` now followed by + ``foo.gettext`` if an translations object is installed. This makes + dealing with custom translations classes easier. +- Fixed a confusing behavior with conditional extending. loops were + partially executed under some conditions even though they were not + part of a visible area. +- Added ``sort`` filter that works like ``dictsort`` but for arbitrary + sequences. +- Fixed a bug with empty statements in macros. +- Implemented a bytecode cache system. (:ref:`bytecode-cache`) +- The template context is now weakref-able +- Inclusions and imports "with context" forward all variables now, not + only the initial context. +- Added a cycle helper called ``cycler``. +- Added a joining helper called ``joiner``. +- Added a ``compile_expression`` method to the environment that allows + compiling of Jinja expressions into callable Python objects. +- Fixed an escaping bug in urlize -- added missing support for implicit string literal concatenation. - ``{{ "foo" "bar" }}`` is equivalent to ``{{ "foobar" }}`` -- `else` is optional for conditional expressions. If not given it evaluates - to `false`. - -- improved error reporting for undefined values by providing a position. +Version 2.0 +----------- -- `filesizeformat` filter uses decimal prefixes now per default and can be - set to binary mode with the second parameter. +Released 2008-07-17, codename Jinjavitus + +- The subscribing of objects (looking up attributes and items) changed + from slightly. It's now possible to give attributes or items a + higher priority by either using dot-notation lookup or the bracket + syntax. This also changed the AST slightly. ``Subscript`` is gone + and was replaced with :class:`~jinja2.nodes.Getitem` and + :class:`~jinja2.nodes.Getattr`. For more information see :ref:`the + implementation details `. +- Added support for preprocessing and token stream filtering for + extensions. This would allow extensions to allow simplified gettext + calls in template data and something similar. +- Added :meth:`jinja2.environment.TemplateStream.dump`. +- Added missing support for implicit string literal concatenation. + ``{{ "foo" "bar" }}`` is equivalent to ``{{ "foobar" }}`` +- ``else`` is optional for conditional expressions. If not given it + evaluates to ``false``. +- Improved error reporting for undefined values by providing a + position. +- ``filesizeformat`` filter uses decimal prefixes now per default and + can be set to binary mode with the second parameter. +- Fixed bug in finalizer -- fixed bug in finalizer Version 2.0rc1 -------------- -(no codename, released on June 9th 2008) -- first release of Jinja2 +Released 2008-06-09 + +- First release of Jinja2