Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial Update #9588

merged 3 commits into from Feb 23, 2018


None yet
5 participants
Copy link

pyup-bot commented Feb 20, 2018

This is my first visit to this fine repo so I have bundled all updates in a single pull request to make things easier for you to merge.

Close this pull request and delete the branch if you want me to start with single pull requests right away

Here's the executive summary:


Here's a list of all the updates bundled in this pull request. I've added some links to make it easier for you to find all the information you need.

wptserve 1.4.0 » 1.4.0 PyPI | Docs
six 1.10.0 » 1.11.0 PyPI | Changelog | Homepage | Docs
html5lib 0.9999999 » 1.0.1 PyPI | Changelog | Repo
lxml 3.7.3 » 4.1.1 PyPI | Changelog | Homepage | Bugtracker
mercurial 4.1 » 4.5 PyPI | Homepage | Bugtracker
ordereddict 1.1 » 1.1 PyPI | Homepage
genshi 0.7 » 0.7 PyPI | Changelog | Homepage | Docs
datrie 0.7.1 » 0.7.1 PyPI | Changelog | Repo
charade 1.0.3 » 1.0.3 PyPI | Changelog | Repo
flake8 3.5.0 » 3.5.0 PyPI | Changelog | Repo
nose 1.3.7 » 1.3.7 PyPI | Changelog | Docs
coverage 4.5.1 » 4.5.1 PyPI | Changelog | Repo
hypothesis 3.45.2 » 3.45.2 PyPI | Changelog | Repo
pympler 0.5 » 0.5 PyPI | Changelog | Homepage | Docs
pytest 3.4.0 » 3.4.0 PyPI | Changelog | Repo | Homepage
zope.interface 4.4.3 » 4.4.3 PyPI | Changelog | Repo
sphinx 1.7.0 » 1.7.0 PyPI | Changelog | Homepage
coveralls 1.2.0 » 1.2.0 PyPI | Changelog | Repo
pip 9.0.1 » 9.0.1 PyPI | Changelog | Homepage
wheel 0.30.0 » 0.30.0 PyPI | Changelog | Repo
invoke 0.22.1 » 0.22.1 PyPI | Homepage
tox 2.9.1 » 2.9.1 PyPI | Changelog | Docs
gitpython 2.1.8 » 2.1.8 PyPI | Repo | Docs
towncrier 17.8.0 » 17.8.0 PyPI | Changelog | Repo
requests 2.14.2 » 2.18.4 PyPI | Changelog | Homepage


six 1.10.0 -> 1.11.0


  • Pull request 178: with_metaclass now properly proxies __prepare__ to the
    underlying metaclass.
  • Pull request 191: Allow with_metaclass to work with metaclasses implemented
    in C.
  • Pull request 203: Add parse_http_list and parse_keqv_list to moved
  • Pull request 172 and issue 171: Add unquote_to_bytes to moved urllib.parse.
  • Pull request 167: Add six.moves.getoutput.
  • Pull request 80: Add six.moves.urllib_parse.splitvalue.
  • Pull request 75: Add six.moves.email_mime_image.
  • Pull request 72: Avoid creating reference cycles through tracebacks in

html5lib 0.9999999 -> 1.0.1


Released on December 7, 2017

Breaking changes:

  • Drop support for Python 2.6. (330) (Thank you, Hugo, Will Kahn-Greene!)
  • Remove utils/ (353) (Thank you, Jon Dufresne!)


  • Improve documentation. (300, 307) (Thank you, Jon Dufresne, Tom Most,
    Will Kahn-Greene!)
  • Add iframe seamless boolean attribute. (Thank you, Ritwik Gupta!)
  • Add itemscope as a boolean attribute. (194) (Thank you, Jonathan Vanasco!)
  • Support Python 3.6. (333) (Thank you, Jon Dufresne!)
  • Add CI support for Windows using AppVeyor. (Thank you, John Vandenberg!)
  • Improve testing and CI and add code coverage (323, 334), (Thank you, Jon
    Dufresne, John Vandenberg, Geoffrey Sneddon, Will Kahn-Greene!)
  • Semver-compliant version number.

Bug fixes:

  • Add support for setuptools < 18.5 to support environment markers. (Thank you,
    John Vandenberg!)
  • Add explicit dependency for six >= 1.9. (Thank you, Eric Amorde!)
  • Fix regexes to work with Python 3.7 regex adjustments. (318, 379) (Thank
    you, Benedikt Morbach, Ville Skyttä, Mark Vasilkov!)
  • Fix alphabeticalattributes filter namespace bug. (324) (Thank you, Will
  • Include license file in generated wheel package. (350) (Thank you, Jon
  • Fix annotation-xml typo. (339) (Thank you, Will Kahn-Greene!)
  • Allow uppercase hex chararcters in CSS colour check. (377) (Thank you,
    Komal Dembla, Hugo!)


Released and unreleased on December 7, 2017. Badly packaged release.


Released on July 24, 2013

  • Removed RecursiveTreeWalker from treewalkers._base. Any
    implementation using it should be moved to
    NonRecursiveTreeWalker, as everything bundled with html5lib has
    for years.
  • Fix 67 so that BufferedStream to correctly returns a bytes
    object, thereby fixing any case where html5lib is passed a
    non-seekable RawIOBase-like object.


Released on June 27, 2013

  • Removed reordering of attributes within the serializer. There is now
    an alphabetical_attributes option which preserves the previous
    behaviour through a new filter. This allows attribute order to be
    preserved through html5lib if the tree builder preserves order.
  • Removed dom2sax from DOM treebuilders. It has been replaced by
    treeadapters.sax.to_sax which is generic and supports any
    treewalker; it also resolves all known bugs with dom2sax.
  • Fix treewalker assertions on hitting bytes strings on
    Python 2. Previous to 1.0b1, treewalkers coped with mixed
    bytes/unicode data on Python 2; this reintroduces this prior
    behaviour on Python 2. Behaviour is unchanged on Python 3.


Released on May 17, 2013

  • Implementation updated to implement the HTML specification &lt;;_ as of 5th May
    2013 (SVN &lt;;_ revision r7867).
  • Python 3.2+ supported in a single codebase using the six library.
  • Removed support for Python 2.5 and older.
  • Removed the deprecated Beautiful Soup 3 treebuilder.
    beautifulsoup4 can use html5lib as a parser instead. Note that
    since it doesn't support namespaces, foreign content like SVG and
    MathML is parsed incorrectly.
  • Removed simpletree from the package. The default tree builder is
    now etree (using the xml.etree.cElementTree implementation if
    available, and xml.etree.ElementTree otherwise).
  • Removed the XHTMLSerializer as it never actually guaranteed its
    output was well-formed XML, and hence provided little of use.
  • Removed default DOM treebuilder, so html5lib.treebuilders.dom is no
    longer supported. html5lib.treebuilders.getTreeBuilder(&quot;dom&quot;) will
    return the default DOM treebuilder, which uses xml.dom.minidom.
  • Optional heuristic character encoding detection now based on
    charade for Python 2.6 - 3.3 compatibility.
  • Optional Genshi treewalker support fixed.
  • Many bugfixes, including:
  • 33: null in attribute value breaks XML AttValue;
  • 4: nested, indirect descendant, <button> causes infinite loop;
  • Google Code 215 &lt;;_: Properly
    detect seekable streams;
  • Google Code 206 &lt;;_: add
    support for <video preload=...>, <audio preload=...>;
  • Google Code 205 &lt;;_: add
    support for <video poster=...>;
  • Google Code 202 &lt;;_: Unicode
    file breaks InputStream.
  • Source code is now mostly PEP 8 compliant.
  • Test harness has been improved and now depends on nose.


Released on July 15, 2016

  • Fix attribute order going to the tree builder to be document order
    instead of reverse document order(!).


Released on July 14, 2016

  • Added ordereddict as a mandatory dependency on Python 2.6.
  • Added lxml, genshi, datrie, charade, and all
    extras that will do the right thing based on the specific
    interpreter implementation.
  • Now requires the mock package for the testsuite.
  • Cease supporting DATrie under PyPy.
  • Remove PullDOM support, as this hasn't ever been properly
    tested, doesn't entirely work, and as far as I can tell is
    completely unused by anyone.
  • Move testsuite to py.test.
  • Fix 124: move to webencodings for decoding the input byte stream;
    this makes html5lib compliant with the Encoding Standard, and
    introduces a required dependency on webencodings.
  • Cease supporting Python 3.2 (in both CPython and PyPy forms).
  • Fix comments containing double-dash with lxml 3.5 and above.
  • Use scripting disabled by default (as we don't implement
  • Fix 11, avoiding the XSS bug potentially caused by serializer
    allowing attribute values to be escaped out of in old browser versions,
    changing the quote_attr_values option on serializer to take one of
    three values, "always" (the old True value), "legacy" (the new option,
    and the new default), and "spec" (the old False value, and the old
  • Fix 72 by rewriting the sanitizer to apply only to treewalkers
    (instead of the tokenizer); as such, this will require amending all
    callers of it to use it via the treewalker API.
  • Drop support of charade, now that chardet is supported once more.
  • Replace the charset keyword argument on parse and related methods
    with a set of keyword arguments: override_encoding, transport_encoding,
    same_origin_parent_encoding, likely_encoding, and default_encoding.
  • Move filters._base, treebuilder._base, and treewalkers._base to .base
    to clarify their status as public.
  • Get rid of the sanitizer package. Merge sanitizer.sanitize into the
    sanitizer.htmlsanitizer module and move that to sanitizer. This means
    anyone who used sanitizer.sanitize or sanitizer.HTMLSanitizer needs no
    code changes.
  • Rename treewalkers.lxmletree to .etree_lxml and
    treewalkers.genshistream to .genshi to have a consistent API.
  • Move a whole load of stuff (inputstream, ihatexml, trie, tokenizer,
    utils) to be underscore prefixed to clarify their status as private.

lxml 3.7.3 -> 4.1.1



  • Rebuild with Cython 0.27.3 to improve support for Py3.7.



Features added

  • ElementPath supports text predicates for current node, like "[.='text']".
  • ElementPath allows spaces in predicates.
  • Custom Element classes and XPath functions can now be registered with a
    decorator rather than explicit dict assignments.
  • Static Linux wheels are now built with link time optimisation (LTO) enabled.
    This should have a beneficial impact on the overall performance by providing
    a tighter compiler integration between lxml and libxml2/libxslt.

Bugs fixed

  • LP1722776: Requesting non-Element objects like comments from a document with
    PythonElementClassLookup could fail with a TypeError.



Features added

  • The ElementPath implementation is now compiled using Cython,
    which speeds up the .find*() methods quite significantly.
  • The modules lxml.builder, lxml.html.diff and lxml.html.clean
    are also compiled using Cython in order to speed them up.
  • xmlfile() supports async coroutines using async with and await.
  • iterwalk() has a new method skip_subtree() that prevents walking into
    the descendants of the current element.
  • RelaxNG.from_rnc_string() accepts a base_url argument to
    allow relative resource lookups.
  • The XSLT result object has a new method .write_output(file) that serialises
    output data into a file according to the &lt;xsl:output&gt; configuration.

Bugs fixed

  • GH251: HTML comments were handled incorrectly by the soupparser.
    Patch by mozbugbox.
  • LP1654544: The html5parser no longer passes the useChardet option
    if the input is a Unicode string, unless explicitly requested. When parsing
    files, the default is to enable it when a URL or file path is passed (because
    the file is then opened in binary mode), and to disable it when reading from
    a file(-like) object.

Note: This is a backwards incompatible change of the default configuration.
If your code parses byte strings/streams and depends on character detection,
please pass the option guess_charset=True explicitly, which already worked
in older lxml versions.

  • LP1703810: etree.fromstring() failed to parse UTF-32 data with BOM.
  • LP1526522: Some RelaxNG errors were not reported in the error log.
  • LP1567526: Empty and plain text input raised a TypeError in soupparser.
  • LP1710429: Uninitialised variable usage in HTML diff.
  • LP1415643: The closing tags context manager in xmlfile() could continue
    to output end tags even after writing failed with an exception.
  • LP1465357: xmlfile.write() now accepts and ignores None as input argument.
  • Compilation under Py3.7-pre failed due to a modified function signature.

Other changes

  • The main module source files were renamed from lxml.*.pyx to plain
    *.pyx (e.g. etree.pyx) to simplify their handling in the build
    process. Care was taken to keep the old header files as fallbacks for
    code that compiles against the public C-API of lxml, but it might still
    be worth validating that third-party code does not notice this change.



Features added

  • ElementTree.write() has a new option doctype that writes out a
    doctype string before the serialisation, in the same way as tostring().
  • GH220: xmlfile allows switching output methods at an element level.
    Patch by Burak Arslan.
  • LP1595781, GH240: added a PyCapsule Python API and C-level API for
    passing externally generated libxml2 documents into lxml.
  • GH244: error log entries have a new property path with an XPath
    expression (if known, None otherwise) that points to the tree element
    responsible for the error. Patch by Bob Kline.
  • The namespace prefix mapping that can be used in ElementPath now injects
    a default namespace when passing a None prefix.

Bugs fixed

  • GH238: Character escapes were not hex-encoded in the xmlfile serialiser.
    Patch by matejcik.
  • GH229: fix for externally created XML documents. Patch by Theodore Dubois.
  • LP1665241, GH228: Form data handling in lxml.html no longer strips the
    option values specified in form attributes but only the text values.
    Patch by Ashish Kulkarni.
  • LP1551797: revert previous fix for XSLT error logging as it breaks
    multi-threaded XSLT processing.
  • LP1673355, GH233: fromstring() html5parser failed to parse byte strings.

Other changes

  • The previously undocumented docstring option in ElementTree.write()
    produces a deprecation warning and will eventually be removed.



Bugs fixed

  • LP1551797: revert previous fix for XSLT error logging as it breaks
    multi-threaded XSLT processing.
  • LP1673355, GH233: fromstring() html5parser failed to parse byte strings.

genshi -> 0.7



(Jan 27 2013, from branches/stable/0.7.x)

  • Add support for Python 3.1, 3.2 and 3.3 (via 2to3) and for PyPy. The
    majority of the coding was done in a sprint run by the Cape Town Python
    Users Group with financial assistance from the Python Software Foundation.
  • Default input and output encodings changed from UTF-8 to None (i.e. unicode
  • Skip Mako benchmarks if Mako isn't installed (rather than failing


(Jan 27 2012, from branches/stable/0.6.x)

  • Security fix to enhance sanitizing of CSS in style attributes. Genshi's
    HTMLSanitizer disallows style attributes by default (this remains
    unchanged) and warns against such attacks in its documentation, but
    the provided CSS santizing is now less lacking (see 455).
  • Fix for error in how HTMLFormFiller would handle textarea elements if
    no value was not supplied form them.
  • The HTMLFormFiller now correctly handles check boxes and radio buttons
    with an empty value attribute.
  • Template Context objects now have a .copy method.
  • Added a simple tox.ini file for using tox to test against multiple
    verions of Python.
  • Fix for bug in QName comparison (see 413).
  • Fix for bug in handling of trailing events in match template matches
    (see 399).
  • Fix i18n namespace declaration in documentation (see 400).
  • Fix for bug in caching of events in serializers by no longer caching
    (TEXT, Markup) events (see 429).
  • Fix handling of None by Markup.escape in _speedups.c (see 439).
  • Fix handling of internal state by match templates (relevant when multiple
    templates match the same part of the stream, see 370).
  • Fix handling of multiple events between or on either side of start and end
    tags in translated messages (see 404).
  • Fix test failures caused by changes in HTMLParser in Python 2.7 (see 501).
  • Fix infinite loop in interplotation lexing that was introduced by a change
    in Python 2.7's tokenizer (see 540).
  • Fix handling of processing instructions without data (see 368).
  • Updated so as not to rely on build from Subersion 1.6.



(Apr 22 2010, from branches/stable/0.6.x)

  • Support for Python 2.3 has been dropped.
  • Rewrite of the XPath evaluation engine for better performance and improved
    correctness. This is the result of integrating work done by Marcin Kurczych
    during GSoC 2008.
  • Updated the Python AST processing for template code evaluation to use the
    _ast module instead of the deprecated compiler package, including an
    adapter layer for Python 2.4. This, too, is the result of integrating work
    done by Marcin Kurczych during GSoC 2008.
  • Added caching in the serialization stage for improved performance in some
  • Various improvements to the HTML sanitization filter.
  • Fix problem with I18n filter that would get confused by expressions in
    attribute values when inside an i18n:msg block (ticket 250).
  • Fix problem with the transformation filter dropping events after the
    selection (ticket 290).
  • for loops in template code blocks no longer establish their own locals
    scope, meaning you can now access variables assigned in the loop outside
    of the loop, just as you can in regular Python code (ticket 259).
  • Import statements inside function definitions in template code blocks no
    longer result in an UndefinedError when the imported name is accessed
    (ticket 276).
  • Fixed handling of relative URLs with fragment identifiers containing colons
    in the HTMLSanitizer (ticket 274).
  • Added an option to the HTMLFiller to also populate password fields.
  • Match template processing no longer produces unwanted duplicate output in
    some cases (ticket 254).
  • Templates instantiated without a loader now get an implicit loader based on
    their file path, or the current directory as a fallback (ticket 320).
  • Added documentation for the TemplateLoader.
  • Enhanced documentation for internationalization.


(Jul 9 2008, from branches/stable/0.5.x)

  • Fix problem with nested match templates not being applied when buffering
    on the outer py:match is disabled. Thanks to Erik Bray for reporting the
    problem and providing a test case!
  • Fix problem in Translator filter that would cause the translation of
    text nodes to fail if the translation function returned an object that was
    not directly a string, but rather something like an instance of the
    LazyProxy class in Babel (ticket 145).
  • Fix problem with match templates incorrectly being applied multiple times.
  • Includes from templates loaded via an absolute path now include the correct
    file in nested directories as long if no search path has been configured
    (ticket 240).
  • Unbuffered match templates could result in parts of the matched content
    being included in the output if the match template didn't actually consume
    it via one or more calls to the select() function (ticket 243).



(Jun 9 2008, from branches/stable/0.5.x)

  • Added include directive for text templates (ticket 115).
  • Added new markup transformation filter contributed by Alec Thomas. This
    provides gorgeous jQuery-inspired stream transformation capabilities based
    on XPath expressions.
  • When using HTML or XHTML serialization, the xml:lang attribute is
    automatically translated to the lang attribute which HTML user agents
  • Added support for the XPath 2 matches() function in XPath expressions,
    which allow matching against regular expressions.
  • Support for Python code blocks in templates can now be disabled
    (ticket 123).
  • Includes are now processed when the template is parsed if possible, but
    only if the template loader is not set to do automatic reloading. Included
    templates are basically inlined into the including template, which can
    speed up rendering of that template a bit.
  • Added new syntax for text templates, which is more powerful and flexible
    with respect to white-space and line breaks. It also supports Python code
    blocks. The old syntax is still available and the default for now, but in a
    future release the new syntax will become the default, and some time after
    that the old syntax will be removed.
  • Added support for passing optimization hints to &lt;py:match&gt; directives,
    which can speed up match templates in many cases, for example when a match
    template should only be applied once to a stream, or when it should not be
    applied recursively.
  • Text templates now default to rendering as plain text; it is no longer
    necessary to explicitly specify the "text" method to the render() or
    serialize() method of the generated markup stream.
  • XInclude elements in markup templates now support the parse attribute;
    when set to "xml" (the default), the include is processed as before, but
    when set to "text", the included template is parsed as a text template using
    the new syntax (ticket 101).
  • Python code blocks inside match templates are now executed (ticket 155).
  • The template engine plugin no longer adds the default_doctype when the
    fragment parameter is True.
  • The striptags function now also removes HTML/XML-style comments (ticket
  • The py:replace directive can now also be used as an element, with an
    attribute named value (ticket 144).
  • The TextSerializer class no longer strips all markup in text by default,
    so that it is still possible to use the Genshi escape function even with
    text templates. The old behavior is available via the strip_markup option
    of the serializer (ticket 146).
  • Assigning to a variable named data in a Python code block no longer
    breaks context lookup.
  • The Stream.render now accepts an optional out parameter that can be
    used to pass in a writable file-like object to use for assembling the
    output, instead of building a big string and returning it.
  • The XHTML serializer now strips xml:space attributes as they are only
    allowed on very few tags.
  • Match templates are now applied in a more controlled fashion: in the order
    they are declared in the template source, all match templates up to (and
    including) the matching template itself are applied to the matched content,
    whereas the match templates declared after the matching template are only
    applied to the generated content (ticket 186).
  • The TemplateLoader class now provides an _instantiate() method that can
    be overridden by subclasses to implement advanced template instantiation
    logic (ticket 204).
  • The search path of the TemplateLoader class can now contain ''load
    functions'' in addition to path strings. A load function is passed the
    name of the requested template file, and should return a file-like object
    and some metadata. New load functions are supplied for loading from egg
    package data, and loading from different loaders depending on the path
    prefix of the requested filename (ticket 182).
  • Match templates can now be processed without keeping the complete matched
    content in memory, which could cause excessive memory use on long pages.
    The buffering can be disabled using the new buffer optimization hint on
    the &lt;py:match&gt; directive.
  • Improve error reporting when accessing an attribute in a Python expression
    raises an AttributeError (ticket 191).
  • The Markup class now supports mappings for right hand of the % (modulo)
    operator in the same way the Python string classes do, except that the
    substituted values are escape. Also, the special constructor which took
    positional arguments that would be substituted was removed. Thus the
    Markup class now supports the same arguments as that of its unicode
    base class (ticket 211).
  • The Template class and its subclasses, as well as the interpolation API,
    now take an filepath parameter instead of basedir (ticket 207).
  • The XHTMLSerializer now has a drop_xml_decl option that defaults to
    True. Setting it to False will cause any XML decl in the serialized
    stream to be included in the output as it would for XML serialization.
  • Add support for a protocol that would allow interoperability of different
    Python packages that generate and/or consume markup, based on the special
    __html__() method (ticket 202).


(Aug 14, 2007, from branches/stable/0.4.x)

  • Fixed augmented assignment to local variables in Python code blocks.
  • Fixed handling of nested function and class definitions in Python code
  • Includes were not raising TemplateNotFound exceptions even when no
    fallback has been specified. That has been corrected.
  • The template loader now raises a TemplateNotFound error when a previously
    cached template is removed or renamed, where it previously was passing up
    an OSError.
  • The Genshi I18n filter can be configured to only extract messages found in
    gettext function calls, ignoring any text nodes and attribute values
    (ticket 138).


(Jul 17 2007, from branches/stable/0.4.x)

  • The I18n filter no longer extracts or translates literal strings in
    attribute values that also contain expressions.
  • Added loader_callback option to plugin interface, which allows specifying
    a callback function that the template loader should invoke whenever a new
    template is loaded (ticket 130). Note that the value for this option can
    not be specified as a string, only as an actual function object, which means
    it is not available for use through configuration files.
  • The I18n filter now extracts messages from gettext functions even inside
    ignored tags (ticket 132).
  • The HTML sanitizer now strips any CSS comments in style attributes, which
    could previously be used to hide malicious property values.
  • The HTML sanitizer now also removes any HTML comments encountered, as those
    may be used to hide malicious payloads targetting a certain "innovative"
    browser that goes and interprets the content of specially prepared comments.
  • Attribute access in template expressions no longer silently ignores
    exceptions other than AttributeError raised in the attribute accessor.


(Jun 20 2007, from branches/stable/0.4.x)

  • The doctype parameter of the markup serializers now also accepts the "name"
    of the doctype as string, in addition to the (name, pubid, sysid) tuple.
  • The I18n filter was not replacing the original attributes with the
    translation, but instead adding a second attribute with the same name.
  • TextTemplate can now handle unicode source (ticket 125).
  • A &lt;?python ?&gt; processing instruction containing trailing whitespace no
    longer causes a syntax error (ticket 127).
  • The I18n filter now skips the content of elements that have an xml:lang
    attribute with a fixed string value. Basically, xml:lang can now be used
    as a flag to mark specific sections as not needing localization.
  • Added plugin for message extraction via Babel (


(May 21 2007, from branches/stable/0.4.x)

  • Fix incorrect reference to translation function in the I18N filter.
  • The ET() function now correctly handles attributes with a namespace.
  • XML declarations are now processed internally, as well as written to the
    output when XML serialization is used (ticket 111).
  • Added the functions encode() and get_serializer() to the genshi.output
    module, which provide a lower-level API to the functionality previously only
    available through Stream.render() and Stream.serialize().
  • The DocType class now has a get(name) function that returns a DOCTYPE
    tuple for a given string.
  • Added frameset variants to the DocType constants for HTML 4.01 and XHTML
  • Improved I18n extraction for pluralizable messages: for any translation
    function with multiple string arguments (such as ngettext), a single
    item with a tuple of strings is yielded, instead an item for each string
  • The HTMLFormFiller stream filter no longer alters form elements for which
    the data element contains no corresponding item.
  • Code in &lt;?python ?&gt; processing instructions no longer gets the special
    treatment as Python code in template expressions, i.e. item and attribute
    access are no longer interchangeable (which was broken in a number of ways
    anyway, see ticket 113). This change does not affect expressions.
  • Numerous fixes for the execution of Python code in &lt;?python ?&gt; processing
    instructions (tickets 113 and 114).
  • The py:def (and def) directive now supports "star args" (i.e. *args
    and **kwargs) in the function declaration (ticket 116).



(Apr 16 2007, from branches/stable/0.4.x)

  • New example applications for CherryPy and
  • The template loader now uses a LRU cache to limit the number of cached
    templates to a configurable maximum. Also, a race condition in the template
    loader was fixed by adding locking.
  • A new filter (genshi.filters.HTMLFormFiller) was added, which can populate
    HTML forms based on a dictionary of values.
  • The set of permitted tag and attribute names for the HTMLSanitizer can now
    be configured per instance.
  • The template engine plugin now supports a range of options for
    configuration, for example to set the default serialization method, the
    default output encoding, or the default DOCTYPE.
  • The ElementTree adaptation function ET() has moved into the genshi.input
  • Allow when directives to omit the test expression as long as the
    associated choose directive does have one. In that case, the when branch is
    followed if the expression of the choose directive evaluates to a truth
  • Unsuccessful attribute or item lookups now return Undefined objects for
    nicer error messages.
  • Split up the genshi.template module into multiple modules inside the new
    genshi.template package.
  • Results of expression evaluation are no longer implicitly called if they
    are callable.
  • Instances of the genshi.core.Attrs class are now immutable (they are
    subclasses of tuple instead of list).
  • MarkupTemplates can now be instantiated from markup streams, in addition
    to strings and file-like objects (ticket 69).
  • Improve handling of incorrectly nested tags in the HTML parser.
  • Template includes can now be nested inside fallback content.
  • Expressions can now contain dict literals (ticket 37).
  • It is now possible to have one or more escaped dollar signs in front of a
    full expression (ticket 92).
  • The Markup class is now available by default in template expressions
    (ticket 67).
  • The handling of namespace declarations in XML/XHTML output has been improved.
  • The Attrs class no longer automatically wraps all attribute names in
    QName objects. This is now the responsibility of whoever is instantiating
    Attrs objects (for example, stream filters and generators).
  • Python code blocks are now supported using the &lt;?python ?&gt; processing
    instruction (ticket 84).
  • The way errors in template expressions are handled can now be configured. The
    option LenientLookup provides the same forgiving mode used in previous
    Genshi versions, while StrictLookup raises exceptions when undefined
    variables or members are accessed. The lenient mode is still the default in
    this version, but that may change in the future. (ticket 88)
  • If a variable is not necessarily defined at the top level of the template
    data, the new built-in functions defined(key) and value_of(key, default)
    can be used so that the template also works in strict lookup mode. These
    functions were previously only available when using Genshi via the template
    engine plugin (for compatibility with Kid).
  • style attributes are no longer allowed by the HTMLSanitizer by default.
    If they are explicitly added to the set of safe attributes, any unicode
    escapes in the attribute value are now handled properly.
  • Namespace declarations on conditional elements (for example using a py:if
    directive`) are no longer moved to the following element when the element
    originally carrying the declaration is removed from the stream (ticket 107).
  • Added basic built-in support for internationalizing templates by providing
    a new Translator class that can both extract localizable strings from a
    stream, and replace those strings with their localizations at render time.
    The code for this was largely taken from previous work done by Matt Good
    and David Fraser.


(Dec 11 2006, from branches/stable/0.3.x)

  • The builder API now accepts streams as children of elements and fragments.


(Nov 22 2006, from branches/stable/0.3.x)

  • Fix XPath traversal in match templates. Previously, div/p would be treated
    the same as div//p, i.e. it would match all descendants and not just the
    immediate children.
  • Preserve whitespace in HTML &lt;pre&gt; elements also when they contain child
  • Match templates no longer match their own output (ticket 77).
  • Blank lines before directives in text templates are now preserved as
    expected (ticket 62).


(Nov 2 2006, from branches/stable/0.3.x)

  • The encoding of HTML and XML files, as well as markup and text templates,
    can now be specified. Also, the encoding specified in XML declarations is
    now respected unless an expiclit encoding is requested.
  • Expressions used as arguments for py:with, py:def, and py:for
    directives can now contain non-ASCII strings.


(Oct 16 2006, from branches/stable/0.3.x)

  • Fixed bug introduced in 0.3.2 that broke the parsing of templates which
    declare the same namespace more than once in a nested fashion.
  • Fixed the parsing of HTML entity references inside attribute values, both
    in the XMLParser and the HTMLParser classes.
  • Some changes to usage of absolute vs. relative template paths to ensure that
    the filenamed-keyed cache employed by the TemplateLoader doesn't mix up
    templates with the same name, but from different subdirectories.


(Oct 12 2006, from branches/stable/0.3.x)

  • Exceptions from templates now contain the absolute path to the template file
    when a search path is used. This enables tracebacks to display the line in
  • The template engine plugin now provides three different types: "genshi" and
    "genshi-markup" map to markup templates, while "genshi-text" maps to text
  • Fixed the namespace context used by XPath patterns in py:match templates.
    The were erroneously using the namespace context of the elements being
    matched, where they should rather use the context in which they were
  • The contents of &lt;script&gt; and &lt;style&gt; elements are no longer escaped when
    serializing to HTML but declaring the XHTML namespace in the template.
  • Improved error message raised when using the py:for directive on an object
    that is not iterable (ticket 60).
  • Fixed the XPath function starts-with() which was always returning true
    (ticket 61).


(Sep 22 2006, from branches/stable/0.3.x)

  • Includes and user-defined filters were not getting the correct context data
    when used inside a match template (ticket 56).
  • XPath patterns using the union operator (|) were returning only partial
    results in some cases.



(Sep 17 2006, from branches/stable/0.3.x)

  • The project name was changed from "Markup" to "Genshi". See UPGRADE.txt
    for upgrade instructions.
  • Expression evaluation now differentiates between undefined variables and
    variables that are defined but set to None. This also means that local
    variables can override built-ins even if the local variable are set to
    None (ticket 36).
  • The plugin implementation now makes more functions available for use inside
    templates: XML(), HTML(), defined(), and value-of(). These are mostly for
    migration from Kid.
  • The parsing of py:with directives has been improved: you can now assign
    to multiple names, and semicolons inside string literals are treated as
  • Generator expressions can now be used in template expressions (ticket 16).
  • Added serialization to plain text (ticket 41).
  • Calling functions from template expressions with *args and/or **kwargs
    now works correctly (ticket 42).
  • The TemplateLoader class and the Template instances that it manages are
    now thread-safe, as they no longer keep any state related to the current
    processing context.
  • Stream filters and serializers can now be applied using the "pipe" (bitwise
    or) operator "|".
  • The execution of named template functions (py:def) no longer silently
    swallows TypeError exceptions (ticket 44).
  • The XML Parser now correctly handles unicode input (ticket 43).
  • HTML entities can now be used in templates without having to declare an HTML
    document type.
  • Error reporting on undefined entities has been fixed.
  • Fix traversal of substreams by XPath expressions. For example, the path
    '/' no longer matches non-immediate child elements, and '*' no longer
    matches the attributes of descendants.
  • Fixes for py:match which would get confused when it should be applied
    to multiple elements (ticket 49).
  • Using namespace prefixes in XPath expressions is now supported.
  • Expressions now correctly handle slices (ticket 51).
  • A simple text-based template language is now included for generating
    plain text output (ticket 47).



(Aug 22 2006, from branches/stable/0.2.x)

  • XPath syntax errors now contain position info (ticket 20).
  • Errors in expression evaluation now contain the correct line number in the
    template (ticket 22).
  • <script> and <style> element contents are no longer escaped when using HTML
    serialization (ticket 24).
  • In some cases expressions in templates did not get interpolated (ticket
  • CDATA sections are now passed through the pipeline and serialized correctly.
    That allows using <script> or <style> elements in XHTML output that is still
    compatible with HTML user agents.
  • The XHTML serializer now correctly handles elements in foreign namespaces
    (such as SVG or MathML).
  • Fixed relative includes in templates on Windows (ticket 27).
  • Output can be encoded using legacy codecs such as ISO-8859-1. Any character
    not representable in the chosen encoding gets replaced by the corresponding
    XML character reference.
  • String literals in XPath expressions that contain spaces are now parsed
    as expected.
  • Added support for the XPath functions boolean(), ceiling(), concat(),
    contains(), false(), floor(), normalize-space(), number(), round(),
    starts-with(), string-length(), substring(), substring-after(),
    substring-before(), translate(), and true().
  • Non-ASCII characters in expressions should now be handled correctly (ticket
  • Default values for arguments of template functions now also work with
    constants and complex expressions (they only worked for string or number
    literals before).
  • XPath expressions in now support XPath variables ($var) in predicates
    (ticket 31).
  • Expressions in templates can now span multiple lines if they are enclosed
    in curly braces.
  • py:def macros can now be invoked from within expressions inside attribute
    values (ticket 34).



(Aug 3 2006, from branches/stable/0.1.x)

  • First public release

datrie -> 0.7.1


  • updated the bundled C library to version 0.2.9;
  • implemented Trie.__len__ in terms of trie_enumerate;
  • rebuilt Cython wrapper with Cython 0.23.4;
  • changed Trie to implement;
  • fixed Trie pickling, which segfaulted on Python2.X.


  • bundled libdatrie C library is updated to version 0.2.8;
  • new .suffixes() method (thanks Ahmed T. Youssef);
  • wrapper is rebuilt with Cython 0.20.1.


  • fixed build for Visual Studio (thanks Gabi Davar).


  • datrie is rebuilt with Cython 0.19.1;
  • iter_prefix_values, prefix_values and longest_prefix_value
    methods for datrie.BaseTrie and datrie.Trie (thanks Jared Suttles).


  • Recently introduced memory leak in longest_prefix
    and longest_prefix_item is fixed.


  • longest_prefix and longest_prefix_item methods are fixed;
  • datrie is rebuilt with Cython 0.18;
  • misleading benchmark results in README are fixed;
  • State._walk is renamed to State.walk_char.


  • Update to latest libdatrie; this makes .keys() method a bit slower but
    removes a keys length limitation.


  • cPickle is used for saving/loading datrie.Trie if it is available.


  • libdatrie improvements and bugfixes, including C iterator API support;
  • custom iteration support using datrie.State and datrie.Iterator.
  • speed improvements: __length__, keys, values and
    items methods should be up to 2x faster.
  • keys longer than 32768 are not supported in this release.


There are no new features or speed improvements in this release.

  • is deprecated; use datrie.Trie with the same arguments;
  • small test & benchmark improvements.


  • datrie.Trie items can have any Python object as a value
    (Trie from 0.1.x becomes datrie.BaseTrie);
  • longest_prefix and longest_prefix_items are fixed;
  • save & load are rewritten;
  • setdefault method.


  • Windows support (upstream libdatrie changes are merged);
  • license is changed from LGPL v3 to LGPL v2.1 to match the libdatrie license.


Initial release.

charade -> 1.0.3


  • Rename script to charade

flake8 -> 3.5.0


You can view the 3.5.0 milestone_ on GitLab for more details.

New Dependency Information

  • Allow for PyFlakes 1.6.0 (See also GitLab359_)
  • Start using new PyCodestyle checks for bare excepts and ambiguous identifier
    (See also GitLab361_)


  • Print out information about configuring VCS hooks (See also GitLab335_)
  • Allow users to develop plugins "local" to a repository without using
    setuptools. See our documentation on local plugins for more information.
    (See also GitLab357_)

Bugs Fixed

  • Catch and helpfully report UnicodeDecodeError\ s when parsing
    configuration files. (See also GitLab358_)

.. all links
.. _3.5.0 milestone:

.. issue links
.. _GitLab335:
.. _GitLab357:
.. _GitLab358:
.. _GitLab359:
.. _GitLab361:

.. merge request links


You can view the 3.4.1 milestone_ on GitLab for more details.

  • Fix minor regression when users specify only a --select list with items
    in the enabled/extended select list. (See also GitLab354_)

.. all links
.. _3.4.1 milestone:

.. issue links
.. _GitLab354:

.. merge request links


You can view the 3.4.0 milestone_ on GitLab for more details.

  • Refine logic around --select and --ignore when combined with the
    default values for each. (See also GitLab318_)
  • Handle spaces as an alternate separate for error codes, e.g.,
    --ignore &#39;E123 E234&#39;. (See also GitLab329_)
  • Filter out empty select and ignore codes, e.g., --ignore E123,,E234.
    (See also GitLab330_)
  • Specify dependencies appropriately in (See also Gitlab341_)
  • Fix bug in parsing --quiet and --verbose from config files.
    (See also GitLab!193_)
  • Remove unused import of os in the git hook template (See also

.. all links
.. _3.4.0 milestone:

.. issue links
.. _GitLab318:
.. _GitLab329:
.. _GitLab330:
.. _GitLab341:

.. merge request links
.. _GitLab!193:
.. _GitLab!194:


You can view the 3.3.0 milestone_ on GitLab for more details.

  • Add support for Python 3.6 (via dependencies). Note Flake8 does not
    guarantee that all plugins will support Python 3.6.
  • Added unique error codes for all missing PyFlakes messages. (14 new
    codes, see "Error / Violation Codes")
  • Dramatically improve the performance of Flake8. (See also GitLab!156_)
  • Display the local file path instead of the temporary file path when
    using the git hook. (See also GitLab244_)
  • Add methods to Report class that will be called when Flake8 starts and
    finishes processing a file. (See also GitLab251_)
  • Fix problem where hooks should only check *.py files. (See also
  • Fix handling of SyntaxErrors that do not include physical line information.
    (See also GitLab279_)
  • Update upper bound on PyFlakes to allow for PyFlakes 1.5.0. (See also
  • Update setuptools integration to less eagerly deduplicate packages.
    (See also GitLab295_)
  • Force flake8 --version to be repeatable between invocations. (See also

.. all links
.. _3.3.0 milestone:

.. issue links
.. _GitLab244:
.. _GitLab251:
.. _GitLab268:
.. _GitLab279:
.. _GitLab290:
.. _GitLab295:
.. _GitLab297:

.. merge request links
.. _GitLab!156:


You can view the 3.2.1 milestone_ on GitLab for more details.

  • Fix subtle bug when deciding whether to report an on-by-default's violation
    (See also GitLab257_)
  • Fix another bug around SyntaxErrors not being reported at the right column
    and row (See also GitLab259_ and GitLab237_ for a related, previously
    fixed bug)
  • Fix regression from 2.x where we run checks against explicitly provided
    files, even if they don't match the filename patterns. (See also

.. links
.. _3.2.1 milestone:
.. _GitLab237:
.. _GitLab257:
.. _GitLab259:
.. _GitLab266:


You can view the 3.2.0 milestone_ on GitLab for more details.

  • Allow for pycodestyle 2.2.0 which fixes a bug in E305 (See also

.. links
.. _3.2.0 milestone:
.. _GitLab256:


You can view the 3.1.1 milestone_ on GitLab for more details.

  • Do not attempt to install/distribute a man file with the Python package;
    leave this for others to do. (See also GitLab254_)
  • Fix packaging bug where wheel version constraints specified in setup.cfg did
    not match the constraints in (See also GitLab255_)

.. links
.. _3.1.1 milestone:
.. _GitLab254:
.. _GitLab255:


You can view the 3.1.0 milestone_ on GitLab for more details.

  • Add --bug-report flag to make issue reporters' lives easier.
  • Collect configuration files from the current directory when using our Git
    hook. (See also GitLab210, GitLab218, GitLab223_)
  • Avoid unhandled exceptions when dealing with SyntaxErrors. (See also
    GitLab214, GitLab238)
  • Exit early if the value for --diff is empty. (See also GitLab226_)
  • Handle empty --stdin-display-name values. (See also GitLab235_)
  • Properly report the column number of Syntax Errors. We were assuming that
    all reports of column numbers were 0-indexed, however, SyntaxErrors report
    the column number as 1-indexed. This caused us to report a column number
    that was 1 past the actual position. Further, when combined with
    SyntaxErrors that occur at a newline, this caused the position to be
    visually off by two. (See also GitLab237_)
  • Fix the behaviour of --enable-extensions. Previously, items specified
    here were still ignored due to the fact that the off-by-default extension
    codes were being left in the ignore list. (See also GitLab239_)
  • Fix problems around --select and --ignore behaviour that prevented
    codes that were neither explicitly selected nor explicitly ignored from
    being reported. (See also GitLab242_)
  • Truly be quiet when the user specifies -q one or more times. Previously,
    we were showing the if the user specified -q and --show-source. We
    have fixed this bug. (See also GitLab245_)
  • Add new File Processor attribute, previous_unindented_logical_line to
    accommodate pycodestyle 2.1.0. (See also GitLab246_)
  • When something goes wrong, exit non-zero. (See also GitLab248,
  • Add --tee as an option to allow use of --output-file and printing to
    standard out.
  • Allow the git plugin to actually be lazy when collecting files.
  • Allow for pycodestyle 2.1 series and pyflakes 1.3 series.

.. links
.. _3.1.0 milestone:
.. _GitLab209:
.. _GitLab210:
.. _GitLab214:
.. _GitLab218:
.. _GitLab223:
.. _GitLab226:
.. _GitLab235:
.. _GitLab237:
.. _GitLab238:
.. _GitLab239:
.. _GitLab242:
.. _GitLab245:
.. _GitLab246:
.. _GitLab248:


  • Side-step a Pickling Error when using Flake8 with multiprocessing on Unix
    systems. (See also GitLab164_)
  • Fix an Attribute Error raised when dealing with Invalid Syntax. (See also
  • Fix an unhandled Syntax Error when tokenizing files. (See also

.. links
.. _GitLab164:
.. _GitLab203:
.. _GitLab205:


  • Disable --jobs for any version of Python on Windows.
    (See also this Python bug report_)
  • Raise exception when entry_point in plugin not callable.
    This raises an informative error when a plugin fails to load because its
    entry_point is not callable, which can happen with a plugin which is buggy or
    not updated for the current version of flake8. This is nicer than raising a
    PicklingError about failing to pickle a module (See also GitLab164_)
  • Fix noqa comments followed by a : and explanation broken by
    3.0.0 (See also GitLab178_)
  • Always open our output file in append mode so we do not overwrite log
    messages. (See also GitLab193_)
  • When normalizing path values read from configuration, keep in context the
    directory where the configuration was found so that relative paths work.
    (See also GitLab194_)
  • Fix issue where users were unable to ignore plugin errors that were on
    by default. (See also GitLab195_)
  • Fix our legacy API StyleGuide's init_report method to actually override
    the previous formatter. (See also GitLab200_)

.. links
.. _GitLab164:
.. _GitLab178:
.. _GitLab193:
.. _GitLab194:
.. _GitLab195:
.. _GitLab200:
.. _this Python bug report:


  • Fix local config file discovery. (See also GitLab181_)
  • Fix indexing of column numbers. We accidentally were starting column indices
    at 0 instead of 1.
  • Fix regression in handling of errors like E402 that rely on a combination of
    attributes. (See also GitLab186_)

.. links
.. _GitLab181:
.. _GitLab186:


  • Fix regression in handling of noqa for multiline strings.
    (See also GitLab177_)
  • Fix regression in handling of --output-file when not also using
    --verbose. (See also GitLab180_)
  • Fix regression in handling of --quiet. (See also GitLab180_)
  • Fix regression in handling of --statistics. (See also GitLab180_)

.. links
.. _GitLab177:
.. _GitLab180:


  • Drop explicit support for Pythons 2.6, 3.2, and 3.3.
  • Remove dependence on pep8/pycodestyle for file processing, plugin
    dispatching, and more. We now control all of this while keeping backwards
  • --select and --ignore can now both be specified and try to find the
    most specific rule from each. For example, if you do --select E --ignore E123 then we will report everything that starts with E except for
    E123. Previously, you would have had to do --ignore E123,F,W which
    will also still work, but the former should be far more intuitive.
  • Add support for in-line noqa comments to specify only the error
    codes to be ignored, e.g., noqa: E123,W503
  • Add entry-point for formatters as well as a base class that new formatters
    can inherit from. See the documentation for more details.
  • Add detailed verbose output using the standard library logging module.
  • Enhance our usage of optparse for plugin developers by adding new parameters
    to the add_option that plugins use to register new options.
  • Update --install-hook to require the name of version control system hook
    you wish to install a Flake8.
  • Stop checking sub-directories more than once via the setuptools command
  • When passing a file on standard-in, allow the caller to specify
    --stdin-display-name so the output is properly formatted
  • The Git hook now uses sys.executable to format the shebang line.
    This allows Flake8 to install a hook scri

This change is Reviewable


This comment has been minimized.

Copy link

w3c-bots commented Feb 20, 2018


Started: 2018-02-21 10:10:37
Finished: 2018-02-21 10:30:02

View more information about this build on:

@@ -1 +1 @@

This comment has been minimized.

Copy link

gsnedders Feb 20, 2018


This seems totally bogus, given wptserve/wptrunner on PyPI is essentially nonsense.


This comment has been minimized.

Copy link

gsnedders Feb 20, 2018


The html5lib update here is the cause of the allow_failures CSS build job failure (given API changes). We probably don't want this automatically updated.

@@ -2,4 +2,4 @@

# Can be used to force attributes to be serialized in alphabetical
# order.

This comment has been minimized.

Copy link

gsnedders Feb 20, 2018


We should ignore all of tools/html5lib and tools/third_party.

pyup-bot and others added some commits Feb 20, 2018

Add pyup configuration file.
We want to only allow updates to specified requirements files, rather than touching
everything under third_party, etc.

@jgraham jgraham force-pushed the pyup-initial-update branch from af59679 to 65376cf Feb 21, 2018

@jgraham jgraham merged commit 28ceeca into master Feb 23, 2018

1 check passed

continuous-integration/travis-ci/pr The Travis CI build passed

@sideshowbarker sideshowbarker deleted the pyup-initial-update branch Nov 22, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.