Compare commits
16 Commits
rawhide
...
main-riscv
Author | SHA1 | Date |
---|---|---|
David Abdurachmanov | 3dd21fd7ba | |
Miro Hrončok | 55f5648cc5 | |
Miro Hrončok | 9a245c1e0c | |
Lumir Balhar | 79d3d026da | |
Fedora Release Engineering | 4452ba9aa0 | |
Miro Hrončok | 3c925c366d | |
Python Maint | 0e1ee829e6 | |
Miro Hrončok | 1a4b58646c | |
Miro Hrončok | a1fda59562 | |
Python Maint | 4391bca196 | |
Miro Hrončok | 9d95f5a04e | |
Miro Hrončok | af2ab59687 | |
Yaakov Selkowitz | e3db9bc24a | |
Tomáš Hrnčiar | 26d49d1f7e | |
Fedora Release Engineering | 1c38e85b1f | |
Lumir Balhar | 7b1e5f9aab |
|
@ -58,3 +58,7 @@ lxml-2.2.7.tar.gz.asc
|
||||||
/lxml-4.6.3.tar.gz
|
/lxml-4.6.3.tar.gz
|
||||||
/lxml-4.7.1.tar.gz
|
/lxml-4.7.1.tar.gz
|
||||||
/lxml-4.9.1.tar.gz
|
/lxml-4.9.1.tar.gz
|
||||||
|
/lxml-4.9.2.tar.gz
|
||||||
|
/lxml-4.9.2-no-isoschematron.tar.gz
|
||||||
|
/lxml-4.9.2-no-isoschematron-rng.tar.gz
|
||||||
|
/lxml-4.9.3-no-isoschematron-rng.tar.gz
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
From d18f2f22218ea0e0b5327b5a2bda789afdf16e41 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
|
||||||
|
Date: Fri, 14 Jul 2023 12:18:25 +0200
|
||||||
|
Subject: [PATCH] Skip test_isoschematron.test_schematron_invalid_schema_empty
|
||||||
|
without the RNG file
|
||||||
|
|
||||||
|
The expected SchematronParseError only happens when validate_schema is true.
|
||||||
|
---
|
||||||
|
src/lxml/tests/test_isoschematron.py | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/lxml/tests/test_isoschematron.py b/src/lxml/tests/test_isoschematron.py
|
||||||
|
index 6d2aa3fb6..900f257c3 100644
|
||||||
|
--- a/src/lxml/tests/test_isoschematron.py
|
||||||
|
+++ b/src/lxml/tests/test_isoschematron.py
|
||||||
|
@@ -55,6 +55,8 @@ def test_schematron_empty_pattern(self):
|
||||||
|
schema = isoschematron.Schematron(schema)
|
||||||
|
self.assertTrue(schema)
|
||||||
|
|
||||||
|
+ @unittest.skipIf(not isoschematron.schematron_schema_valid_supported,
|
||||||
|
+ 'SchematronParseError is risen only when validate_schema is true')
|
||||||
|
def test_schematron_invalid_schema_empty(self):
|
||||||
|
schema = self.parse('''\
|
||||||
|
<schema xmlns="http://purl.oclc.org/dsdl/schematron" />
|
|
@ -0,0 +1,116 @@
|
||||||
|
From a500f721e3b34018f0a86af275427663dc337b5a 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 | 11 +++++++++++
|
||||||
|
doc/validation.txt | 9 +++++++++
|
||||||
|
src/lxml/isoschematron/__init__.py | 24 +++++++++++++++++++-----
|
||||||
|
3 files changed, 39 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/CHANGES.txt b/CHANGES.txt
|
||||||
|
index 24052db..e68ee9a 100644
|
||||||
|
--- a/CHANGES.txt
|
||||||
|
+++ b/CHANGES.txt
|
||||||
|
@@ -2,6 +2,17 @@
|
||||||
|
lxml changelog
|
||||||
|
==============
|
||||||
|
|
||||||
|
+4.9.3+
|
||||||
|
+======
|
||||||
|
+
|
||||||
|
+* 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.3 (2023-07-05)
|
||||||
|
==================
|
||||||
|
|
||||||
|
diff --git a/doc/validation.txt b/doc/validation.txt
|
||||||
|
index af9d007..27c0ccd 100644
|
||||||
|
--- a/doc/validation.txt
|
||||||
|
+++ b/doc/validation.txt
|
||||||
|
@@ -615,6 +615,15 @@ The usage of validation phases is a unique feature of ISO-Schematron and can be
|
||||||
|
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 4.9.2-8, 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 4.9.2-8 to detect whether schema file validation is available.
|
||||||
|
+
|
||||||
|
(Pre-ISO-Schematron)
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
diff --git a/src/lxml/isoschematron/__init__.py b/src/lxml/isoschematron/__init__.py
|
||||||
|
index 5967b10..2846a66 100644
|
||||||
|
--- a/src/lxml/isoschematron/__init__.py
|
||||||
|
+++ b/src/lxml/isoschematron/__init__.py
|
||||||
|
@@ -61,10 +61,16 @@ iso_svrl_for_xslt1 = _etree.XSLT(_etree.parse(
|
||||||
|
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)
|
||||||
|
--
|
||||||
|
2.40.1
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
From 91729cf581f764c3321f644206568f18d0fc92f4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Hrn=C4=8Diar?= <thrnciar@redhat.com>
|
||||||
|
Date: Thu, 18 May 2023 08:00:48 +0200
|
||||||
|
Subject: [PATCH] Skip failing test test_html_prefix_nsmap
|
||||||
|
|
||||||
|
Upstream issue: https://bugs.launchpad.net/lxml/+bug/2016939
|
||||||
|
---
|
||||||
|
src/lxml/tests/test_etree.py | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/lxml/tests/test_etree.py b/src/lxml/tests/test_etree.py
|
||||||
|
index 0339796..1994a7f 100644
|
||||||
|
--- a/src/lxml/tests/test_etree.py
|
||||||
|
+++ b/src/lxml/tests/test_etree.py
|
||||||
|
@@ -27,6 +27,8 @@ from .common_imports import SillyFileLike, LargeFileLikeUnicode, doctest, make_d
|
||||||
|
from .common_imports import canonicalize, _str, _bytes
|
||||||
|
from .common_imports import SimpleFSPath
|
||||||
|
|
||||||
|
+from unittest import skip
|
||||||
|
+
|
||||||
|
print("""
|
||||||
|
TESTED VERSION: %s""" % etree.__version__ + """
|
||||||
|
Python: %r""" % (sys.version_info,) + """
|
||||||
|
@@ -3067,6 +3069,7 @@ class ETreeOnlyTestCase(HelperTestCase):
|
||||||
|
self.assertEqual(re, e.nsmap)
|
||||||
|
self.assertEqual(r, s.nsmap)
|
||||||
|
|
||||||
|
+ @skip
|
||||||
|
def test_html_prefix_nsmap(self):
|
||||||
|
etree = self.etree
|
||||||
|
el = etree.HTML('<hha:page-description>aa</hha:page-description>').find('.//page-description')
|
||||||
|
--
|
||||||
|
2.40.1
|
||||||
|
|
|
@ -0,0 +1,402 @@
|
||||||
|
From a03a4b3c6b906d33c5ef1a15f3d5ca5fff600c76 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Stefan Behnel <stefan_ml@behnel.de>
|
||||||
|
Date: Fri, 23 Dec 2022 10:46:32 +0100
|
||||||
|
Subject: [PATCH] Use "noexcept" modifiers for callback functions and fix some
|
||||||
|
exception value declaration bugs found by Cython 3.0.
|
||||||
|
|
||||||
|
---
|
||||||
|
src/lxml/extensions.pxi | 6 +++---
|
||||||
|
src/lxml/includes/tree.pxd | 10 +++++-----
|
||||||
|
src/lxml/includes/xmlerror.pxd | 4 ++--
|
||||||
|
src/lxml/includes/xmlparser.pxd | 24 ++++++++++++------------
|
||||||
|
src/lxml/parser.pxi | 10 +++++-----
|
||||||
|
src/lxml/saxparser.pxi | 26 +++++++++++++-------------
|
||||||
|
src/lxml/serializer.pxi | 4 ++--
|
||||||
|
src/lxml/xmlerror.pxi | 14 +++++++-------
|
||||||
|
src/lxml/xpath.pxi | 2 +-
|
||||||
|
9 files changed, 50 insertions(+), 50 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/lxml/extensions.pxi b/src/lxml/extensions.pxi
|
||||||
|
index 35a321b7a..80e53d7b5 100644
|
||||||
|
--- a/src/lxml/extensions.pxi
|
||||||
|
+++ b/src/lxml/extensions.pxi
|
||||||
|
@@ -393,7 +393,7 @@ cdef tuple LIBXML2_XPATH_ERROR_MESSAGES = (
|
||||||
|
b"?? Unknown error ??\n",
|
||||||
|
)
|
||||||
|
|
||||||
|
-cdef void _forwardXPathError(void* c_ctxt, xmlerror.xmlError* c_error) with gil:
|
||||||
|
+cdef void _forwardXPathError(void* c_ctxt, xmlerror.xmlError* c_error) noexcept with gil:
|
||||||
|
cdef xmlerror.xmlError error
|
||||||
|
cdef int xpath_code
|
||||||
|
if c_error.message is not NULL:
|
||||||
|
@@ -414,7 +414,7 @@ cdef void _forwardXPathError(void* c_ctxt, xmlerror.xmlError* c_error) with gil:
|
||||||
|
|
||||||
|
(<_BaseContext>c_ctxt)._error_log._receive(&error)
|
||||||
|
|
||||||
|
-cdef void _receiveXPathError(void* c_context, xmlerror.xmlError* error) nogil:
|
||||||
|
+cdef void _receiveXPathError(void* c_context, xmlerror.xmlError* error) noexcept nogil:
|
||||||
|
if not __DEBUG:
|
||||||
|
return
|
||||||
|
if c_context is NULL:
|
||||||
|
@@ -851,7 +851,7 @@ cdef void _extension_function_call(_BaseContext context, function,
|
||||||
|
# lookup the function by name and call it
|
||||||
|
|
||||||
|
cdef void _xpath_function_call(xpath.xmlXPathParserContext* ctxt,
|
||||||
|
- int nargs) with gil:
|
||||||
|
+ int nargs) noexcept with gil:
|
||||||
|
cdef _BaseContext context
|
||||||
|
cdef xpath.xmlXPathContext* rctxt = ctxt.context
|
||||||
|
context = <_BaseContext> rctxt.userData
|
||||||
|
diff --git a/src/lxml/includes/tree.pxd b/src/lxml/includes/tree.pxd
|
||||||
|
index 03d558a33..312537cbd 100644
|
||||||
|
--- a/src/lxml/includes/tree.pxd
|
||||||
|
+++ b/src/lxml/includes/tree.pxd
|
||||||
|
@@ -65,7 +65,7 @@ cdef extern from "libxml/chvalid.h" nogil:
|
||||||
|
|
||||||
|
cdef extern from "libxml/hash.h":
|
||||||
|
ctypedef struct xmlHashTable
|
||||||
|
- ctypedef void (*xmlHashScanner)(void* payload, void* data, const_xmlChar* name) # may require GIL!
|
||||||
|
+ ctypedef void (*xmlHashScanner)(void* payload, void* data, const_xmlChar* name) noexcept # may require GIL!
|
||||||
|
void xmlHashScan(xmlHashTable* table, xmlHashScanner f, void* data) nogil
|
||||||
|
void* xmlHashLookup(xmlHashTable* table, const_xmlChar* name) nogil
|
||||||
|
ctypedef void (*xmlHashDeallocator)(void *payload, xmlChar *name)
|
||||||
|
@@ -411,12 +411,12 @@ cdef extern from "libxml/xmlIO.h":
|
||||||
|
cdef int xmlOutputBufferClose(xmlOutputBuffer* out) nogil
|
||||||
|
|
||||||
|
ctypedef int (*xmlInputReadCallback)(void* context,
|
||||||
|
- char* buffer, int len) nogil
|
||||||
|
- ctypedef int (*xmlInputCloseCallback)(void* context) nogil
|
||||||
|
+ char* buffer, int len) except -1 nogil
|
||||||
|
+ ctypedef int (*xmlInputCloseCallback)(void* context) except -1 nogil
|
||||||
|
|
||||||
|
ctypedef int (*xmlOutputWriteCallback)(void* context,
|
||||||
|
- char* buffer, int len)
|
||||||
|
- ctypedef int (*xmlOutputCloseCallback)(void* context)
|
||||||
|
+ char* buffer, int len) except -1
|
||||||
|
+ ctypedef int (*xmlOutputCloseCallback)(void* context) except -1
|
||||||
|
|
||||||
|
cdef xmlOutputBuffer* xmlAllocOutputBuffer(
|
||||||
|
xmlCharEncodingHandler* encoder) nogil
|
||||||
|
diff --git a/src/lxml/includes/xmlerror.pxd b/src/lxml/includes/xmlerror.pxd
|
||||||
|
index c5ac6a0aa..6967378b7 100644
|
||||||
|
--- a/src/lxml/includes/xmlerror.pxd
|
||||||
|
+++ b/src/lxml/includes/xmlerror.pxd
|
||||||
|
@@ -838,9 +838,9 @@ cdef extern from "libxml/xmlerror.h" nogil:
|
||||||
|
int int2
|
||||||
|
void* node
|
||||||
|
|
||||||
|
- ctypedef void (*xmlGenericErrorFunc)(void* ctxt, char* msg, ...)
|
||||||
|
+ ctypedef void (*xmlGenericErrorFunc)(void* ctxt, char* msg, ...) noexcept
|
||||||
|
ctypedef void (*xmlStructuredErrorFunc)(void* userData,
|
||||||
|
- xmlError* error)
|
||||||
|
+ xmlError* error) noexcept
|
||||||
|
|
||||||
|
cdef void xmlSetGenericErrorFunc(
|
||||||
|
void* ctxt, xmlGenericErrorFunc func)
|
||||||
|
diff --git a/src/lxml/includes/xmlparser.pxd b/src/lxml/includes/xmlparser.pxd
|
||||||
|
index 9f3056248..c94212cee 100644
|
||||||
|
--- a/src/lxml/includes/xmlparser.pxd
|
||||||
|
+++ b/src/lxml/includes/xmlparser.pxd
|
||||||
|
@@ -15,37 +15,37 @@ cdef extern from "libxml/parser.h" nogil:
|
||||||
|
const_xmlChar** namespaces,
|
||||||
|
int nb_attributes,
|
||||||
|
int nb_defaulted,
|
||||||
|
- const_xmlChar** attributes)
|
||||||
|
+ const_xmlChar** attributes) noexcept
|
||||||
|
|
||||||
|
ctypedef void (*endElementNsSAX2Func)(void* ctx,
|
||||||
|
const_xmlChar* localname,
|
||||||
|
const_xmlChar* prefix,
|
||||||
|
- const_xmlChar* URI)
|
||||||
|
+ const_xmlChar* URI) noexcept
|
||||||
|
|
||||||
|
- ctypedef void (*startElementSAXFunc)(void* ctx, const_xmlChar* name, const_xmlChar** atts)
|
||||||
|
+ ctypedef void (*startElementSAXFunc)(void* ctx, const_xmlChar* name, const_xmlChar** atts) noexcept
|
||||||
|
|
||||||
|
- ctypedef void (*endElementSAXFunc)(void* ctx, const_xmlChar* name)
|
||||||
|
+ ctypedef void (*endElementSAXFunc)(void* ctx, const_xmlChar* name) noexcept
|
||||||
|
|
||||||
|
- ctypedef void (*charactersSAXFunc)(void* ctx, const_xmlChar* ch, int len)
|
||||||
|
+ ctypedef void (*charactersSAXFunc)(void* ctx, const_xmlChar* ch, int len) noexcept
|
||||||
|
|
||||||
|
- ctypedef void (*cdataBlockSAXFunc)(void* ctx, const_xmlChar* value, int len)
|
||||||
|
+ ctypedef void (*cdataBlockSAXFunc)(void* ctx, const_xmlChar* value, int len) noexcept
|
||||||
|
|
||||||
|
- ctypedef void (*commentSAXFunc)(void* ctx, const_xmlChar* value)
|
||||||
|
+ ctypedef void (*commentSAXFunc)(void* ctx, const_xmlChar* value) noexcept
|
||||||
|
|
||||||
|
ctypedef void (*processingInstructionSAXFunc)(void* ctx,
|
||||||
|
const_xmlChar* target,
|
||||||
|
- const_xmlChar* data)
|
||||||
|
+ const_xmlChar* data) noexcept
|
||||||
|
|
||||||
|
ctypedef void (*internalSubsetSAXFunc)(void* ctx,
|
||||||
|
const_xmlChar* name,
|
||||||
|
const_xmlChar* externalID,
|
||||||
|
- const_xmlChar* systemID)
|
||||||
|
+ const_xmlChar* systemID) noexcept
|
||||||
|
|
||||||
|
- ctypedef void (*endDocumentSAXFunc)(void* ctx)
|
||||||
|
+ ctypedef void (*endDocumentSAXFunc)(void* ctx) noexcept
|
||||||
|
|
||||||
|
- ctypedef void (*startDocumentSAXFunc)(void* ctx)
|
||||||
|
+ ctypedef void (*startDocumentSAXFunc)(void* ctx) noexcept
|
||||||
|
|
||||||
|
- ctypedef void (*referenceSAXFunc)(void * ctx, const_xmlChar* name)
|
||||||
|
+ ctypedef void (*referenceSAXFunc)(void * ctx, const_xmlChar* name) noexcept
|
||||||
|
|
||||||
|
cdef int XML_SAX2_MAGIC
|
||||||
|
|
||||||
|
diff --git a/src/lxml/parser.pxi b/src/lxml/parser.pxi
|
||||||
|
index f0c8c6b64..e1e9da9f0 100644
|
||||||
|
--- a/src/lxml/parser.pxi
|
||||||
|
+++ b/src/lxml/parser.pxi
|
||||||
|
@@ -402,10 +402,10 @@ cdef class _FileReaderContext:
|
||||||
|
finally:
|
||||||
|
return c_byte_count # swallow any exceptions
|
||||||
|
|
||||||
|
-cdef int _readFilelikeParser(void* ctxt, char* c_buffer, int c_size) with gil:
|
||||||
|
+cdef int _readFilelikeParser(void* ctxt, char* c_buffer, int c_size) except -1 with gil:
|
||||||
|
return (<_FileReaderContext>ctxt).copyToBuffer(c_buffer, c_size)
|
||||||
|
|
||||||
|
-cdef int _readFileParser(void* ctxt, char* c_buffer, int c_size) nogil:
|
||||||
|
+cdef int _readFileParser(void* ctxt, char* c_buffer, int c_size) except -1 nogil:
|
||||||
|
return stdio.fread(c_buffer, 1, c_size, <stdio.FILE*>ctxt)
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
@@ -626,10 +626,10 @@ cdef _initParserContext(_ParserContext context,
|
||||||
|
if c_ctxt is not NULL:
|
||||||
|
context._initParserContext(c_ctxt)
|
||||||
|
|
||||||
|
-cdef void _forwardParserError(xmlparser.xmlParserCtxt* _parser_context, xmlerror.xmlError* error) with gil:
|
||||||
|
+cdef void _forwardParserError(xmlparser.xmlParserCtxt* _parser_context, xmlerror.xmlError* error) noexcept with gil:
|
||||||
|
(<_ParserContext>_parser_context._private)._error_log._receive(error)
|
||||||
|
|
||||||
|
-cdef void _receiveParserError(void* c_context, xmlerror.xmlError* error) nogil:
|
||||||
|
+cdef void _receiveParserError(void* c_context, xmlerror.xmlError* error) noexcept nogil:
|
||||||
|
if __DEBUG:
|
||||||
|
if c_context is NULL or (<xmlparser.xmlParserCtxt*>c_context)._private is NULL:
|
||||||
|
_forwardError(NULL, error)
|
||||||
|
@@ -1207,7 +1207,7 @@ cdef class _BaseParser:
|
||||||
|
context.cleanup()
|
||||||
|
|
||||||
|
|
||||||
|
-cdef void _initSaxDocument(void* ctxt) with gil:
|
||||||
|
+cdef void _initSaxDocument(void* ctxt) noexcept with gil:
|
||||||
|
xmlparser.xmlSAX2StartDocument(ctxt)
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
c_doc = c_ctxt.myDoc
|
||||||
|
diff --git a/src/lxml/saxparser.pxi b/src/lxml/saxparser.pxi
|
||||||
|
index 49e72beaf..1737f0801 100644
|
||||||
|
--- a/src/lxml/saxparser.pxi
|
||||||
|
+++ b/src/lxml/saxparser.pxi
|
||||||
|
@@ -294,7 +294,7 @@ cdef void _handleSaxStart(
|
||||||
|
const_xmlChar* c_namespace, int c_nb_namespaces,
|
||||||
|
const_xmlChar** c_namespaces,
|
||||||
|
int c_nb_attributes, int c_nb_defaulted,
|
||||||
|
- const_xmlChar** c_attributes) with gil:
|
||||||
|
+ const_xmlChar** c_attributes) noexcept with gil:
|
||||||
|
cdef int i
|
||||||
|
cdef size_t c_len
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
@@ -336,7 +336,7 @@ cdef void _handleSaxTargetStart(
|
||||||
|
const_xmlChar* c_namespace, int c_nb_namespaces,
|
||||||
|
const_xmlChar** c_namespaces,
|
||||||
|
int c_nb_attributes, int c_nb_defaulted,
|
||||||
|
- const_xmlChar** c_attributes) with gil:
|
||||||
|
+ const_xmlChar** c_attributes) noexcept with gil:
|
||||||
|
cdef int i
|
||||||
|
cdef size_t c_len
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
@@ -407,7 +407,7 @@ cdef void _handleSaxTargetStart(
|
||||||
|
|
||||||
|
|
||||||
|
cdef void _handleSaxStartNoNs(void* ctxt, const_xmlChar* c_name,
|
||||||
|
- const_xmlChar** c_attributes) with gil:
|
||||||
|
+ const_xmlChar** c_attributes) noexcept with gil:
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
return
|
||||||
|
@@ -426,7 +426,7 @@ cdef void _handleSaxStartNoNs(void* ctxt, const_xmlChar* c_name,
|
||||||
|
|
||||||
|
|
||||||
|
cdef void _handleSaxTargetStartNoNs(void* ctxt, const_xmlChar* c_name,
|
||||||
|
- const_xmlChar** c_attributes) with gil:
|
||||||
|
+ const_xmlChar** c_attributes) noexcept with gil:
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
return
|
||||||
|
@@ -483,7 +483,7 @@ cdef int _pushSaxStartEvent(_SaxParserContext context,
|
||||||
|
|
||||||
|
cdef void _handleSaxEnd(void* ctxt, const_xmlChar* c_localname,
|
||||||
|
const_xmlChar* c_prefix,
|
||||||
|
- const_xmlChar* c_namespace) with gil:
|
||||||
|
+ const_xmlChar* c_namespace) noexcept with gil:
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
return
|
||||||
|
@@ -506,7 +506,7 @@ cdef void _handleSaxEnd(void* ctxt, const_xmlChar* c_localname,
|
||||||
|
return # swallow any further exceptions
|
||||||
|
|
||||||
|
|
||||||
|
-cdef void _handleSaxEndNoNs(void* ctxt, const_xmlChar* c_name) with gil:
|
||||||
|
+cdef void _handleSaxEndNoNs(void* ctxt, const_xmlChar* c_name) noexcept with gil:
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
return
|
||||||
|
@@ -558,7 +558,7 @@ cdef int _pushSaxEndEvent(_SaxParserContext context,
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
-cdef void _handleSaxData(void* ctxt, const_xmlChar* c_data, int data_len) with gil:
|
||||||
|
+cdef void _handleSaxData(void* ctxt, const_xmlChar* c_data, int data_len) noexcept with gil:
|
||||||
|
# can only be called if parsing with a target
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
@@ -575,7 +575,7 @@ cdef void _handleSaxData(void* ctxt, const_xmlChar* c_data, int data_len) with g
|
||||||
|
|
||||||
|
cdef void _handleSaxTargetDoctype(void* ctxt, const_xmlChar* c_name,
|
||||||
|
const_xmlChar* c_public,
|
||||||
|
- const_xmlChar* c_system) with gil:
|
||||||
|
+ const_xmlChar* c_system) noexcept with gil:
|
||||||
|
# can only be called if parsing with a target
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
@@ -592,7 +592,7 @@ cdef void _handleSaxTargetDoctype(void* ctxt, const_xmlChar* c_name,
|
||||||
|
return # swallow any further exceptions
|
||||||
|
|
||||||
|
|
||||||
|
-cdef void _handleSaxStartDocument(void* ctxt) with gil:
|
||||||
|
+cdef void _handleSaxStartDocument(void* ctxt) noexcept with gil:
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
return
|
||||||
|
@@ -608,7 +608,7 @@ cdef void _handleSaxStartDocument(void* ctxt) with gil:
|
||||||
|
|
||||||
|
|
||||||
|
cdef void _handleSaxTargetPI(void* ctxt, const_xmlChar* c_target,
|
||||||
|
- const_xmlChar* c_data) with gil:
|
||||||
|
+ const_xmlChar* c_data) noexcept with gil:
|
||||||
|
# can only be called if parsing with a target
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
@@ -627,7 +627,7 @@ cdef void _handleSaxTargetPI(void* ctxt, const_xmlChar* c_target,
|
||||||
|
|
||||||
|
|
||||||
|
cdef void _handleSaxPIEvent(void* ctxt, const_xmlChar* target,
|
||||||
|
- const_xmlChar* data) with gil:
|
||||||
|
+ const_xmlChar* data) noexcept with gil:
|
||||||
|
# can only be called when collecting pi events
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
@@ -645,7 +645,7 @@ cdef void _handleSaxPIEvent(void* ctxt, const_xmlChar* target,
|
||||||
|
return # swallow any further exceptions
|
||||||
|
|
||||||
|
|
||||||
|
-cdef void _handleSaxTargetComment(void* ctxt, const_xmlChar* c_data) with gil:
|
||||||
|
+cdef void _handleSaxTargetComment(void* ctxt, const_xmlChar* c_data) noexcept with gil:
|
||||||
|
# can only be called if parsing with a target
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
@@ -661,7 +661,7 @@ cdef void _handleSaxTargetComment(void* ctxt, const_xmlChar* c_data) with gil:
|
||||||
|
return # swallow any further exceptions
|
||||||
|
|
||||||
|
|
||||||
|
-cdef void _handleSaxComment(void* ctxt, const_xmlChar* text) with gil:
|
||||||
|
+cdef void _handleSaxComment(void* ctxt, const_xmlChar* text) noexcept with gil:
|
||||||
|
# can only be called when collecting comment events
|
||||||
|
c_ctxt = <xmlparser.xmlParserCtxt*>ctxt
|
||||||
|
if c_ctxt._private is NULL or c_ctxt.disableSAX:
|
||||||
|
diff --git a/src/lxml/serializer.pxi b/src/lxml/serializer.pxi
|
||||||
|
index 79a02829e..e1c76e1ba 100644
|
||||||
|
--- a/src/lxml/serializer.pxi
|
||||||
|
+++ b/src/lxml/serializer.pxi
|
||||||
|
@@ -699,10 +699,10 @@ cdef class _FilelikeWriter:
|
||||||
|
finally:
|
||||||
|
return retval # and swallow any further exceptions
|
||||||
|
|
||||||
|
-cdef int _writeFilelikeWriter(void* ctxt, char* c_buffer, int length):
|
||||||
|
+cdef int _writeFilelikeWriter(void* ctxt, char* c_buffer, int length) except -1:
|
||||||
|
return (<_FilelikeWriter>ctxt).write(c_buffer, length)
|
||||||
|
|
||||||
|
-cdef int _closeFilelikeWriter(void* ctxt):
|
||||||
|
+cdef int _closeFilelikeWriter(void* ctxt) except -1:
|
||||||
|
return (<_FilelikeWriter>ctxt).close()
|
||||||
|
|
||||||
|
cdef _tofilelike(f, _Element element, encoding, doctype, method,
|
||||||
|
diff --git a/src/lxml/xmlerror.pxi b/src/lxml/xmlerror.pxi
|
||||||
|
index 1b50444fb..793e1d923 100644
|
||||||
|
--- a/src/lxml/xmlerror.pxi
|
||||||
|
+++ b/src/lxml/xmlerror.pxi
|
||||||
|
@@ -634,7 +634,7 @@ def use_global_python_log(PyErrorLog log not None):
|
||||||
|
|
||||||
|
|
||||||
|
# local log functions: forward error to logger object
|
||||||
|
-cdef void _forwardError(void* c_log_handler, xmlerror.xmlError* error) with gil:
|
||||||
|
+cdef void _forwardError(void* c_log_handler, xmlerror.xmlError* error) noexcept with gil:
|
||||||
|
cdef _BaseErrorLog log_handler
|
||||||
|
if c_log_handler is not NULL:
|
||||||
|
log_handler = <_BaseErrorLog>c_log_handler
|
||||||
|
@@ -645,27 +645,27 @@ cdef void _forwardError(void* c_log_handler, xmlerror.xmlError* error) with gil:
|
||||||
|
log_handler._receive(error)
|
||||||
|
|
||||||
|
|
||||||
|
-cdef void _receiveError(void* c_log_handler, xmlerror.xmlError* error) nogil:
|
||||||
|
+cdef void _receiveError(void* c_log_handler, xmlerror.xmlError* error) noexcept nogil:
|
||||||
|
# no Python objects here, may be called without thread context !
|
||||||
|
if __DEBUG:
|
||||||
|
_forwardError(c_log_handler, error)
|
||||||
|
|
||||||
|
|
||||||
|
-cdef void _receiveXSLTError(void* c_log_handler, char* msg, ...) nogil:
|
||||||
|
+cdef void _receiveXSLTError(void* c_log_handler, char* msg, ...) noexcept nogil:
|
||||||
|
# no Python objects here, may be called without thread context !
|
||||||
|
cdef cvarargs.va_list args
|
||||||
|
cvarargs.va_start(args, msg)
|
||||||
|
_receiveGenericError(c_log_handler, xmlerror.XML_FROM_XSLT, msg, args)
|
||||||
|
cvarargs.va_end(args)
|
||||||
|
|
||||||
|
-cdef void _receiveRelaxNGParseError(void* c_log_handler, char* msg, ...) nogil:
|
||||||
|
+cdef void _receiveRelaxNGParseError(void* c_log_handler, char* msg, ...) noexcept nogil:
|
||||||
|
# no Python objects here, may be called without thread context !
|
||||||
|
cdef cvarargs.va_list args
|
||||||
|
cvarargs.va_start(args, msg)
|
||||||
|
_receiveGenericError(c_log_handler, xmlerror.XML_FROM_RELAXNGP, msg, args)
|
||||||
|
cvarargs.va_end(args)
|
||||||
|
|
||||||
|
-cdef void _receiveRelaxNGValidationError(void* c_log_handler, char* msg, ...) nogil:
|
||||||
|
+cdef void _receiveRelaxNGValidationError(void* c_log_handler, char* msg, ...) noexcept nogil:
|
||||||
|
# no Python objects here, may be called without thread context !
|
||||||
|
cdef cvarargs.va_list args
|
||||||
|
cvarargs.va_start(args, msg)
|
||||||
|
@@ -673,7 +673,7 @@ cdef void _receiveRelaxNGValidationError(void* c_log_handler, char* msg, ...) no
|
||||||
|
cvarargs.va_end(args)
|
||||||
|
|
||||||
|
# dummy function: no log output at all
|
||||||
|
-cdef void _nullGenericErrorFunc(void* ctxt, char* msg, ...) nogil:
|
||||||
|
+cdef void _nullGenericErrorFunc(void* ctxt, char* msg, ...) noexcept nogil:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@@ -694,7 +694,7 @@ cdef void _connectGenericErrorLog(log, int c_domain=-1):
|
||||||
|
|
||||||
|
|
||||||
|
cdef void _receiveGenericError(void* c_log_handler, int c_domain,
|
||||||
|
- char* msg, cvarargs.va_list args) nogil:
|
||||||
|
+ char* msg, cvarargs.va_list args) noexcept nogil:
|
||||||
|
# no Python objects here, may be called without thread context !
|
||||||
|
cdef xmlerror.xmlError c_error
|
||||||
|
cdef char* c_text
|
||||||
|
diff --git a/src/lxml/xpath.pxi b/src/lxml/xpath.pxi
|
||||||
|
index a7cae4bff..704338e89 100644
|
||||||
|
--- a/src/lxml/xpath.pxi
|
||||||
|
+++ b/src/lxml/xpath.pxi
|
||||||
|
@@ -99,7 +99,7 @@ cdef class _XPathContext(_BaseContext):
|
||||||
|
|
||||||
|
|
||||||
|
cdef void _registerExsltFunctionsForNamespaces(
|
||||||
|
- void* _c_href, void* _ctxt, const_xmlChar* c_prefix):
|
||||||
|
+ void* _c_href, void* _ctxt, const_xmlChar* c_prefix) noexcept:
|
||||||
|
c_href = <const_xmlChar*> _c_href
|
||||||
|
ctxt = <xpath.xmlXPathContext*> _ctxt
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,53 +0,0 @@
|
||||||
From c742576c105f40fc8b754fcae56fee4aa35840a3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Stefan Behnel <stefan_ml@behnel.de>
|
|
||||||
Date: Tue, 19 Jul 2022 08:25:20 +0200
|
|
||||||
Subject: [PATCH] Work around libxml2 bug in affected versions that failed to
|
|
||||||
reset the namespace count in the parser context.
|
|
||||||
|
|
||||||
See https://gitlab.gnome.org/GNOME/libxml2/-/issues/378
|
|
||||||
---
|
|
||||||
src/lxml/includes/xmlparser.pxd | 1 +
|
|
||||||
src/lxml/parser.pxi | 3 +++
|
|
||||||
src/lxml/tests/test_etree.py | 3 +--
|
|
||||||
3 files changed, 5 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/lxml/includes/xmlparser.pxd b/src/lxml/includes/xmlparser.pxd
|
|
||||||
index a196e34bd..45acfc846 100644
|
|
||||||
--- a/src/lxml/includes/xmlparser.pxd
|
|
||||||
+++ b/src/lxml/includes/xmlparser.pxd
|
|
||||||
@@ -144,6 +144,7 @@ cdef extern from "libxml/parser.h":
|
|
||||||
void* userData
|
|
||||||
int* spaceTab
|
|
||||||
int spaceMax
|
|
||||||
+ int nsNr
|
|
||||||
bint html
|
|
||||||
bint progressive
|
|
||||||
int inSubset
|
|
||||||
diff --git a/src/lxml/parser.pxi b/src/lxml/parser.pxi
|
|
||||||
index f5baf29b9..f0c8c6b64 100644
|
|
||||||
--- a/src/lxml/parser.pxi
|
|
||||||
+++ b/src/lxml/parser.pxi
|
|
||||||
@@ -569,6 +569,9 @@ cdef class _ParserContext(_ResolverContext):
|
|
||||||
self._c_ctxt.disableSAX = 0 # work around bug in libxml2
|
|
||||||
else:
|
|
||||||
xmlparser.xmlClearParserCtxt(self._c_ctxt)
|
|
||||||
+ # work around bug in libxml2 [2.9.10 .. 2.9.14]:
|
|
||||||
+ # https://gitlab.gnome.org/GNOME/libxml2/-/issues/378
|
|
||||||
+ self._c_ctxt.nsNr = 0
|
|
||||||
|
|
||||||
cdef int prepare(self, bint set_document_loader=True) except -1:
|
|
||||||
cdef int result
|
|
||||||
diff --git a/src/lxml/tests/test_etree.py b/src/lxml/tests/test_etree.py
|
|
||||||
index 8bf82c084..0339796d6 100644
|
|
||||||
--- a/src/lxml/tests/test_etree.py
|
|
||||||
+++ b/src/lxml/tests/test_etree.py
|
|
||||||
@@ -1491,8 +1491,7 @@ def test_walk_after_parse_failure(self):
|
|
||||||
# This would be the expected result, because there was no namespace
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
- # This is a bug in libxml2
|
|
||||||
- assert not ns, repr(ns)
|
|
||||||
+ assert False, "Found unexpected namespace '%s'" % ns
|
|
||||||
|
|
||||||
def test_itertext_comment_pi(self):
|
|
||||||
# https://bugs.launchpad.net/lxml/+bug/1844674
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
#! /bin/bash -ex
|
||||||
|
|
||||||
|
# Download a release of lxml (if missing) and remove the isoschematron module from it
|
||||||
|
|
||||||
|
version=$1
|
||||||
|
|
||||||
|
if [ -z "${version}" ]; then
|
||||||
|
echo "Usage: $0 VERSION" >& 2
|
||||||
|
echo "" >& 2
|
||||||
|
echo "example: $0 4.9.2" >& 2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
versionedname=lxml-${version}
|
||||||
|
orig_archive=${versionedname}.tar.gz
|
||||||
|
new_archive=${versionedname}-no-isoschematron-rng.tar.gz
|
||||||
|
|
||||||
|
if [ ! -e ${orig_archive} ]; then
|
||||||
|
wget -N https://files.pythonhosted.org/packages/source/l/lxml/${orig_archive}
|
||||||
|
fi
|
||||||
|
|
||||||
|
deleted_directory=lxml-${version}/src/lxml/isoschematron/resources/rng
|
||||||
|
|
||||||
|
# tar --delete does not operate on compressed archives, so do
|
||||||
|
# gz decompression explicitly
|
||||||
|
gzip --decompress ${orig_archive}
|
||||||
|
tar -v --delete -f ${orig_archive//.gz} ${deleted_directory}
|
||||||
|
gzip -cf ${orig_archive//.gz} > ${new_archive}
|
|
@ -1,6 +1,7 @@
|
||||||
|
%global _without_extras 1
|
||||||
Name: python-lxml
|
Name: python-lxml
|
||||||
Version: 4.9.1
|
Version: 4.9.3
|
||||||
Release: 1%{?dist}
|
Release: 2.0.riscv64%{?dist}
|
||||||
Summary: XML processing library combining libxml2/libxslt with the ElementTree API
|
Summary: XML processing library combining libxml2/libxslt with the ElementTree API
|
||||||
|
|
||||||
# The lxml project is licensed under BSD-3-Clause
|
# The lxml project is licensed under BSD-3-Clause
|
||||||
|
@ -9,27 +10,40 @@ Summary: XML processing library combining libxml2/libxslt with the Elemen
|
||||||
# .xsl schematron files are under the MIT license
|
# .xsl schematron files are under the MIT license
|
||||||
License: BSD-3-Clause AND MIT-CMU AND MIT
|
License: BSD-3-Clause AND MIT-CMU AND MIT
|
||||||
URL: https://github.com/lxml/lxml
|
URL: https://github.com/lxml/lxml
|
||||||
Source: %{pypi_source lxml}
|
|
||||||
|
|
||||||
# Work around libxml2 bug in affected versions that failed to reset the
|
# We use the get-lxml-source.sh script to generate the tarball
|
||||||
# namespace count in the parser context.
|
# without the isoschematron RNG validation file under a problematic license.
|
||||||
# Resolved upstream: https://github.com/lxml/lxml/commit/c742576c105f40fc8b754fcae56fee4aa35840a3
|
# See: https://gitlab.com/fedora/legal/fedora-license-data/-/issues/154
|
||||||
Patch: fix-namespace-count.patch
|
Source0: lxml-%{version}-no-isoschematron-rng.tar.gz
|
||||||
|
Source1: get-lxml-source.sh
|
||||||
|
|
||||||
|
# Make the validation of ISO-Schematron files optional in lxml,
|
||||||
|
# depending on the availability of the RNG validation file
|
||||||
|
# Rebased from https://github.com/lxml/lxml/commit/4bfab2c821961fb4c5ed8a04e329778c9b09a1df
|
||||||
|
# Will be included in lxml 5.0
|
||||||
|
Patch: Make-the-validation-of-ISO-Schematron-files-optional.patch
|
||||||
|
# Skip test_isoschematron.test_schematron_invalid_schema_empty without the RNG file
|
||||||
|
Patch: https://github.com/lxml/lxml/pull/380.patch
|
||||||
|
|
||||||
|
# Upstream issue: https://bugs.launchpad.net/lxml/+bug/2016939
|
||||||
|
Patch: Skip-failing-test-test_html_prefix_nsmap.patch
|
||||||
|
|
||||||
|
# Cython 3 support backported from future lxml 5.0
|
||||||
|
Patch: https://github.com/lxml/lxml/commit/dcbc0cc1cb0cedf8019184aaca805d2a649cd8de.patch
|
||||||
|
Patch: https://github.com/lxml/lxml/commit/a03a4b3c6b906d33c5ef1a15f3d5ca5fff600c76.patch
|
||||||
|
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
BuildRequires: libxml2-devel
|
BuildRequires: libxml2-devel
|
||||||
BuildRequires: libxslt-devel
|
BuildRequires: libxslt-devel
|
||||||
BuildRequires: python3-devel
|
BuildRequires: python3-devel
|
||||||
|
|
||||||
# It is a good idea to BuildRequire the runtime requirements of the [extras] we build.
|
# Some of the extras create a build dependency loop.
|
||||||
# That way, we ensure all the [extras] we build are installable,
|
|
||||||
# and we possibly run tests that would otherwise be skipped.
|
|
||||||
# However, some of the extras here create a dependency loop.
|
|
||||||
# - [cssselect] Requires cssselect BuildRequires lxml
|
# - [cssselect] Requires cssselect BuildRequires lxml
|
||||||
# - [html5] Requires html5lib BuildRequires lxml
|
# - [html5] Requires html5lib BuildRequires lxml
|
||||||
# - [htmlsoup] Requires beautifulsoup4 Requires lxml
|
# - [htmlsoup] Requires beautifulsoup4 Requires lxml
|
||||||
# Hence we provide a bcond to disable this buildtime requirement.
|
# Hence we provide a bcond to disable the extras altogether.
|
||||||
%bcond buildrequire_extras 1
|
# By default, the extras are disabled in RHEL, to avoid dependencies.
|
||||||
|
%bcond extras %{undefined rhel}
|
||||||
|
|
||||||
%global _description \
|
%global _description \
|
||||||
lxml is a Pythonic, mature binding for the libxml2 and libxslt libraries. It\
|
lxml is a Pythonic, mature binding for the libxml2 and libxslt libraries. It\
|
||||||
|
@ -41,21 +55,27 @@ XML Schema, XSLT, C14N and much more.
|
||||||
|
|
||||||
%package -n python3-lxml
|
%package -n python3-lxml
|
||||||
Summary: %{summary}
|
Summary: %{summary}
|
||||||
|
%if %{with extras}
|
||||||
Suggests: python3-lxml+cssselect
|
Suggests: python3-lxml+cssselect
|
||||||
Suggests: python3-lxml+html5
|
Suggests: python3-lxml+html5
|
||||||
Suggests: python3-lxml+htmlsoup
|
Suggests: python3-lxml+htmlsoup
|
||||||
|
%endif
|
||||||
|
|
||||||
%description -n python3-lxml %{_description}
|
%description -n python3-lxml %{_description}
|
||||||
|
|
||||||
Python 3 version.
|
Python 3 version.
|
||||||
|
|
||||||
|
%if %{with extras}
|
||||||
%pyproject_extras_subpkg -n python3-lxml cssselect html5 htmlsoup
|
%pyproject_extras_subpkg -n python3-lxml cssselect html5 htmlsoup
|
||||||
|
%endif
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup -n lxml-%{version} -p1
|
%autosetup -n lxml-%{version} -p1
|
||||||
|
# Don't run html5lib tests --without extras
|
||||||
|
%{!?without_extras:rm src/lxml/html/tests/test_html5parser.py}
|
||||||
|
|
||||||
%generate_buildrequires
|
%generate_buildrequires
|
||||||
%pyproject_buildrequires -x source%{?with_buildrequire_extras:,cssselect,html5,htmlsoup}
|
%pyproject_buildrequires -x source%{?with_extras:,cssselect,html5,htmlsoup}
|
||||||
# Remove pregenerated Cython C sources
|
# Remove pregenerated Cython C sources
|
||||||
# We need to do this after %%pyproject_buildrequires because setup.py errors
|
# We need to do this after %%pyproject_buildrequires because setup.py errors
|
||||||
# without Cython and without the .c files.
|
# without Cython and without the .c files.
|
||||||
|
@ -78,9 +98,46 @@ cp -a build/lib.%{python3_platform}-*/* src/
|
||||||
|
|
||||||
%files -n python3-lxml -f %{pyproject_files}
|
%files -n python3-lxml -f %{pyproject_files}
|
||||||
%license doc/licenses/BSD.txt doc/licenses/elementtree.txt
|
%license doc/licenses/BSD.txt doc/licenses/elementtree.txt
|
||||||
%doc README.rst src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/readme.txt
|
%doc README.rst
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Oct 28 2023 David Abdurachmanov <davidlt@rivosinc.com> - 4.9.3-2.0.riscv64
|
||||||
|
- Bootstrap for Python 3.12 (riscv64)
|
||||||
|
|
||||||
|
* Fri Jul 28 2023 Miro Hrončok <mhroncok@redhat.com> - 4.9.3-2
|
||||||
|
- Fix build with Cython 3
|
||||||
|
|
||||||
|
* Fri Jul 21 2023 Lumír Balhar <lbalhar@redhat.com> - 4.9.3-1
|
||||||
|
- Update to 4.9.3 (rhbz#2219811)
|
||||||
|
|
||||||
|
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 4.9.2-9
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Jul 14 2023 Miro Hrončok <mhroncok@redhat.com> - 4.9.2-8
|
||||||
|
- Bring back the isoschematron submodule,
|
||||||
|
but without the validation of the schema file itself
|
||||||
|
|
||||||
|
* Fri Jun 16 2023 Python Maint <python-maint@redhat.com> - 4.9.2-7
|
||||||
|
- Rebuilt for Python 3.12
|
||||||
|
|
||||||
|
* Tue Jun 13 2023 Python Maint <python-maint@redhat.com> - 4.9.2-6
|
||||||
|
- Bootstrap for Python 3.12
|
||||||
|
|
||||||
|
* Wed May 31 2023 Miro Hrončok <mhroncok@redhat.com> - 4.9.2-5
|
||||||
|
- Remove the isoschematron submodule
|
||||||
|
|
||||||
|
* Tue May 30 2023 Yaakov Selkowitz <yselkowi@redhat.com> - 4.9.2-4
|
||||||
|
- Disable extra subpackages in RHEL builds
|
||||||
|
|
||||||
|
* Mon May 29 2023 Tomáš Hrnčiar <thrnciar@redhat.com> - 4.9.2-3
|
||||||
|
- Skip failing test to avoid FTBFS
|
||||||
|
|
||||||
|
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 4.9.2-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Dec 14 2022 Lumír Balhar <lbalhar@redhat.com> - 4.9.2-1
|
||||||
|
- Update to 4.9.2 (rhbz#2153063)
|
||||||
|
|
||||||
* Wed Sep 14 2022 Charalampos Stratakis <cstratak@redhat.com> - 4.9.1-1
|
* Wed Sep 14 2022 Charalampos Stratakis <cstratak@redhat.com> - 4.9.1-1
|
||||||
- Update to 4.9.1
|
- Update to 4.9.1
|
||||||
- Fix for CVE-2022-2309
|
- Fix for CVE-2022-2309
|
||||||
|
|
2
sources
2
sources
|
@ -1 +1 @@
|
||||||
SHA512 (lxml-4.9.1.tar.gz) = d7ec55c7db2c63a716ca5f4d833706d90fc76c944885e010fcdb96786bcfe796994e438450cf4e8e6e75d702e21fb16971f28f854d7a1f76c34e4ae315414d84
|
SHA512 (lxml-4.9.3-no-isoschematron-rng.tar.gz) = e3e289ad0aa4bec75fbdee5682d1047c2f98f48f9fd39571175f6a758a10ab2266ed4591bf9dcb65a387ee22cf9de4adac57997dca57b95e0bae07268aff33fe
|
||||||
|
|
Loading…
Reference in New Issue