Sync from SUSE:SLFO:Main python-lxml revision 0d290a7b2961f90da98c0184e360ddfb

This commit is contained in:
Adrian Schröter 2024-10-01 08:52:41 +02:00
parent ebd5ba1b32
commit d7a4bc69c2
10 changed files with 110 additions and 930 deletions

View File

@ -1,110 +0,0 @@
From 4bfab2c821961fb4c5ed8a04e329778c9b09a1df Mon Sep 17 00:00:00 2001
From: Stefan Behnel <stefan_ml@behnel.de>
Date: Wed, 12 Jul 2023 16:59:07 +0200
Subject: [PATCH] Make the validation of ISO-Schematron files optional in lxml,
depending on the availability of the RNG validation file. Some lxml
distributions discard the validation schema file due to licensing issues.
See https://bugs.launchpad.net/lxml/+bug/2024343
---
CHANGES.txt | 8 ++++++++
doc/validation.txt | 9 +++++++++
src/lxml/isoschematron/__init__.py | 24 +++++++++++++++++++-----
3 files changed, 36 insertions(+), 5 deletions(-)
Index: lxml-4.9.3/CHANGES.txt
===================================================================
--- lxml-4.9.3.orig/CHANGES.txt
+++ lxml-4.9.3/CHANGES.txt
@@ -27,6 +27,14 @@ Other changes
* Built with Cython 0.29.36 to adapt to changes in Python 3.12.
+* LP#2024343: The validation of the schema file itself is now optional in the
+ ISO-Schematron implementation. This was done because some lxml distributions
+ discard the RNG validation schema file due to licensing issues. The validation
+ can now always be disabled with ``Schematron(..., validate_schema=False)``.
+ It is enabled by default if available and disabled otherwise. The module
+ constant ``lxml.isoschematron.schematron_schema_valid_supported`` can be used
+ to detect whether schema file validation is available.
+
4.9.2 (2022-12-13)
==================
Index: lxml-4.9.3/doc/validation.txt
===================================================================
--- lxml-4.9.3.orig/doc/validation.txt
+++ lxml-4.9.3/doc/validation.txt
@@ -615,6 +615,15 @@ The usage of validation phases is a uniq
a very powerful tool e.g. for establishing validation stages or to provide
different validators for different "validation audiences".
+Note: Some lxml distributions exclude the validation schema file due to licensing issues.
+Since lxml 5.0, the validation of the user provided schema can be disabled with
+``Schematron(..., validate_schema=False)``.
+It is enabled by default if available and disabled otherwise. Previous versions of
+lxml always had it enabled and failed at import time if the file was not available.
+Thus, some distributions chose to remove the entire ISO-Schematron support.
+The module constant ``lxml.isoschematron.schematron_schema_valid_supported`` can be used
+since lxml 5.0 to detect whether schema file validation is available.
+
(Pre-ISO-Schematron)
--------------------
Index: lxml-4.9.3/src/lxml/isoschematron/__init__.py
===================================================================
--- lxml-4.9.3.orig/src/lxml/isoschematron/__init__.py
+++ lxml-4.9.3/src/lxml/isoschematron/__init__.py
@@ -61,10 +61,16 @@ iso_svrl_for_xslt1 = _etree.XSLT(_etree.
svrl_validation_errors = _etree.XPath(
'//svrl:failed-assert', namespaces={'svrl': SVRL_NS})
-
# RelaxNG validator for schematron schemas
-schematron_schema_valid = _etree.RelaxNG(
- file=os.path.join(_resources_dir, 'rng', 'iso-schematron.rng'))
+schematron_schema_valid_supported = False
+try:
+ schematron_schema_valid = _etree.RelaxNG(
+ file=os.path.join(_resources_dir, 'rng', 'iso-schematron.rng'))
+ schematron_schema_valid_supported = True
+except _etree.RelaxNGParseError:
+ # Some distributions delete the file due to licensing issues.
+ def schematron_schema_valid(arg):
+ raise NotImplementedError("Validating the ISO schematron requires iso-schematron.rng")
def stylesheet_params(**kwargs):
@@ -153,6 +159,13 @@ class Schematron(_etree._Validator):
report document gets stored and can be accessed as the ``validation_report``
property.
+ If ``validate_schema`` is set to False, the validation of the schema file
+ itself is disabled. Validation happens by default after building the full
+ schema, unless the schema validation file cannot be found at import time,
+ in which case the validation gets disabled. Some lxml distributions exclude
+ this file due to licensing issues. ISO-Schematron validation can then still
+ be used normally, but the schemas themselves cannot be validated.
+
Here is a usage example::
>>> from lxml import etree
@@ -234,7 +247,8 @@ class Schematron(_etree._Validator):
def __init__(self, etree=None, file=None, include=True, expand=True,
include_params={}, expand_params={}, compile_params={},
store_schematron=False, store_xslt=False, store_report=False,
- phase=None, error_finder=ASSERTS_ONLY):
+ phase=None, error_finder=ASSERTS_ONLY,
+ validate_schema=schematron_schema_valid_supported):
super(Schematron, self).__init__()
self._store_report = store_report
@@ -273,7 +287,7 @@ class Schematron(_etree._Validator):
schematron = self._include(schematron, **include_params)
if expand:
schematron = self._expand(schematron, **expand_params)
- if not schematron_schema_valid(schematron):
+ if validate_schema and not schematron_schema_valid(schematron):
raise _etree.SchematronParseError(
"invalid schematron schema: %s" %
schematron_schema_valid.error_log)

View File

@ -1,29 +0,0 @@
---
src/lxml/tests/test_etree.py | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
--- a/src/lxml/tests/test_etree.py
+++ b/src/lxml/tests/test_etree.py
@@ -18,6 +18,7 @@ import re
import gc
import operator
import textwrap
+import tempfile
import zlib
import gzip
@@ -5276,9 +5277,11 @@ class ETreeWriteTestCase(HelperTestCase)
def test_write_file_gzip_parse(self):
tree = self.parse(_bytes('<a>'+'<b/>'*200+'</a>'))
- with tmpfile() as filename:
- tree.write(filename, compression=9)
- data = etree.tostring(etree.parse(filename))
+ with tempfile.NamedTemporaryFile() as f:
+ tree.write(f.name, compression=9)
+ f.file.flush()
+ f.file.seek(0)
+ data = etree.tostring(etree.parse(f.name))
self.assertEqual(_bytes('<a>'+'<b/>'*200+'</a>'),
data)

BIN
lxml-4.9.3.tar.gz (Stored with Git LFS)

Binary file not shown.

BIN
lxml-5.1.0.tar.gz (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,3 +1,43 @@
-------------------------------------------------------------------
Thu Feb 15 08:59:28 UTC 2024 - Daniel Garcia <daniel.garcia@suse.com>
- Add skip-test-under-libexpat-2.6.0.patch to skip broken test with
expat 2.6.0, gh#python/cpython#115133
-------------------------------------------------------------------
Wed Jan 24 10:53:21 UTC 2024 - ecsos <ecsos@opensuse.org>
- Fix build error for Leap.
Use build and test as descriped on upstream.
-------------------------------------------------------------------
Sun Jan 14 10:00:32 UTC 2024 - Adrian Schröter <adrian@suse.de>
- update to version 5.1.0:
Details on https://lxml.de/5.1/changes-5.1.0.html
removed merged patches:
- ISO-Schematron-schema-optional.patch
- remove-ISO-Schematron-schema.patch
- close_file_before_test.patch
-------------------------------------------------------------------
Wed Dec 20 22:04:14 UTC 2023 - Dirk Müller <dmueller@suse.com>
- update to 4.9.4:
* LP#2046398: Inserting/replacing an ancestor into a node's
children could loop indefinitely.
* LP#1980767, GH#379: ``TreeBuilder.close()`` could fail with a
``TypeError`` after parsing incorrect input.
* LP#1522052: A file-system specific test is now optional and
should no longer fail on systems that don't support it.
* Built with Cython 0.29.37.
- drop libxml2212-tests.patch (upstream)
-------------------------------------------------------------------
Mon Nov 27 12:36:51 UTC 2023 - Markéta Machová <mmachova@suse.com>
- Add libxml2212-tests.patch to fix tests with new libxml2
-------------------------------------------------------------------
Wed Sep 6 20:04:29 UTC 2023 - Dirk Müller <dmueller@suse.com>

View File

@ -1,7 +1,7 @@
#
# spec file for package python-lxml
#
# Copyright (c) 2023 SUSE LLC
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-lxml
Version: 4.9.3
Version: 5.1.0
Release: 0
Summary: Pythonic XML processing library
License: BSD-3-Clause AND GPL-2.0-or-later
@ -27,22 +27,16 @@ URL: https://lxml.de/
Source0: https://files.pythonhosted.org/packages/source/l/lxml/lxml-%{version}.tar.gz
Source1: https://lxml.de/lxmldoc-4.5.2.pdf
Source99: python-lxml.rpmlintrc
# PATCH-FIX-UPSTREAM close_file_before_test.patch bsc#1206555 mcepl@suse.com
# make sure the testing data are flushed to the file
Patch0: close_file_before_test.patch
# PATCH-FIX-OPENSUSE Skip a test under libxml2 2.10.4+
# https://bugs.launchpad.net/lxml/+bug/2016939
Patch1: skip-test-under-libxml2-2.10.4.patch
# PATCH-FIX-OPENSUSE Skip a test under libxml2 2.11.1+
# https://bugs.launchpad.net/lxml/+bug/2018522
Patch2: skip-test-under-libxml2-2.11.1.patch
# PATCH-FIX-UPSTREAM ISO-Schematron-schema-optional.patch lp#2024343 mcepl@suse.com
# Make ISO Schematron RNG validation schemes optional and then remove it gh#lxml/lxml@4bfab2c82196
Patch3: ISO-Schematron-schema-optional.patch
# PATCH-FIX-UPSTREAM remove-ISO-Schematron-schema.patch gl#fedora/legal/fedora-license-data/-#154 mcepl@suse.com
# Actually remove the schema
Patch4: remove-ISO-Schematron-schema.patch
BuildRequires: %{python_module Cython >= 0.29.7 with %python-Cython < 3}
# PATCH-FIX-OPENSUSE Skip a test under libexpat 2.6.0+
# Same test gh#python/cpython#115133
Patch3: skip-test-under-libexpat-2.6.0.patch
BuildRequires: %{python_module Cython >= 3.0.7}
BuildRequires: %{python_module base}
BuildRequires: %{python_module cssselect >= 0.9.1}
BuildRequires: %{python_module setuptools >= 18.0.1}
@ -104,7 +98,7 @@ rm src/lxml/lxml.etree_api.h
%build
export CFLAGS="%{optflags}"
%python_build --with-cython
%python_build build_ext -i --with-cython
%check
# The tests fail on SLE 11 due to broken incremental parsing in libxml2
@ -113,7 +107,7 @@ export LANG=en_US.UTF-8
export PYTHONUNBUFFERED=x
# cyclic dependency between html5lib and lxml
rm -v src/lxml/html/tests/test_html5parser.py
%{python_expand PYTHON3="$python" %make_build test3}
%python_exec test.py
%install
%python_install

View File

@ -1,731 +0,0 @@
---
src/lxml/isoschematron/resources/rng/iso-schematron.rng | 709 ----------------
src/lxml/tests/test_isoschematron.py | 1
2 files changed, 1 insertion(+), 709 deletions(-)
Index: lxml-4.9.2/src/lxml/isoschematron/resources/rng/iso-schematron.rng
===================================================================
--- lxml-4.9.2.orig/src/lxml/isoschematron/resources/rng/iso-schematron.rng
+++ /dev/null
@@ -1,709 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright © ISO/IEC 2015 -->
-<!--
- The following permission notice and disclaimer shall be included in all
- copies of this XML schema ("the Schema"), and derivations of the Schema:
-
- Permission is hereby granted, free of charge in perpetuity, to any
- person obtaining a copy of the Schema, to use, copy, modify, merge and
- distribute free of charge, copies of the Schema for the purposes of
- developing, implementing, installing and using software based on the
- Schema, and to permit persons to whom the Schema is furnished to do so,
- subject to the following conditions:
-
- THE SCHEMA IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SCHEMA OR THE USE OR
- OTHER DEALINGS IN THE SCHEMA.
-
- In addition, any modified copy of the Schema shall include the following
- notice:
-
- "THIS SCHEMA HAS BEEN MODIFIED FROM THE SCHEMA DEFINED IN ISO/IEC 19757-3,
- AND SHOULD NOT BE INTERPRETED AS COMPLYING WITH THAT STANDARD".
--->
-<grammar ns="http://purl.oclc.org/dsdl/schematron" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
- <start>
- <ref name="schema"/>
- </start>
- <!-- Element declarations -->
- <define name="schema">
- <element name="schema">
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <ref name="rich"/>
- <optional>
- <attribute name="schemaVersion">
- <ref name="non-empty-string"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="defaultPhase">
- <data type="IDREF"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="queryBinding">
- <ref name="non-empty-string"/>
- </attribute>
- </optional>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <ref name="inclusion"/>
- </zeroOrMore>
- <group>
- <optional>
- <ref name="title"/>
- </optional>
- <zeroOrMore>
- <ref name="ns"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="phase"/>
- </zeroOrMore>
- <oneOrMore>
- <ref name="pattern"/>
- </oneOrMore>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <optional>
- <ref name="diagnostics"/>
- </optional>
- <optional>
- <!-- edited (lxml): required in standard, optional here (since it can be empty anyway) -->
- <ref name="properties"/>
- </optional>
- </group>
- </interleave>
- </element>
- </define>
- <define name="active">
- <element name="active">
- <attribute name="pattern">
- <data type="IDREF"/>
- </attribute>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="dir"/>
- <ref name="emph"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="assert">
- <element name="assert">
- <attribute name="test">
- <ref name="exprValue"/>
- </attribute>
- <optional>
- <attribute name="flag">
- <ref name="flagValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="diagnostics">
- <data type="IDREFS"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="properties">
- <data type="IDREFS"/>
- </attribute>
- </optional>
- <ref name="rich"/>
- <ref name="linkable"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="name"/>
- <ref name="value-of"/>
- <ref name="emph"/>
- <ref name="dir"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="diagnostic">
- <element name="diagnostic">
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- <ref name="rich"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="value-of"/>
- <ref name="emph"/>
- <ref name="dir"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="diagnostics">
- <element name="diagnostics">
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <ref name="inclusion"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="diagnostic"/>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="dir">
- <element name="dir">
- <optional>
- <attribute name="value">
- <choice>
- <value>ltr</value>
- <value>rtl</value>
- </choice>
- </attribute>
- </optional>
- <interleave>
- <ref name="foreign"/>
- <text/>
- </interleave>
- </element>
- </define>
- <define name="emph">
- <element name="emph">
- <text/>
- </element>
- </define>
- <define name="extends">
- <element name="extends">
- <choice>
- <attribute name="rule">
- <data type="IDREF"/>
- </attribute>
- <attribute name="href">
- <ref name="uriValue"/>
- </attribute>
- </choice>
- <ref name="foreign-empty"/>
- </element>
- </define>
- <define name="let">
- <element name="let">
- <attribute name="name">
- <ref name="nameValue"/>
- </attribute>
- <choice>
- <attribute name="value">
- <data type="string" datatypeLibrary=""/>
- </attribute>
- <oneOrMore>
- <ref name="foreign-element"/>
- </oneOrMore>
- </choice>
- </element>
- </define>
- <define name="name">
- <element name="name">
- <optional>
- <attribute name="path">
- <ref name="pathValue"/>
- </attribute>
- </optional>
- <ref name="foreign-empty"/>
- </element>
- </define>
- <define name="ns">
- <element name="ns">
- <attribute name="uri">
- <ref name="uriValue"/>
- </attribute>
- <attribute name="prefix">
- <ref name="nameValue"/>
- </attribute>
- <ref name="foreign-empty"/>
- </element>
- </define>
- <define name="p">
- <element name="p">
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="class">
- <ref name="classValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="icon">
- <ref name="uriValue"/>
- </attribute>
- </optional>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="dir"/>
- <ref name="emph"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="param">
- <element name="param">
- <attribute name="name">
- <ref name="nameValue"/>
- </attribute>
- <attribute name="value">
- <ref name="non-empty-string"/>
- </attribute>
- </element>
- </define>
- <define name="pattern">
- <element name="pattern">
- <optional>
- <attribute name="documents">
- <ref name="pathValue"/>
- </attribute>
- </optional>
- <ref name="rich"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <ref name="inclusion"/>
- </zeroOrMore>
- <choice>
- <group>
- <attribute name="abstract">
- <value>true</value>
- </attribute>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- <optional>
- <ref name="title"/>
- </optional>
- <group>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="rule"/>
- </zeroOrMore>
- </group>
- </group>
- <group>
- <optional>
- <attribute name="abstract">
- <value>false</value>
- </attribute>
- </optional>
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <ref name="title"/>
- </optional>
- <group>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="rule"/>
- </zeroOrMore>
- </group>
- </group>
- <group>
- <optional>
- <attribute name="abstract">
- <value>false</value>
- </attribute>
- </optional>
- <attribute name="is-a">
- <data type="IDREF"/>
- </attribute>
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <ref name="title"/>
- </optional>
- <group>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="param"/>
- </zeroOrMore>
- </group>
- </group>
- </choice>
- </interleave>
- </element>
- </define>
- <define name="phase">
- <element name="phase">
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- <ref name="rich"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <ref name="inclusion"/>
- </zeroOrMore>
- <group>
- <zeroOrMore>
- <ref name="p"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <zeroOrMore>
- <ref name="active"/>
- </zeroOrMore>
- </group>
- </interleave>
- </element>
- </define>
- <define name="properties">
- <element name="properties">
- <zeroOrMore>
- <ref name="property"/>
- </zeroOrMore>
- </element>
- </define>
- <define name="property">
- <element name="property">
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- <optional>
- <attribute name="role">
- <ref name="roleValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="scheme"/>
- </optional>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="name"/>
- <ref name="value-of"/>
- <ref name="emph"/>
- <ref name="dir"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="report">
- <element name="report">
- <attribute name="test">
- <ref name="exprValue"/>
- </attribute>
- <optional>
- <attribute name="flag">
- <ref name="flagValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="diagnostics">
- <data type="IDREFS"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="properties">
- <data type="IDREFS"/>
- </attribute>
- </optional>
- <ref name="rich"/>
- <ref name="linkable"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="name"/>
- <ref name="value-of"/>
- <ref name="emph"/>
- <ref name="dir"/>
- <ref name="span"/>
- </choice>
- </zeroOrMore>
- </interleave>
- </element>
- </define>
- <define name="rule">
- <element name="rule">
- <optional>
- <attribute name="flag">
- <ref name="flagValue"/>
- </attribute>
- </optional>
- <ref name="rich"/>
- <ref name="linkable"/>
- <interleave>
- <ref name="foreign"/>
- <zeroOrMore>
- <ref name="inclusion"/>
- </zeroOrMore>
- <choice>
- <group>
- <attribute name="abstract">
- <value>true</value>
- </attribute>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <oneOrMore>
- <choice>
- <ref name="assert"/>
- <ref name="report"/>
- <ref name="extends"/>
- <ref name="p"/>
- </choice>
- </oneOrMore>
- </group>
- <group>
- <attribute name="context">
- <ref name="pathValue"/>
- </attribute>
- <optional>
- <attribute name="id">
- <data type="ID"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="abstract">
- <value>false</value>
- </attribute>
- </optional>
- <zeroOrMore>
- <ref name="let"/>
- </zeroOrMore>
- <oneOrMore>
- <choice>
- <ref name="assert"/>
- <ref name="report"/>
- <ref name="extends"/>
- <ref name="p"/>
- </choice>
- </oneOrMore>
- </group>
- </choice>
- </interleave>
- </element>
- </define>
- <define name="span">
- <element name="span">
- <attribute name="class">
- <ref name="classValue"/>
- </attribute>
- <interleave>
- <ref name="foreign"/>
- <text/>
- </interleave>
- </element>
- </define>
- <define name="title">
- <element name="title">
- <zeroOrMore>
- <choice>
- <text/>
- <ref name="dir"/>
- </choice>
- </zeroOrMore>
- </element>
- </define>
- <define name="value-of">
- <element name="value-of">
- <attribute name="select">
- <ref name="pathValue"/>
- </attribute>
- <ref name="foreign-empty"/>
- </element>
- </define>
- <!-- common declarations -->
- <define name="inclusion">
- <element name="include">
- <attribute name="href">
- <ref name="uriValue"/>
- </attribute>
- <ref name="foreign-empty"/>
- </element>
- </define>
- <define name="rich">
- <optional>
- <attribute name="icon">
- <ref name="uriValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="see">
- <ref name="uriValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="fpi">
- <ref name="fpiValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="xml:lang">
- <ref name="langValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="xml:space">
- <choice>
- <value>preserve</value>
- <value>default</value>
- </choice>
- </attribute>
- </optional>
- </define>
- <define name="linkable">
- <optional>
- <attribute name="role">
- <ref name="roleValue"/>
- </attribute>
- </optional>
- <optional>
- <attribute name="subject">
- <ref name="pathValue"/>
- </attribute>
- </optional>
- </define>
- <define name="foreign">
- <ref name="foreign-attributes"/>
- <zeroOrMore>
- <ref name="foreign-element"/>
- </zeroOrMore>
- </define>
- <define name="foreign-empty">
- <ref name="foreign-attributes"/>
- </define>
- <define name="foreign-attributes">
- <zeroOrMore>
- <attribute>
- <anyName>
- <except>
- <nsName ns=""/>
- <nsName ns="http://www.w3.org/XML/1998/namespace"/>
- </except>
- </anyName>
- </attribute>
- </zeroOrMore>
- </define>
- <define name="foreign-element">
- <element>
- <anyName>
- <except>
- <nsName/>
- </except>
- </anyName>
- <zeroOrMore>
- <choice>
- <attribute>
- <anyName/>
- </attribute>
- <ref name="foreign-element"/>
- <ref name="schema"/>
- <text/>
- </choice>
- </zeroOrMore>
- </element>
- </define>
- <!-- Data types -->
- <define name="uriValue">
- <data type="anyURI"/>
- </define>
- <define name="pathValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="exprValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="fpiValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="langValue">
- <data type="language"/>
- </define>
- <define name="roleValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="flagValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="nameValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <!-- In the default query language binding, xsd:NCNAME -->
- <define name="classValue">
- <data type="string" datatypeLibrary=""/>
- </define>
- <define name="non-empty-string">
- <data type="token">
- <param name="minLength">1</param>
- </data>
- </define>
-</grammar>
Index: lxml-4.9.2/src/lxml/tests/test_isoschematron.py
===================================================================
--- lxml-4.9.2.orig/src/lxml/tests/test_isoschematron.py
+++ lxml-4.9.2/src/lxml/tests/test_isoschematron.py
@@ -55,6 +55,7 @@ class ETreeISOSchematronTestCase(HelperT
schema = isoschematron.Schematron(schema)
self.assertTrue(schema)
+ @unittest.skip("No RNG schema present, validation is not possible.")
def test_schematron_invalid_schema_empty(self):
schema = self.parse('''\
<schema xmlns="http://purl.oclc.org/dsdl/schematron" />

View File

@ -0,0 +1,16 @@
Index: lxml-5.1.0/src/lxml/tests/test_elementtree.py
===================================================================
--- lxml-5.1.0.orig/src/lxml/tests/test_elementtree.py
+++ lxml-5.1.0/src/lxml/tests/test_elementtree.py
@@ -4383,8 +4383,10 @@ class _XMLPullParserTest(unittest.TestCa
self.assertEqual([(action, elem.tag) for action, elem in events],
expected)
+ # Fails with chunk_size in [1, 5], so replacing with 22,
+ # gh#python/cpython#115289
def test_simple_xml(self):
- for chunk_size in (None, 1, 5):
+ for chunk_size in (None, 22):
#with self.subTest(chunk_size=chunk_size):
parser = self.etree.XMLPullParser()
self.assert_event_tags(parser, [])

View File

@ -1,12 +1,12 @@
Index: lxml-4.9.2/src/lxml/tests/test_etree.py
Index: lxml-5.1.0/src/lxml/tests/test_etree.py
===================================================================
--- lxml-4.9.2.orig/src/lxml/tests/test_etree.py
+++ lxml-4.9.2/src/lxml/tests/test_etree.py
@@ -3068,6 +3068,7 @@ class ETreeOnlyTestCase(HelperTestCase):
--- lxml-5.1.0.orig/src/lxml/tests/test_etree.py
+++ lxml-5.1.0/src/lxml/tests/test_etree.py
@@ -3256,6 +3256,7 @@ class ETreeOnlyTestCase(HelperTestCase):
self.assertEqual(re, e.nsmap)
self.assertEqual(r, s.nsmap)
+ @unittest.skipIf(etree.LIBXML_VERSION >= (2, 10, 4), "libxml2 regression ignores namespaces")
def test_html_prefix_nsmap(self):
etree = self.etree
el = etree.HTML('<hha:page-description>aa</hha:page-description>').find('.//page-description')
el = etree.HTML('<hha:page-description>aa</hha:page-description>')

View File

@ -1,8 +1,8 @@
Index: lxml-4.9.2/src/lxml/tests/test_io.py
Index: lxml-5.1.0/src/lxml/tests/test_io.py
===================================================================
--- lxml-4.9.2.orig/src/lxml/tests/test_io.py
+++ lxml-4.9.2/src/lxml/tests/test_io.py
@@ -15,6 +15,7 @@ from .common_imports import (
--- lxml-5.1.0.orig/src/lxml/tests/test_io.py
+++ lxml-5.1.0/src/lxml/tests/test_io.py
@@ -12,6 +12,7 @@ from .common_imports import (
read_file, write_to_file, BytesIO, tmpfile
)
@ -10,11 +10,11 @@ Index: lxml-4.9.2/src/lxml/tests/test_io.py
class _IOTestCaseBase(HelperTestCase):
"""(c)ElementTree compatibility for IO functions/methods
@@ -304,6 +305,7 @@ class _IOTestCaseBase(HelperTestCase):
@@ -305,6 +306,7 @@ class _IOTestCaseBase(HelperTestCase):
os.unlink(f.name)
self.assertEqual(utext, root.text)
+ @unittest.skipIf(lxml.etree.LIBXML_VERSION >= (2, 11, 1), "libxml2 regression has issues with utf16")
def test_iterparse_utf16_bom(self):
utext = _str('Søk på nettet')
utext = 'Søk på nettet'
uxml = '<?xml version="1.0" encoding="UTF-16"?><p>%s</p>' % utext