lxml 6.0.2__tar.gz → 6.0.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lxml-6.0.2 → lxml-6.0.3}/CHANGES.txt +31 -3
- {lxml-6.0.2 → lxml-6.0.3}/INSTALL.txt +2 -2
- {lxml-6.0.2 → lxml-6.0.3}/PKG-INFO +14 -12
- {lxml-6.0.2 → lxml-6.0.3}/README.rst +1 -1
- {lxml-6.0.2 → lxml-6.0.3}/buildlibxml.py +118 -64
- {lxml-6.0.2 → lxml-6.0.3}/doc/FAQ.txt +7 -7
- {lxml-6.0.2 → lxml-6.0.3}/doc/api.txt +4 -4
- {lxml-6.0.2 → lxml-6.0.3}/doc/build.txt +4 -4
- {lxml-6.0.2 → lxml-6.0.3}/doc/capi.txt +1 -1
- {lxml-6.0.2 → lxml-6.0.3}/doc/compatibility.txt +2 -2
- {lxml-6.0.2 → lxml-6.0.3}/doc/element_classes.txt +5 -5
- {lxml-6.0.2 → lxml-6.0.3}/doc/extensions.txt +2 -2
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/FAQ.html +10 -10
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/api.html +7 -7
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_modules/index.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_modules/lxml/ElementInclude.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_modules/lxml/doctestcompare.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_modules/lxml/html/builder.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_modules/lxml/html/formfill.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_modules/lxml/html.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_modules/lxml/isoschematron.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_modules/lxml.html +4 -4
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_modules/xml/sax/handler.html +4 -4
- lxml-6.0.3/doc/html/apidoc/_static/base-stemmer.js +476 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/css/theme.css +1 -1
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/doctools.js +6 -5
- lxml-6.0.3/doc/html/apidoc/_static/english-stemmer.js +1066 -0
- lxml-6.0.3/doc/html/apidoc/_static/language_data.js +13 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/searchtools.js +115 -57
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/sphinx_highlight.js +36 -31
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/genindex.html +19 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/index.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.ElementInclude.html +25 -17
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml._elementpath.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.builder.html +4 -4
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.cssselect.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.doctestcompare.html +8 -8
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.etree.html +1121 -1163
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.html +10 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.html.ElementSoup.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.html.builder.html +134 -134
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.html.clean.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.html.defs.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.html.diff.html +17 -17
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.html.formfill.html +16 -18
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.html.html +115 -115
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.html.html5parser.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.html.soupparser.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.isoschematron.html +18 -18
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.objectify.html +15 -15
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/lxml.sax.html +11 -13
- lxml-6.0.3/doc/html/apidoc/objects.inv +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/py-modindex.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/search.html +3 -3
- lxml-6.0.3/doc/html/apidoc/searchindex.js +1 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/build.html +7 -7
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/capi.html +4 -4
- lxml-6.0.2/doc/html/changes-6.0.2.html → lxml-6.0.3/doc/html/changes-6.0.3.html +415 -393
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/compatibility.html +5 -5
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/credits.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/cssselect.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/element_classes.html +8 -8
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/elementsoup.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/extensions.html +5 -5
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/html5parser.html +5 -5
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/index.html +7 -6
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/installation.html +5 -5
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/intro.html +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/lxml-source-howto.html +6 -6
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/lxmlhtml.html +13 -13
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/objectify.html +11 -11
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/parsing.html +5 -5
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/performance.html +4 -4
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/resolvers.html +5 -5
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/sax.html +5 -5
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/sitemap.html +1 -1
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/tutorial.html +6 -7
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/validation.html +9 -9
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/xpathxslt.html +4 -15
- {lxml-6.0.2 → lxml-6.0.3}/doc/html5parser.txt +2 -2
- {lxml-6.0.2 → lxml-6.0.3}/doc/lxml-source-howto.txt +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/lxmlhtml.txt +10 -10
- {lxml-6.0.2 → lxml-6.0.3}/doc/main.txt +8 -4
- {lxml-6.0.2 → lxml-6.0.3}/doc/memorymanagement.txt +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/objectify.txt +8 -8
- {lxml-6.0.2 → lxml-6.0.3}/doc/parsing.txt +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/performance.txt +1 -1
- {lxml-6.0.2 → lxml-6.0.3}/doc/resolvers.txt +2 -2
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/lxml-ep2008.html +2 -2
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/lxml-ep2008.txt +1 -1
- {lxml-6.0.2 → lxml-6.0.3}/doc/sax.txt +2 -2
- {lxml-6.0.2 → lxml-6.0.3}/doc/tutorial.txt +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/doc/validation.txt +6 -6
- {lxml-6.0.2 → lxml-6.0.3}/doc/xpathxslt.txt +1 -3
- {lxml-6.0.2 → lxml-6.0.3}/pyproject.toml +2 -2
- lxml-6.0.3/requirements.txt +1 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/__init__.py +1 -1
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/_elementpath.c +2520 -2400
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/apihelpers.pxi +12 -5
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/builder.c +2193 -2156
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/docloader.pxi +1 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/etree.c +33600 -36131
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/etree.h +7 -7
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/etree.pyx +8 -3
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/etree_api.h +73 -63
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/extensions.pxi +10 -2
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/_difflib.c +5285 -5992
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/clean.py +1 -1
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/diff.c +3718 -4098
- lxml-6.0.3/src/lxml/includes/lxml-version.h +3 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/lxml.etree.h +7 -7
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/lxml.etree_api.h +73 -63
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/objectify.c +3968 -4141
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/objectify.pyx +3 -3
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/parser.pxi +14 -4
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/proxy.pxi +3 -1
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/public-api.pxi +10 -10
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/python.pxd +3 -2
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/readonlytree.pxi +4 -4
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/sax.c +2254 -2169
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/saxparser.pxi +1 -1
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_http_io.py +3 -2
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_nsclasses.py +11 -4
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_objectify.py +15 -12
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_unicode.py +1 -1
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/xmlerror.pxi +6 -2
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/xslt.pxi +7 -5
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml.egg-info/PKG-INFO +14 -12
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml.egg-info/SOURCES.txt +3 -1
- {lxml-6.0.2 → lxml-6.0.3}/tools/pypistats.py +1 -1
- lxml-6.0.2/doc/html/apidoc/_static/language_data.js +0 -192
- lxml-6.0.2/doc/html/apidoc/objects.inv +0 -0
- lxml-6.0.2/doc/html/apidoc/searchindex.js +0 -1
- lxml-6.0.2/requirements.txt +0 -1
- lxml-6.0.2/src/lxml/includes/lxml-version.h +0 -3
- {lxml-6.0.2 → lxml-6.0.3}/CREDITS.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/LICENSE.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/LICENSES.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/MANIFEST.in +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/Makefile +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/TODO.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/benchmark/bench_etree.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/benchmark/bench_objectify.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/benchmark/bench_xpath.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/benchmark/bench_xslt.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/benchmark/benchbase.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/benchmark/run_benchmarks.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/api/Makefile +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/api/conf.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/cssselect.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/docstructure.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/elementsoup.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/index.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.ElementInclude.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml._elementpath.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.builder.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.cssselect.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.doctestcompare.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.etree.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.html.ElementSoup.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.html.builder.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.html.clean.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.html.defs.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.html.diff.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.html.formfill.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.html.html5parser.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.html.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.html.soupparser.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.isoschematron.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.objectify.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_sources/lxml.sax.rst.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/basic.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/css/badge_only.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/documentation_options.js +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/file.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/jquery.js +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/js/badge_only.js +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/js/theme.js +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/js/versions.js +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/minus.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/plus.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/pygments.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/apidoc/_static/python-xml.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/paypal_btn_donateCC_LG.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/proxies.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/pubkey.asc +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/python-xml-title.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/python-xml.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/style.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/html/tagpython-big.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/intro.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/licenses/BSD.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/licenses/GPL.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/licenses/elementtree.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/lxml.mgp +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/lxml2.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/mkhtml.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/mklatex.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/pubkey.asc +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/rest2html.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/rest2latex.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/Makefile +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ep2008/atom-example.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ep2008/atom.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ep2008/atom.rng +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ep2008/atomgen.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ep2008/proxies.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/rst2s5.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/blank.gif +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/bodybg.gif +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/framing.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/iepngfix.htc +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/lxml-logo64.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/opera.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/outline.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/pretty.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/print.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/s5-core.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/slides.css +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/slides.js +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/s5/ui/default/tagpython.png +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/test.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/update_performance_results.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/doc/valgrind.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/samples/simple-ns.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/samples/simple.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/setup.cfg +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/setup.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/setupinfo.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/ElementInclude.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/__init__.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/_elementpath.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/builder.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/builder.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/classlookup.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/cleanup.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/cssselect.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/cvarargs.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/debug.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/doctestcompare.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/dtd.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/ElementSoup.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/__init__.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/_diffcommand.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/_difflib.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/_difflib.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/_html5builder.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/_setmixin.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/builder.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/defs.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/diff.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/formfill.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/html5parser.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/soupparser.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/__init__.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_applet.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_blink.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_crazy.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_embed.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_frame.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_iframe.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_link.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_meta.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_object.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onabort.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onblur.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onchange.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onclick.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_ondblclick.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onerror.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onfocus.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onkeydown.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onkeypress.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onkeyup.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onload.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onmousedown.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onmouseout.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onmouseover.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onmouseup.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onreset.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onresize.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onsubmit.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_onunload.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_script.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_script_cdata.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_script_inline.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/feedparser-data/entry_content_style.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/background-image-with-unicoded.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/downlevel-hidden.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/html-plus-time.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/javascript-link.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/style-comment.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/style-expression.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/style-import.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/style-js-tag.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/style-url-js.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/xml-data-island.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/hackers-org-data/xml-embedded-js.data +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_basic.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_basic.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_diff.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_diff.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_elementsoup.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_feedparser_data.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_formfill.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_formfill.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_forms.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_forms.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_frames.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_html5parser.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_rewritelinks.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_rewritelinks.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_select.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_xhtml.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/test_xhtml.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/tests/transform_feedparser_data.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/html/usedoctest.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/__init__.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/__init__.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/c14n.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/config.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/dtdvalid.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/etree_defs.h +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/etreepublic.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/htmlparser.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/relaxng.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/schematron.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/tree.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/uri.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/xinclude.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/xmlerror.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/xmlparser.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/xmlschema.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/xpath.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/includes/xslt.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/isoschematron/__init__.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/isoschematron/resources/rng/iso-schematron.rng +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/isoschematron/resources/xsl/XSD2Schtrn.xsl +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_abstract_expand.xsl +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_dsdl_include.xsl +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_skeleton_for_xslt1.xsl +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_svrl_for_xslt1.xsl +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/iterparse.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/lxml_endian.h +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/nsclasses.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/objectpath.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/parsertarget.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/pyclasslookup.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/relaxng.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/sax.pxd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/sax.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/schematron.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/serializer.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/__init__.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/c14nComment.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/c14nPrefix.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/c14nPrefixQname.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/c14nPrefixQnameXpathElem.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/c14nQname.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/c14nQnameElem.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/c14nQnameXpathElem.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/c14nTrim.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/doc.dtd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inC14N1.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inC14N2.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inC14N3.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inC14N4.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inC14N5.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inC14N6.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inNsContent.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inNsDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inNsPushdown.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inNsRedecl.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inNsSort.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inNsSuperfluous.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/inNsXml.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N1_c14nComment.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N1_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N2_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N2_c14nTrim.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N3_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N3_c14nPrefix.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N3_c14nTrim.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N4_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N4_c14nTrim.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N5_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N5_c14nTrim.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inC14N6_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsContent_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsContent_c14nPrefixQnameXpathElem.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsContent_c14nQnameElem.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsContent_c14nQnameXpathElem.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsDefault_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsDefault_c14nPrefix.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsPushdown_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsPushdown_c14nPrefix.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsRedecl_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsRedecl_c14nPrefix.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsSort_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsSort_c14nPrefix.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsSuperfluous_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsSuperfluous_c14nPrefix.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsXml_c14nDefault.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsXml_c14nPrefix.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsXml_c14nPrefixQname.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/out_inNsXml_c14nQname.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/c14n-20/world.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/common_imports.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/dummy_http_server.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/fuzz_xml_parse.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/include/test_xinclude.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/selftest.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/selftest2.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/shakespeare.html +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test-document.xslt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test-string.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test.dtd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test.rnc +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test.sch +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test.xsd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test1.rng +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test1.xslt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test2.rng +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test2.xslt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_annotations.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_broken.xml +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_builder.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_classlookup.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_css.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_doctestcompare.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_dtd.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_elementpath.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_elementtree.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_errors.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_etree.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_external_document.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_htmlparser.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_import.xsd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_inc.xsd +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_incremental_xmlfile.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_io.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_isoschematron.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_pyclasslookup.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_relaxng.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_sax.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_schematron.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_threading.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_xmlschema.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_xpathevaluator.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/tests/test_xslt.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/usedoctest.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/xinclude.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/xmlid.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/xmlschema.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/xpath.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml/xsltext.pxi +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml.egg-info/dependency_links.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml.egg-info/not-zip-safe +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml.egg-info/requires.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/src/lxml.egg-info/top_level.txt +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/test.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/tools/manylinux/build-wheels.sh +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/tools/xpathgrep.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/update-error-constants.py +0 -0
- {lxml-6.0.2 → lxml-6.0.3}/versioninfo.py +0 -0
|
@@ -2,6 +2,34 @@
|
|
|
2
2
|
lxml changelog
|
|
3
3
|
==============
|
|
4
4
|
|
|
5
|
+
6.0.3 (2026-04-09)
|
|
6
|
+
==================
|
|
7
|
+
|
|
8
|
+
Bugs fixed
|
|
9
|
+
----------
|
|
10
|
+
|
|
11
|
+
* Several out of memory error cases now raise ``MemoryError`` that were not handled before.
|
|
12
|
+
|
|
13
|
+
* Slicing with large step values (outside of ``+/- sys.maxsize``) could trigger undefined C behaviour.
|
|
14
|
+
|
|
15
|
+
* LP#2125399: Some failing tests were fixed or disabled in PyPy.
|
|
16
|
+
|
|
17
|
+
* LP#2138421: Memory leak in error cases when setting the ``public_id`` or ``system_url`` of a document.
|
|
18
|
+
|
|
19
|
+
* Memory leak in case of a memory allocation failure when copying document subtrees.
|
|
20
|
+
|
|
21
|
+
* When mapping an XPath result to Python failed, the result memory could leak.
|
|
22
|
+
|
|
23
|
+
* When preparing an XSLT transform failed, the XSLT parameter memory could leak.
|
|
24
|
+
|
|
25
|
+
Other changes
|
|
26
|
+
-------------
|
|
27
|
+
|
|
28
|
+
* Built using Cython 3.2.4.
|
|
29
|
+
|
|
30
|
+
* Binary wheels use zlib 1.3.2.
|
|
31
|
+
|
|
32
|
+
|
|
5
33
|
6.0.2 (2025-09-21)
|
|
6
34
|
==================
|
|
7
35
|
|
|
@@ -2451,7 +2479,7 @@ Bugs fixed
|
|
|
2451
2479
|
* When an open file-like object is passed into ``parse()`` or
|
|
2452
2480
|
``iterparse()``, the parser will no longer close it after use. This
|
|
2453
2481
|
reverts a change in lxml 2.3 where all files would be closed. It is
|
|
2454
|
-
the
|
|
2482
|
+
the user's responsibility to properly close the file(-like) object,
|
|
2455
2483
|
also in error cases.
|
|
2456
2484
|
|
|
2457
2485
|
* Assertion error in lxml.html.cleaner when discarding top-level elements.
|
|
@@ -3106,7 +3134,7 @@ Features added
|
|
|
3106
3134
|
|
|
3107
3135
|
* lxml.etree now tries to find the absolute path name of files when
|
|
3108
3136
|
parsing from a file-like object. This helps custom resolvers when
|
|
3109
|
-
resolving relative URLs, as
|
|
3137
|
+
resolving relative URLs, as libxml2 can prepend them with the path
|
|
3110
3138
|
of the source document.
|
|
3111
3139
|
|
|
3112
3140
|
Bugs fixed
|
|
@@ -4068,7 +4096,7 @@ Bugs fixed
|
|
|
4068
4096
|
Features added
|
|
4069
4097
|
--------------
|
|
4070
4098
|
|
|
4071
|
-
*
|
|
4099
|
+
* The ``lxml.pyclasslookup`` module implements an Element class lookup
|
|
4072
4100
|
scheme that can access the entire tree in read-only mode to help determining
|
|
4073
4101
|
a suitable Element class
|
|
4074
4102
|
|
|
@@ -70,7 +70,7 @@ build dependencies of the provided lxml package, e.g.
|
|
|
70
70
|
|
|
71
71
|
::
|
|
72
72
|
|
|
73
|
-
sudo apt-get
|
|
73
|
+
sudo apt-get build-dep python3-lxml
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
Installation
|
|
@@ -193,7 +193,7 @@ packages, too.
|
|
|
193
193
|
Source builds on MS Windows
|
|
194
194
|
---------------------------
|
|
195
195
|
|
|
196
|
-
Most MS Windows systems lack the
|
|
196
|
+
Most MS Windows systems lack the necessary tools to build software,
|
|
197
197
|
starting with a C compiler already. Microsoft leaves it to users to
|
|
198
198
|
install and configure them, which is usually not trivial and means
|
|
199
199
|
that distributors cannot rely on these dependencies being available
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lxml
|
|
3
|
-
Version: 6.0.
|
|
3
|
+
Version: 6.0.3
|
|
4
4
|
Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
|
|
5
5
|
Home-page: https://lxml.de/
|
|
6
6
|
Author: lxml dev team
|
|
@@ -75,29 +75,31 @@ Running ``pip install https://github.com/lxml/lxml/archive/refs/heads/lxml-6.0.t
|
|
|
75
75
|
will install the unreleased branch state as soon as a maintenance branch has been established.
|
|
76
76
|
Note that this requires Cython to be installed at an appropriate version for the build.
|
|
77
77
|
|
|
78
|
-
6.0.
|
|
78
|
+
6.0.3 (2026-04-09)
|
|
79
79
|
==================
|
|
80
80
|
|
|
81
81
|
Bugs fixed
|
|
82
82
|
----------
|
|
83
83
|
|
|
84
|
-
*
|
|
85
|
-
Original patch by Xi Ruoyao.
|
|
84
|
+
* Several out of memory error cases now raise ``MemoryError`` that were not handled before.
|
|
86
85
|
|
|
87
|
-
*
|
|
86
|
+
* Slicing with large step values (outside of ``+/- sys.maxsize``) could trigger undefined C behaviour.
|
|
88
87
|
|
|
89
|
-
*
|
|
90
|
-
See https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.14.6
|
|
88
|
+
* LP#2125399: Some failing tests were fixed or disabled in PyPy.
|
|
91
89
|
|
|
92
|
-
*
|
|
90
|
+
* LP#2138421: Memory leak in error cases when setting the ``public_id`` or ``system_url`` of a document.
|
|
91
|
+
|
|
92
|
+
* Memory leak in case of a memory allocation failure when copying document subtrees.
|
|
93
|
+
|
|
94
|
+
* When mapping an XPath result to Python failed, the result memory could leak.
|
|
95
|
+
|
|
96
|
+
* When preparing an XSLT transform failed, the XSLT parameter memory could leak.
|
|
93
97
|
|
|
94
98
|
Other changes
|
|
95
99
|
-------------
|
|
96
100
|
|
|
97
|
-
*
|
|
98
|
-
|
|
99
|
-
* Error constants were updated to match libxml2 2.15.0.
|
|
101
|
+
* Built using Cython 3.2.4.
|
|
100
102
|
|
|
101
|
-
*
|
|
103
|
+
* Binary wheels use zlib 1.3.2.
|
|
102
104
|
|
|
103
105
|
|
|
@@ -8,7 +8,7 @@ For an introduction and further documentation, see `doc/main.txt`_.
|
|
|
8
8
|
|
|
9
9
|
For installation information, see `INSTALL.txt`_.
|
|
10
10
|
|
|
11
|
-
For issue tracker, see https://bugs.launchpad.net/lxml
|
|
11
|
+
For the issue tracker, see https://bugs.launchpad.net/lxml
|
|
12
12
|
|
|
13
13
|
Support the project
|
|
14
14
|
-------------------
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
import hashlib
|
|
1
2
|
import json
|
|
2
|
-
import os
|
|
3
|
+
import os
|
|
4
|
+
import platform
|
|
5
|
+
import re
|
|
6
|
+
import sys
|
|
3
7
|
import tarfile
|
|
4
8
|
import time
|
|
5
9
|
from contextlib import closing
|
|
6
10
|
from ftplib import FTP
|
|
11
|
+
from pathlib import Path
|
|
7
12
|
|
|
8
13
|
import urllib.error
|
|
9
|
-
from urllib.parse import urljoin, unquote, urlparse
|
|
14
|
+
from urllib.parse import urljoin, quote as urlquote, unquote, urlparse
|
|
10
15
|
from urllib.request import urlretrieve, urlopen, Request
|
|
11
16
|
|
|
12
17
|
multi_make_options = []
|
|
@@ -44,25 +49,6 @@ def read_file_digest(file):
|
|
|
44
49
|
|
|
45
50
|
|
|
46
51
|
def download_and_extract_windows_binaries(destdir):
|
|
47
|
-
url = "https://api.github.com/repos/lxml/libxml2-win-binaries/releases?per_page=5"
|
|
48
|
-
releases, _ = read_url(
|
|
49
|
-
url,
|
|
50
|
-
accept="application/vnd.github+json",
|
|
51
|
-
as_json=True,
|
|
52
|
-
github_api_token=os.environ.get("GITHUB_API_TOKEN"),
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
max_release = {'tag_name': ''}
|
|
56
|
-
for release in releases:
|
|
57
|
-
if max_release['tag_name'] < release.get('tag_name', ''):
|
|
58
|
-
max_release = release
|
|
59
|
-
|
|
60
|
-
url = "https://github.com/lxml/libxml2-win-binaries/releases/download/%s/" % max_release['tag_name']
|
|
61
|
-
asset_files = {
|
|
62
|
-
asset['name']: (asset['size'], asset['digest'])
|
|
63
|
-
for asset in max_release.get('assets', ())
|
|
64
|
-
}
|
|
65
|
-
|
|
66
52
|
# Check for native ARM64 build or the environment variable that is set by
|
|
67
53
|
# Visual Studio for cross-compilation (same variable as setuptools uses)
|
|
68
54
|
if platform.machine() == 'ARM64' or os.getenv('VSCMD_ARG_TGT_ARCH') == 'arm64':
|
|
@@ -72,47 +58,68 @@ def download_and_extract_windows_binaries(destdir):
|
|
|
72
58
|
else:
|
|
73
59
|
arch = "win32"
|
|
74
60
|
|
|
75
|
-
|
|
61
|
+
def build_libzip_name(libname, version):
|
|
62
|
+
return f"{libname}-{version}.{arch}.zip"
|
|
63
|
+
|
|
64
|
+
def read_latest_release():
|
|
65
|
+
url = "https://api.github.com/repos/lxml/libxml2-win-binaries/releases?per_page=5"
|
|
66
|
+
releases, _ = read_url(
|
|
67
|
+
url,
|
|
68
|
+
accept="application/vnd.github+json",
|
|
69
|
+
as_json=True,
|
|
70
|
+
github_api_token=os.environ.get("GITHUB_API_TOKEN"),
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
max_release = {'tag_name': ''}
|
|
74
|
+
for release in releases:
|
|
75
|
+
if max_release['tag_name'] < release.get('tag_name', ''):
|
|
76
|
+
max_release = release
|
|
77
|
+
|
|
78
|
+
return max_release
|
|
79
|
+
|
|
80
|
+
latest_release = read_latest_release()
|
|
81
|
+
|
|
82
|
+
release_tag = latest_release['tag_name']
|
|
83
|
+
download_url = f"https://github.com/lxml/libxml2-win-binaries/releases/download/{urlquote(release_tag)}/"
|
|
84
|
+
|
|
85
|
+
arch_part = f'.{arch}.'
|
|
76
86
|
asset_files = {
|
|
77
|
-
|
|
78
|
-
for
|
|
79
|
-
if arch_part in
|
|
87
|
+
asset['name']: (asset['size'], asset['digest'])
|
|
88
|
+
for asset in latest_release.get('assets', ())
|
|
89
|
+
if arch_part in asset['name']
|
|
80
90
|
}
|
|
81
91
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
arch,
|
|
88
|
-
)
|
|
92
|
+
lib_file_names = list(asset_files)
|
|
93
|
+
libs = {
|
|
94
|
+
libname: build_libzip_name(libname, find_max_version(libname, lib_file_names))
|
|
95
|
+
for libname in ['libxml2', 'libxslt', 'zlib', 'iconv']
|
|
96
|
+
}
|
|
89
97
|
|
|
90
98
|
if not os.path.exists(destdir):
|
|
91
99
|
os.makedirs(destdir)
|
|
92
100
|
|
|
93
|
-
for
|
|
94
|
-
srcfile = urljoin(
|
|
101
|
+
for libfn in libs.values():
|
|
102
|
+
srcfile = urljoin(download_url, libfn)
|
|
95
103
|
destfile = os.path.join(destdir, libfn)
|
|
96
104
|
if os.path.exists(destfile):
|
|
97
105
|
file_size, file_digest = asset_files.get(libfn, (None, None))
|
|
98
106
|
if file_size and os.path.getsize(destfile) == file_size and read_file_digest(destfile) == file_digest:
|
|
99
|
-
print('Using local copy of "{}"'
|
|
107
|
+
print(f'Using local copy of "{srcfile}"')
|
|
100
108
|
continue
|
|
101
109
|
|
|
102
|
-
print('Retrieving "
|
|
110
|
+
print(f'Retrieving "{srcfile}" to "{destfile}"')
|
|
103
111
|
urlretrieve(srcfile, destfile)
|
|
104
112
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return libs
|
|
113
|
+
lib_dirs = {
|
|
114
|
+
libname: unpack_zipfile(os.path.join(destdir, libfn), destdir)
|
|
115
|
+
for libname, libfn in libs.items()
|
|
116
|
+
}
|
|
117
|
+
return lib_dirs
|
|
111
118
|
|
|
112
119
|
|
|
113
120
|
def find_top_dir_of_zipfile(zipfile):
|
|
114
121
|
topdir = None
|
|
115
|
-
files =
|
|
122
|
+
files = [f.filename for f in zipfile.filelist]
|
|
116
123
|
dirs = [d for d in files if d.endswith('/')]
|
|
117
124
|
if dirs:
|
|
118
125
|
dirs.sort(key=len)
|
|
@@ -277,6 +284,27 @@ def tryint(s):
|
|
|
277
284
|
return s
|
|
278
285
|
|
|
279
286
|
|
|
287
|
+
ARCHIVE_HASHES = {
|
|
288
|
+
# Default hash algorithm is SHA-256.
|
|
289
|
+
# Prefix hash with e.g. "sha512:" for alternative algorithms.
|
|
290
|
+
filename: digest
|
|
291
|
+
for line in """
|
|
292
|
+
c8b9bc81f8b590c33af8cc6c336dbff2f53409973588a351c95f1c621b13d09d libxml2-2.15.2.tar.xz
|
|
293
|
+
7ce458a0affeb83f0b55f1f4f9e0e55735dbfc1a9de124ee86fb4a66b597203a libxml2-2.14.6.tar.xz
|
|
294
|
+
|
|
295
|
+
9acfe68419c4d06a45c550321b3212762d92f41465062ca4ea19e632ee5d216e libxslt-1.1.45.tar.xz
|
|
296
|
+
5a3d6b383ca5afc235b171118e90f5ff6aa27e9fea3303065231a6d403f0183a libxslt-1.1.43.tar.xz
|
|
297
|
+
|
|
298
|
+
88dd96a8c0464eca144fc791ae60cd31cd8ee78321e67397e25fc095c4a19aa6 libiconv-1.19.tar.gz
|
|
299
|
+
3b08f5f4f9b4eb82f151a7040bfd6fe6c6fb922efe4b1659c66ea933276965e8 libiconv-1.18.tar.gz
|
|
300
|
+
|
|
301
|
+
bb329a0a2cd0274d05519d61c667c062e06990d72e125ee2dfa8de64f0119d16 zlib-1.3.2.tar.gz
|
|
302
|
+
""".strip().splitlines()
|
|
303
|
+
if len(line) > 64
|
|
304
|
+
for digest, filename in [line.split()]
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
|
|
280
308
|
def download_libxml2(dest_dir, version=None):
|
|
281
309
|
"""Downloads libxml2, returning the filename where the library was downloaded"""
|
|
282
310
|
#version_re = re.compile(r'LATEST_LIBXML2_IS_([0-9.]+[0-9](?:-[abrc0-9]+)?)')
|
|
@@ -328,18 +356,37 @@ def find_max_version(libname, filenames, version_re=None):
|
|
|
328
356
|
match = version_re.search(fn)
|
|
329
357
|
if match:
|
|
330
358
|
version_string = match.group(1)
|
|
331
|
-
versions.append((
|
|
332
|
-
|
|
359
|
+
versions.append((
|
|
360
|
+
tuple(map(tryint, version_string.replace("-", ".-").split('.'))),
|
|
361
|
+
version_string,
|
|
362
|
+
))
|
|
333
363
|
if not versions:
|
|
334
364
|
raise Exception(
|
|
335
365
|
"Could not find the most current version of %s from the files: %s" % (
|
|
336
|
-
libname, filenames))
|
|
366
|
+
libname, list(filenames)))
|
|
337
367
|
versions.sort()
|
|
338
368
|
version_string = versions[-1][-1]
|
|
339
369
|
print('Latest version of %s is %s' % (libname, version_string))
|
|
340
370
|
return version_string
|
|
341
371
|
|
|
342
372
|
|
|
373
|
+
def file_exists(file_path: Path, size=None, digest=None):
|
|
374
|
+
if not file_path.exists():
|
|
375
|
+
return False
|
|
376
|
+
if size is not None:
|
|
377
|
+
if file_path.stat().st_size != size:
|
|
378
|
+
return False
|
|
379
|
+
if digest is not None and hasattr(hashlib, 'file_digest'):
|
|
380
|
+
hash_alg = 'sha256'
|
|
381
|
+
if ':' in digest:
|
|
382
|
+
hash_alg, _, digest = digest.partition(':')
|
|
383
|
+
with file_path.open(mode='rb') as f:
|
|
384
|
+
file_digest = hashlib.file_digest(f, hash_alg)
|
|
385
|
+
if digest != file_digest.hexdigest():
|
|
386
|
+
return False
|
|
387
|
+
return True
|
|
388
|
+
|
|
389
|
+
|
|
343
390
|
def download_library(dest_dir, location, name, version_re, filename, version=None):
|
|
344
391
|
if version is None:
|
|
345
392
|
try:
|
|
@@ -368,24 +415,31 @@ def download_library(dest_dir, location, name, version_re, filename, version=Non
|
|
|
368
415
|
filename = filename % version
|
|
369
416
|
|
|
370
417
|
full_url = urljoin(location, filename)
|
|
371
|
-
|
|
372
|
-
if
|
|
373
|
-
print(
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
418
|
+
dest_filepath = Path(dest_dir) / filename
|
|
419
|
+
if file_exists(dest_filepath, digest=ARCHIVE_HASHES.get(filename)):
|
|
420
|
+
print(f'Using existing {name} downloaded into {dest_filepath} '
|
|
421
|
+
'(delete this file if you want to re-download the package)')
|
|
422
|
+
return dest_filepath
|
|
423
|
+
|
|
424
|
+
print('Downloading %s into %s from %s' % (name, dest_filepath, full_url))
|
|
425
|
+
for retry_after_seconds in (2, 5, 10, None):
|
|
426
|
+
try:
|
|
427
|
+
urlretrieve(full_url, dest_filepath)
|
|
428
|
+
except urllib.error.URLError as exc:
|
|
429
|
+
if retry_after_seconds is None:
|
|
430
|
+
print(f"Download failed: {exc}")
|
|
431
|
+
break
|
|
432
|
+
else:
|
|
433
|
+
print(f"Download failed: {exc}, retrying in {int(retry_after_seconds)} seconds…")
|
|
434
|
+
time.sleep(retry_after_seconds)
|
|
435
|
+
else:
|
|
436
|
+
if file_exists(dest_filepath, digest=ARCHIVE_HASHES.get(filename)):
|
|
437
|
+
return dest_filepath
|
|
438
|
+
|
|
439
|
+
if not file_exists(dest_filepath, digest=ARCHIVE_HASHES.get(filename)):
|
|
440
|
+
raise RuntimeError(f"File download of {filename} failed to write the correct file.")
|
|
387
441
|
|
|
388
|
-
return
|
|
442
|
+
return dest_filepath
|
|
389
443
|
|
|
390
444
|
|
|
391
445
|
def unpack_tarball(tar_filename, dest) -> str:
|
|
@@ -656,7 +710,7 @@ def main(with_zlib=True, download_only=False, platform=None):
|
|
|
656
710
|
if platform is None:
|
|
657
711
|
platform = sys_platform
|
|
658
712
|
|
|
659
|
-
if
|
|
713
|
+
if platform.startswith('win'):
|
|
660
714
|
return get_prebuilt_libxml2xslt(
|
|
661
715
|
download_dir, static_include_dirs, static_library_dirs)
|
|
662
716
|
|
|
@@ -67,7 +67,7 @@ ElementTree_.
|
|
|
67
67
|
7.5 How can I modify the tree during iteration?
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
The code examples below use the
|
|
70
|
+
The code examples below use the ``lxml.etree`` module:
|
|
71
71
|
|
|
72
72
|
.. sourcecode:: pycon
|
|
73
73
|
|
|
@@ -380,7 +380,7 @@ I'm glad you asked.
|
|
|
380
380
|
Note that this beautiful quick-and-dirty converter expects children
|
|
381
381
|
to have unique tag names and will silently overwrite any data that
|
|
382
382
|
was contained in preceding siblings with the same name. For any
|
|
383
|
-
real-world application of xml-to-dict conversion, you
|
|
383
|
+
real-world application of xml-to-dict conversion, you had better
|
|
384
384
|
write your own, longer version of this.
|
|
385
385
|
|
|
386
386
|
|
|
@@ -484,7 +484,7 @@ Why do I get errors about missing UCS4 symbols when installing lxml?
|
|
|
484
484
|
|
|
485
485
|
You are using a Python installation that was configured for a different
|
|
486
486
|
internal Unicode representation than the lxml package you are trying to
|
|
487
|
-
install. CPython versions before 3.3 allowed
|
|
487
|
+
install. CPython versions before 3.3 allowed switching between two types
|
|
488
488
|
at build time: the 32 bit encoding UCS4 and the 16 bit encoding UCS2.
|
|
489
489
|
Sadly, both are not compatible, so eggs and other binary distributions
|
|
490
490
|
can only support the one they were compiled with.
|
|
@@ -550,7 +550,7 @@ subdirectories in the lxml source tree (below the ``src`` directory)
|
|
|
550
550
|
and the ReST_ `text files`_ in the ``doc`` directory.
|
|
551
551
|
|
|
552
552
|
We also have a `list of missing features`_ that we would like to
|
|
553
|
-
implement but didn't due to lack
|
|
553
|
+
implement but didn't due to lack of time. If *you* find the time,
|
|
554
554
|
patches are very welcome.
|
|
555
555
|
|
|
556
556
|
.. _ReST: http://docutils.sourceforge.net/rst.html
|
|
@@ -651,7 +651,7 @@ release you are using.
|
|
|
651
651
|
|
|
652
652
|
.. _`current developer changelog`: https://github.com/lxml/lxml/blob/master/CHANGES.txt
|
|
653
653
|
|
|
654
|
-
Also, the 'crash' section above has
|
|
654
|
+
Also, the 'crash' section above has some good advice on what to try to see if
|
|
655
655
|
the problem is really in lxml - and not in your setup. Believe it or not,
|
|
656
656
|
that happens more often than you might think, especially when old libraries
|
|
657
657
|
or even multiple library versions are installed.
|
|
@@ -720,7 +720,7 @@ the respective project, namely:
|
|
|
720
720
|
On the other hand, everything that seems to be related to Python code,
|
|
721
721
|
including custom resolvers, custom XPath functions, etc. is likely
|
|
722
722
|
outside of the scope of libxml2/libxslt. If you encounter problems
|
|
723
|
-
here or you are not sure where
|
|
723
|
+
here or you are not sure where the problem may come from, please
|
|
724
724
|
ask on the lxml mailing list first.
|
|
725
725
|
|
|
726
726
|
In any case, a good explanation of the problem including some simple
|
|
@@ -869,7 +869,7 @@ for possible approaches to solve your specific problem:
|
|
|
869
869
|
* compile lxml without threading support by running ``setup.py`` with the
|
|
870
870
|
``--without-threading`` option. While this might be slower in certain
|
|
871
871
|
scenarios on multi-processor systems, it *might* also keep your application
|
|
872
|
-
from crashing, which should be worth more to you than
|
|
872
|
+
from crashing, which should be worth more to you than peak performance.
|
|
873
873
|
Remember that lxml is fast anyway, so concurrency may not even be worth it.
|
|
874
874
|
|
|
875
875
|
* look out for fancy XSLT stuff like foreign document access or
|
|
@@ -178,7 +178,7 @@ on an ElementTree use its explicit root node as reference.
|
|
|
178
178
|
Iteration
|
|
179
179
|
---------
|
|
180
180
|
|
|
181
|
-
The ElementTree API makes Elements iterable to
|
|
181
|
+
The ElementTree API makes Elements iterable to support iteration over their
|
|
182
182
|
children. Using the tree defined above, we get:
|
|
183
183
|
|
|
184
184
|
.. sourcecode:: pycon
|
|
@@ -289,7 +289,7 @@ transformer object. See their documentation for details.
|
|
|
289
289
|
|
|
290
290
|
However, lxml also keeps a global error log of all errors that occurred at the
|
|
291
291
|
application level. Whenever an exception is raised, you can retrieve the
|
|
292
|
-
errors that occurred and "might have"
|
|
292
|
+
errors that occurred and "might have" led to the problem from the error log
|
|
293
293
|
copy attached to the exception:
|
|
294
294
|
|
|
295
295
|
.. sourcecode:: pycon
|
|
@@ -325,7 +325,7 @@ error level:
|
|
|
325
325
|
This might look a little cryptic at first, but it is the information that
|
|
326
326
|
libxml2 gives you. At least the message at the end should give you a hint
|
|
327
327
|
what went wrong and you can see that the fatal errors (FATAL) happened during
|
|
328
|
-
parsing (PARSER)
|
|
328
|
+
parsing (PARSER) at line 4, column 8 and line 5, column 1 of a string (<string>,
|
|
329
329
|
or the filename if available). Here, PARSER is the so-called error domain,
|
|
330
330
|
see ``lxml.etree.ErrorDomains`` for that. You can get it from a log entry
|
|
331
331
|
like this:
|
|
@@ -473,7 +473,7 @@ Incremental XML generation
|
|
|
473
473
|
--------------------------
|
|
474
474
|
|
|
475
475
|
Since version 3.1, lxml provides an ``xmlfile`` API for incrementally
|
|
476
|
-
generating XML using the ``with`` statement.
|
|
476
|
+
generating XML using the ``with`` statement. Its main purpose is to
|
|
477
477
|
freely and safely mix surrounding elements with pre-built in-memory
|
|
478
478
|
trees, e.g. to write out large documents that consist mostly of
|
|
479
479
|
repetitive subtrees (like database dumps). But it can be useful in
|
|
@@ -34,12 +34,12 @@ Cython versions, which may or may not generate correct code for lxml.
|
|
|
34
34
|
The pre-generated release sources were tested and therefore are known
|
|
35
35
|
to work.
|
|
36
36
|
|
|
37
|
-
So, if you want a reliable build of lxml, we suggest
|
|
38
|
-
source release of lxml and b)
|
|
37
|
+
So, if you want a reliable build of lxml, we suggest a) using a
|
|
38
|
+
source release of lxml and b) disabling or uninstalling Cython for the
|
|
39
39
|
build.
|
|
40
40
|
|
|
41
41
|
*Only* if you are interested in building lxml from a checkout of the
|
|
42
|
-
developer sources (e.g. to test a bug fix that has not been
|
|
42
|
+
developer sources (e.g. to test a bug fix that has not been released
|
|
43
43
|
yet) or if you want to be an lxml developer, then you do need a
|
|
44
44
|
working Cython installation. You can use pip_ to install it::
|
|
45
45
|
|
|
@@ -255,7 +255,7 @@ install Unix/Linux style package management tools and new software, it
|
|
|
255
255
|
actually seems to be hard to get libraries set up for exclusive usage
|
|
256
256
|
that MacOS-X ships in an older version. Alternative distributions
|
|
257
257
|
(like macports) install their libraries in addition to the system
|
|
258
|
-
libraries, but the compiler and the runtime loader on MacOS still
|
|
258
|
+
libraries, but the compiler and the runtime loader on MacOS still see
|
|
259
259
|
the system libraries before the new libraries. This can lead to
|
|
260
260
|
undebuggable crashes where the newer library seems to be loaded but
|
|
261
261
|
the older system library is used.
|
|
@@ -22,7 +22,7 @@ c-importable by extension modules implemented in Cython_.
|
|
|
22
22
|
Passing generated trees through Python
|
|
23
23
|
--------------------------------------
|
|
24
24
|
|
|
25
|
-
This is the
|
|
25
|
+
This is the simplest way to integrate with lxml. It does not require
|
|
26
26
|
any C-level integration but uses a Python function to wrap an externally
|
|
27
27
|
generated libxml2 document in lxml.
|
|
28
28
|
|
|
@@ -7,7 +7,7 @@ ElementTree. Nonetheless, some differences and incompatibilities exist:
|
|
|
7
7
|
|
|
8
8
|
* Importing etree is obviously different; etree uses a lower-case
|
|
9
9
|
package name, while ElementTree uses a combination of upper-case and
|
|
10
|
-
lower
|
|
10
|
+
lower-case in imports:
|
|
11
11
|
|
|
12
12
|
.. sourcecode:: python
|
|
13
13
|
|
|
@@ -160,7 +160,7 @@ ElementTree. Nonetheless, some differences and incompatibilities exist:
|
|
|
160
160
|
* ElementTree merges the target of a processing instruction into ``PI.text``,
|
|
161
161
|
while lxml.etree puts it into the ``.target`` property and leaves it out of
|
|
162
162
|
the ``.text`` property. The ``pi.text`` in ElementTree therefore
|
|
163
|
-
|
|
163
|
+
corresponds to ``pi.target + " " + pi.text`` in lxml.etree.
|
|
164
164
|
|
|
165
165
|
* Because etree is built on top of libxml2, which is namespace prefix aware,
|
|
166
166
|
etree preserves namespaces declarations and prefixes while ElementTree tends
|
|
@@ -60,7 +60,7 @@ Element initialization
|
|
|
60
60
|
======================
|
|
61
61
|
|
|
62
62
|
There is one thing to know up front. Element classes *must not* have
|
|
63
|
-
an ``
|
|
63
|
+
an ``__init__`` or ``__new__`` method. There should not be any
|
|
64
64
|
internal state either, except for the data stored in the underlying
|
|
65
65
|
XML tree. Element instances are created and garbage collected at
|
|
66
66
|
need, so there is normally no way to predict when and how often a
|
|
@@ -98,7 +98,7 @@ cache manually up to date if the tree changes, which can get tricky in
|
|
|
98
98
|
cases.
|
|
99
99
|
|
|
100
100
|
For proxy initialisation, ElementBase classes have an ``_init()``
|
|
101
|
-
method that can be overridden, as
|
|
101
|
+
method that can be overridden, as opposed to the normal ``__init__()``
|
|
102
102
|
method. It can be used to modify the XML tree, e.g. to construct
|
|
103
103
|
special children or verify and update attributes.
|
|
104
104
|
|
|
@@ -121,7 +121,7 @@ The semantics of ``_init()`` are as follows:
|
|
|
121
121
|
before running through the init process.
|
|
122
122
|
|
|
123
123
|
* Any exceptions raised in ``_init()`` will be propagated through the API
|
|
124
|
-
call that
|
|
124
|
+
call that led to the creation of the Element. So be careful with the code
|
|
125
125
|
you write here as its exceptions may turn up in various unexpected places.
|
|
126
126
|
|
|
127
127
|
|
|
@@ -382,7 +382,7 @@ the elements in the tree have been instantiated as Python Element
|
|
|
382
382
|
proxies.
|
|
383
383
|
|
|
384
384
|
Luckily, there is a way to do this. The ``PythonElementClassLookup``
|
|
385
|
-
works
|
|
385
|
+
works similarly to the custom lookup scheme:
|
|
386
386
|
|
|
387
387
|
.. sourcecode:: pycon
|
|
388
388
|
|
|
@@ -394,7 +394,7 @@ works similar to the custom lookup scheme:
|
|
|
394
394
|
>>> parser.set_element_class_lookup(MyLookup())
|
|
395
395
|
|
|
396
396
|
As before, the first argument to the ``lookup()`` method is the opaque
|
|
397
|
-
document instance that contains the Element. The second
|
|
397
|
+
document instance that contains the Element. The second argument is a
|
|
398
398
|
lightweight Element proxy implementation that is only valid during the lookup.
|
|
399
399
|
Do not try to keep a reference to it. Once the lookup is finished, the proxy
|
|
400
400
|
will become invalid. You will get an ``AssertionError`` if you access any of
|
|
@@ -46,7 +46,7 @@ and extension elements in XSLT as in the following example:
|
|
|
46
46
|
XPath Extension functions
|
|
47
47
|
=========================
|
|
48
48
|
|
|
49
|
-
Here is
|
|
49
|
+
Here is what an extension function looks like. As the first argument,
|
|
50
50
|
it always receives a context object (see below). The other arguments
|
|
51
51
|
are provided by the respective call in the XPath expression, one in
|
|
52
52
|
the following examples. Any number of arguments is allowed:
|
|
@@ -471,7 +471,7 @@ And then you can implement the element in Python like this:
|
|
|
471
471
|
... # just copy own content input to output
|
|
472
472
|
... output_parent.extend( list(self_node) )
|
|
473
473
|
|
|
474
|
-
The arguments passed to the ``.execute()`` method
|
|
474
|
+
The arguments passed to the ``.execute()`` method are
|
|
475
475
|
|
|
476
476
|
context
|
|
477
477
|
The opaque evaluation context. You need this when calling back
|