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