Buckets:
ktongue/docker_container / simsite /venv /lib /python3.14 /site-packages /django /utils /xmlutils.py
| """ | |
| Utilities for XML generation/parsing. | |
| """ | |
| import re | |
| from xml.sax.saxutils import XMLGenerator | |
| class UnserializableContentError(ValueError): | |
| pass | |
| class SimplerXMLGenerator(XMLGenerator): | |
| def addQuickElement(self, name, contents=None, attrs=None): | |
| "Convenience method for adding an element with no children" | |
| if attrs is None: | |
| attrs = {} | |
| self.startElement(name, attrs) | |
| if contents is not None: | |
| self.characters(contents) | |
| self.endElement(name) | |
| def characters(self, content): | |
| if content and re.search(r"[\x00-\x08\x0B-\x0C\x0E-\x1F]", content): | |
| # Fail loudly when content has control chars (unsupported in XML | |
| # 1.0) See https://www.w3.org/International/questions/qa-controls | |
| raise UnserializableContentError( | |
| "Control characters are not supported in XML 1.0" | |
| ) | |
| XMLGenerator.characters(self, content) | |
| def startElement(self, name, attrs): | |
| # Sort attrs for a deterministic output. | |
| sorted_attrs = dict(sorted(attrs.items())) if attrs else attrs | |
| super().startElement(name, sorted_attrs) | |
Xet Storage Details
- Size:
- 1.17 kB
- Xet hash:
- db9d8d526f9505faddeeef07ed8e043127b6f01839c63dce3d80bd30252126da
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.