Compare commits

...
Sign in to create a new pull request.

32 commits

Author SHA1 Message Date
Lumir Balhar
11da0f3a63 Update to 6.0.2 (rhbz#2397231) 2025-09-22 12:49:34 +02:00
Python Maint
b2351e3e34 Rebuilt for Python 3.14.0rc3 bytecode 2025-09-19 13:41:18 +02:00
Lumir Balhar
1fd88c3632 Update to 6.0.1 (rhbz#2390283) 2025-08-24 22:22:09 +02:00
Python Maint
86d492aea6 Rebuilt for Python 3.14.0rc2 bytecode 2025-08-15 14:04:47 +02:00
Lumir Balhar
d4c3d0bb6c Fix test_wrap_html with Python 3.14rc1 2025-08-05 13:50:20 +02:00
Fedora Release Engineering
cd4ee3066f Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 08:42:31 +00:00
Lumir Balhar
adc8d24589 Update to 6.0.0 (rhbz#2374994) 2025-06-30 11:19:42 +02:00
Python Maint
544488770a Rebuilt for Python 3.14 2025-06-03 12:25:50 +02:00
Python Maint
6df45dce8b Bootstrap for Python 3.14 2025-06-02 21:23:03 +02:00
Lumir Balhar
b9a077ae03 Update to 5.4.0 (rhbz#2361809) 2025-04-23 13:59:36 +02:00
Robert-André Mauchin
b928096276 Update to 5.3.2
Close: rhbz#2357632
2025-04-06 18:29:44 +02:00
Lumir Balhar
c1103ff3c3 Update to 5.3.1 (rhbz#2344609) 2025-02-11 12:10:25 +01:00
Fedora Release Engineering
f75dd54e14 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-18 15:53:28 +00:00
Miro Hrončok
b52ea727c7 Fix build with Python 3.14
- Fixes: rhbz#2335830
2025-01-06 16:21:46 +01:00
Lumir Balhar
afcfecf47d Update to 5.3.0 (rhbz#2303963) 2024-08-12 14:59:25 +02:00
Lumir Balhar
61d79bae8d Fix doctest failing with the latest libxslt (rhbz#2301176) 2024-07-31 11:18:55 +02:00
Fedora Release Engineering
27c594a8e2 Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-19 12:55:35 +00:00
Python Maint
58ac417c3e Rebuilt for Python 3.13 2024-06-07 23:20:38 +02:00
Python Maint
39e20da595 Rebuilt for Python 3.13 2024-06-07 20:41:48 +02:00
Python Maint
9579799168 Bootstrap for Python 3.13 2024-06-07 09:50:04 +02:00
Lumir Balhar
dbf7e6096c Update to 5.2.1 (rhbz#2272165) 2024-04-04 15:26:12 +02:00
Miro Hrončok
85c8c3f227 Revert "Reduce the type safety as a workaround for build failures in Fedora 40+"
- The workaround has been moved to Cython

See https://src.fedoraproject.org/rpms/Cython/c/ba710e631b8ecf2af6eb636030db6d574d8575b4

This reverts commit 0f51029568.
2024-03-06 14:39:01 +01:00
Miro Hrončok
23cd3c2e48 Fix test_elementtree with Expat 2.6.0
- Fixes: rhbz#2264859
2024-03-04 09:25:24 +01:00
Miro Hrončok
0f51029568 Reduce the type safety as a workaround for build failures in Fedora 40+
- Fixes: rhbz#2261034
- Fixes: rhbz#2256232
2024-02-07 10:58:36 +01:00
Miro Hrončok
009f7659b7 Convert to %autorelease and %autochangelog
[skip changelog]
2024-01-29 19:14:58 +01:00
Tomas Orsava
e38670104e Fixing whitespace 2024-01-29 10:30:12 +01:00
Fedora Release Engineering
3a10d475bb Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-22 03:09:29 +00:00
Lumir Balhar
db11b56656 Update to 5.1.0 (rhbz#2256232) 2024-01-08 15:29:00 +01:00
Lumir Balhar
63254d5e35 Update to 4.9.4 (rhbz#2255267) 2023-12-20 13:41:58 +01:00
David King
e20963f4cf Fix building against libxml2 2.12.0
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=2250838
2023-11-27 10:16:27 +01:00
Miro Hrončok
9fac0d5501 Python 3.13 compatibility
This only changes the tests.

Fixes https://bugzilla.redhat.com/2247011
2023-11-06 11:43:32 +01:00
Miro Hrončok
3b50336b27 Remove pregenerated Cython C sources in %build
In a future version of mock, %prep will only run once,
which breaks the prior state of this package.

Previously, this only worked because each %prep round restored
the pregenerated files for the setup.py logic to see.

However, when %prep only runs once, the second round of
%pyproject_buildrequires fails unless Cython is already installed,
which is not the default case,
as the dependency has not yet been generated.

See https://github.com/rpm-software-management/mock/pull/1250
2023-10-30 12:43:19 +01:00
9 changed files with 1669 additions and 3314 deletions

11
.gitignore vendored
View file

@ -62,3 +62,14 @@ lxml-2.2.7.tar.gz.asc
/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
/lxml-4.9.4-no-isoschematron-rng.tar.gz
/lxml-5.1.0-no-isoschematron-rng.tar.gz
/lxml-5.2.0-no-isoschematron-rng.tar.gz
/lxml-5.2.1-no-isoschematron-rng.tar.gz
/lxml-5.3.0-no-isoschematron-rng.tar.gz
/lxml-5.3.1-no-isoschematron-rng.tar.gz
/lxml-5.3.2-no-isoschematron-rng.tar.gz
/lxml-5.4.0-no-isoschematron-rng.tar.gz
/lxml-6.0.0-no-isoschematron-rng.tar.gz
/lxml-6.0.1-no-isoschematron-rng.tar.gz
/lxml-6.0.2-no-isoschematron-rng.tar.gz

View file

@ -1,24 +0,0 @@
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" />

View file

@ -1,116 +0,0 @@
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

View file

@ -1,34 +0,0 @@
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

View file

@ -1,402 +0,0 @@
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

1642
changelog Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1 +1 @@
SHA512 (lxml-4.9.3-no-isoschematron-rng.tar.gz) = e3e289ad0aa4bec75fbdee5682d1047c2f98f48f9fd39571175f6a758a10ab2266ed4591bf9dcb65a387ee22cf9de4adac57997dca57b95e0bae07268aff33fe
SHA512 (lxml-6.0.2-no-isoschematron-rng.tar.gz) = dc89f75c3a3c828a46bcb2eefbebe8f98ce8072b9fb66f8ef81edbf2babed74e4c54e26392603319d60ab3bfab6a4795eedc85b28efba815797d43d53aae4060