diff options
Diffstat (limited to '.venv/lib/python3.12/site-packages/openpyxl/xml/functions.py')
-rw-r--r-- | .venv/lib/python3.12/site-packages/openpyxl/xml/functions.py | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/openpyxl/xml/functions.py b/.venv/lib/python3.12/site-packages/openpyxl/xml/functions.py new file mode 100644 index 00000000..385cca60 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/openpyxl/xml/functions.py @@ -0,0 +1,87 @@ +# Copyright (c) 2010-2024 openpyxl + +""" +XML compatibility functions +""" + +# Python stdlib imports +import re +from functools import partial + +from openpyxl import DEFUSEDXML, LXML + +if LXML is True: + from lxml.etree import ( + Element, + SubElement, + register_namespace, + QName, + xmlfile, + XMLParser, + ) + from lxml.etree import fromstring, tostring + # do not resolve entities + safe_parser = XMLParser(resolve_entities=False) + fromstring = partial(fromstring, parser=safe_parser) + +else: + from xml.etree.ElementTree import ( + Element, + SubElement, + fromstring, + tostring, + QName, + register_namespace + ) + from et_xmlfile import xmlfile + if DEFUSEDXML is True: + from defusedxml.ElementTree import fromstring + +from xml.etree.ElementTree import iterparse +if DEFUSEDXML is True: + from defusedxml.ElementTree import iterparse + +from openpyxl.xml.constants import ( + CHART_NS, + DRAWING_NS, + SHEET_DRAWING_NS, + CHART_DRAWING_NS, + SHEET_MAIN_NS, + REL_NS, + VTYPES_NS, + COREPROPS_NS, + CUSTPROPS_NS, + DCTERMS_NS, + DCTERMS_PREFIX, + XML_NS +) + +register_namespace(DCTERMS_PREFIX, DCTERMS_NS) +register_namespace('dcmitype', 'http://purl.org/dc/dcmitype/') +register_namespace('cp', COREPROPS_NS) +register_namespace('c', CHART_NS) +register_namespace('a', DRAWING_NS) +register_namespace('s', SHEET_MAIN_NS) +register_namespace('r', REL_NS) +register_namespace('vt', VTYPES_NS) +register_namespace('xdr', SHEET_DRAWING_NS) +register_namespace('cdr', CHART_DRAWING_NS) +register_namespace('xml', XML_NS) +register_namespace('cust', CUSTPROPS_NS) + + +tostring = partial(tostring, encoding="utf-8") + +NS_REGEX = re.compile("({(?P<namespace>.*)})?(?P<localname>.*)") + +def localname(node): + if callable(node.tag): + return "comment" + m = NS_REGEX.match(node.tag) + return m.group('localname') + + +def whitespace(node): + stripped = node.text.strip() + if stripped and node.text != stripped: + node.set("{%s}space" % XML_NS, "preserve") |