diff options
author | Rob Austein <sra@hactrn.net> | 2010-03-09 00:19:45 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2010-03-09 00:19:45 +0000 |
commit | 51a73088d0b8ba04a4294a1296b66d2ad09de21f (patch) | |
tree | b7e7ece13dd8381a89e71aa0a160354f10d0d212 /myrpki.rototill/myrpki.py | |
parent | 911052ccce44e90d3c40387db5c7cb2a53dc6f08 (diff) |
Validation
svn path=/myrpki.rototill/myirbe.py; revision=3048
Diffstat (limited to 'myrpki.rototill/myrpki.py')
-rw-r--r-- | myrpki.rototill/myrpki.py | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/myrpki.rototill/myrpki.py b/myrpki.rototill/myrpki.py index f1d1fc29..9aea1c6a 100644 --- a/myrpki.rototill/myrpki.py +++ b/myrpki.rototill/myrpki.py @@ -610,7 +610,17 @@ class CA(object): return xcert -def etree_write(e, filename, verbose = True): +def etree_validate(e): + try: + import schema + schema.myrpki.assertValid(e) + except lxml.etree.DocumentInvalid: + print lxml.etree.tostring(e, pretty_print = True) + raise + except ImportError: + print "Couldn't import RelaxNG schema, validation disabled" + +def etree_write(e, filename, verbose = True, validate = False): """ Write out an etree to a file, safely. @@ -622,11 +632,15 @@ def etree_write(e, filename, verbose = True): e = copy.deepcopy(e) e.set("version", version) for i in e.getiterator(): - i.tag = namespaceQName + i.tag + if i.tag[0] != "{": + i.tag = namespaceQName + i.tag + assert i.tag.startswith(namespaceQName) + if validate: + etree_validate(e) ElementTree(e).write(filename + ".tmp") os.rename(filename + ".tmp", filename) -def etree_read(filename, verbose = False): +def etree_read(filename, verbose = False, validate = False): """ Read an etree from a file, verifying then stripping XML namespace cruft. @@ -634,6 +648,8 @@ def etree_read(filename, verbose = False): if verbose: print "Reading", filename e = ElementTree(file = filename).getroot() + if validate: + etree_validate(e) for i in e.getiterator(): if i.tag.startswith(namespaceQName): i.tag = i.tag[len(namespaceQName):] |