opt
/
hc_python
/
lib
/
python3.12
/
site-packages
/
lxml
/
Go to Home Directory
+
Upload
Create File
root@0UT1S:~$
Execute
By Order of Mr.0UT1S
[DIR] ..
N/A
[DIR] __pycache__
N/A
[DIR] html
N/A
[DIR] includes
N/A
[DIR] isoschematron
N/A
ElementInclude.py
8.36 KB
Rename
Delete
__init__.py
574 bytes
Rename
Delete
_elementpath.cpython-312-x86_64-linux-gnu.so
200.19 KB
Rename
Delete
_elementpath.py
10.63 KB
Rename
Delete
apihelpers.pxi
62.12 KB
Rename
Delete
builder.cpython-312-x86_64-linux-gnu.so
113.80 KB
Rename
Delete
builder.py
7.91 KB
Rename
Delete
classlookup.pxi
21.91 KB
Rename
Delete
cleanup.pxi
8.26 KB
Rename
Delete
cssselect.py
3.23 KB
Rename
Delete
debug.pxi
3.21 KB
Rename
Delete
docloader.pxi
5.64 KB
Rename
Delete
doctestcompare.py
17.32 KB
Rename
Delete
dtd.pxi
14.92 KB
Rename
Delete
etree.cpython-312-x86_64-linux-gnu.so
5.11 MB
Rename
Delete
etree.h
9.68 KB
Rename
Delete
etree.pyx
131.36 KB
Rename
Delete
etree_api.h
16.66 KB
Rename
Delete
extensions.pxi
31.34 KB
Rename
Delete
iterparse.pxi
16.13 KB
Rename
Delete
lxml.etree.h
9.68 KB
Rename
Delete
lxml.etree_api.h
16.67 KB
Rename
Delete
nsclasses.pxi
8.92 KB
Rename
Delete
objectify.cpython-312-x86_64-linux-gnu.so
2.94 MB
Rename
Delete
objectify.pyx
73.96 KB
Rename
Delete
objectpath.pxi
11.18 KB
Rename
Delete
parser.pxi
80.12 KB
Rename
Delete
parsertarget.pxi
6.18 KB
Rename
Delete
proxy.pxi
23.14 KB
Rename
Delete
public-api.pxi
6.51 KB
Rename
Delete
pyclasslookup.py
92 bytes
Rename
Delete
readonlytree.pxi
18.53 KB
Rename
Delete
relaxng.pxi
6.19 KB
Rename
Delete
sax.cpython-312-x86_64-linux-gnu.so
181.68 KB
Rename
Delete
sax.py
9.08 KB
Rename
Delete
saxparser.pxi
32.54 KB
Rename
Delete
schematron.pxi
5.77 KB
Rename
Delete
serializer.pxi
64.21 KB
Rename
Delete
usedoctest.py
230 bytes
Rename
Delete
xinclude.pxi
2.40 KB
Rename
Delete
xmlerror.pxi
48.69 KB
Rename
Delete
xmlid.pxi
5.93 KB
Rename
Delete
xmlschema.pxi
8.29 KB
Rename
Delete
xpath.pxi
18.68 KB
Rename
Delete
xslt.pxi
35.18 KB
Rename
Delete
xsltext.pxi
10.83 KB
Rename
Delete
# support for RelaxNG validation from lxml.includes cimport relaxng cdef object _rnc2rng try: import rnc2rng as _rnc2rng except ImportError: _rnc2rng = None cdef int _require_rnc2rng() except -1: if _rnc2rng is None: raise RelaxNGParseError( 'compact syntax not supported (please install rnc2rng)') return 0 cdef class RelaxNGError(LxmlError): """Base class for RelaxNG errors. """ cdef class RelaxNGParseError(RelaxNGError): """Error while parsing an XML document as RelaxNG. """ cdef class RelaxNGValidateError(RelaxNGError): """Error while validating an XML document with a RelaxNG schema. """ ################################################################################ # RelaxNG cdef class RelaxNG(_Validator): """RelaxNG(self, etree=None, file=None) Turn a document into a Relax NG validator. Either pass a schema as Element or ElementTree, or pass a file or filename through the ``file`` keyword argument. """ cdef relaxng.xmlRelaxNG* _c_schema def __cinit__(self): self._c_schema = NULL def __init__(self, etree=None, *, file=None): cdef _Document doc cdef _Element root_node cdef xmlDoc* fake_c_doc = NULL cdef relaxng.xmlRelaxNGParserCtxt* parser_ctxt = NULL _Validator.__init__(self) if etree is not None: doc = _documentOrRaise(etree) root_node = _rootNodeOrRaise(etree) fake_c_doc = _fakeRootDoc(doc._c_doc, root_node._c_node) parser_ctxt = relaxng.xmlRelaxNGNewDocParserCtxt(fake_c_doc) elif file is not None: if _isString(file): if file[-4:].lower() == '.rnc': _require_rnc2rng() rng_data_utf8 = _utf8(_rnc2rng.dumps(_rnc2rng.load(file))) doc = _parseMemoryDocument(rng_data_utf8, parser=None, url=file) parser_ctxt = relaxng.xmlRelaxNGNewDocParserCtxt(doc._c_doc) else: doc = None filename = _encodeFilename(file) with self._error_log: orig_loader = _register_document_loader() parser_ctxt = relaxng.xmlRelaxNGNewParserCtxt(_cstr(filename)) _reset_document_loader(orig_loader) elif (_getFilenameForFile(file) or '')[-4:].lower() == '.rnc': _require_rnc2rng() rng_data_utf8 = _utf8(_rnc2rng.dumps(_rnc2rng.load(file))) doc = _parseMemoryDocument( rng_data_utf8, parser=None, url=_getFilenameForFile(file)) parser_ctxt = relaxng.xmlRelaxNGNewDocParserCtxt(doc._c_doc) else: doc = _parseDocument(file, parser=None, base_url=None) parser_ctxt = relaxng.xmlRelaxNGNewDocParserCtxt(doc._c_doc) else: raise RelaxNGParseError, "No tree or file given" if parser_ctxt is NULL: if fake_c_doc is not NULL: _destroyFakeDoc(doc._c_doc, fake_c_doc) raise RelaxNGParseError( self._error_log._buildExceptionMessage( "Document is not parsable as Relax NG"), self._error_log) # Need a cast here because older libxml2 releases do not use 'const' in the functype. relaxng.xmlRelaxNGSetParserStructuredErrors( parser_ctxt, <xmlerror.xmlStructuredErrorFunc> _receiveError, <void*>self._error_log) _connectGenericErrorLog(self._error_log, xmlerror.XML_FROM_RELAXNGP) self._c_schema = relaxng.xmlRelaxNGParse(parser_ctxt) _connectGenericErrorLog(None) relaxng.xmlRelaxNGFreeParserCtxt(parser_ctxt) if self._c_schema is NULL: if fake_c_doc is not NULL: _destroyFakeDoc(doc._c_doc, fake_c_doc) raise RelaxNGParseError( self._error_log._buildExceptionMessage( "Document is not valid Relax NG"), self._error_log) if fake_c_doc is not NULL: _destroyFakeDoc(doc._c_doc, fake_c_doc) def __dealloc__(self): relaxng.xmlRelaxNGFree(self._c_schema) def __call__(self, etree): """__call__(self, etree) Validate doc using Relax NG. Returns true if document is valid, false if not.""" cdef _Document doc cdef _Element root_node cdef xmlDoc* c_doc cdef relaxng.xmlRelaxNGValidCtxt* valid_ctxt cdef int ret assert self._c_schema is not NULL, "RelaxNG instance not initialised" doc = _documentOrRaise(etree) root_node = _rootNodeOrRaise(etree) valid_ctxt = relaxng.xmlRelaxNGNewValidCtxt(self._c_schema) if valid_ctxt is NULL: raise MemoryError() try: self._error_log.clear() # Need a cast here because older libxml2 releases do not use 'const' in the functype. relaxng.xmlRelaxNGSetValidStructuredErrors( valid_ctxt, <xmlerror.xmlStructuredErrorFunc> _receiveError, <void*>self._error_log) _connectGenericErrorLog(self._error_log, xmlerror.XML_FROM_RELAXNGV) c_doc = _fakeRootDoc(doc._c_doc, root_node._c_node) with nogil: ret = relaxng.xmlRelaxNGValidateDoc(valid_ctxt, c_doc) _destroyFakeDoc(doc._c_doc, c_doc) finally: _connectGenericErrorLog(None) relaxng.xmlRelaxNGFreeValidCtxt(valid_ctxt) if ret == -1: raise RelaxNGValidateError( "Internal error in Relax NG validation", self._error_log) if ret == 0: return True else: return False @classmethod def from_rnc_string(cls, src, base_url=None): """Parse a RelaxNG schema in compact syntax from a text string Requires the rnc2rng package to be installed. Passing the source URL or file path of the source as 'base_url' will enable resolving resource references relative to the source. """ _require_rnc2rng() rng_str = utf8(_rnc2rng.dumps(_rnc2rng.loads(src))) return cls(_parseMemoryDocument(rng_str, parser=None, url=base_url))
Save