From 3ca44c6ae0bd51a2ef7a3a9a8d0aded8fc968f7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonah=20Br=C3=BCchert?= Date: Tue, 13 Feb 2024 01:26:41 +0100 Subject: sphinx: Fix pickle --- doc/exts/xmlschema.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/doc/exts/xmlschema.py b/doc/exts/xmlschema.py index 63ab6f489..3054b4dd5 100644 --- a/doc/exts/xmlschema.py +++ b/doc/exts/xmlschema.py @@ -807,6 +807,20 @@ class XMLDomain(Domain): self.object_types[dtype].attrs['searchprio']) +class XMLPickleWrapper(object): + def __init__(self, element): + self.element = element + + def __getattr__(self, name): + return getattr(self.element, name) + + def __getstate__(self): + return dict(element=lxml.etree.tostring(self.element)) + + def __setstate__(self, state): + self.element = lxml.etree.fromstring(state['element']) + + def setup(app): app.add_config_value('xmlschema_path', '.', False) app.add_config_value('xmlschema_datatype_url', @@ -858,12 +872,12 @@ def load_xml_schemas(app): # schemas don't require namespaces to be identified # uniquely, but we let the user identify them either with # or without the namespace - entities[None]['schema'][relpath] = schema - entities[ns]['schema'][relpath] = schema + entities[None]['schema'][relpath] = XMLPickleWrapper(schema) + entities[ns]['schema'][relpath] = XMLPickleWrapper(schema) for entity in schema.xpath("//xs:*[@name]", namespaces=NSMAP): tag = entity.tag[len(XS_NS):] if tag in entities[ns]: - entities[ns][tag][entity.get("name")] = entity + entities[ns][tag][entity.get("name")] = XMLPickleWrapper(entity) app.builder.env.xmlschema_namespaces = namespaces app.builder.env.xmlschema_namespaces_by_uri = namespaces_by_uri app.builder.env.xmlschema_entities = entities -- cgit v1.2.3-1-g7c22