Download python/tests/reader6.py from AryaWu/libxml: direct link, hf CLI and curl.
- Browser
- Download file 2.67 kB
-
https://huggingface.co/AryaWu/libxml/resolve/main/python/tests/reader6.py
- Command line
-
hf download hf://AryaWu/libxml/python/tests/reader6.py
-
curl -L -o reader6.py https://huggingface.co/AryaWu/libxml/resolve/main/python/tests/reader6.py
2.67 kB
| #!/usr/bin/env python3 | |
| # | |
| # this tests the entities substitutions with the XmlTextReader interface | |
| # | |
| import sys | |
| import setup_test | |
| import libxml2 | |
| try: | |
| import StringIO | |
| str_io = StringIO.StringIO | |
| except: | |
| import io | |
| str_io = io.StringIO | |
| schema="""<element name="foo" xmlns="http://relaxng.org/ns/structure/1.0" | |
| datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> | |
| <oneOrMore> | |
| <element name="label"> | |
| <text/> | |
| </element> | |
| <optional> | |
| <element name="opt"> | |
| <empty/> | |
| </element> | |
| </optional> | |
| <element name="item"> | |
| <data type="byte"/> | |
| </element> | |
| </oneOrMore> | |
| </element> | |
| """ | |
| # Memory debug specific | |
| libxml2.debugMemory(1) | |
| # | |
| # Parse the Relax NG Schemas | |
| # | |
| rngp = libxml2.relaxNGNewMemParserCtxt(schema, len(schema)) | |
| rngs = rngp.relaxNGParse() | |
| del rngp | |
| # | |
| # Parse and validate the correct document | |
| # | |
| docstr="""<foo> | |
| <label>some text</label> | |
| <item>100</item> | |
| </foo>""" | |
| f = str_io(docstr) | |
| input = libxml2.inputBuffer(f) | |
| reader = input.newTextReader("correct") | |
| reader.RelaxNGSetSchema(rngs) | |
| ret = reader.Read() | |
| while ret == 1: | |
| ret = reader.Read() | |
| if ret != 0: | |
| print("Error parsing the document") | |
| sys.exit(1) | |
| if reader.IsValid() != 1: | |
| print("Document failed to validate") | |
| sys.exit(1) | |
| # | |
| # Parse and validate the incorrect document | |
| # | |
| docstr="""<foo> | |
| <label>some text</label> | |
| <item>1000</item> | |
| </foo>""" | |
| err="" | |
| # RNG errors are not as good as before , TODO | |
| #expect="""RNG validity error: file error line 3 element text | |
| #Type byte doesn't allow value '1000' | |
| #RNG validity error: file error line 3 element text | |
| #Error validating datatype byte | |
| #RNG validity error: file error line 3 element text | |
| #Element item failed to validate content | |
| #""" | |
| expect="""Type byte doesn't allow value '1000' | |
| Error validating datatype byte | |
| Element item failed to validate content | |
| """ | |
| def callback(ctx, str): | |
| global err | |
| err = err + "%s" % (str) | |
| libxml2.registerErrorHandler(callback, "") | |
| f = str_io(docstr) | |
| input = libxml2.inputBuffer(f) | |
| reader = input.newTextReader("error") | |
| reader.RelaxNGSetSchema(rngs) | |
| ret = reader.Read() | |
| while ret == 1: | |
| ret = reader.Read() | |
| if ret != 0: | |
| print("Error parsing the document") | |
| sys.exit(1) | |
| if reader.IsValid() != 0: | |
| print("Document failed to detect the validation error") | |
| sys.exit(1) | |
| if err != expect: | |
| print("Did not get the expected error message:") | |
| print(err) | |
| sys.exit(1) | |
| # | |
| # cleanup | |
| # | |
| del f | |
| del input | |
| del reader | |
| del rngs | |
| libxml2.relaxNGCleanupTypes() | |
| # Memory debug specific | |
| libxml2.cleanupParser() | |
| if libxml2.debugMemory(1) == 0: | |
| print("OK") | |
| else: | |
| print("Memory leak %d bytes" % (libxml2.debugMemory(1))) | |