Hello community,

here is the log from the commit of package python-Chameleon for 
openSUSE:Factory checked in at 2015-02-06 22:38:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Chameleon (Old)
 and      /work/SRC/openSUSE:Factory/.python-Chameleon.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-Chameleon"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Chameleon/python-Chameleon.changes        
2014-01-01 20:42:40.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-Chameleon.new/python-Chameleon.changes   
2015-02-06 22:38:31.000000000 +0100
@@ -1,0 +2,33 @@
+Fri Feb  6 17:07:27 UTC 2015 - h...@urpla.net
+
+- Update to version 2.22
+  + Changes from 2.22 (2015-02-06)
+    Fix brown bag release.
+  + Changes from 2.21 (2015-02-06)
+    Added RenderError exception which indicates that an error occurred during
+    the evaluation of an expression.  Clean up TemplateError exception
+    implementation.
+  + Changes from 2.20 (2015-01-12)
+    Pass search_path to template class when loaded using TemplateLoader (or one
+    of the derived classes). [faassen]
+  + Changes from 2.19 (2015-01-06)
+    Fix logging deprecation.  Fix environment-based configuration logging
+    error.
+  + Changes from 2.18 (2014-11-03)
+    Fix minor compilation error.
+  + Changes from 2.17 (2014-11-03)
+    Add support for i18n:context. [wiggy] Add missing ‘parity’ repeat property.
+    [voxspox] Don’t modify environment when getting variables from it. 
[fschulze]
+  + Changes from 2.16 (2014-05-06)
+    If a repeat expression evaluates to None then it is now equivalent to an
+    empty set.
+    This changes a behavior introduced in 2.14.
+    This fixes issue #172.
+    Remove fossil test dependency on deprecated distribute.
+    Add explicit support / testing for Python 3.3 / 3.4.
+    Drop explicit support for Python 2.5 (out of maintenance, and no longer
+    supported by tox or Travis-CI).
+  + Changes from 2.15 (2014-03-11)
+    Add Support for Python 3.4’s NameConstant. [brakhane]
+
+-------------------------------------------------------------------

Old:
----
  Chameleon-2.14.tar.gz

New:
----
  Chameleon-2.22.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-Chameleon.spec ++++++
--- /var/tmp/diff_new_pack.WxS9wF/_old  2015-02-06 22:38:32.000000000 +0100
+++ /var/tmp/diff_new_pack.WxS9wF/_new  2015-02-06 22:38:32.000000000 +0100
@@ -1,8 +1,7 @@
 #
 # spec file for package python-Chameleon
 #
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
-# Copyright (c) 2012 
SUhttps://build.opensuse.org/package/show?package=python3-Chameleon&project=home%3ATheBlackCat%3Abranches%3Adevel%3Alanguages%3Apython3SE
 LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +17,7 @@
 
 
 Name:           python-Chameleon
-Version:        2.14
+Version:        2.22
 Release:        0
 Url:            http://www.pagetemplates.org/
 Summary:        Fast HTML/XML Template Compiler

++++++ Chameleon-2.14.tar.gz -> Chameleon-2.22.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/.travis.yml 
new/Chameleon-2.22/.travis.yml
--- old/Chameleon-2.14/.travis.yml      2012-06-19 23:47:34.000000000 +0200
+++ new/Chameleon-2.22/.travis.yml      2014-04-30 10:33:30.000000000 +0200
@@ -1,12 +1,12 @@
 language: python
 
 python:
-  - 2.5
   - 2.6
   - 2.7
   - pypy
   - 3.1
   - 3.2
+  - 3.3
 
 install:
   - python setup.py install
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/CHANGES.rst 
new/Chameleon-2.22/CHANGES.rst
--- old/Chameleon-2.14/CHANGES.rst      2013-11-28 09:21:57.000000000 +0100
+++ new/Chameleon-2.22/CHANGES.rst      2015-02-06 09:50:44.000000000 +0100
@@ -1,6 +1,81 @@
 Changes
 =======
 
+2.22 (2015-02-06)
+-----------------
+
+- Fix brown bag release.
+
+
+2.21 (2015-02-06)
+-----------------
+
+- Added ``RenderError`` exception which indicates that an error
+  occurred during the evaluation of an expression.
+
+- Clean up ``TemplateError`` exception implementation.
+
+
+2.20 (2015-01-12)
+-----------------
+
+- Pass ``search_path`` to template class when loaded using
+  ``TemplateLoader`` (or one of the derived classes).
+  [faassen]
+
+
+2.19 (2015-01-06)
+-----------------
+
+- Fix logging deprecation.
+
+- Fix environment-based configuration logging error.
+
+
+2.18 (2014-11-03)
+-----------------
+
+- Fix minor compilation error.
+
+
+2.17 (2014-11-03)
+-----------------
+
+- Add support for ``i18n:context``.
+  [wiggy]
+
+- Add missing 'parity' repeat property.
+  [voxspox]
+
+- Don't modify environment when getting variables from it.
+  [fschulze]
+
+
+2.16 (2014-05-06)
+-----------------
+
+- If a repeat expression evaluates to ``None`` then it is now
+  equivalent to an empty set.
+
+  This changes a behavior introduced in 2.14.
+
+  This fixes issue #172.
+
+- Remove fossil test dependency on deprecated ``distribute``.
+
+- Add explicit support / testing for Python 3.3 / 3.4.
+
+- Drop explicit support for Python 2.5 (out of maintenance, and no longer
+  supported by ``tox`` or ``Travis-CI``).
+
+
+2.15 (2014-03-11)
+-----------------
+
+- Add Support for Python 3.4's ``NameConstant``.
+  [brakhane]
+
+
 2.14 (2013-11-28)
 -----------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/PKG-INFO new/Chameleon-2.22/PKG-INFO
--- old/Chameleon-2.14/PKG-INFO 2013-11-28 09:22:41.000000000 +0100
+++ new/Chameleon-2.22/PKG-INFO 2015-02-06 09:50:59.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: Chameleon
-Version: 2.14
+Version: 2.22
 Summary: Fast HTML/XML Template Compiler.
 Home-page: http://www.pagetemplates.org/
 Author: Malthe Borch
@@ -16,8 +16,8 @@
         version of Python (2.5 and up, including 3.x and `pypy
         <http://pypy.org>`_).
         
-        Visit the `website <http://pagetemplates.org>`_ for more information
-        or the `documentation <http://pagetemplates.org/docs/latest/>`_.
+        Visit the `website <http://pagetemplates.org/>`_ for more information
+        or the `documentation <http://chameleon.readthedocs.org/en/latest/>`_.
         
         License and Copyright
         ---------------------
@@ -36,6 +36,81 @@
         Changes
         =======
         
+        2.22 (2015-02-06)
+        -----------------
+        
+        - Fix brown bag release.
+        
+        
+        2.21 (2015-02-06)
+        -----------------
+        
+        - Added ``RenderError`` exception which indicates that an error
+          occurred during the evaluation of an expression.
+        
+        - Clean up ``TemplateError`` exception implementation.
+        
+        
+        2.20 (2015-01-12)
+        -----------------
+        
+        - Pass ``search_path`` to template class when loaded using
+          ``TemplateLoader`` (or one of the derived classes).
+          [faassen]
+        
+        
+        2.19 (2015-01-06)
+        -----------------
+        
+        - Fix logging deprecation.
+        
+        - Fix environment-based configuration logging error.
+        
+        
+        2.18 (2014-11-03)
+        -----------------
+        
+        - Fix minor compilation error.
+        
+        
+        2.17 (2014-11-03)
+        -----------------
+        
+        - Add support for ``i18n:context``.
+          [wiggy]
+        
+        - Add missing 'parity' repeat property.
+          [voxspox]
+        
+        - Don't modify environment when getting variables from it.
+          [fschulze]
+        
+        
+        2.16 (2014-05-06)
+        -----------------
+        
+        - If a repeat expression evaluates to ``None`` then it is now
+          equivalent to an empty set.
+        
+          This changes a behavior introduced in 2.14.
+        
+          This fixes issue #172.
+        
+        - Remove fossil test dependency on deprecated ``distribute``.
+        
+        - Add explicit support / testing for Python 3.3 / 3.4.
+        
+        - Drop explicit support for Python 2.5 (out of maintenance, and no 
longer
+          supported by ``tox`` or ``Travis-CI``).
+        
+        
+        2.15 (2014-03-11)
+        -----------------
+        
+        - Add Support for Python 3.4's ``NameConstant``.
+          [brakhane]
+        
+        
         2.14 (2013-11-28)
         -----------------
         
@@ -1270,8 +1345,9 @@
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 2.5
 Classifier: Programming Language :: Python :: 2.6
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3.1
 Classifier: Programming Language :: Python :: 3.2
+Classifier: Programming Language :: Python :: 3.3
+Classifier: Programming Language :: Python :: 3.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/README.rst 
new/Chameleon-2.22/README.rst
--- old/Chameleon-2.14/README.rst       2013-02-08 09:03:27.000000000 +0100
+++ new/Chameleon-2.22/README.rst       2013-11-28 09:40:30.000000000 +0100
@@ -8,8 +8,8 @@
 version of Python (2.5 and up, including 3.x and `pypy
 <http://pypy.org>`_).
 
-Visit the `website <http://pagetemplates.org>`_ for more information
-or the `documentation <http://pagetemplates.org/docs/latest/>`_.
+Visit the `website <http://pagetemplates.org/>`_ for more information
+or the `documentation <http://chameleon.readthedocs.org/en/latest/>`_.
 
 License and Copyright
 ---------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/docs/integration.rst 
new/Chameleon-2.22/docs/integration.rst
--- old/Chameleon-2.14/docs/integration.rst     2011-08-16 16:08:27.000000000 
+0200
+++ new/Chameleon-2.22/docs/integration.rst     2014-03-11 11:10:06.000000000 
+0100
@@ -39,3 +39,8 @@
 This package will setup Grok's policy for templating integration and
 associate the Chameleon template components for the ``.cpt`` template
 filename extension.
+
+Django
+------
+
+Install the `django-chameleon-templates 
<https://bitbucket.org/kveroneau/django-chameleon-templates>`_ app to enable 
Chameleon as a template engine.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/docs/library.rst 
new/Chameleon-2.22/docs/library.rst
--- old/Chameleon-2.14/docs/library.rst 2012-02-29 09:12:25.000000000 +0100
+++ new/Chameleon-2.22/docs/library.rst 2015-02-06 09:47:46.000000000 +0100
@@ -108,78 +108,14 @@
   <div tal:content="'hello, world'.upper()" />
 
 
-.. _whats-new:
-
-Changes between 1.x and 2.x
----------------------------
-
-This sections describes new features, improvements and changes from
-1.x to 2.x.
-
-New parser
-~~~~~~~~~~
-
-This series features a new, custom-built parser, implemented in pure
-Python. It parses both HTML and XML inputs (the previous parser relied
-on the expat system library and was more strict about its input).
-
-The main benefit of the new parser is that the compiler is now able to
-point to the source location of parse- and compilation errors much
-more accurately. This should be a great aid in debugging these errors.
-
-Compatible output
-~~~~~~~~~~~~~~~~~
-
-The 2.x engine matches the output of the reference implementation more
-closely (usually exactly). There are less differences altogether; for
-instance, the method of escaping TALES expression (usually a
-semicolon) has been changed to match that of the reference
-implementation.
-
-New language features
-~~~~~~~~~~~~~~~~~~~~~
-
-This series also introduces a number of new language features:
-
-1. Support for the ``tal:on-error`` from the reference specification
-   has been added.
-
-2. Two new attributes ``tal:switch`` and ``tal:case`` have been added
-   to make element conditions more flexible.
-
-
-Code improvements
-~~~~~~~~~~~~~~~~~
-
-The template classes have been refactored and simplified allowing
-better reuse of code and more intuitive APIs on the lower levels.
-
-Expression engine
-~~~~~~~~~~~~~~~~~
-
-The expression engine has been redesigned to make it easier to
-understand and extend. The new engine is based on the ``ast`` module
-(available since Python 2.6; backports included for Python 2.5). This
-means that expression compilers now need to return a valid list of AST
-statements that include an assignment to the target node.
-
-Compiler
-~~~~~~~~
-
-The new compiler has been optimized for complex templates. As a
-result, in the benchmark suite included with the package, this
-compiler scores about half of the 1.x series. For most real world
-applications, the engine should still perform as well as the 1.x
-series.
-
-
 API reference
 -------------
 
 This section describes the documented API of the library.
 
-Template classes
-~~~~~~~~~~~~~~~~
+
+Templates
+~~~~~~~~~
 
 Use the ``PageTemplate*`` template classes to define a template from a
 string or file input:
@@ -199,8 +135,8 @@
 
   .. autoclass:: chameleon.PageTextTemplateFile
 
-Template loader
-~~~~~~~~~~~~~~~
+Loader
+~~~~~~
 
 Some systems have framework support for loading templates from
 files. The following loader class is directly compatible with the
@@ -227,8 +163,39 @@
 
    .. automethod:: load
 
-Expression engine
-~~~~~~~~~~~~~~~~~
+
+Exceptions
+~~~~~~~~~~
+
+Chameleon may raise exceptions during both the cooking and the
+rendering phase, but those raised during the cooking phase (parse and
+compile) all inherit from a single base class:
+
+.. class:: chameleon.TemplateError(msg, token)
+
+   This exception is the base class of all exceptions raised by the
+   template engine in the case where a template has an error.
+
+   It may be raised during rendering since templates are processed
+   lazily (unless eager loading is enabled).
+
+
+An error that occurs during the rendering of a template is wrapped in
+an exception class to disambiguate the two cases:
+
+.. class:: chameleon.RenderError(*args)
+
+   Indicates an exception that resulted from the evaluation of an
+   expression in a template.
+
+   A complete traceback is attached to the exception beginning with
+   the expression that resulted in the error. The traceback includes
+   a string representation of the template variable scope for further
+   reference.
+
+
+Expressions
+~~~~~~~~~~~
 
 For advanced integration, the compiler module provides support for
 dynamic expression evaluation:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/docs/reference.rst 
new/Chameleon-2.22/docs/reference.rst
--- old/Chameleon-2.14/docs/reference.rst       2013-06-18 14:37:30.000000000 
+0200
+++ new/Chameleon-2.22/docs/reference.rst       2015-02-06 09:47:46.000000000 
+0100
@@ -185,7 +185,7 @@
 and the replacement expression is evaluated fresh for each repetition.
 
 .. note:: If you want to include a semicolon (";") in an expression, it
-          must be escaped by doubling it (";;") [1]_.
+          must be escaped by doubling it (";;").
 
 Examples
 ~~~~~~~~
@@ -359,7 +359,7 @@
 ``local``; thus, in practice, only the ``global`` keyword is used.
 
 .. note:: If you want to include a semicolon (";") in an expression, it
-          must be escaped by doubling it (";;") [1]_.
+          must be escaped by doubling it (";;").
 
 Examples
 ~~~~~~~~
@@ -523,6 +523,7 @@
 ``number``          Repetition number, starting from one.
 ``even``            True for even-indexed repetitions (0, 2, 4, ...).
 ``odd``             True for odd-indexed repetitions (1, 3, 5, ...).
+``parity``          For odd-indexed repetitions, this is 'odd', else 'even'.
 ``start``           True for the starting repetition (index 0).
 ``end``             True for the ending, or final, repetition.
 ``first``           True for the first item in a group - see note below
@@ -1191,11 +1192,13 @@
 
 - ``i18n:translate``
 - ``i18n:domain``
+- ``i18n:context``
 - ``i18n:source``
 - ``i18n:target``
 - ``i18n:name``
 - ``i18n:attributes``
 - ``i18n:data``
+- ``i18n:comment``
 
 ``i18n:translate``
 ^^^^^^^^^^^^^^^^^^
@@ -1213,6 +1216,18 @@
 will use a default domain.  The value of the attribute is used
 directly; it is not a TALES expression.
 
+
+``i18n:context``
+^^^^^^^^^^^^^^^
+
+The ``i18n:context`` attribute is used to specify the context to be
+used to get the translation.  If not specified, the translation
+services will use a default context.  The context is generally use to
+distinguish identical texts in different context (because in a
+translation this may not be the case.) The value of the attribute is
+used literally; it is not an expression.
+
+
 ``i18n:source``
 ^^^^^^^^^^^^^^^
 
@@ -1308,6 +1323,19 @@
 an explicit message ID, rather than relying on a message ID computed
 from the content.
 
+``i18n:comment``
+^^^^^^^^^^^^^^^^
+
+The ``i18n:comment`` attribute can be used to add extra comments for
+translators. It is not used by Chameleon for processing, but will be
+picked up by tools like `lingua <pypi.python.org/pypi/lingua>`_.
+
+An example:
+
+   <h3 i18n:comment="Header for the news section"
+       i18n:translate="">News</h3>
+
+
 Relation with TAL processing
 ----------------------------
 
@@ -1663,38 +1691,3 @@
 The `z3c.pt <http://pypi.python.org/pypi/z3c.pt>`_ package works as a
 compatibility layer. The template classes in this package provide a
 implementation which is fully compatible with ZPT.
-
-Notes
-#####
-
-.. [1] This has been changed in 2.x. Previously, it was up to the
-       expression engine to parse the expression values including any
-       semicolons and since for instance Python-expressions can never
-       end in a semicolon, it was possible to clearly distinguish
-       between the different uses of the symbol, e.g.
-
-       ::
-
-         tal:define="text 'Hello world; goodbye world'"
-
-       The semicolon appearing in the definition above is part of the
-       Python-expression simply because it makes the expression
-       valid. Meanwhile:
-
-       ::
-
-         tal:define="text1 'Hello world'; text2 'goodbye world'"
-
-       The semicolon here must denote a second variable definition
-       because there is no valid Python-expression that includes it.
-
-       While this behavior works well in practice, it is incompatible
-       with the reference specification, and also blurs the interface
-       between the compiler and the expression engine. In 2.x we
-       therefore have to escape the semicolon by doubling it (as
-       defined by the specification):
-
-       ::
-
-         tal:define="text 'Hello world;; goodbye world'"
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/setup.py new/Chameleon-2.22/setup.py
--- old/Chameleon-2.14/setup.py 2013-11-28 09:22:03.000000000 +0100
+++ new/Chameleon-2.22/setup.py 2015-02-06 09:50:52.000000000 +0100
@@ -1,4 +1,4 @@
-__version__ = '2.14'
+__version__ = '2.22'
 
 import os
 import sys
@@ -61,11 +61,12 @@
        "Programming Language :: Python",
        "Programming Language :: Python :: 2",
        "Programming Language :: Python :: 3",
-       "Programming Language :: Python :: 2.5",
        "Programming Language :: Python :: 2.6",
        "Programming Language :: Python :: 2.7",
        "Programming Language :: Python :: 3.1",
        "Programming Language :: Python :: 3.2",
+       "Programming Language :: Python :: 3.3",
+       "Programming Language :: Python :: 3.4",
       ],
     author="Malthe Borch",
     author_email="mbo...@gmail.com",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/Chameleon.egg-info/PKG-INFO 
new/Chameleon-2.22/src/Chameleon.egg-info/PKG-INFO
--- old/Chameleon-2.14/src/Chameleon.egg-info/PKG-INFO  2013-11-28 
09:22:41.000000000 +0100
+++ new/Chameleon-2.22/src/Chameleon.egg-info/PKG-INFO  2015-02-06 
09:50:54.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: Chameleon
-Version: 2.14
+Version: 2.22
 Summary: Fast HTML/XML Template Compiler.
 Home-page: http://www.pagetemplates.org/
 Author: Malthe Borch
@@ -16,8 +16,8 @@
         version of Python (2.5 and up, including 3.x and `pypy
         <http://pypy.org>`_).
         
-        Visit the `website <http://pagetemplates.org>`_ for more information
-        or the `documentation <http://pagetemplates.org/docs/latest/>`_.
+        Visit the `website <http://pagetemplates.org/>`_ for more information
+        or the `documentation <http://chameleon.readthedocs.org/en/latest/>`_.
         
         License and Copyright
         ---------------------
@@ -36,6 +36,81 @@
         Changes
         =======
         
+        2.22 (2015-02-06)
+        -----------------
+        
+        - Fix brown bag release.
+        
+        
+        2.21 (2015-02-06)
+        -----------------
+        
+        - Added ``RenderError`` exception which indicates that an error
+          occurred during the evaluation of an expression.
+        
+        - Clean up ``TemplateError`` exception implementation.
+        
+        
+        2.20 (2015-01-12)
+        -----------------
+        
+        - Pass ``search_path`` to template class when loaded using
+          ``TemplateLoader`` (or one of the derived classes).
+          [faassen]
+        
+        
+        2.19 (2015-01-06)
+        -----------------
+        
+        - Fix logging deprecation.
+        
+        - Fix environment-based configuration logging error.
+        
+        
+        2.18 (2014-11-03)
+        -----------------
+        
+        - Fix minor compilation error.
+        
+        
+        2.17 (2014-11-03)
+        -----------------
+        
+        - Add support for ``i18n:context``.
+          [wiggy]
+        
+        - Add missing 'parity' repeat property.
+          [voxspox]
+        
+        - Don't modify environment when getting variables from it.
+          [fschulze]
+        
+        
+        2.16 (2014-05-06)
+        -----------------
+        
+        - If a repeat expression evaluates to ``None`` then it is now
+          equivalent to an empty set.
+        
+          This changes a behavior introduced in 2.14.
+        
+          This fixes issue #172.
+        
+        - Remove fossil test dependency on deprecated ``distribute``.
+        
+        - Add explicit support / testing for Python 3.3 / 3.4.
+        
+        - Drop explicit support for Python 2.5 (out of maintenance, and no 
longer
+          supported by ``tox`` or ``Travis-CI``).
+        
+        
+        2.15 (2014-03-11)
+        -----------------
+        
+        - Add Support for Python 3.4's ``NameConstant``.
+          [brakhane]
+        
+        
         2.14 (2013-11-28)
         -----------------
         
@@ -1270,8 +1345,9 @@
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 2.5
 Classifier: Programming Language :: Python :: 2.6
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3.1
 Classifier: Programming Language :: Python :: 3.2
+Classifier: Programming Language :: Python :: 3.3
+Classifier: Programming Language :: Python :: 3.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/Chameleon.egg-info/SOURCES.txt 
new/Chameleon-2.22/src/Chameleon.egg-info/SOURCES.txt
--- old/Chameleon-2.14/src/Chameleon.egg-info/SOURCES.txt       2013-11-28 
09:22:41.000000000 +0100
+++ new/Chameleon-2.22/src/Chameleon.egg-info/SOURCES.txt       2015-02-06 
09:50:54.000000000 +0100
@@ -279,6 +279,7 @@
 src/chameleon/tests/inputs/089.xml
 src/chameleon/tests/inputs/090-tuple-expression.pt
 src/chameleon/tests/inputs/090.xml
+src/chameleon/tests/inputs/091-repeat-none.pt
 src/chameleon/tests/inputs/091.xml
 src/chameleon/tests/inputs/092.xml
 src/chameleon/tests/inputs/093.xml
@@ -311,6 +312,8 @@
 src/chameleon/tests/inputs/117.xml
 src/chameleon/tests/inputs/118.xml
 src/chameleon/tests/inputs/119.xml
+src/chameleon/tests/inputs/120-translation-context.pt
+src/chameleon/tests/inputs/121-translation-comment.pt
 src/chameleon/tests/inputs/greeting.pt
 src/chameleon/tests/inputs/hello_world.pt
 src/chameleon/tests/inputs/hello_world.txt
@@ -418,9 +421,13 @@
 src/chameleon/tests/outputs/088.pt
 src/chameleon/tests/outputs/089.pt
 src/chameleon/tests/outputs/090.pt
+src/chameleon/tests/outputs/091.pt
 src/chameleon/tests/outputs/101.html
 src/chameleon/tests/outputs/102.html
 src/chameleon/tests/outputs/103.html
+src/chameleon/tests/outputs/120-en.pt
+src/chameleon/tests/outputs/120.pt
+src/chameleon/tests/outputs/121.pt
 src/chameleon/tests/outputs/greeting.pt
 src/chameleon/tests/outputs/hello_world.pt
 src/chameleon/tests/outputs/hello_world.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/__init__.py 
new/Chameleon-2.22/src/chameleon/__init__.py
--- old/Chameleon-2.14/src/chameleon/__init__.py        2011-03-07 
10:19:17.000000000 +0100
+++ new/Chameleon-2.22/src/chameleon/__init__.py        2015-02-06 
09:47:46.000000000 +0100
@@ -3,3 +3,4 @@
 from .zpt.template import PageTextTemplate
 from .zpt.template import PageTextTemplateFile
 from .zpt.loader import TemplateLoader as PageTemplateLoader
+from .exc import TemplateError
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/astutil.py 
new/Chameleon-2.22/src/chameleon/astutil.py
--- old/Chameleon-2.14/src/chameleon/astutil.py 2012-10-11 10:33:56.000000000 
+0200
+++ new/Chameleon-2.22/src/chameleon/astutil.py 2014-03-11 11:10:06.000000000 
+0100
@@ -914,6 +914,9 @@
             self._write(', ')
         self._write(')')
 
+    # NameConstant(singleton value)
+    def visit_NameConstant(self, node):
+        self._write(str(node.value))
 
 class AnnotationAwareVisitor(ast.NodeVisitor):
     def visit(self, node):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/compiler.py 
new/Chameleon-2.22/src/chameleon/compiler.py
--- old/Chameleon-2.14/src/chameleon/compiler.py        2013-10-21 
07:35:46.000000000 +0200
+++ new/Chameleon-2.22/src/chameleon/compiler.py        2015-02-06 
09:47:46.000000000 +0100
@@ -220,7 +220,7 @@
 
 @template
 def emit_translate(target, msgid, default=None):  # pragma: no cover
-    target = translate(msgid, default=default, domain=__i18n_domain)
+    target = translate(msgid, default=default, domain=__i18n_domain, 
context=__i18n_context)
 
 
 @template
@@ -381,7 +381,7 @@
 
             if translate and isinstance(target, ast.Str):
                 target = template(
-                    "translate(msgid, domain=__i18n_domain, context=econtext)",
+                    "translate(msgid, domain=__i18n_domain, 
context=__i18n_context)",
                     msgid=target, mode="eval",
                     )
         else:
@@ -400,7 +400,7 @@
                         values.append(node)
 
                 target = template(
-                    "translate(msgid, mapping=mapping, domain=__i18n_domain, 
context=econtext)",
+                    "translate(msgid, mapping=mapping, domain=__i18n_domain, 
context=__i18n_context)",
                     msgid=ast.Str(s=formatting_string),
                     mapping=ast.Dict(keys=keys, values=values),
                     mode="eval"
@@ -741,7 +741,7 @@
                 raise
 
             exc = sys.exc_info()[1]
-            p = pickle.dumps(exc)
+            p = pickle.dumps(exc, -1)
 
             stmts = template(
                 "__exc = loads(p)", loads=self.loads_symbol, p=ast.Str(s=p)
@@ -1057,8 +1057,9 @@
                     param("econtext"),
                     param("rcontext"),
                     param("__i18n_domain"),
+                    param("__i18n_context"),
                     ],
-                defaults=[load("None")],
+                defaults=[load("None"), load("None")],
             ),
             body=body
             )
@@ -1075,6 +1076,13 @@
                self.visit(node.node) + \
                template("__i18n_domain = BACKUP", BACKUP=backup)
 
+    def visit_TxContext(self, node):
+        backup = "__previous_i18n_context_%s" % mangle(id(node))
+        return template("BACKUP = __i18n_context", BACKUP=backup) + \
+               template("__i18n_context = NAME", NAME=ast.Str(s=node.name)) + \
+               self.visit(node.node) + \
+               template("__i18n_context = BACKUP", BACKUP=backup)
+
     def visit_OnError(self, node):
         body = []
 
@@ -1276,7 +1284,7 @@
         # emit the translation expression
         body += template(
             "if msgid: __append(translate("
-            "msgid, mapping=mapping, default=default, domain=__i18n_domain, 
context=econtext))",
+            "msgid, mapping=mapping, default=default, domain=__i18n_domain, 
context=__i18n_context))",
             msgid=msgid, default=default, mapping=mapping
             )
 
@@ -1518,8 +1526,9 @@
                             param("econtext"),
                             param("rcontext"),
                             param("__i18n_domain"),
+                            param("__i18n_context"),
                             ],
-                        defaults=[load("__i18n_domain")],
+                        defaults=[load("__i18n_domain"), 
load("__i18n_context")],
                         ),
                     body=body or [ast.Pass()],
                 ))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/config.py 
new/Chameleon-2.22/src/chameleon/config.py
--- old/Chameleon-2.14/src/chameleon/config.py  2011-11-24 07:06:57.000000000 
+0100
+++ new/Chameleon-2.22/src/chameleon/config.py  2015-01-07 12:40:40.000000000 
+0100
@@ -2,6 +2,11 @@
 import logging
 
 log = logging.getLogger('chameleon.config')
+environment = dict(
+    (k[10:], v) for (k, v) in (
+        ((j.lower(), x) for (j, x) in os.environ.items()))
+    if k.startswith('chameleon_')
+)
 
 # Define which values are read as true
 TRUE = ('y', 'yes', 't', 'true', 'on', '1')
@@ -9,7 +14,7 @@
 # If eager parsing is enabled, templates are parsed upon
 # instantiation, rather than when first called upon; this mode is
 # useful for verifying validity of templates across a project
-EAGER_PARSING = os.environ.pop('CHAMELEON_EAGER', 'false')
+EAGER_PARSING = environment.pop('eager', 'false')
 EAGER_PARSING = EAGER_PARSING.lower() in TRUE
 
 # Debug mode is mostly useful for debugging the template engine
@@ -18,12 +23,12 @@
 # output. Also, the generated source code is available in the
 # ``source`` attribute of the template instance if compilation
 # succeeded.
-DEBUG_MODE = os.environ.pop('CHAMELEON_DEBUG', 'false')
+DEBUG_MODE = environment.pop('debug', 'false')
 DEBUG_MODE = DEBUG_MODE.lower() in TRUE
 
 # If a cache directory is specified, template source code will be
 # persisted on disk and reloaded between sessions
-path = os.environ.pop('CHAMELEON_CACHE', None)
+path = environment.pop('cache', None)
 if path is not None:
     CACHE_DIRECTORY = os.path.abspath(path)
     if not os.path.exists(CACHE_DIRECTORY):
@@ -35,13 +40,16 @@
     CACHE_DIRECTORY = None
 
 # When auto-reload is enabled, templates are reloaded on file change.
-AUTO_RELOAD = os.environ.pop('CHAMELEON_RELOAD', 'false')
+AUTO_RELOAD = environment.pop('reload', 'false')
 AUTO_RELOAD = AUTO_RELOAD.lower() in TRUE
 
-for key in os.environ:
-    if key.lower().startswith('chameleon'):
-        log.warn("unknown environment variable set: \"%s\"." % key)
+for key in environment:
+    log.warning(
+        "unknown environment variable set: \"CHAMELEON_%s\"." % key.upper()
+    )
 
 # This is the slice length of the expression displayed in the
 # formatted exception string
 SOURCE_EXPRESSION_MARKER_LENGTH = 60
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/exc.py 
new/Chameleon-2.22/src/chameleon/exc.py
--- old/Chameleon-2.14/src/chameleon/exc.py     2013-06-18 14:37:30.000000000 
+0200
+++ new/Chameleon-2.22/src/chameleon/exc.py     2015-02-06 09:47:46.000000000 
+0100
@@ -99,10 +99,12 @@
     return string
 
 
-def reconstruct_exc(cls, state):
-    exc = Exception.__new__(cls)
-    exc.__dict__ = state
-    return exc
+class RenderError(Exception):
+    """An error raised during rendering.
+
+    This class is used as a mixin which is added to the original
+    exception.
+    """
 
 
 class TemplateError(Exception):
@@ -121,7 +123,7 @@
     And pickle/unpickled:
 
     >>> from pickle import dumps, loads
-    >>> loads(dumps(TemplateError(message, token)))
+    >>> loads(dumps(TemplateError(message, token), -1))
     TemplateError('message', 'token')
 
     """
@@ -130,23 +132,16 @@
         if not isinstance(token, Token):
             token = Token(token, 0)
 
-        self.msg = msg
-        self.token = safe_native(token)
-        self.offset = getattr(token, "pos", 0)
-        self.filename = token.filename
-        self.location = token.location
+        Exception.__init__(self, msg, token)
 
     def __copy__(self):
         inst = Exception.__new__(type(self))
-        inst.__dict__ = self.__dict__.copy()
+        inst.args = self.args
         return inst
 
-    def __reduce__(self):
-        return reconstruct_exc, (type(self), self.__dict__)
-
     def __str__(self):
-        text = "%s\n\n" % self.msg
-        text += " - String:     \"%s\"" % self.token
+        text = "%s\n\n" % self.args[0]
+        text += " - String:     \"%s\"" % safe_native(self.token)
 
         if self.filename:
             text += "\n"
@@ -161,11 +156,27 @@
     def __repr__(self):
         try:
             return "%s('%s', '%s')" % (
-                self.__class__.__name__, self.msg, self.token
+                self.__class__.__name__, self.args[0], safe_native(self.token)
                 )
         except AttributeError:
             return object.__repr__(self)
 
+    @property
+    def token(self):
+        return self.args[1]
+
+    @property
+    def filename(self):
+        return self.token.filename
+
+    @property
+    def location(self):
+        return self.token.location
+
+    @property
+    def offset(self):
+        return getattr(self.token, "pos", 0)
+
 
 class ParseError(TemplateError):
     """An error occurred during parsing.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/i18n.py 
new/Chameleon-2.22/src/chameleon/i18n.py
--- old/Chameleon-2.14/src/chameleon/i18n.py    2013-01-14 10:09:53.000000000 
+0100
+++ new/Chameleon-2.22/src/chameleon/i18n.py    2015-01-06 09:46:47.000000000 
+0100
@@ -22,6 +22,7 @@
 WHITELIST = frozenset([
     "translate",
     "domain",
+    "context",
     "target",
     "source",
     "attributes",
@@ -29,7 +30,8 @@
     "name",
     "mode",
     "xmlns",
-    "xml"
+    "xml",
+    "comment",
     ])
 
 _interp_regex = re.compile(r'(?<!\$)(\$(?:(%(n)s)|{(%(n)s)}))'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/loader.py 
new/Chameleon-2.22/src/chameleon/loader.py
--- old/Chameleon-2.14/src/chameleon/loader.py  2012-10-09 09:40:02.000000000 
+0200
+++ new/Chameleon-2.22/src/chameleon/loader.py  2015-01-12 16:58:27.000000000 
+0100
@@ -75,15 +75,16 @@
         if ':' in spec:
             spec = abspath_from_asset_spec(spec)
 
-        if os.path.isabs(spec):
-            return cls(spec, **self.kwargs)
+        if not os.path.isabs(spec):
+            for path in self.search_path:
+                path = os.path.join(path, spec)
+                if os.path.exists(path):
+                    spec = path
+                    break
+            else:
+                raise ValueError("Template not found: %s." % spec)
 
-        for path in self.search_path:
-            path = os.path.join(path, spec)
-            if os.path.exists(path):
-                return cls(path, **self.kwargs)
-
-        raise ValueError("Template not found: %s." % spec)
+        return cls(spec, search_path=self.search_path, **self.kwargs)
 
     def bind(self, cls):
         return functools.partial(self.load, cls=cls)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/nodes.py 
new/Chameleon-2.22/src/chameleon/nodes.py
--- old/Chameleon-2.14/src/chameleon/nodes.py   2013-03-05 11:20:24.000000000 
+0100
+++ new/Chameleon-2.22/src/chameleon/nodes.py   2014-11-03 15:24:13.000000000 
+0100
@@ -205,6 +205,12 @@
     _fields = "name", "node"
 
 
+class TxContext(Node):
+    """Update translation context."""
+
+    _fields = "name", "node"
+
+
 class OnError(Node):
     _fields = "fallback", "name", "node"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/tal.py 
new/Chameleon-2.22/src/chameleon/tal.py
--- old/Chameleon-2.14/src/chameleon/tal.py     2013-11-11 12:52:55.000000000 
+0100
+++ new/Chameleon-2.22/src/chameleon/tal.py     2014-09-02 12:02:55.000000000 
+0200
@@ -306,6 +306,15 @@
 
         return self.index % 2 == 0 and 'even' or ''
 
+    @descriptorstr
+    def parity(self):
+        """Return 'odd' or 'even' depending on the position's parity
+
+        Useful for assigning CSS class names to table rows.
+        """
+
+        return self.index % 2 == 0 and 'even' or 'odd'
+
     def next(self):
         raise NotImplementedError(
             "Method not implemented (can't update local variable).")
@@ -459,7 +468,7 @@
         """We coerce the iterable to a tuple and return an iterator
         after registering it in the repeat dictionary."""
 
-        iterable = tuple(iterable)
+        iterable = list(iterable) if iterable is not None else ()
 
         length = len(iterable)
         iterator = iter(iterable)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/template.py 
new/Chameleon-2.22/src/chameleon/template.py
--- old/Chameleon-2.14/src/chameleon/template.py        2013-10-21 
07:51:14.000000000 +0200
+++ new/Chameleon-2.22/src/chameleon/template.py        2015-02-06 
09:47:46.000000000 +0100
@@ -21,6 +21,7 @@
                 pkg_digest.update(version)
 
 
+from .exc import RenderError
 from .exc import TemplateError
 from .exc import ExceptionFormatter
 from .compiler import Compiler
@@ -181,7 +182,9 @@
                 formatter = ExceptionFormatter(errors, econtext, rcontext)
 
                 try:
-                    exc = create_formatted_exception(exc, cls, formatter)
+                    exc = create_formatted_exception(
+                        exc, cls, formatter, RenderError
+                    )
                 except TypeError:
                     pass
 
@@ -222,7 +225,7 @@
                 cooked = self.loader.build(source, filename)
             except TemplateError:
                 exc = sys.exc_info()[1]
-                exc.filename = self.filename
+                exc.token.filename = self.filename
                 raise
         elif self.keep_source:
             module = sys.modules.get(cooked.get('__name__'))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Chameleon-2.14/src/chameleon/tests/inputs/071-html-attribute-defaults.pt 
new/Chameleon-2.22/src/chameleon/tests/inputs/071-html-attribute-defaults.pt
--- 
old/Chameleon-2.14/src/chameleon/tests/inputs/071-html-attribute-defaults.pt    
    2011-08-19 12:11:52.000000000 +0200
+++ 
new/Chameleon-2.22/src/chameleon/tests/inputs/071-html-attribute-defaults.pt    
    2014-11-03 15:24:13.000000000 +0100
@@ -5,6 +5,7 @@
     <input type="input" tal:attributes="checked None" />
     <input type="input" checked="checked" tal:attributes="checked default" />
     <input type="input" checked tal:attributes="checked default" />
+    <input type="input" checked checked="${default if True else None}" />
     <input type="input" tal:attributes="checked default" />
     <input type="input" class="field" tal:attributes="class True" />
   </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Chameleon-2.14/src/chameleon/tests/inputs/091-repeat-none.pt 
new/Chameleon-2.22/src/chameleon/tests/inputs/091-repeat-none.pt
--- old/Chameleon-2.14/src/chameleon/tests/inputs/091-repeat-none.pt    
1970-01-01 01:00:00.000000000 +0100
+++ new/Chameleon-2.22/src/chameleon/tests/inputs/091-repeat-none.pt    
2014-04-30 10:41:18.000000000 +0200
@@ -0,0 +1,5 @@
+<html>
+  <body>
+    <div tal:repeat="i None">error</div>
+  </body>
+</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Chameleon-2.14/src/chameleon/tests/inputs/120-translation-context.pt 
new/Chameleon-2.22/src/chameleon/tests/inputs/120-translation-context.pt
--- old/Chameleon-2.14/src/chameleon/tests/inputs/120-translation-context.pt    
1970-01-01 01:00:00.000000000 +0100
+++ new/Chameleon-2.22/src/chameleon/tests/inputs/120-translation-context.pt    
2014-11-03 15:24:13.000000000 +0100
@@ -0,0 +1,13 @@
+<html>
+  <body>
+    <div i18n:translate="">
+      Hello world!
+    </div>
+    <button i18n:context="button" i18n:translate="">
+      Hello world!
+    </button>
+    <div i18n:domain="new" i18n:context="navigation">
+       <a i18n:translate="">Tab</a>
+    </div>
+  </body>
+</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Chameleon-2.14/src/chameleon/tests/inputs/121-translation-comment.pt 
new/Chameleon-2.22/src/chameleon/tests/inputs/121-translation-comment.pt
--- old/Chameleon-2.14/src/chameleon/tests/inputs/121-translation-comment.pt    
1970-01-01 01:00:00.000000000 +0100
+++ new/Chameleon-2.22/src/chameleon/tests/inputs/121-translation-comment.pt    
2015-01-06 09:46:47.000000000 +0100
@@ -0,0 +1,7 @@
+<html>
+  <body>
+    <h1 i18n:translate="" i18n:comment="Site title">
+      Hello world!
+    </h1>
+  </body>
+</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/tests/outputs/071.pt 
new/Chameleon-2.22/src/chameleon/tests/outputs/071.pt
--- old/Chameleon-2.14/src/chameleon/tests/outputs/071.pt       2011-08-19 
12:11:45.000000000 +0200
+++ new/Chameleon-2.22/src/chameleon/tests/outputs/071.pt       2014-11-03 
15:24:13.000000000 +0100
@@ -5,6 +5,7 @@
     <input type="input" />
     <input type="input" checked="checked" />
     <input type="input" checked />
+    <input type="input" checked />
     <input type="input" />
     <input type="input" class="True" />
   </body>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/tests/outputs/091.pt 
new/Chameleon-2.22/src/chameleon/tests/outputs/091.pt
--- old/Chameleon-2.14/src/chameleon/tests/outputs/091.pt       1970-01-01 
01:00:00.000000000 +0100
+++ new/Chameleon-2.22/src/chameleon/tests/outputs/091.pt       2014-04-30 
10:41:20.000000000 +0200
@@ -0,0 +1,5 @@
+<html>
+  <body>
+
+  </body>
+</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/tests/outputs/120-en.pt 
new/Chameleon-2.22/src/chameleon/tests/outputs/120-en.pt
--- old/Chameleon-2.14/src/chameleon/tests/outputs/120-en.pt    1970-01-01 
01:00:00.000000000 +0100
+++ new/Chameleon-2.22/src/chameleon/tests/outputs/120-en.pt    2014-11-03 
15:24:13.000000000 +0100
@@ -0,0 +1,9 @@
+<html>
+  <body>
+    <div>Hello world! ('Hello world!' translation into 'en')</div>
+    <button>Hello world! ('Hello world!' translation into 'en', context 
'button')</button>
+    <div>
+       <a>Tab ('Tab' translation into 'en' with domain 'new', context 
'navigation')</a>
+    </div>
+  </body>
+</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/tests/outputs/120.pt 
new/Chameleon-2.22/src/chameleon/tests/outputs/120.pt
--- old/Chameleon-2.14/src/chameleon/tests/outputs/120.pt       1970-01-01 
01:00:00.000000000 +0100
+++ new/Chameleon-2.22/src/chameleon/tests/outputs/120.pt       2014-11-03 
15:24:13.000000000 +0100
@@ -0,0 +1,9 @@
+<html>
+  <body>
+    <div>Hello world!</div>
+    <button>Hello world!</button>
+    <div>
+       <a>Tab</a>
+    </div>
+  </body>
+</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/tests/outputs/121.pt 
new/Chameleon-2.22/src/chameleon/tests/outputs/121.pt
--- old/Chameleon-2.14/src/chameleon/tests/outputs/121.pt       1970-01-01 
01:00:00.000000000 +0100
+++ new/Chameleon-2.22/src/chameleon/tests/outputs/121.pt       2015-01-06 
09:46:47.000000000 +0100
@@ -0,0 +1,5 @@
+<html>
+  <body>
+    <h1>Hello world!</h1>
+  </body>
+</html>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/tests/test_templates.py 
new/Chameleon-2.22/src/chameleon/tests/test_templates.py
--- old/Chameleon-2.14/src/chameleon/tests/test_templates.py    2013-10-21 
07:35:46.000000000 +0200
+++ new/Chameleon-2.22/src/chameleon/tests/test_templates.py    2015-02-06 
09:47:46.000000000 +0100
@@ -18,6 +18,7 @@
 
 
 from chameleon.utils import byte_string
+from chameleon.exc import RenderError
 
 
 class Message(object):
@@ -369,7 +370,8 @@
             )
         try:
             template()
-        except:
+        except Exception as exc:
+            self.assertIn(RenderError, type(exc).__bases__)
             exc = sys.exc_info()[1]
             formatted = str(exc)
             self.assertFalse('NameError:' in formatted)
@@ -614,9 +616,14 @@
             else:
                 with_domain = " with domain '%s'" % domain
 
+            if context is None:
+                with_context = ""
+            else:
+                with_context = ", context '%s'" % context
+
             stripped = default.rstrip('\n ')
-            return "%s ('%s' translation into '%s'%s)%s" % (
-                stripped, msgid, target_language, with_domain,
+            return "%s ('%s' translation into '%s'%s%s)%s" % (
+                stripped, msgid, target_language, with_domain, with_context,
                 default[len(stripped):]
                 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/utils.py 
new/Chameleon-2.22/src/chameleon/utils.py
--- old/Chameleon-2.14/src/chameleon/utils.py   2012-10-11 10:33:52.000000000 
+0200
+++ new/Chameleon-2.22/src/chameleon/utils.py   2015-02-06 09:47:46.000000000 
+0100
@@ -207,10 +207,10 @@
             return match.group()
 
 
-def create_formatted_exception(exc, cls, formatter):
+def create_formatted_exception(exc, cls, formatter, base=Exception):
     try:
         try:
-            new = type(cls.__name__, (cls, Exception), {
+            new = type(cls.__name__, (cls, base), {
                 '__str__': formatter,
                 '__new__': BaseException.__new__,
                 '__module__': cls.__module__,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/src/chameleon/zpt/program.py 
new/Chameleon-2.22/src/chameleon/zpt/program.py
--- old/Chameleon-2.14/src/chameleon/zpt/program.py     2013-11-13 
15:47:43.000000000 +0100
+++ new/Chameleon-2.22/src/chameleon/zpt/program.py     2014-11-03 
15:24:13.000000000 +0100
@@ -431,6 +431,14 @@
         else:
             DOMAIN = partial(nodes.Domain, clause)
 
+        # i18n:context
+        try:
+            clause = ns[I18N, 'context']
+        except KeyError:
+            CONTEXT = skip
+        else:
+            CONTEXT = partial(nodes.TxContext, clause)
+
         # i18n:name
         try:
             clause = ns[I18N, 'name']
@@ -453,6 +461,7 @@
             REPEAT,
             SWITCH,
             DOMAIN,
+            CONTEXT,
             )
 
         # metal:fill-slot
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Chameleon-2.14/tox.ini new/Chameleon-2.22/tox.ini
--- old/Chameleon-2.14/tox.ini  2013-10-21 07:35:46.000000000 +0200
+++ new/Chameleon-2.22/tox.ini  2014-04-30 10:33:30.000000000 +0200
@@ -1,14 +1,10 @@
 [tox]
 envlist = 
-    py25,py26,py27,py32,pypy,cover
+    py26,py27,py32,py33,py34,pypy,cover
 
-[testenv:py25]
+[testenv]
 commands = 
    python setup.py test -q
-deps = 
-    ordereddict
-    unittest2
-    distribute
 
 [testenv:py26]
 commands = 
@@ -16,19 +12,6 @@
 deps = 
     ordereddict
     unittest2
-    distribute
-
-[testenv:py27]
-commands = 
-   python setup.py test -q
-deps = 
-    distribute
-
-[testenv:py32]
-commands = 
-   python setup.py test -q
-deps = 
-    distribute
 
 [testenv:pypy]
 commands = 
@@ -36,7 +19,6 @@
 deps = 
     ordereddict
     unittest2
-    distribute
     zope.interface
 
 [testenv:cover]
@@ -50,5 +32,3 @@
     nosexcover
     ordereddict
     unittest2
-    distribute
-

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to