Git Product home page Git Product logo

genshi's Introduction

About Genshi

ReadTheDocs badge GitHub Actions Workflow Status PyPI - Version PyPI - Python Version PyPI - Implementation

Genshi is a Python library that provides an integrated set of components for parsing, generating, and processing HTML, XML or other textual content for output generation on the web. The major feature is a template language, which is heavily inspired by Kid.

For more information please see:

genshi's People

Contributors

alecf avatar alecthomas avatar ashemedai avatar brandtbucher avatar cedk avatar cmlenz avatar eli-schwartz avatar felixonmars avatar felixschwarz avatar ginggs avatar hodgestar avatar hroncok avatar jaraco avatar jayvdb avatar jborg avatar jun66j5 avatar jvllmr avatar kennethgillen avatar methane avatar mgood avatar nphilipp avatar pablogsal avatar rjollos avatar rleigh-codelibre avatar s0undt3ch avatar thatch avatar warsaw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

genshi's Issues

Provide a py2 manylinux1 wheel

Would it be possible (e.g. using Travis and the pypa Images) to build and provide more wheels, especially a py2 wheel with speedups, in the manylinux1 variant?

Genshi doesn't support Python 3.8

It's the usual AST changes that break Genshi on every Python release.

From the original Genshi tracker bug report https://genshi.edgewall.org/ticket/612:

Python 3.8 now uses ast.Constant type and remove types like _ast.Str: ast.Str is a backward compatibility class.

I had to disable Genshi benchmark in the performance project: ​python/pyperformance#46

Example of issue: "strarg = _new(_ast.Str, node.id)" at genshi/template/eval.py:616: the code should use ast.Str, not _ast.Str.

See also https://bugs.python.org/issue32892.

Update: And the Python 3.8 release schedule -- https://www.python.org/dev/peps/pep-0569/ (release currently scheduled for 20 October 2019).

PyUnicode_FromUnicode is deprecated

It is deprecated by PEP 393.

My recommendation is:

  1. Encode the text to UTF-8 (PyUnicode_AsUTF8AndSize).
  2. Escape it into raw buffer
  3. Decode it (PyUnicode_FromStringAndSize).

While PEP 393 specific API can be faster, it is CPython only, and it will be broken if CPython changed string implementation again. So I recommend UTF-8 APIs.

Memory leak in _speedups.c ?

Hi.

We are using Genshi template engine in one of our projects.
After we upgraded to the latest stable Genshi release (we were using version 0.7.0 before) we have noticed what seems to be a memory leak.

Here is a minimal application which shows that behavior.
memleak.tar.gz

I was able to isolate the exact commit where this issue started to show up:
99ad51d

I am not sure what exactly causes the issue but the memory leak is gone if we either:
A)remove _speedupds.so
B)revert to a Genshi version before the commit mentioned above.

Here are the lisf of steps to reproduce the issue:
0. install the project dependencies and run the app

  1. observe the process memory usage before the test
$ ps axwu|grep memleak.py|grep -v grep  | awk '{print $5}'
986740
  1. make requests to the sample app
$ ab -v0 -n10000 -c10 http://localhost:8080/ > /dev/null 2>&1
  1. check the memory usage again
$ ps axwu|grep memleak.py|grep -v grep  | awk '{print $5}'
994932

Note: the memory usage is constantly growing with each subsequent run of the test

Environment details:

$ pip list

Package                       Version
----------------------------- -------
backports.functools-lru-cache 1.6.4
cheroot                       8.5.2
CherryPy                      17.0.0
FormEncode                    2.0.0
Genshi                        0.7.5
jaraco.functools              2.0
more-itertools                5.0.0
pip                           20.3.4
portend                       2.6
pytz                          2021.1
selectors2                    2.0.2
setuptools                    45.0.0
six                           1.16.0
tempora                       1.14.1
wheel                         0.37.0
zc.lockfile                   2.0

$ python -V
Python 2.7.17

Sincerely,
Eugene

Release 0.7.8

Todo items for 0.7.8:

  • Check that master works nicely.
  • Remove pytest regex escape warnings.
  • Update the changelog.
  • Update the 0.7.x branch and bump the version.
  • Create a GitHub release.
  • Run the release action.

i18n:msg for nested and repeated tags incorrectly translates message

>>> import genshi
>>> genshi.__version__
'0.7.7'
>>> from genshi.template import MarkupTemplate
>>> from genshi.filters.i18n import Translator, extract
>>> html = """<html xmlns:py="http://genshi.edgewall.org/"
...     xmlns:i18n="http://genshi.edgewall.org/i18n"
...     py:strip="">
...   <i18n:msg>
...     <ul><li>First</li><li>Second</li></ul>
...   </i18n:msg>
... </html>"""
>>>
>>> tmpl = MarkupTemplate(html)
>>> translator = Translator()
>>> tmpl.add_directives(Translator.NAMESPACE, translator)
>>> result = list(translator.extract(tmpl.stream))
>>> msg = result[0][2]
>>> msg
'[1:[2:First][3:Second]]'
>>>
>>> tmpl = MarkupTemplate(html)
>>> translator = Translator(lambda s: msg)
>>> translator.setup(tmpl)
>>> tmpl.generate().render()
'\n  <ul><li>First</li></ul><li>Second</li>\n'
#                      ^^^^^           ^^^^
#    <ul><li>First</li><li>Second</li></ul>

Add a command line script for rendering templates.

There was a request for a command line script for rendering templates that was filed on the Debian package -- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=527236.

The documentation for the kid script mentioned in the bug report is:

Usage: kid [options] file [args]
Expand a Kid template file.

OPTIONS:

  -e enc, --encoding=enc
          Specify the output character encoding.
          Default: utf-8
  -o outfile, --output=outfile
          Specify the output file.
          Default: standard output
  -s host:port, --server=host:port
          Specify the server address if
          you want to start the HTTP server.
          Instead of the Kid template,
          you can specify a base directory.
  -h, --help
          Print this help message and exit.
  -V, --version
          Print the Kid version number and exit.

file:
  filename of the Kid template to be processed
  or "-" for reading the template from stdin.

args:
  key=value or other arguments passed to the template.

This isn't high priority, but also isn't hard to implement.

0.7.5: pytest warnings

+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-genshi-0.7.5-3.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-genshi-0.7.5-3.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/python3 -Bm pytest -ra
=========================================================================== test session starts ============================================================================
platform linux -- Python 3.8.9, pytest-6.2.3, py-1.10.0, pluggy-0.13.1
rootdir: /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5
plugins: forked-1.3.0, shutil-1.7.0, virtualenv-1.7.0, asyncio-0.14.0, expect-1.1.0, cov-2.11.1, mock-3.5.1, httpbin-1.0.0, xdist-2.2.1, flake8-1.0.7, timeout-1.4.2, betamax-0.8.1, pyfakefs-4.4.0, freezegun-0.4.2, flaky-3.7.0, cases-3.4.6, hypothesis-6.10.0
collected 57 items

genshi/filters/tests/test_html.py .........................................................                                                                          [100%]

============================================================================= warnings summary =============================================================================
genshi/filters/html.py:357
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/html.py:357: DeprecationWarning: invalid escape sequence \s
    u'[Uu][Rr\u0280][Ll\u029F]\s*\(([^)]+)').finditer

genshi/filters/i18n.py:983
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/i18n.py:983: DeprecationWarning: invalid escape sequence \[
    data = data.replace('[', '\[').replace(']', '\]')

genshi/filters/i18n.py:983
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/i18n.py:983: DeprecationWarning: invalid escape sequence \]
    data = data.replace('[', '\[').replace(']', '\]')

genshi/filters/i18n.py:1038
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/i18n.py:1038: DeprecationWarning: invalid escape sequence \[
    part.replace('\[', '[').replace('\]', ']'),

genshi/filters/i18n.py:1038
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/i18n.py:1038: DeprecationWarning: invalid escape sequence \]
    part.replace('\[', '[').replace('\]', ']'),

genshi/template/interpolation.py:34
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/template/interpolation.py:34: DeprecationWarning: Flags not at the start of the expression '[uU]?[rR]?("""|\\\'\\\'\\' (truncated)
    token_re = re.compile('%s|%s(?s)' % (

genshi/path.py:663
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/path.py:663: DeprecationWarning: invalid escape sequence \d
    _tokenize = re.compile('("[^"]*")|(\'[^\']*\')|((?:\d+)?\.\d+)|(%s)|([^%s\s]+)|\s+' % (

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_checkbox_multi_value_auto
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:154: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_checkbox_multi_value_auto
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:157: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_checkbox_multi_value_defined
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:165: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_checkbox_multi_value_defined
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:168: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_checkbox_single_value_auto
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:132: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_checkbox_single_value_auto
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:135: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_checkbox_single_value_auto_no_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:124: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_checkbox_single_value_defined
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:143: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_checkbox_single_value_defined
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:146: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_hidden_multi_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:70: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_hidden_no_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:54: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_hidden_single_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:62: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_password_disabled
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:354: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_password_enabled
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:362: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_radio_empty_string
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:206: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_radio_multi_empty_string
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:214: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_radio_multi_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:195: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_radio_multi_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:198: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_radio_no_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:176: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_radio_single_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:184: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_radio_single_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:187: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_text_multi_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:46: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_text_no_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:30: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_input_text_single_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:38: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_option_segmented_text
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:320: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(u"""<form>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_option_segmented_text_no_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:332: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_option_unicode_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:344: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(u"""<form>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_select_multi_value_auto
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:290: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_select_multi_value_defined
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:306: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_select_no_value_auto
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:226: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_select_no_value_defined
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:242: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_select_single_value_auto
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:258: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_select_single_value_defined
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:274: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_textarea_multi_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:94: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_textarea_multiple
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:105: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_textarea_no_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:78: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_textarea_preserve_original
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:115: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLFormFillerTestCase::test_fill_textarea_single_value
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:86: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals("""<form><p>

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_close_empty_tag
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:413: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<a href="#">fo<br/>o</a>',

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_entityref_text
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:403: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(u'<a href="#">foö</a>',

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_escape_attr
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:408: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div title="&lt;foo&gt;"/>',

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_escape_text
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:395: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<a href="#">fo&amp;</a>',

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_escape_text
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:398: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<a href="#">&lt;foo&gt;</a>',

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_invalid_entity
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:418: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('&amp;junk;', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_comments
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:443: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_input_password
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:439: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<form/>', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_onclick_attr
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:435: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_script_elem
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:422: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_script_elem
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:424: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_script_elem
genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_src_javascript
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:383: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals(expected, sanitized_html)

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_src_javascript
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:497: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<img/>', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_src_javascript
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:500: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<img/>', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_src_javascript
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:507: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<img/>', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_src_javascript
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:513: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<img/>', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_src_javascript
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:518: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<img/>', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_src_javascript
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:521: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<img/>', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_src_javascript
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:524: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<img/>', (html | HTMLSanitizer()).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_phishing
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:482: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div style="top:0"/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_phishing
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:485: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div style="margin:10px 20px"/>',

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_phishing
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:489: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_phishing
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:491: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_phishing
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:493: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:449: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:452: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:455: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:458: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:460: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:463: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div style="color: #fff"/>',

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:468: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:470: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:472: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:474: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_remove_style_scripts
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:476: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<div/>', (html | sanitizer).render())

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_unchanged
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:387: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<a href="#">fo<br/>o</a>',

genshi/filters/tests/test_html.py::HTMLSanitizerTestCase::test_sanitize_unchanged
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.5/genshi/filters/tests/test_html.py:390: DeprecationWarning: Please use assertEqual instead.
    self.assertEquals('<a href="#with:colon">foo</a>',

-- Docs: https://docs.pytest.org/en/stable/warnings.html
===================================================================== 57 passed, 83 warnings in 0.30s ======================================================================

0.7.6: pytest warnings

+ /usr/bin/pytest -ra
=========================================================================== test session starts ============================================================================
platform linux -- Python 3.8.12, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: /home/tkloczko/rpmbuild/BUILD/genshi-0.7.6
plugins: cases-3.6.8, mock-3.7.0
collected 57 items

genshi/filters/tests/test_html.py .........................................................                                                                          [100%]

============================================================================= warnings summary =============================================================================
genshi/filters/html.py:357
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.6/genshi/filters/html.py:357: DeprecationWarning: invalid escape sequence \s
    u'[Uu][Rr\u0280][Ll\u029F]\s*\(([^)]+)').finditer

genshi/filters/i18n.py:1119
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.6/genshi/filters/i18n.py:1119: DeprecationWarning: invalid escape sequence \[
    data = data.replace('[', '\[').replace(']', '\]')

genshi/filters/i18n.py:1119
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.6/genshi/filters/i18n.py:1119: DeprecationWarning: invalid escape sequence \]
    data = data.replace('[', '\[').replace(']', '\]')

genshi/filters/i18n.py:1174
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.6/genshi/filters/i18n.py:1174: DeprecationWarning: invalid escape sequence \[
    part.replace('\[', '[').replace('\]', ']'),

genshi/filters/i18n.py:1174
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.6/genshi/filters/i18n.py:1174: DeprecationWarning: invalid escape sequence \]
    part.replace('\[', '[').replace('\]', ']'),

genshi/template/interpolation.py:33
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.6/genshi/template/interpolation.py:33: DeprecationWarning: Flags not at the start of the expression '[uU]?[rR]?("""|\\\'\\\'\\' (truncated)
    token_re = re.compile('%s|%s(?s)' % (

genshi/path.py:663
  /home/tkloczko/rpmbuild/BUILD/genshi-0.7.6/genshi/path.py:663: DeprecationWarning: invalid escape sequence \d
    _tokenize = re.compile('("[^"]*")|(\'[^\']*\')|((?:\d+)?\.\d+)|(%s)|([^%s\s]+)|\s+' % (

-- Docs: https://docs.pytest.org/en/stable/warnings.html
====================================================================== 57 passed, 7 warnings in 0.27s ======================================================================

New Release

Is it possible to create a new Release?

The fix in PR #57 is the only thing that keeps me from upgrading my project to Python 3.9 and up
and I dislike fetching dependencies from git.

Would be great if it's possible 👍🏻

Python3 templates fail syntax validation for "with x as y" constructs

I'm using debian buster with python 3.7 and genshi 0.7.1. The issue exists for all python 3 versions since 3.4?. At least 3.4 was the first version I tested.

Python3 genshi templates will fail for constructs like this:

try:
    pass
except Exception as err:
    pass

### or
with open(x) as y:
    pass

Will result in an exception like this:

  File "/usr/lib/python3/dist-packages/genshi/template/loader.py", line 236, in load
    filename, encoding=encoding)
  File "/usr/lib/python3/dist-packages/genshi/template/loader.py", line 274, in _instantiate
    allow_exec=self.allow_exec)
  File "/usr/lib/python3/dist-packages/genshi/template/text.py", line 138, in __init__
    loader=loader, encoding=encoding, lookup=lookup)
  File "/usr/lib/python3/dist-packages/genshi/template/base.py", line 418, in __init__
    self._stream = self._parse(source, encoding)
  File "/usr/lib/python3/dist-packages/genshi/template/text.py", line 203, in _parse
    lookup=self.lookup)
  File "/usr/lib/python3/dist-packages/genshi/template/eval.py", line 94, in __init__
    filename=filename, lineno=lineno, xform=xform)
  File "/usr/lib/python3/dist-packages/genshi/template/eval.py", line 464, in _compile
    new_source = ASTCodeGenerator(tree).code
  File "/usr/lib/python3/dist-packages/genshi/template/astutil.py", line 43, in __init__
    self.visit(tree)
  File "/usr/lib/python3/dist-packages/genshi/template/astutil.py", line 91, in visit
    ret = visitor(node)
  File "/usr/lib/python3/dist-packages/genshi/template/astutil.py", line 98, in visit_Module
    self.visit(n)
  File "/usr/lib/python3/dist-packages/genshi/template/astutil.py", line 91, in visit
    ret = visitor(node)
  File "/usr/lib/python3/dist-packages/genshi/template/astutil.py", line 421, in visit_Try
    self.visit(handler)
  File "/usr/lib/python3/dist-packages/genshi/template/astutil.py", line 91, in visit
    ret = visitor(node)
  File "/usr/lib/python3/dist-packages/genshi/template/astutil.py", line 385, in visit_ExceptHandler
    self.visit(node.name)
  File "/usr/lib/python3/dist-packages/genshi/template/astutil.py", line 90, in visit
    raise Exception('Unhandled node type %r' % type(node))
None
Unhandled node type <class 'str'>

Python 3.8.0a4: TypeError: an integer is required (got type bytes)

After 3.8.0a4, another thing broke:

$ tox -e py38
GLOB sdist-make: .../genshi/setup.py
py38 inst-nodeps: .../genshi/.tox/.tmp/package/1/Genshi-0.8.zip
py38 installed: Genshi==0.8
py38 run-test-pre: PYTHONHASHSEED='0'
py38 runtests: commands[0] | python setup.py test
running test
running build_py
running egg_info
writing Genshi.egg-info/PKG-INFO
writing dependency_links to Genshi.egg-info/dependency_links.txt
writing entry points to Genshi.egg-info/entry_points.txt
writing requirements to Genshi.egg-info/requires.txt
writing top-level names to Genshi.egg-info/top_level.txt
reading manifest file 'Genshi.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
setup.py:72: DistDeprecationWarning: Features are deprecated and will be removed in a future version. See https://github.com/pypa/setuptools/issues/65.
  speedups = Feature(
/usr/lib64/python3.8/distutils/core.py:108: DistDeprecationWarning: Features are deprecated and will be removed in a future version. See https://github.com/pypa/setuptools/issues/65.
  _setup_distribution = dist = klass(attrs)
warning: no files found matching '*.html' under directory 'doc'
warning: no files found matching '*.css' under directory 'doc'
warning: no files found matching '*.py' under directory 'doc'
warning: no files found matching '*.ini' under directory 'doc'
warning: no files found matching 'COPYING' under directory 'doc'
warning: no previously-included files matching '*' found under directory 'doc/logo.lineform'
warning: no previously-included files found matching 'doc/2000ft.graffle'
warning: no previously-included files matching '*.pyc' found anywhere in distribution
writing manifest file 'Genshi.egg-info/SOURCES.txt'
running egg_info
writing .../genshi/build/lib/Genshi.egg-info/PKG-INFO
writing dependency_links to .../genshi/build/lib/Genshi.egg-info/dependency_links.txt
writing entry points to .../genshi/build/lib/Genshi.egg-info/entry_points.txt
writing requirements to .../genshi/build/lib/Genshi.egg-info/requires.txt
writing top-level names to .../genshi/build/lib/Genshi.egg-info/top_level.txt
reading manifest file '.../genshi/build/lib/Genshi.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.html' under directory 'doc'
warning: no files found matching '*.css' under directory 'doc'
warning: no files found matching '*.py' under directory 'doc'
warning: no files found matching '*.ini' under directory 'doc'
warning: no files found matching 'COPYING' under directory 'doc'
warning: no previously-included files matching '*' found under directory 'doc/logo.lineform'
warning: no previously-included files found matching 'doc/2000ft.graffle'
warning: no previously-included files matching '*.pyc' found anywhere in distribution
writing manifest file '.../genshi/build/lib/Genshi.egg-info/SOURCES.txt'
running build_ext
builder (genshi)
Doctest: genshi.builder ... ok
Element (genshi.builder)
Doctest: genshi.builder.Element ... ok
ElementFactory (genshi.builder)
Doctest: genshi.builder.ElementFactory ... ok
test_duplicate_attributes (genshi.tests.builder.ElementFactoryTestCase) ... ok
test_link (genshi.tests.builder.ElementFactoryTestCase) ... ok
test_markup_escape (genshi.tests.builder.ElementFactoryTestCase) ... ok
test_nonstring_attributes (genshi.tests.builder.ElementFactoryTestCase) ... ok
test_stream_as_child (genshi.tests.builder.ElementFactoryTestCase) ... ok
test_pickle (genshi.tests.core.StreamTestCase) ... ok
test_render_ascii (genshi.tests.core.StreamTestCase) ... ok
test_render_output_stream_unicode (genshi.tests.core.StreamTestCase) ... ok
test_render_output_stream_utf8 (genshi.tests.core.StreamTestCase) ... ok
test_render_unicode (genshi.tests.core.StreamTestCase) ... ok
test_render_utf8 (genshi.tests.core.StreamTestCase) ... ok
test_Markup_escape_None_noquotes (genshi.tests.core.MarkupTestCase) ... ok
test_add_markup (genshi.tests.core.MarkupTestCase) ... ok
test_add_reverse (genshi.tests.core.MarkupTestCase) ... ok
test_add_str (genshi.tests.core.MarkupTestCase) ... ok
test_escape (genshi.tests.core.MarkupTestCase) ... ok
test_escape_noquotes (genshi.tests.core.MarkupTestCase) ... ok
test_join (genshi.tests.core.MarkupTestCase) ... ok
test_join_over_iter (genshi.tests.core.MarkupTestCase) ... ok
test_mod (genshi.tests.core.MarkupTestCase) ... ok
test_mod_mapping (genshi.tests.core.MarkupTestCase) ... ok
test_mod_multi (genshi.tests.core.MarkupTestCase) ... ok
test_mod_noescape (genshi.tests.core.MarkupTestCase) ... ok
test_mul (genshi.tests.core.MarkupTestCase) ... ok
test_mul_reverse (genshi.tests.core.MarkupTestCase) ... ok
test_new_with_encoding (genshi.tests.core.MarkupTestCase) ... ok
test_pickle (genshi.tests.core.MarkupTestCase) ... ok
test_repr (genshi.tests.core.MarkupTestCase) ... ok
test_stripentities_all (genshi.tests.core.MarkupTestCase) ... ok
test_stripentities_keepxml (genshi.tests.core.MarkupTestCase) ... ok
test_striptags_empty (genshi.tests.core.MarkupTestCase) ... ok
test_striptags_mid (genshi.tests.core.MarkupTestCase) ... ok
test_unescape_markup (genshi.tests.core.MarkupTestCase) ... ok
test_pickle (genshi.tests.core.NamespaceTestCase) ... ok
test_repr (genshi.tests.core.NamespaceTestCase) ... ok
test_repr_eval (genshi.tests.core.NamespaceTestCase) ... ok
test_repr_eval_non_ascii (genshi.tests.core.NamespaceTestCase) ... ok
test_non_ascii (genshi.tests.core.AttrsTestCase) ... ok
test_pickle (genshi.tests.core.AttrsTestCase) ... ok
test_curly_brace_equality (genshi.tests.core.QNameTestCase) ... ok
test_leading_curly_brace (genshi.tests.core.QNameTestCase) ... ok
test_pickle (genshi.tests.core.QNameTestCase) ... ok
test_repr (genshi.tests.core.QNameTestCase) ... ok
test_repr_eval (genshi.tests.core.QNameTestCase) ... ok
test_repr_eval_non_ascii (genshi.tests.core.QNameTestCase) ... ok
Attrs (genshi.core)
Doctest: genshi.core.Attrs ... ok
__getitem__ (genshi.core.Attrs)
Doctest: genshi.core.Attrs.__getitem__ ... ok
__getslice__ (genshi.core.Attrs)
Doctest: genshi.core.Attrs.__getslice__ ... ok
totuple (genshi.core.Attrs)
Doctest: genshi.core.Attrs.totuple ... ok
escape (genshi.core.Markup)
Doctest: genshi.core.Markup.escape ... ok
unescape (genshi.core.Markup)
Doctest: genshi.core.Markup.unescape ... ok
Namespace (genshi.core)
Doctest: genshi.core.Namespace ... ok
QName (genshi.core)
Doctest: genshi.core.QName ... ok
__or__ (genshi.core.Stream)
Doctest: genshi.core.Stream.__or__ ... ok
select (genshi.core.Stream)
Doctest: genshi.core.Stream.select ... ok
escape (genshi.core)
Doctest: genshi.core.escape ... ok
unescape (genshi.core)
Doctest: genshi.core.unescape ... ok
HTMLFormFiller (genshi.filters.html)
Doctest: genshi.filters.html.HTMLFormFiller ... ok
HTMLSanitizer (genshi.filters.html)
Doctest: genshi.filters.html.HTMLSanitizer ... ok
is_safe_uri (genshi.filters.html.HTMLSanitizer)
Doctest: genshi.filters.html.HTMLSanitizer.is_safe_uri ... ok
sanitize_css (genshi.filters.html.HTMLSanitizer)
Doctest: genshi.filters.html.HTMLSanitizer.sanitize_css ... ok
test_fill_input_checkbox_multi_value_auto (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_checkbox_multi_value_defined (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_checkbox_single_value_auto (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_checkbox_single_value_auto_no_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_checkbox_single_value_defined (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_hidden_multi_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_hidden_no_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_hidden_single_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_password_disabled (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_password_enabled (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_radio_empty_string (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_radio_multi_empty_string (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_radio_multi_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_radio_no_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_radio_single_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_text_multi_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_text_no_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_input_text_single_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_option_segmented_text (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ERROR
test_fill_option_segmented_text_no_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ERROR
test_fill_option_unicode_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_select_multi_value_auto (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_select_multi_value_defined (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_select_no_value_auto (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_select_no_value_defined (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_select_single_value_auto (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_select_single_value_defined (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_textarea_multi_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_textarea_multiple (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_textarea_no_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_textarea_preserve_original (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_fill_textarea_single_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase) ... ok
test_capital_expression (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_backslash_without_hex (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_capital_url_with_javascript (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_close_empty_tag (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_css_hack (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_entityref_text (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_escape_attr (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_escape_text (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_expression (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_invalid_entity (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_negative_margin (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_property_name (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_remove_comments (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_remove_input_password (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_remove_onclick_attr (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_remove_script_elem (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_remove_src_javascript (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_remove_style_phishing (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_remove_style_scripts (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_unchanged (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_unicode_escapes (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_unicode_expression (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_unicode_url (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_unsafe_props (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
test_sanitize_url_with_javascript (genshi.filters.tests.test_html.HTMLSanitizerTestCase) ... ok
ChooseDirective (genshi.filters.i18n)
Doctest: genshi.filters.i18n.ChooseDirective ... FAIL
CommentDirective (genshi.filters.i18n)
Doctest: genshi.filters.i18n.CommentDirective ... ok
DomainDirective (genshi.filters.i18n)
Doctest: genshi.filters.i18n.DomainDirective ... ok
MsgDirective (genshi.filters.i18n)
Doctest: genshi.filters.i18n.MsgDirective ... FAIL
Translator (genshi.filters.i18n)
Doctest: genshi.filters.i18n.Translator ... FAIL
extract (genshi.filters.i18n.Translator)
Doctest: genshi.filters.i18n.Translator.extract ... FAIL
extract_from_code (genshi.filters.i18n)
Doctest: genshi.filters.i18n.extract_from_code ... FAIL
parse_msg (genshi.filters.i18n)
Doctest: genshi.filters.i18n.parse_msg ... ok
test_extract_attribute_expr (genshi.filters.tests.i18n.TranslatorTestCase) ... ERROR
test_extract_funky_plural_form (genshi.filters.tests.i18n.TranslatorTestCase) ... ERROR
test_extract_gettext_with_unicode_string (genshi.filters.tests.i18n.TranslatorTestCase) ... ERROR
test_extract_included_attribute_text (genshi.filters.tests.i18n.TranslatorTestCase) ... ok
test_extract_non_included_attribute_interpolated (genshi.filters.tests.i18n.TranslatorTestCase) ... ERROR
test_extract_plural_form (genshi.filters.tests.i18n.TranslatorTestCase) ... ERROR
test_extract_tag_with_variable_xml_lang (genshi.filters.tests.i18n.TranslatorTestCase) ... ERROR
test_extract_text_from_sub (genshi.filters.tests.i18n.TranslatorTestCase) ... ERROR
test_extract_without_text (genshi.filters.tests.i18n.TranslatorTestCase) ... ERROR
test_ignore_attribute_with_expression (genshi.filters.tests.i18n.TranslatorTestCase) ... ERROR
test_ignore_tag_with_fixed_xml_lang (genshi.filters.tests.i18n.TranslatorTestCase) ... ok
test_translate_included_attribute_text (genshi.filters.tests.i18n.TranslatorTestCase) ... ok
test_translate_with_translations_object (genshi.filters.tests.i18n.TranslatorTestCase) ... ok
test_extract_i18n_msg (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_as_element_with_attributes (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_elt_nonewline (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_empty (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_label_with_nested_input (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_multiple (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_multiple_empty (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_nested (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_nonewline (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_with_attr (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_with_attributes (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_with_comment (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_with_directive (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_extract_i18n_msg_with_dynamic_attributes (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_extract_i18n_msg_with_other_directives_nested (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_extract_i18n_msg_with_param (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_extract_i18n_msg_with_py_strip (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_with_py_strip_and_comment (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_extract_i18n_msg_with_two_params (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_i18n_msg_ticket_251_extract (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_i18n_msg_ticket_251_translate (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_i18n_msg_ticket_300_extract (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_i18n_msg_ticket_300_translate (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_i18n_msg_with_other_nested_directives_with_reordered_content (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_translate_i18n_msg (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_and_comment_with_py_strip_directives (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_and_py_strip_directives (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_as_element_with_attributes (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_elt_nonewline (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_empty (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_label_with_nested_input (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_multiple (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_multiple_empty (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_nested (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_nonewline (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_ticket_404 (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_translate_i18n_msg_ticket_404_regression (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_translate_i18n_msg_with_attr (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_with_attribute_param (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_translate_i18n_msg_with_attributes (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_with_comment (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ok
test_translate_i18n_msg_with_directive (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_translate_i18n_msg_with_dynamic_attributes (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_translate_i18n_msg_with_other_directives_nested (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_translate_i18n_msg_with_param (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_translate_i18n_msg_with_param_reordered (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_translate_i18n_msg_with_two_params (genshi.filters.tests.i18n.MsgDirectiveTestCase) ... ERROR
test_extract_i18n_choose_as_attribute (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_extract_i18n_choose_as_attribute_and_py_strip (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_extract_i18n_choose_as_attribute_with_params (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_extract_i18n_choose_as_attribute_with_params_and_comment (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_extract_i18n_choose_as_attribute_with_params_and_domain_as_param (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_extract_i18n_choose_as_directive (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_extract_i18n_choose_as_directive_with_params (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_extract_i18n_choose_as_directive_with_params_and_comment (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_extract_i18n_choose_as_directive_with_params_and_domain_as_directive (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_extract_i18n_choose_as_element_with_attributes (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_extract_i18n_choose_with_attributes (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_and_domain_and_py_strip (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_and_plural_with_py_strip (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_and_py_strip (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_and_singular_with_py_strip (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_as_attribute (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_as_attribute_with_params (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_as_attribute_with_params_and_domain_as_param (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_as_directive (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_as_directive_singular_and_plural_with_strip (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_as_directive_with_params (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_as_directive_with_params_and_domain_as_directive (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_as_element_with_attributes (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_plural_singular_as_directive (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_choose_with_attributes (genshi.filters.tests.i18n.ChooseDirectiveTestCase) ... ERROR
test_translate_i18n_domain_as_directive_not_attribute (genshi.filters.tests.i18n.DomainDirectiveTestCase) ... ok
test_translate_i18n_domain_nested_directives (genshi.filters.tests.i18n.DomainDirectiveTestCase) ... ok
test_translate_i18n_domain_with_empty_nested_domain_directive (genshi.filters.tests.i18n.DomainDirectiveTestCase) ... ok
test_translate_i18n_domain_with_inline_directive_on_START_NS (genshi.filters.tests.i18n.DomainDirectiveTestCase) ... ok
test_translate_i18n_domain_with_inline_directive_on_START_NS_with_py_strip (genshi.filters.tests.i18n.DomainDirectiveTestCase) ... ok
test_translate_i18n_domain_with_inline_directives (genshi.filters.tests.i18n.DomainDirectiveTestCase) ... ok
test_translate_i18n_domain_with_msg_directives (genshi.filters.tests.i18n.DomainDirectiveTestCase) ... ok
test_translate_i18n_domain_with_nested_includes (genshi.filters.tests.i18n.DomainDirectiveTestCase) ... ERROR
test_translate_i18n_domain_with_nested_includes_with_translatable_attrs (genshi.filters.tests.i18n.DomainDirectiveTestCase) ... ERROR
test_translate_i18n_domain_without_msg_directives (genshi.filters.tests.i18n.DomainDirectiveTestCase) ... ok
test_extract_py_def_directive_with_py_strip (genshi.filters.tests.i18n.ExtractTestCase) ... ERROR
test_extraction_inside_ignored_tags (genshi.filters.tests.i18n.ExtractTestCase) ... ERROR
test_extraction_inside_ignored_tags_with_directives (genshi.filters.tests.i18n.ExtractTestCase) ... ERROR
test_extraction_with_keyword_arg (genshi.filters.tests.i18n.ExtractTestCase) ... ERROR
test_extraction_with_nonstring_arg (genshi.filters.tests.i18n.ExtractTestCase) ... ERROR
test_extraction_without_text (genshi.filters.tests.i18n.ExtractTestCase) ... ERROR
test_markup_template_extraction (genshi.filters.tests.i18n.ExtractTestCase) ... ERROR
test_text_template_extraction (genshi.filters.tests.i18n.ExtractTestCase) ... ERROR
test_select_attr (genshi.filters.tests.transform.SelectTest) ... ok
test_select_context (genshi.filters.tests.transform.SelectTest) ... ok
test_select_inside_select (genshi.filters.tests.transform.SelectTest) ... ok
test_select_single_element (genshi.filters.tests.transform.SelectTest) ... ok
test_select_text (genshi.filters.tests.transform.SelectTest) ... ok
test_select_text_context (genshi.filters.tests.transform.SelectTest) ... ok
test_invert_attribute (genshi.filters.tests.transform.InvertTest) ... ok
test_invert_context (genshi.filters.tests.transform.InvertTest) ... ok
test_invert_element (genshi.filters.tests.transform.InvertTest) ... ok
test_invert_inverted_element (genshi.filters.tests.transform.InvertTest) ... ok
test_invert_text (genshi.filters.tests.transform.InvertTest) ... ok
test_invert_text_context (genshi.filters.tests.transform.InvertTest) ... ok
test_end (genshi.filters.tests.transform.EndTest) ... ok
test_empty_attr (genshi.filters.tests.transform.EmptyTest) ... ok
test_empty_context (genshi.filters.tests.transform.EmptyTest) ... ok
test_empty_element (genshi.filters.tests.transform.EmptyTest) ... ok
test_empty_text (genshi.filters.tests.transform.EmptyTest) ... ok
test_empty_text_context (genshi.filters.tests.transform.EmptyTest) ... ok
test_remove_attr (genshi.filters.tests.transform.RemoveTest) ... ok
test_remove_context (genshi.filters.tests.transform.RemoveTest) ... ok
test_remove_element (genshi.filters.tests.transform.RemoveTest) ... ok
test_remove_text (genshi.filters.tests.transform.RemoveTest) ... ok
test_remove_text_context (genshi.filters.tests.transform.RemoveTest) ... ok
test_unwrap_adjacent (genshi.filters.tests.transform.UnwrapText) ... ok
test_unwrap_attr (genshi.filters.tests.transform.UnwrapText) ... ok
test_unwrap_element (genshi.filters.tests.transform.UnwrapText) ... ok
test_unwrap_root (genshi.filters.tests.transform.UnwrapText) ... ok
test_unwrap_text (genshi.filters.tests.transform.UnwrapText) ... ok
test_unwrap_text_root (genshi.filters.tests.transform.UnwrapText) ... ok
test_wrap_adjacent_elements (genshi.filters.tests.transform.WrapTest) ... ok
test_wrap_element (genshi.filters.tests.transform.WrapTest) ... ok
test_wrap_root (genshi.filters.tests.transform.WrapTest) ... ok
test_wrap_text (genshi.filters.tests.transform.WrapTest) ... ok
test_wrap_text_root (genshi.filters.tests.transform.WrapTest) ... ok
test_wrap_with_element (genshi.filters.tests.transform.WrapTest) ... ok
test_filter_adjacent_elements (genshi.filters.tests.transform.FilterTest) ... ok
test_filter_after_outside (genshi.filters.tests.transform.FilterTest) ... ok
test_filter_element (genshi.filters.tests.transform.FilterTest) ... ok
test_filter_root (genshi.filters.tests.transform.FilterTest) ... ok
test_filter_text (genshi.filters.tests.transform.FilterTest) ... ok
test_filter_text_root (genshi.filters.tests.transform.FilterTest) ... ok
test_map_element (genshi.filters.tests.transform.MapTest) ... ok
test_map_with_attribute (genshi.filters.tests.transform.MapTest) ... ok
test_map_with_root_and_end_kind (genshi.filters.tests.transform.MapTest) ... ok
test_map_with_text_kind (genshi.filters.tests.transform.MapTest) ... ok
test_substitute_foo (genshi.filters.tests.transform.SubstituteTest) ... ok
test_substitute_foobar_with_group (genshi.filters.tests.transform.SubstituteTest) ... ok
test_rename_element (genshi.filters.tests.transform.RenameTest) ... ok
test_rename_root (genshi.filters.tests.transform.RenameTest) ... ok
test_rename_text (genshi.filters.tests.transform.RenameTest) ... ok
test_replace_adjacent_elements (genshi.filters.tests.transform.ReplaceTest) ... ok
test_replace_all (genshi.filters.tests.transform.ReplaceTest) ... ok
test_replace_context (genshi.filters.tests.transform.ReplaceTest) ... ok
test_replace_element (genshi.filters.tests.transform.ReplaceTest) ... ok
test_replace_text (genshi.filters.tests.transform.ReplaceTest) ... ok
test_replace_text_context (genshi.filters.tests.transform.ReplaceTest) ... ok
test_replace_with_callback (genshi.filters.tests.transform.ReplaceTest) ... ok
test_before_adjacent_elements (genshi.filters.tests.transform.BeforeTest) ... ok
test_before_all (genshi.filters.tests.transform.BeforeTest) ... ok
test_before_context (genshi.filters.tests.transform.BeforeTest) ... ok
test_before_element (genshi.filters.tests.transform.BeforeTest) ... ok
test_before_text (genshi.filters.tests.transform.BeforeTest) ... ok
test_before_text_context (genshi.filters.tests.transform.BeforeTest) ... ok
test_before_with_callback (genshi.filters.tests.transform.BeforeTest) ... ok
test_after_adjacent_elements (genshi.filters.tests.transform.AfterTest) ... ok
test_after_all (genshi.filters.tests.transform.AfterTest) ... ok
test_after_context (genshi.filters.tests.transform.AfterTest) ... ok
test_after_element (genshi.filters.tests.transform.AfterTest) ... ok
test_after_text (genshi.filters.tests.transform.AfterTest) ... ok
test_after_text_context (genshi.filters.tests.transform.AfterTest) ... ok
test_after_with_callback (genshi.filters.tests.transform.AfterTest) ... ok
test_prepend_adjacent_elements (genshi.filters.tests.transform.PrependTest) ... ok
test_prepend_all (genshi.filters.tests.transform.PrependTest) ... ok
test_prepend_context (genshi.filters.tests.transform.PrependTest) ... ok
test_prepend_element (genshi.filters.tests.transform.PrependTest) ... ok
test_prepend_text (genshi.filters.tests.transform.PrependTest) ... ok
test_prepend_text_context (genshi.filters.tests.transform.PrependTest) ... ok
test_prepend_with_callback (genshi.filters.tests.transform.PrependTest) ... ok
test_append_adjacent_elements (genshi.filters.tests.transform.AppendTest) ... ok
test_append_all (genshi.filters.tests.transform.AppendTest) ... ok
test_append_context (genshi.filters.tests.transform.AppendTest) ... ok
test_append_element (genshi.filters.tests.transform.AppendTest) ... ok
test_append_text (genshi.filters.tests.transform.AppendTest) ... ok
test_append_text_context (genshi.filters.tests.transform.AppendTest) ... ok
test_append_with_callback (genshi.filters.tests.transform.AppendTest) ... ok
test_attr_from_function (genshi.filters.tests.transform.AttrTest) ... ok
test_remove_attr (genshi.filters.tests.transform.AttrTest) ... ok
test_remove_attr_with_function (genshi.filters.tests.transform.AttrTest) ... ok
test_set_existing_attr (genshi.filters.tests.transform.AttrTest) ... ok
test_set_new_attr (genshi.filters.tests.transform.AttrTest) ... ok
test_copy_adjacent_elements (genshi.filters.tests.transform.CopyTest) ... ok
test_copy_all (genshi.filters.tests.transform.CopyTest) ... ok
test_copy_attribute (genshi.filters.tests.transform.CopyTest) ... ok
test_copy_attributes (genshi.filters.tests.transform.CopyTest) ... ok
test_copy_context (genshi.filters.tests.transform.CopyTest) ... ok
test_copy_element (genshi.filters.tests.transform.CopyTest) ... ok
test_copy_text (genshi.filters.tests.transform.CopyTest) ... ok
test_cut_adjacent_elements (genshi.filters.tests.transform.CutTest) ... ok
test_cut_all (genshi.filters.tests.transform.CutTest) ... ok
test_cut_attribute (genshi.filters.tests.transform.CutTest) ... ok
test_cut_attributes (genshi.filters.tests.transform.CutTest) ... ok
test_cut_context (genshi.filters.tests.transform.CutTest) ... ok
test_cut_element (genshi.filters.tests.transform.CutTest) ... ok
test_cut_text (genshi.filters.tests.transform.CutTest) ... ok
transform (genshi.filters)
Doctest: genshi.filters.transform ... ok
InjectorTransformation (genshi.filters.transform)
Doctest: genshi.filters.transform.InjectorTransformation ... ok
Transformer (genshi.filters.transform)
Doctest: genshi.filters.transform.Transformer ... ok
after (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.after ... ok
append (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.append ... ok
apply (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.apply ... ok
attr (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.attr ... ok
before (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.before ... ok
buffer (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.buffer ... ok
copy (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.copy ... ok
cut (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.cut ... ok
empty (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.empty ... ok
end (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.end ... ok
filter (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.filter ... ok
invert (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.invert ... ok
map (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.map ... ok
prepend (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.prepend ... ok
remove (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.remove ... ok
rename (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.rename ... ok
replace (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.replace ... ok
select (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.select ... ok
substitute (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.substitute ... ok
trace (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.trace ... ok
unwrap (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.unwrap ... ok
wrap (genshi.filters.transform.Transformer)
Doctest: genshi.filters.transform.Transformer.wrap ... ok
HTML (genshi.input)
Doctest: genshi.input.HTML ... ok
HTMLParser (genshi.input)
Doctest: genshi.input.HTMLParser ... ok
XML (genshi.input)
Doctest: genshi.input.XML ... ok
XMLParser (genshi.input)
Doctest: genshi.input.XMLParser ... ok
test_element_attribute_order (genshi.tests.input.XMLParserTestCase) ... ok
test_html_entity_in_attribute (genshi.tests.input.XMLParserTestCase) ... ok
test_html_entity_with_dtd (genshi.tests.input.XMLParserTestCase) ... ok
test_html_entity_without_dtd (genshi.tests.input.XMLParserTestCase) ... ok
test_latin1_encoded (genshi.tests.input.XMLParserTestCase) ... ok
test_latin1_encoded_xmldecl (genshi.tests.input.XMLParserTestCase) ... ok
test_text_node_pos_multi_line (genshi.tests.input.XMLParserTestCase) ... ok
test_text_node_pos_single_line (genshi.tests.input.XMLParserTestCase) ... ok
test_undefined_entity_with_dtd (genshi.tests.input.XMLParserTestCase) ... ok
test_undefined_entity_without_dtd (genshi.tests.input.XMLParserTestCase) ... ok
test_unicode_input (genshi.tests.input.XMLParserTestCase) ... ok
test_hex_charref (genshi.tests.input.HTMLParserTestCase) ... ok
test_html_entity_in_attribute (genshi.tests.input.HTMLParserTestCase) ... ok
test_html_entity_in_text (genshi.tests.input.HTMLParserTestCase) ... ok
test_input_encoding_attribute (genshi.tests.input.HTMLParserTestCase) ... ok
test_input_encoding_text (genshi.tests.input.HTMLParserTestCase) ... ok
test_multibyte_character_on_chunk_boundary (genshi.tests.input.HTMLParserTestCase) ... ok
test_out_of_order_tags1 (genshi.tests.input.HTMLParserTestCase) ... ok
test_out_of_order_tags2 (genshi.tests.input.HTMLParserTestCase) ... ok
test_out_of_order_tags3 (genshi.tests.input.HTMLParserTestCase) ... ok
test_processing_instruction (genshi.tests.input.HTMLParserTestCase) ... ok
test_processing_instruction_no_data_1 (genshi.tests.input.HTMLParserTestCase) ... ok
test_processing_instruction_no_data_2 (genshi.tests.input.HTMLParserTestCase) ... ok
test_processing_instruction_trailing_qmark (genshi.tests.input.HTMLParserTestCase) ... ok
test_text_node_pos_multi_line (genshi.tests.input.HTMLParserTestCase) ... ok
test_text_node_pos_single_line (genshi.tests.input.HTMLParserTestCase) ... ok
test_unicode_input (genshi.tests.input.HTMLParserTestCase) ... ok
test_xmldecl (genshi.tests.input.HTMLParserTestCase) ... ok
test_xmldecl_encoding (genshi.tests.input.HTMLParserTestCase) ... ok
test_xmldecl_standalone (genshi.tests.input.HTMLParserTestCase) ... ok
test_atom_with_xhtml (genshi.tests.output.XMLSerializerTestCase) ... ok
test_comment (genshi.tests.output.XMLSerializerTestCase) ... ok
test_doctype_in_stream (genshi.tests.output.XMLSerializerTestCase) ... ok
test_doctype_in_stream_no_pubid (genshi.tests.output.XMLSerializerTestCase) ... ok
test_doctype_in_stream_no_pubid_or_sysid (genshi.tests.output.XMLSerializerTestCase) ... ok
test_doctype_in_stream_no_sysid (genshi.tests.output.XMLSerializerTestCase) ... ok
test_doctype_one_and_only (genshi.tests.output.XMLSerializerTestCase) ... ok
test_multiple_bound_namespaces (genshi.tests.output.XMLSerializerTestCase) ... ok
test_multiple_default_namespaces (genshi.tests.output.XMLSerializerTestCase) ... ok
test_nested_bound_namespaces (genshi.tests.output.XMLSerializerTestCase) ... ok
test_nested_default_namespaces (genshi.tests.output.XMLSerializerTestCase) ... ok
test_processing_instruction (genshi.tests.output.XMLSerializerTestCase) ... ok
test_serializer_doctype (genshi.tests.output.XMLSerializerTestCase) ... ok
test_with_xml_decl (genshi.tests.output.XMLSerializerTestCase) ... ok
test_cache_markup (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_embedded_svg (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_empty_script (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_html5_doctype (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_ignorable_space (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_nested_bound_namespaces (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_nested_default_namespaces (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_pre_whitespace (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_script_escaping (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_script_escaping_with_namespace (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_style_escaping (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_style_escaping_with_namespace (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_textarea_whitespace (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_xhtml_namespace_prefix (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_xml_decl_dropped (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_xml_decl_included (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_xml_lang (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_xml_lang_nodup (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_xml_space (genshi.tests.output.XHTMLSerializerTestCase) ... ok
test_empty_script (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_html5_doctype (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_pre_whitespace (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_script_escaping (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_script_escaping_with_namespace (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_style_escaping (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_style_escaping_with_namespace (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_textarea_whitespace (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_xml_lang (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_xml_lang_nodup (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_xml_space (genshi.tests.output.HTMLSerializerTestCase) ... ok
test_elem_content (genshi.tests.output.EmptyTagFilterTestCase) ... ok
test_empty (genshi.tests.output.EmptyTagFilterTestCase) ... ok
test_text_content (genshi.tests.output.EmptyTagFilterTestCase) ... ok
HTMLSerializer (genshi.output)
Doctest: genshi.output.HTMLSerializer ... ok
NamespaceFlattener (genshi.output)
Doctest: genshi.output.NamespaceFlattener ... ok
TextSerializer (genshi.output)
Doctest: genshi.output.TextSerializer ... ok
XHTMLSerializer (genshi.output)
Doctest: genshi.output.XHTMLSerializer ... ok
XMLSerializer (genshi.output)
Doctest: genshi.output.XMLSerializer ... ok
path (genshi)
Doctest: genshi.path ... ok
select (genshi.path.Path)
Doctest: genshi.path.Path.select ... ok
test (genshi.path.Path)
Doctest: genshi.path.Path.test ... ok
test_1step (genshi.tests.path.PathTestCase) ... ok
test_1step_attribute (genshi.tests.path.PathTestCase) ... ok
test_1step_self (genshi.tests.path.PathTestCase) ... ok
test_1step_text (genshi.tests.path.PathTestCase) ... ok
test_1step_wildcard (genshi.tests.path.PathTestCase) ... ok
test_2step (genshi.tests.path.PathTestCase) ... ok
test_2step_attribute (genshi.tests.path.PathTestCase) ... ok
test_2step_complex (genshi.tests.path.PathTestCase) ... ok
test_2step_text (genshi.tests.path.PathTestCase) ... ok
test_3step (genshi.tests.path.PathTestCase) ... ok
test_3step_complex (genshi.tests.path.PathTestCase) ... ok
test_3step_complex_text (genshi.tests.path.PathTestCase) ... ok
test_attr_selection (genshi.tests.path.PathTestCase) ... ok
test_attr_selection_with_namespace (genshi.tests.path.PathTestCase) ... ok
test_attrname_with_namespace (genshi.tests.path.PathTestCase) ... ok
test_attrwildcard_with_namespace (genshi.tests.path.PathTestCase) ... ok
test_error_no_absolute_path (genshi.tests.path.PathTestCase) ... ok
test_error_unsupported_axis (genshi.tests.path.PathTestCase) ... ok
test_long_simple_paths (genshi.tests.path.PathTestCase) ... ok
test_name_with_namespace (genshi.tests.path.PathTestCase) ... ok
test_node_type_comment (genshi.tests.path.PathTestCase) ... ok
test_node_type_node (genshi.tests.path.PathTestCase) ... ok
test_node_type_processing_instruction (genshi.tests.path.PathTestCase) ... ok
test_node_type_text (genshi.tests.path.PathTestCase) ... ok
test_predicate_advanced_position (genshi.tests.path.PathTestCase) ... ok
test_predicate_attr (genshi.tests.path.PathTestCase) ... ok
test_predicate_attr_and (genshi.tests.path.PathTestCase) ... ok
test_predicate_attr_and_position (genshi.tests.path.PathTestCase) ... ok
test_predicate_attr_equality (genshi.tests.path.PathTestCase) ... ok
test_predicate_attr_greater_than (genshi.tests.path.PathTestCase) ... ok
test_predicate_attr_less_than (genshi.tests.path.PathTestCase) ... ok
test_predicate_attr_or (genshi.tests.path.PathTestCase) ... ok
test_predicate_boolean_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_ceil_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_child_position (genshi.tests.path.PathTestCase) ... ok
test_predicate_concat_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_contains_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_false_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_floor_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_localname (genshi.tests.path.PathTestCase) ... ok
test_predicate_matches_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_name (genshi.tests.path.PathTestCase) ... ok
test_predicate_namespace (genshi.tests.path.PathTestCase) ... ok
test_predicate_normalize_space_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_not_name (genshi.tests.path.PathTestCase) ... ok
test_predicate_number_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_position (genshi.tests.path.PathTestCase) ... ok
test_predicate_position_and_attr (genshi.tests.path.PathTestCase) ... ok
test_predicate_round_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_starts_with_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_string_length_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_substring_after_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_substring_before_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_substring_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_termination (genshi.tests.path.PathTestCase) ... ok
test_predicate_translate_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_true_function (genshi.tests.path.PathTestCase) ... ok
test_predicate_variable (genshi.tests.path.PathTestCase) ... ok
test_self_and_descendant (genshi.tests.path.PathTestCase) ... ok
test_simple_strategy_support (genshi.tests.path.PathTestCase) ... ok
test_simple_union (genshi.tests.path.PathTestCase) ... ok
test_wildcard_with_namespace (genshi.tests.path.PathTestCase) ... ok
Context (genshi.template.base)
Doctest: genshi.template.base.Context ... ok
test_copy (genshi.template.tests.base.ContextTestCase) ... ok
AttrsDirective (genshi.template.directives)
Doctest: genshi.template.directives.AttrsDirective ... FAIL
ChooseDirective (genshi.template.directives)
Doctest: genshi.template.directives.ChooseDirective ... FAIL
ContentDirective (genshi.template.directives)
Doctest: genshi.template.directives.ContentDirective ... FAIL
DefDirective (genshi.template.directives)
Doctest: genshi.template.directives.DefDirective ... FAIL
ForDirective (genshi.template.directives)
Doctest: genshi.template.directives.ForDirective ... FAIL
IfDirective (genshi.template.directives)
Doctest: genshi.template.directives.IfDirective ... FAIL
MatchDirective (genshi.template.directives)
Doctest: genshi.template.directives.MatchDirective ... FAIL
ReplaceDirective (genshi.template.directives)
Doctest: genshi.template.directives.ReplaceDirective ... FAIL
StripDirective (genshi.template.directives)
Doctest: genshi.template.directives.StripDirective ... FAIL
WithDirective (genshi.template.directives)
Doctest: genshi.template.directives.WithDirective ... FAIL
test_combined_with_loop (genshi.template.tests.directives.AttrsDirectiveTestCase) ... ERROR
test_remove_existing_attr (genshi.template.tests.directives.AttrsDirectiveTestCase) ... ERROR
test_update_existing_attr (genshi.template.tests.directives.AttrsDirectiveTestCase) ... ERROR
test_as_element (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ERROR
test_complex_nesting (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ERROR
test_complex_nesting_otherwise (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ERROR
test_in_text_template (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ERROR
test_multiple_true_whens (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ERROR
test_nesting (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ERROR
test_otherwise (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ERROR
test_otherwise_outside_choose (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ok
test_otherwise_without_test (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ok
test_when_outside_choose (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ERROR
test_when_with_strip (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ok
test_when_without_test (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ok
test_when_without_test_but_with_choose_value (genshi.template.tests.directives.ChooseDirectiveTestCase) ... ERROR
test_as_element (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_def_in_matched (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_exec_in_replace (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_function_raising_typeerror (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_function_with_default_arg (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_function_with_star_args (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_function_with_strip (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_in_text_template (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_invocation_in_attribute (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_invocation_in_attribute_none (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_nested_defs (genshi.template.tests.directives.DefDirectiveTestCase) ... ERROR
test_as_element (genshi.template.tests.directives.ForDirectiveTestCase) ... ERROR
test_for_with_empty_value (genshi.template.tests.directives.ForDirectiveTestCase) ... ok
test_loop_with_strip (genshi.template.tests.directives.ForDirectiveTestCase) ... ERROR
test_multi_assignment (genshi.template.tests.directives.ForDirectiveTestCase) ... ERROR
test_nested_assignment (genshi.template.tests.directives.ForDirectiveTestCase) ... ERROR
test_not_iterable (genshi.template.tests.directives.ForDirectiveTestCase) ... ERROR
test_as_element (genshi.template.tests.directives.IfDirectiveTestCase) ... ERROR
test_loop_with_strip (genshi.template.tests.directives.IfDirectiveTestCase) ... ERROR
test_as_element (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_cascaded_matches (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_content_directive_in_match (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_def_in_match (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_match_multiple_times1 (genshi.template.tests.directives.MatchDirectiveTestCase) ... ok
test_match_multiple_times2 (genshi.template.tests.directives.MatchDirectiveTestCase) ... ok
test_match_multiple_times3 (genshi.template.tests.directives.MatchDirectiveTestCase) ... ok
test_match_with_closure (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_match_with_once_attribute (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_match_with_position_predicate (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_match_with_recursive_attribute (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_match_with_xpath_variable (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_match_without_closure (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_multiple_matches (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_namespace_context (genshi.template.tests.directives.MatchDirectiveTestCase) ... ok
test_not_match_self (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_recursive_match_1 (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_recursive_match_2 (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_recursive_match_3 (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_select_all_attrs (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_select_all_attrs_empty (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_select_all_attrs_in_body (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_select_text_in_element (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_triple_match_produces_no_duplicate_items (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_with_strip (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_without_strip (genshi.template.tests.directives.MatchDirectiveTestCase) ... ERROR
test_as_element (genshi.template.tests.directives.ContentDirectiveTestCase) ... ok
test_as_element (genshi.template.tests.directives.ReplaceDirectiveTestCase) ... ERROR
test_replace_with_empty_value (genshi.template.tests.directives.ReplaceDirectiveTestCase) ... ok
test_strip_empty (genshi.template.tests.directives.StripDirectiveTestCase) ... ok
test_strip_false (genshi.template.tests.directives.StripDirectiveTestCase) ... ERROR
test_as_element (genshi.template.tests.directives.WithDirectiveTestCase) ... ERROR
test_ast_transformation (genshi.template.tests.directives.WithDirectiveTestCase) ... ERROR
test_multiple_vars_same_name (genshi.template.tests.directives.WithDirectiveTestCase) ... ERROR
test_multiple_vars_single_assignment (genshi.template.tests.directives.WithDirectiveTestCase) ... ERROR
test_multiple_vars_trailing_semicolon (genshi.template.tests.directives.WithDirectiveTestCase) ... ERROR
test_nested_vars_single_assignment (genshi.template.tests.directives.WithDirectiveTestCase) ... ERROR
test_semicolon_escape (genshi.template.tests.directives.WithDirectiveTestCase) ... ERROR
test_shadowing (genshi.template.tests.directives.WithDirectiveTestCase) ... ERROR
test_unicode_expr (genshi.template.tests.directives.WithDirectiveTestCase) ... ERROR
test_with_empty_value (genshi.template.tests.directives.WithDirectiveTestCase) ... ok
Expression (genshi.template.eval)
Doctest: genshi.template.eval.Expression ... FAIL
LenientLookup (genshi.template.eval)
Doctest: genshi.template.eval.LenientLookup ... FAIL
StrictLookup (genshi.template.eval)
Doctest: genshi.template.eval.StrictLookup ... FAIL
Suite (genshi.template.eval)
Doctest: genshi.template.eval.Suite ... FAIL
Undefined (genshi.template.eval)
Doctest: genshi.template.eval.Undefined ... ok
test_access_undefined (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_add (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_and (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_contains (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_div (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_floordiv (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_is (genshi.template.tests.eval.ExpressionTestCase) ... <string>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
ERROR
test_binop_is_not (genshi.template.tests.eval.ExpressionTestCase) ... <string>:1: SyntaxWarning: "is not" with a literal. Did you mean "!="?
ERROR
test_binop_mod (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_mul (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_not_contains (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_or (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_pow (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_sub (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_binop_xor (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_boolop_and (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_boolop_or (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_builtins (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_call_dstar_args (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_call_function (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_call_keywords (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_call_star_args (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_compare_eq (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_compare_ge (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_compare_gt (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_compare_le (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_compare_lt (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_compare_multi (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_compare_ne (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_conditional_expression (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_dict_literal (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_eq (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_error_access_undefined (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_error_getattr_undefined (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_error_getitem_undefined_string (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_generator_expression (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_generator_expression_with_getattr (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_generator_expression_with_getitem (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_getattr_exception (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_getattr_undefined (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_getitem_exception (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_getitem_undefined_string (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_hash (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_lambda (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_lambda_tuple_arg (genshi.template.tests.eval.ExpressionTestCase) ... ok
test_list_comprehension (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_list_comprehension_with_getattr (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_list_comprehension_with_getitem (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_list_literal (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_name_lookup (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_num_literal (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_pickle (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_slice (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_slice_copy (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_slice_negative_end (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_slice_negative_start (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_slice_stride (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_slice_with_vars (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_str_literal (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_str_literal_non_ascii (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_tuple_literal (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_unaryop_inv (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_unaryop_neg (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_unaryop_not (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_unaryop_pos (genshi.template.tests.eval.ExpressionTestCase) ... ERROR
test_assign (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_assign_in_list (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_assign_to_attribute (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_assign_to_dict_item (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_augmented_assign_in_def (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_augmented_assign_in_loop_in_def (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_augmented_attribute_assignment (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_class (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_class_in_def (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_class_with_methods (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def_all_defaults (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def_kwargs (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def_kwonlyarg (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def_kwonlyarg_with_default (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def_nested (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def_some_defaults (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def_using_nonlocal (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def_vararg (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def_with_decorator (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_def_with_multiple_statements (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_delattr (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_delete (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_delitem (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_exec (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_finally (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_for (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_for_in_def (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_if (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_import (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_import_in_def (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_import_star (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_internal_shadowing (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_local_augmented_assign (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_pickle (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_raise (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_return (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_try_except (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_while_break (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_with_statement (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_with_statement_with_multiple_items (genshi.template.tests.eval.SuiteTestCase) ... ERROR
test_yield_expression (genshi.template.tests.eval.SuiteTestCase) ... ERROR
interpolate (genshi.template.interpolation)
Doctest: genshi.template.interpolation.interpolate ... FAIL
test_interpolate_dobuleescaped (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_escaped (genshi.template.tests.interpolation.InterpolateTestCase) ... ok
test_interpolate_full_mismatched_brackets (genshi.template.tests.interpolation.InterpolateTestCase) ... ok
test_interpolate_full_nested_brackets (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_mixed1 (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_mixed2 (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_quoted_brackets_1 (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_quoted_brackets_2 (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_quoted_brackets_3 (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_quoted_brackets_4 (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_quoted_brackets_5 (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_short (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_short_containing_digit (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_short_containing_dot (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_short_containing_underscore (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_short_doubleescaped (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_short_escaped (genshi.template.tests.interpolation.InterpolateTestCase) ... ok
test_interpolate_short_escaped_2 (genshi.template.tests.interpolation.InterpolateTestCase) ... ok
test_interpolate_short_starting_with_digit (genshi.template.tests.interpolation.InterpolateTestCase) ... ok
test_interpolate_short_starting_with_dot (genshi.template.tests.interpolation.InterpolateTestCase) ... ok
test_interpolate_short_starting_with_underscore (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_simple (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
test_interpolate_string (genshi.template.tests.interpolation.InterpolateTestCase) ... ok
test_interpolate_triplequoted (genshi.template.tests.interpolation.InterpolateTestCase) ... ERROR
TemplateLoader (genshi.template.loader)
Doctest: genshi.template.loader.TemplateLoader ... FAIL
prefixed (genshi.template.loader.TemplateLoader)
Doctest: genshi.template.loader.TemplateLoader.prefixed ... ok
test_absolute_include (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_abspath_caching (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_abspath_include_caching_without_search_path (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_load_with_callback (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_load_with_default_encoding (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_load_with_explicit_encoding (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_prefix_delegation_to_directories (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_prefix_delegation_to_directories_with_subdirs (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_relative_absolute_template_preferred (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_relative_include_from_inmemory_template (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_relative_include_parentdir (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_relative_include_samedir (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_relative_include_samesubdir (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_relative_include_subdir (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_relative_include_without_loader (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_relative_include_without_loader_relative (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_relative_include_without_search_path (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_relative_include_without_search_path_nested (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_search_path_as_string (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
test_search_path_empty (genshi.template.tests.loader.TemplateLoaderTestCase) ... ok
MarkupTemplate (genshi.template.markup)
Doctest: genshi.template.markup.MarkupTemplate ... FAIL
test_allow_exec_false (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_allow_exec_true (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_attr_escape_quotes (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_bad_directive_error (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_directive_element (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_directive_value_syntax_error (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_dynamic_include_href (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_empty_attr (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_empty_attr_interpolated (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_error_when_include_not_found (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_exec_def (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_exec_import (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_exec_in_match (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_exec_with_trailing_space (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_expression_syntax_error (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_expression_syntax_error_multi_line (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_fallback_when_auto_reload_true (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_fallback_when_include_found (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_fallback_when_include_not_found (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_include_fallback_with_directive (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_include_in_fallback (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_include_in_loop (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_include_inline_recursive (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_include_inlined (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_include_inlined_in_loop (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_interpolate_leading_trailing_space (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_interpolate_list_result (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_interpolate_mixed3 (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_interpolate_multiline (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_interpolate_non_string_attrs (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_latin1_encoded_explicit_encoding (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_latin1_encoded_with_xmldecl (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_markup_noescape (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_match_tail_handling (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_match_without_select (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_namespace_on_removed_elem (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_nested_include_fallback (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_nested_include_in_fallback (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_nested_include_matches (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_nested_matches_without_buffering (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_normal_comment (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_parse_fileobj (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_parse_stream (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_parse_with_same_namespace_nested (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_pickle (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_select_included_elements (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_template_comment (genshi.template.tests.markup.MarkupTemplateTestCase) ... ok
test_text_noescape_quotes (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_with_in_match (genshi.template.tests.markup.MarkupTemplateTestCase) ... ERROR
test_helper_functions (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ERROR
test_init_no_options (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ok
test_init_with_invalid_cache_size (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ok
test_init_with_invalid_doctype (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ok
test_init_with_invalid_output_format (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ok
test_init_with_loader_options (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ok
test_init_with_output_options (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ok
test_load_template_from_file (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ERROR
test_load_template_from_string (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ERROR
test_render (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ERROR
test_render_fragment_with_doctype (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ERROR
test_render_with_doctype (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ERROR
test_render_with_format (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ERROR
test_transform_with_load (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ERROR
test_transform_without_load (genshi.template.tests.plugin.MarkupTemplateEnginePluginTestCase) ... ERROR
test_helper_functions (genshi.template.tests.plugin.TextTemplateEnginePluginTestCase) ... ERROR
test_init_no_options (genshi.template.tests.plugin.TextTemplateEnginePluginTestCase) ... ok
test_init_with_loader_options (genshi.template.tests.plugin.TextTemplateEnginePluginTestCase) ... ok
test_init_with_new_syntax (genshi.template.tests.plugin.TextTemplateEnginePluginTestCase) ... ERROR
test_init_with_output_options (genshi.template.tests.plugin.TextTemplateEnginePluginTestCase) ... ok
test_load_template_from_file (genshi.template.tests.plugin.TextTemplateEnginePluginTestCase) ... ERROR
test_load_template_from_string (genshi.template.tests.plugin.TextTemplateEnginePluginTestCase) ... ERROR
test_render (genshi.template.tests.plugin.TextTemplateEnginePluginTestCase) ... ERROR
test_transform_with_load (genshi.template.tests.plugin.TextTemplateEnginePluginTestCase) ... ERROR
test_transform_without_load (genshi.template.tests.plugin.TextTemplateEnginePluginTestCase) ... ERROR
NewTextTemplate (genshi.template.text)
Doctest: genshi.template.text.NewTextTemplate ... FAIL
OldTextTemplate (genshi.template.text)
Doctest: genshi.template.text.OldTextTemplate ... FAIL
test_comment (genshi.template.tests.text.OldTextTemplateTestCase) ... ok
test_comment_escaping (genshi.template.tests.text.OldTextTemplateTestCase) ... ok
test_empty_lines1 (genshi.template.tests.text.OldTextTemplateTestCase) ... ERROR
test_empty_lines2 (genshi.template.tests.text.OldTextTemplateTestCase) ... ERROR
test_end_with_args (genshi.template.tests.text.OldTextTemplateTestCase) ... ERROR
test_escaping (genshi.template.tests.text.OldTextTemplateTestCase) ... ok
test_include (genshi.template.tests.text.OldTextTemplateTestCase) ... ok
test_latin1_encoded (genshi.template.tests.text.OldTextTemplateTestCase) ... ERROR
test_unicode_input (genshi.template.tests.text.OldTextTemplateTestCase) ... ERROR
test_comment (genshi.template.tests.text.NewTextTemplateTestCase) ... ok
test_comment_escaping (genshi.template.tests.text.NewTextTemplateTestCase) ... ok
test_empty_lines1 (genshi.template.tests.text.NewTextTemplateTestCase) ... ERROR
test_empty_lines1_with_crlf (genshi.template.tests.text.NewTextTemplateTestCase) ... ERROR
test_empty_lines2 (genshi.template.tests.text.NewTextTemplateTestCase) ... ERROR
test_empty_lines2_with_crlf (genshi.template.tests.text.NewTextTemplateTestCase) ... ERROR
test_end_with_args (genshi.template.tests.text.NewTextTemplateTestCase) ... ERROR
test_escaping (genshi.template.tests.text.NewTextTemplateTestCase) ... ok
test_exec_def (genshi.template.tests.text.NewTextTemplateTestCase) ... ERROR
test_exec_import (genshi.template.tests.text.NewTextTemplateTestCase) ... ERROR
test_exec_with_trailing_space (genshi.template.tests.text.NewTextTemplateTestCase) ... ok
test_include (genshi.template.tests.text.NewTextTemplateTestCase) ... ok
test_include_expr (genshi.template.tests.text.NewTextTemplateTestCase) ... ERROR
test_latin1_encoded (genshi.template.tests.text.NewTextTemplateTestCase) ... ERROR
test_unicode_input (genshi.template.tests.text.NewTextTemplateTestCase) ... ERROR
LRUCache (genshi.util)
Doctest: genshi.util.LRUCache ... ok
flatten (genshi.util)
Doctest: genshi.util.flatten ... ok
plaintext (genshi.util)
Doctest: genshi.util.plaintext ... ok
stripentities (genshi.util)
Doctest: genshi.util.stripentities ... ok
striptags (genshi.util)
Doctest: genshi.util.striptags ... ok
test_getitem (genshi.tests.util.LRUCacheTestCase) ... ok
test_setitem (genshi.tests.util.LRUCacheTestCase) ... ok

======================================================================
ERROR: test_fill_option_segmented_text (genshi.filters.tests.test_html.HTMLFormFillerTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../genshi/build/lib/genshi/filters/tests/test_html.py", line 312, in test_fill_option_segmented_text
    html = MarkupTemplate("""<form>
  File ".../genshi/build/lib/genshi/template/markup.py", line 65, in __init__
    Template.__init__(self, source, filepath=filepath, filename=filename,
  File ".../genshi/build/lib/genshi/template/base.py", line 418, in __init__
    self._stream = self._parse(source, encoding)
  File ".../genshi/build/lib/genshi/template/markup.py", line 85, in _parse
    for kind, data, pos in interpolate(data, self.filepath, pos[1],
  File ".../genshi/build/lib/genshi/template/interpolation.py", line 77, in interpolate
    expr = Expression(chunk.strip(), pos[0], pos[1],
  File ".../genshi/build/lib/genshi/template/eval.py", line 93, in __init__
    self.code = _compile(node, self.source, mode=self.mode,
  File ".../genshi/build/lib/genshi/template/eval.py", line 470, in _compile
    return build_code_chunk(code, filename, name, lineno)
  File ".../genshi/build/lib/genshi/compat.py", line 94, in build_code_chunk
    return CodeType(0, code.co_nlocals, code.co_kwonlyargcount,
TypeError: an integer is required (got type bytes)

======================================================================
ERROR: test_fill_option_segmented_text_no_value (genshi.filters.tests.test_html.HTMLFormFillerTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../genshi/build/lib/genshi/filters/tests/test_html.py", line 324, in test_fill_option_segmented_text_no_value
    html = MarkupTemplate("""<form>
  File ".../genshi/build/lib/genshi/template/markup.py", line 65, in __init__
    Template.__init__(self, source, filepath=filepath, filename=filename,
  File ".../genshi/build/lib/genshi/template/base.py", line 418, in __init__
    self._stream = self._parse(source, encoding)
  File ".../genshi/build/lib/genshi/template/markup.py", line 85, in _parse
    for kind, data, pos in interpolate(data, self.filepath, pos[1],
  File ".../genshi/build/lib/genshi/template/interpolation.py", line 77, in interpolate
    expr = Expression(chunk.strip(), pos[0], pos[1],
  File ".../genshi/build/lib/genshi/template/eval.py", line 93, in __init__
    self.code = _compile(node, self.source, mode=self.mode,
  File ".../genshi/build/lib/genshi/template/eval.py", line 470, in _compile
    return build_code_chunk(code, filename, name, lineno)
  File ".../genshi/build/lib/genshi/compat.py", line 94, in build_code_chunk
    return CodeType(0, code.co_nlocals, code.co_kwonlyargcount,
TypeError: an integer is required (got type bytes)

======================================================================
ERROR: test_extract_attribute_expr (genshi.filters.tests.i18n.TranslatorTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../genshi/build/lib/genshi/filters/tests/i18n.py", line 158, in test_extract_attribute_expr
    messages = list(translator.extract(tmpl.stream))
  File ".../genshi/build/lib/genshi/template/base.py", line 454, in stream
    self._prepare_self()
  File ".../genshi/build/lib/genshi/template/base.py", line 473, in _prepare_self
    self._stream = list(self._prepare(self._stream, inlined))
  File ".../genshi/build/lib/genshi/template/markup.py", line 289, in _prepare
    self, self._extract_includes(self._interpolate_attrs(stream)),
  File ".../genshi/build/lib/genshi/template/markup.py", line 210, in _extract_includes
    for kind, data, pos in stream:
  File ".../genshi/build/lib/genshi/template/markup.py", line 278, in _interpolate_attrs
    value = list(interpolate(value, self.filepath, pos[1],
  File ".../genshi/build/lib/genshi/template/interpolation.py", line 77, in interpolate
    expr = Expression(chunk.strip(), pos[0], pos[1],
  File ".../genshi/build/lib/genshi/template/eval.py", line 93, in __init__
    self.code = _compile(node, self.source, mode=self.mode,
  File ".../genshi/build/lib/genshi/template/eval.py", line 470, in _compile
    return build_code_chunk(code, filename, name, lineno)
  File ".../genshi/build/lib/genshi/compat.py", line 94, in build_code_chunk
    return CodeType(0, code.co_nlocals, code.co_kwonlyargcount,
TypeError: an integer is required (got type bytes)

======================================================================
ERROR: test_extract_funky_plural_form (genshi.filters.tests.i18n.TranslatorTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../genshi/build/lib/genshi/filters/tests/i18n.py", line 127, in test_extract_funky_plural_form
    tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
  File ".../genshi/build/lib/genshi/template/markup.py", line 65, in __init__
    Template.__init__(self, source, filepath=filepath, filename=filename,
  File ".../genshi/build/lib/genshi/template/base.py", line 418, in __init__
    self._stream = self._parse(source, encoding)
  File ".../genshi/build/lib/genshi/template/markup.py", line 85, in _parse
    for kind, data, pos in interpolate(data, self.filepath, pos[1],
  File ".../genshi/build/lib/genshi/template/interpolation.py", line 77, in interpolate
    expr = Expression(chunk.strip(), pos[0], pos[1],
  File ".../genshi/build/lib/genshi/template/eval.py", line 93, in __init__
    self.code = _compile(node, self.source, mode=self.mode,
  File ".../genshi/build/lib/genshi/template/eval.py", line 470, in _compile
    return build_code_chunk(code, filename, name, lineno)
  File ".../genshi/build/lib/genshi/compat.py", line 94, in build_code_chunk
    return CodeType(0, code.co_nlocals, code.co_kwonlyargcount,
TypeError: an integer is required (got type bytes)

======================================================================
ERROR: test_extract_gettext_with_unicode_string (genshi.filters.tests.i18n.TranslatorTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../genshi/build/lib/genshi/filters/tests/i18n.py", line 136, in test_extract_gettext_with_unicode_string
    tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/">
  File ".../genshi/build/lib/genshi/template/markup.py", line 65, in __init__
    Template.__init__(self, source, filepath=filepath, filename=filename,
  File ".../genshi/build/lib/genshi/template/base.py", line 418, in __init__
    self._stream = self._parse(source, encoding)
  File ".../genshi/build/lib/genshi/template/markup.py", line 85, in _parse
    for kind, data, pos in interpolate(data, self.filepath, pos[1],
  File ".../genshi/build/lib/genshi/template/interpolation.py", line 77, in interpolate
    expr = Expression(chunk.strip(), pos[0], pos[1],
  File ".../genshi/build/lib/genshi/template/eval.py", line 93, in __init__
    self.code = _compile(node, self.source, mode=self.mode,
  File ".../genshi/build/lib/genshi/template/eval.py", line 470, in _compile
    return build_code_chunk(code, filename, name, lineno)
  File ".../genshi/build/lib/genshi/compat.py", line 94, in build_code_chunk
    return CodeType(0, code.co_nlocals, code.co_kwonlyargcount,
TypeError: an integer is required (got type bytes)

======================================================================
ERROR: test_extract_non_included_attribute_interpolated (genshi.filters.tests.i18n.TranslatorTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ".../genshi/build/lib/genshi/filters/tests/i18n.py", line 167, in test_extract_non_included_attribute_interpolated
    messages = list(translator.extract(tmpl.stream))
  File ".../genshi/build/lib/genshi/template/base.py", line 454, in stream
    self._prepare_self()
  File ".../genshi/build/lib/genshi/template/base.py", line 473, in _prepare_self
    self._stream = list(self._prepare(self._stream, inlined))
  File ".../genshi/build/lib/genshi/template/markup.py", line 289, in _prepare
    self, self._extract_includes(self._interpolate_attrs(stream)),
  File ".../genshi/build/lib/genshi/template/markup.py", line 210, in _extract_includes
    for kind, data, pos in stream:
  File ".../genshi/build/lib/genshi/template/markup.py", line 278, in _interpolate_attrs
    value = list(interpolate(value, self.filepath, pos[1],
  File ".../genshi/build/lib/genshi/template/interpolation.py", line 77, in interpolate
    expr = Expression(chunk.strip(), pos[0], pos[1],
  File ".../genshi/build/lib/genshi/template/eval.py", line 93, in __init__
    self.code = _compile(node, self.source, mode=self.mode,
  File ".../genshi/build/lib/genshi/template/eval.py", line 470, in _compile
    return build_code_chunk(code, filename, name, lineno)
  File ".../genshi/build/lib/genshi/compat.py", line 94, in build_code_chunk
    return CodeType(0, code.co_nlocals, code.co_kwonlyargcount,
TypeError: an integer is required (got type bytes)

...(truncated, see attached file)..

----------------------------------------------------------------------
Ran 867 tests in 0.713s

FAILED (failures=24, errors=309)
Test failed: <unittest.runner.TextTestResult run=867 errors=309 failures=24>
error: Test failed: <unittest.runner.TextTestResult run=867 errors=309 failures=24>
ERROR: InvocationError for command '.../genshi/.tox/py38/bin/python setup.py test' (exited with code 1)
___________________________________ summary ____________________________________
ERROR:   py38: commands failed

Full output

Update examples to not require 2to3 to run under Python 3.

The examples folder still requires 2to3, and Genshi no longer uses that so we should update them to run under Python 2 and 3 from a single codebase, using six if necessary.

It's possible that kid doesn't support Python 3 at all, in which case some of the benchmarks against kid will need some other solution.

UnicodeEncodeError is raised while evaluating py:with expression in Genshi template on Python 2.7

UnicodeEncodeError is raised while evaluating py:with expression in Genshi template when non-existent key in a dict and the key is an unicode instance on Python 2.7. In Python 3.x, the issue doesn't occur.

(Originally reported at https://trac.edgewall.org/ticket/13253)

Python 2.7.12 (default, Apr 15 2020, 17:07:12)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import genshi
>>> genshi.__version__
'0.7.3'
>>> from genshi.template import MarkupTemplate
>>> t = MarkupTemplate('<x xmlns:py="http://genshi.edgewall.org/" py:with="v=d[k]" />')
>>> t.generate(d={}, k=u'\u00e9').render()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/core.py", line 184, in render
    return encode(generator, method=method, encoding=encoding, out=out)
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/output.py", line 57, in encode
    return _encode(''.join(list(iterator)))
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/output.py", line 241, in __call__
    for kind, data, pos in stream:
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/output.py", line 671, in __call__
    for kind, data, pos in stream:
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/output.py", line 776, in __call__
    for kind, data, pos in chain(stream, [(None, None, None)]):
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/output.py", line 596, in __call__
    for ev in stream:
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/core.py", line 274, in _ensure
    event = stream.next()
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/template/base.py", line 639, in _include
    for event in stream:
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/template/markup.py", line 327, in _match
    for event in stream:
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/template/base.py", line 579, in _flatten
    for kind, data, pos in stream:
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/template/directives.py", line 726, in __call__
    value = _eval_expr(expr, ctxt, vars)
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/template/base.py", line 289, in _eval_expr
    retval = expr.evaluate(ctxt)
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/template/eval.py", line 178, in evaluate
    return eval(self.code, _globals, {'__data__': data})
  File "<string>", line 1, in <Expression '?'>
  File "/dev/shm/genshi-py2/local/lib/python2.7/site-packages/genshi/template/eval.py", line 338, in lookup_item
    val = getattr(obj, key, UNDEFINED)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128)
>>>

CodeType: swapped parameter order for co_kwonlyargcount and co_nlocals

initially reported by @ztane in #43 (comment)

Since I was doing this for my own templating engine Tonnikala and was just casually browsing around, I noticed that Genshi seems to have accidentally swapped co_kwonlyargcount and co_nlocals c.f. CPython help() for code objects...

I think this does not affect Genshi on Python 3.8+ as we are using .replace() there but it still is a bug in Genshi.

Current Genshi code for Python 3:

genshi/genshi/compat.py

Lines 109 to 113 in a23f305

params = [0, code.co_nlocals, code.co_kwonlyargcount,
code.co_stacksize, code.co_flags | 0x0040,
code.co_code, code.co_consts, code.co_names,
code.co_varnames, filename, name, lineno,
code.co_lnotab, (), ()]

Actual constructor arguments in CPython 3.5:
https://github.com/python/cpython/blob/7544508f0245173bff5866aa1598c8f6cce1fc5f/Lib/types.py#L60-L65

Constructor for CPython 3.11 referenced in #43 (comment)

Genshi code Python 2:

genshi/genshi/compat.py

Lines 91 to 94 in a23f305

params = [code.co_nlocals, code.co_kwonlyargcount, code.co_stacksize,
code.co_flags, code.co_code, code.co_consts, code.co_names,
code.co_varnames, code.co_filename, code.co_name,
code.co_firstlineno, code.co_lnotab, (), ()]

Maybe I'm just confused right now but it seems the Python 2 constructor does not use the correct ordering as well: https://github.com/python/cpython/blob/3bbd2fad4d4a282c7a5a3169a4f497b97aeff319/Objects/codeobject.c#L50-L56

For Python 3 the constructor using positional parameters only is marked as "deprecated" so maybe we should use keyword parameters only.

Genshi doesn't work on Python 3.11: code expected at least 18 arguments, got 16

Example of error when running tests:

======================================================================
FAIL: OldTextTemplate (genshi.template.text)
Doctest: genshi.template.text.OldTextTemplate
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/vstinner/python/main/Lib/doctest.py", line 2216, in runTest
    raise self.failureException(self.format_failure(new.getvalue()))
AssertionError: Failed doctest test for genshi.template.text.OldTextTemplate
  File "/home/vstinner/dev/genshi/genshi/template/text.py", line 239, in OldTextTemplate

----------------------------------------------------------------------
File "/home/vstinner/dev/genshi/genshi/template/text.py", line 244, in genshi.template.text.OldTextTemplate
Failed example:
    tmpl = OldTextTemplate('''Dear $name,

    We have the following items for you:
    #for item in items
     * $item
    #end

    All the best,
    Foobar''')
Exception raised:
    Traceback (most recent call last):
      File "/home/vstinner/python/main/Lib/doctest.py", line 1348, in __run
        exec(compile(example.source, filename, "single",
      File "<doctest genshi.template.text.OldTextTemplate[0]>", line 1, in <module>
        tmpl = OldTextTemplate('''Dear $name,
      File "/home/vstinner/dev/genshi/genshi/template/base.py", line 421, in __init__
        self._stream = self._parse(source, encoding)
      File "/home/vstinner/dev/genshi/genshi/template/text.py", line 293, in _parse
        for kind, data, pos in interpolate(text, self.filepath, lineno,
      File "/home/vstinner/dev/genshi/genshi/template/interpolation.py", line 77, in interpolate
        expr = Expression(chunk.strip(), pos[0], pos[1],
      File "/home/vstinner/dev/genshi/genshi/template/eval.py", line 71, in __init__
        self.code = _compile(node, self.source, mode=self.mode,
      File "/home/vstinner/dev/genshi/genshi/template/eval.py", line 453, in _compile
        return build_code_chunk(code, filename, name, lineno)
      File "/home/vstinner/dev/genshi/genshi/compat.py", line 110, in build_code_chunk
        return CodeType(*params)
    TypeError: code() argument 15 must be bytes, not tuple
----------------------------------------------------------------------
File "/home/vstinner/dev/genshi/genshi/template/text.py", line 253, in genshi.template.text.OldTextTemplate
Failed example:
    print(tmpl.generate(name='Joe', items=[1, 2, 3]).render(encoding=None))
Exception raised:
    Traceback (most recent call last):
      File "/home/vstinner/python/main/Lib/doctest.py", line 1348, in __run
        exec(compile(example.source, filename, "single",
      File "<doctest genshi.template.text.OldTextTemplate[1]>", line 1, in <module>
        print(tmpl.generate(name='Joe', items=[1, 2, 3]).render(encoding=None))
    NameError: name 'tmpl' is not defined

DeprecationWarnings for ast.Ellipsis and ast.Str in compat module

When running tests on jaraco.site, I see these warnings against Genshi 0.7.7:

.tox/py/lib/python3.12/site-packages/genshi/compat.py:141
  /Users/jaraco/code/jaraco/jaraco.site/.tox/py/lib/python3.12/site-packages/genshi/compat.py:141: DeprecationWarning: ast.Ellipsis is deprecated and will be removed in Python 3.14; use ast.Constant instead
    _ast_Ellipsis = ast.Ellipsis

.tox/py/lib/python3.12/site-packages/genshi/compat.py:142
  /Users/jaraco/code/jaraco/jaraco.site/.tox/py/lib/python3.12/site-packages/genshi/compat.py:142: DeprecationWarning: ast.Str is deprecated and will be removed in Python 3.14; use ast.Constant instead
    _ast_Str = ast.Str

Test suite fails with Python 3.10a3

When switching from Python 3.10a2 -> 3.10a3 the test suite starts failing.

======================================================================
FAIL: test_not_iterable (genshi.template.tests.directives.ForDirectiveTestCase)
Verify that assignment to nested tuples works correctly.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "…/genshi/template/tests/directives.py", line 489, in test_not_iterable
    list(tmpl.generate(foo=12))
TypeError: 'int' object is not iterable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "…/genshi/template/tests/directives.py", line 505, in test_not_iterable
    self.assertEqual(2, frames[-1].tb_lineno)
AssertionError: 2 != 61

======================================================================
FAIL: test_error_access_undefined (genshi.template.tests.eval.ExpressionTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "…/genshi/template/tests/eval.py", line 444, in test_error_access_undefined
    expr.evaluate({})
genshi.template.eval.UndefinedError: "nothing" not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "…/genshi/template/tests/eval.py", line 458, in test_error_access_undefined
    self.assertEqual(50, frames[-3].tb_lineno)
AssertionError: 50 != 109

======================================================================
FAIL: test_error_getattr_undefined (genshi.template.tests.eval.ExpressionTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "…/genshi/template/eval.py", line 301, in lookup_attr
    val = getattr(obj, key)
AttributeError: 'Something' object has no attribute 'nil'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "…/genshi/template/eval.py", line 307, in lookup_attr
    val = obj[key]
TypeError: 'Something' object is not subscriptable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "…/genshi/template/tests/eval.py", line 467, in test_error_getattr_undefined
    expr.evaluate({'something': Something()})
genshi.template.eval.UndefinedError: <Something> has no member named "nil"

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "…/genshi/template/tests/eval.py", line 482, in test_error_getattr_undefined
    self.assertEqual(50, frame.tb_lineno)
AssertionError: 50 != 109

======================================================================
FAIL: test_error_getitem_undefined_string (genshi.template.tests.eval.ExpressionTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "…/genshi/template/eval.py", line 318, in lookup_item
    return obj[key]
TypeError: 'Something' object is not subscriptable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "…/genshi/template/tests/eval.py", line 491, in test_error_getitem_undefined_string
    expr.evaluate({'something': Something()})
genshi.template.eval.UndefinedError: <Something> has no member named "nil"

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "…/genshi/template/tests/eval.py", line 506, in test_error_getitem_undefined_string
    self.assertEqual(50, frame.tb_lineno)
AssertionError: 50 != 109

----------------------------------------------------------------------
Ran 886 tests in 0.547s

FAILED (failures=4)

Initial report: https://bugzilla.redhat.com/show_bug.cgi?id=1907400

Update GitHub actions used in sdist and wheels workflow

The build sdist and wheels workflow currently gives the following warnings:

Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v2, actions/setup-python@v2, actions/upload-artifact@v2. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.

Exception handler tries to use nonexistent error class (html.HTMLParseError)

At line 349 of input.py the exception handler tries to access html.HTMLParseError, an error class, that used to exist in the cPython's html library but has been removed since Python 3.3.

The genshi code in question is this:

        def _generate():
            if self.encoding:
                reader = codecs.getreader(self.encoding)
                source = reader(self.source)
            else:
                source = self.source
            try:
                bufsize = 4 * 1024 # 4K
                done = False
                while 1:
                    while not done and len(self._queue) == 0:
                        data = source.read(bufsize)
                        if not data: # end of data
                            self.close()
                            done = True
                        else:
                            if not isinstance(data, six.text_type):
                                raise UnicodeError("source returned bytes, but no encoding specified")
                            self.feed(data)
                    for kind, data, pos in self._queue:
                        yield kind, data, pos
                    self._queue = []
                    if done:
                        open_tags = self._open_tags
                        open_tags.reverse()
                        for tag in open_tags:
                            yield END, QName(tag), pos
                        break
            except html.HTMLParseError as e:
                msg = '%s: line %d, column %d' % (e.msg, e.lineno, e.offset)
                raise ParseError(msg, self.filename, e.lineno, e.offset)
        return Stream(_generate()).filter(_coalesce)

implicit build dependency on setuptools

The current version of genshi has an implicit dependency on setuptools. Attempting to install without setuptools installed results in the following error:

~ $ pip install --no-deps git+https://github.com/edgewall/genshi
Collecting git+https://github.com/edgewall/genshi
  Cloning https://github.com/edgewall/genshi to /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-req-build-jjcd99o0
  Running command git clone --filter=blob:none --quiet https://github.com/edgewall/genshi /private/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-req-build-jjcd99o0
  Resolved https://github.com/edgewall/genshi to commit eb113c455bf4c002fc9b1e1821ce58c8c9b10275
  Preparing metadata (setup.py) ... error
  error: subprocess-exited-with-error
  
  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [1 lines of output]
      ERROR: Can not execute `setup.py` since setuptools is not available in the build environment.
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

One may work around the issue by passing --use-pep517=true or setting PIP_USE_PEP517=true.

Instead, genshi should declare its build dependencies and backends using pep517 and pep518.

Release 0.7.9

Todo items for 0.7.9:

  • Check that master works nicely.
  • Update the changelog.
  • Update the 0.7.x branch and bump the version.
  • Create a GitHub release.
  • Run the release action.
  • Email the mailing list.

Fix pytest warnings

In #41, some pytest warnings were reported and the uses of assertEquals were fixed but some other warnings remaining -- see
#41 (comment) for the full set.

Python 3.13.0b1: `AttributeError: module 'unittest' has no attribute 'makeSuite'`

$ python3.13 setup.py test
running test
WARNING: Testing via this command is deprecated and will be removed in a future version. Users looking for a generic test entry point independent of test runner are encouraged to use tox.
/usr/lib/python3.13/site-packages/setuptools/command/test.py:193: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated.
!!

        ********************************************************************************
        Requirements should be satisfied by a PEP 517 installer.
        If you are using pip, you can try `pip install --use-pep517`.
        ********************************************************************************

!!
  ir_d = dist.fetch_build_eggs(dist.install_requires)
/usr/lib/python3.13/site-packages/setuptools/command/test.py:194: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated.
!!

        ********************************************************************************
        Requirements should be satisfied by a PEP 517 installer.
        If you are using pip, you can try `pip install --use-pep517`.
        ********************************************************************************

!!
  tr_d = dist.fetch_build_eggs(dist.tests_require or [])
/usr/lib/python3.13/site-packages/setuptools/command/test.py:195: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated.
!!

        ********************************************************************************
        Requirements should be satisfied by a PEP 517 installer.
        If you are using pip, you can try `pip install --use-pep517`.
        ********************************************************************************

!!
  er_d = dist.fetch_build_eggs(
running egg_info
creating Genshi.egg-info
writing Genshi.egg-info/PKG-INFO
writing dependency_links to Genshi.egg-info/dependency_links.txt
writing entry points to Genshi.egg-info/entry_points.txt
writing requirements to Genshi.egg-info/requires.txt
writing top-level names to Genshi.egg-info/top_level.txt
writing manifest file 'Genshi.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.html' under directory 'doc'
warning: no files found matching '*.css' under directory 'doc'
warning: no files found matching '*.py' under directory 'doc'
warning: no files found matching '*.ini' under directory 'doc'
warning: no files found matching 'COPYING' under directory 'doc'
warning: no previously-included files matching '*.pyc' found anywhere in distribution
adding license file 'COPYING'
writing manifest file 'Genshi.egg-info/SOURCES.txt'
running build_ext
building 'genshi._speedups' extension
creating build
creating build/temp.linux-x86_64-cpython-313
creating build/temp.linux-x86_64-cpython-313/genshi
x86_64-pc-linux-gnu-gcc -fno-strict-overflow -Wsign-compare -fPIC -I/usr/include/python3.13 -c genshi/_speedups.c -o build/temp.linux-x86_64-cpython-313/genshi/_speedups.o
x86_64-pc-linux-gnu-gcc -shared build/temp.linux-x86_64-cpython-313/genshi/_speedups.o -L/usr/lib64 -o /tmp/genshi/genshi/_speedups.cpython-313-x86_64-linux-gnu.so
/tmp/genshi/genshi/filters/html.py:357: SyntaxWarning: invalid escape sequence '\('
  u'[Uu][Rr\u0280][Ll\u029F]%s*\(([^)]+)' % (r'\s')).finditer
Traceback (most recent call last):
  File "/tmp/genshi/setup.py", line 98, in <module>
    setup(
    ~~~~~^
        test_suite = 'genshi.tests.suite',
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<4 lines>...
        **extra
        ^^^^^^^
    )
    ^
  File "/usr/lib/python3.13/site-packages/setuptools/__init__.py", line 104, in setup
    return distutils.core.setup(**attrs)
           ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/setuptools/_distutils/core.py", line 184, in setup
    return run_commands(dist)
  File "/usr/lib/python3.13/site-packages/setuptools/_distutils/core.py", line 200, in run_commands
    dist.run_commands()
    ~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.13/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
    self.run_command(cmd)
    ~~~~~~~~~~~~~~~~^^^^^
  File "/usr/lib/python3.13/site-packages/setuptools/dist.py", line 967, in run_command
    super().run_command(command)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/usr/lib/python3.13/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
    cmd_obj.run()
    ~~~~~~~~~~~^^
  File "/usr/lib/python3.13/site-packages/setuptools/command/test.py", line 223, in run
    self.run_tests()
    ~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.13/site-packages/setuptools/command/test.py", line 226, in run_tests
    test = unittest.main(
        None,
    ...<4 lines>...
        exit=False,
    )
  File "/usr/lib/python3.13/unittest/main.py", line 103, in __init__
    self.parseArgs(argv)
    ~~~~~~~~~~~~~~^^^^^^
  File "/usr/lib/python3.13/unittest/main.py", line 142, in parseArgs
    self.createTests()
    ~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.13/unittest/main.py", line 153, in createTests
    self.test = self.testLoader.loadTestsFromNames(self.testNames,
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
                                                   self.module)
                                                   ^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/loader.py", line 207, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
              ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/loader.py", line 192, in loadTestsFromName
    test = obj()
  File "/tmp/genshi/genshi/tests/__init__.py", line 23, in suite
    suite.addTest(builder.suite())
                  ~~~~~~~~~~~~~^^
  File "/tmp/genshi/genshi/tests/builder.py", line 70, in suite
    suite.addTest(unittest.makeSuite(ElementFactoryTestCase, 'test'))
                  ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.13/unittest/__init__.py", line 80, in __getattr__
    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
AttributeError: module 'unittest' has no attribute 'makeSuite'

DeprecationWarning in interpolation module

On Python 3.7.1

$ pip-run genshi -- -W error -c 'import genshi.template.interpolation'
Collecting genshi
  Using cached https://files.pythonhosted.org/packages/7f/76/a6c9ba86f84100ee67ca69f8cd7c3dcd58a591502dd8729ce1cbbaae8266/Genshi-0.7.1-py3-none-any.whl
Installing collected packages: genshi
Successfully installed genshi-0.7.1
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-run-p31q4af_/genshi/template/__init__.py", line 20, in <module>
    from genshi.template.markup import MarkupTemplate
  File "/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-run-p31q4af_/genshi/template/markup.py", line 25, in <module>
    from genshi.template.interpolation import interpolate
  File "/var/folders/c6/v7hnmq453xb6p2dbz1gqc6rr0000gn/T/pip-run-p31q4af_/genshi/template/interpolation.py", line 36, in <module>
    PseudoToken
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/re.py", line 234, in compile
    return _compile(pattern, flags)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/re.py", line 286, in _compile
    p = sre_compile.compile(pattern, flags)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/sre_compile.py", line 764, in compile
    p = sre_parse.parse(p, flags)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/sre_parse.py", line 930, in parse
    p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/sre_parse.py", line 426, in _parse_sub
    not nested and not items))
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/sre_parse.py", line 796, in _parse
    DeprecationWarning, stacklevel=nested + 6
DeprecationWarning: Flags not at the start of the expression '[uU]?[rR]?("""|\\\'\\\'\\' (truncated)

Python 3.9: module '_ast' has no attribute 'Index'

python-genshi fails to build with Python 3.9.0a5:

Traceback (most recent call last):
  File "/usr/lib64/python3.9/doctest.py", line 1329, in __run
    exec(compile(example.source, filename, "single",
  File "<doctest genshi.template.eval.Expression[3]>", line 1, in <module>
    Expression('items[-1]').evaluate(data)
  File "/builddir/build/BUILD/python3-python-genshi-0.7.3-5.fc33/build/lib/genshi/template/eval.py", line 93, in __init__
    self.code = _compile(node, self.source, mode=self.mode,
  File "/builddir/build/BUILD/python3-python-genshi-0.7.3-5.fc33/build/lib/genshi/template/eval.py", line 451, in _compile
    tree = xform().visit(node)
  File "/builddir/build/BUILD/python3-python-genshi-0.7.3-5.fc33/build/lib/genshi/template/astutil.py", line 798, in visit
    return visitor(node)
  File "/builddir/build/BUILD/python3-python-genshi-0.7.3-5.fc33/build/lib/genshi/template/astutil.py", line 820, in _clone
    value = self.visit(value)
  File "/builddir/build/BUILD/python3-python-genshi-0.7.3-5.fc33/build/lib/genshi/template/astutil.py", line 798, in visit
    return visitor(node)
  File "/builddir/build/BUILD/python3-python-genshi-0.7.3-5.fc33/build/lib/genshi/template/eval.py", line 640, in visit_Subscript
    not isinstance(node.slice, _ast.Index):
AttributeError: module '_ast' has no attribute 'Index'

For the build logs, see: https://copr-be.cloud.fedoraproject.org/results/@python/python3.9/fedora-rawhide-x86_64/01321086-python-genshi/

Downstream bug: python-genshi fails to build with Python 3.9: module '_ast' has no attribute 'Index'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.