diff options
-rwxr-xr-x | scripts/irbe-cli.py | 21 | ||||
-rw-r--r-- | scripts/rpki/relaxng.py | 24 | ||||
-rwxr-xr-x | scripts/xml-parse-test.py | 15 |
3 files changed, 49 insertions, 11 deletions
diff --git a/scripts/irbe-cli.py b/scripts/irbe-cli.py new file mode 100755 index 00000000..c9df0d9a --- /dev/null +++ b/scripts/irbe-cli.py @@ -0,0 +1,21 @@ +# $Id$ + +""" +Command line program to simulate behavior of the IR back-end. +""" + +import glob, rpki.left_right, xml.sax, lxml.etree, lxml.sax, POW, POW.pkix, getopt + +rng = lxml.etree.RelaxNG(lxml.etree.parse("left-right-schema.rng")) + +files = glob.glob("left-right-protocol-samples/*.xml") +files.sort() +for f in files: + print "\n<!--", f, "-->" + handler = rpki.left_right.sax_handler() + elt_in = lxml.etree.parse(f).getroot() + rng.assertValid(elt_in) + lxml.sax.saxify(elt_in, handler) + elt_out = handler.result.toXML() + rng.assertValid(elt_out) + print lxml.etree.tostring(elt_out, pretty_print=True, encoding="us-ascii", xml_declaration=True) diff --git a/scripts/rpki/relaxng.py b/scripts/rpki/relaxng.py new file mode 100644 index 00000000..bbfc6d72 --- /dev/null +++ b/scripts/rpki/relaxng.py @@ -0,0 +1,24 @@ +# $Id$ + +import lxml.etree + +class RelaxNG(lxml.etree.RelaxNG): + """ + Minor customizations of lxml.etreeRelaxNG. + """ + + def __init__(self, filename): + """ + Initialize a RelaxNG validator from a file. + """ + lxml.etree.RelaxNG.__init__(self, lxml.etree.parse(filename)) + + def assertValid(self, doc): + """ + Provide a bit more information on validation failures. + """ + try: + lxml.etree.RelaxNG.assertValid(self, doc) + except lxml.etree.DocumentInvalid: + print self.error_log.last_error + raise diff --git a/scripts/xml-parse-test.py b/scripts/xml-parse-test.py index 513b6ba8..ed437789 100755 --- a/scripts/xml-parse-test.py +++ b/scripts/xml-parse-test.py @@ -1,28 +1,21 @@ # $Id$ -import glob, rpki.up_down, rpki.left_right, xml.sax, lxml.etree, lxml.sax, pprint, POW, POW.pkix +import glob, rpki.up_down, rpki.left_right, rpki.relaxng, xml.sax, lxml.etree, lxml.sax, POW, POW.pkix verbose = False -def validate(rng, doc): - try: - rng.assertValid(doc) - except lxml.etree.DocumentInvalid: - print rng.error_log.last_error - raise - def test(fileglob, schema, sax_handler, encoding, tester=None): - rng = lxml.etree.RelaxNG(lxml.etree.parse(schema)) + rng = rpki.relaxng.RelaxNG(schema) files = glob.glob(fileglob) files.sort() for f in files: print "\n<!--", f, "-->" handler = sax_handler() elt_in = lxml.etree.parse(f).getroot() - validate(rng, elt_in) + rng.assertValid(elt_in) lxml.sax.saxify(elt_in, handler) elt_out = handler.result.toXML() - validate(rng, elt_out) + rng.assertValid(elt_out) if (tester): tester(elt_in, elt_out, handler.result) print lxml.etree.tostring(elt_out, pretty_print=True, encoding=encoding, xml_declaration=True) |