diff options
author | Rob Austein <sra@hactrn.net> | 2014-07-22 14:37:27 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2014-07-22 14:37:27 +0000 |
commit | 774acaf3c0553d3d8252752dda4a02073b3dd56e (patch) | |
tree | e6212b0cb6628e3fb036723d3fbde160c11a4e6f | |
parent | da5a898a4809ff4ad28d3a26458e69769ad88bbe (diff) |
Checkpoint
svn path=/branches/tk705/; revision=5906
-rwxr-xr-x | potpourri/rrdp-test-tool | 76 |
1 files changed, 48 insertions, 28 deletions
diff --git a/potpourri/rrdp-test-tool b/potpourri/rrdp-test-tool index 0fe548b7..fa2de023 100755 --- a/potpourri/rrdp-test-tool +++ b/potpourri/rrdp-test-tool @@ -27,31 +27,51 @@ import lxml.etree import argparse import os -parser = argparse.ArgumentParser(description = __doc__) -parser.add_argument("rrdp_snapshot", - help = "RRDP snapshot file") -parser.add_argument("rcynic_tree", nargs = "?", default = "unauthenticated", - help = "directory tree in which to write extracted RPKI objects") -args = parser.parse_args() - -xml = lxml.etree.ElementTree(file = args.rrdp_snapshot).getroot() -rpki.relaxng.rrdp.assertValid(xml) -assert xml.tag == rpki.relaxng.rrdp.xmlns + "snapshot" - -if not os.path.isdir(args.rcynic_tree): - os.makedirs(args.rcynic_tree) - -print "Unpacking version %s session %s serial %s" % ( - xml.get("version"), xml.get("session_id"), xml.get("serial")) - -for elt in xml: - assert elt.tag == rpki.relaxng.rrdp.xmlns + "publish" - uri = elt.get("uri") - print " ", uri - assert uri.startswith("rsync://") - fn = os.path.join(args.rcynic_tree, uri[len("rsync://"):]) - dn = os.path.dirname(fn) - if not os.path.isdir(dn): - os.makedirs(dn) - with open(fn, "wb") as f: - f.write(elt.text.decode("base64")) +class Tags(object): + def __init__(self, *tags): + for tag in tags: + setattr(self, tag, rpki.relaxng.rrdp.xmlns + tag) + +tags = Tags("notification", "deltas", "delta", "snapshot", "publish", "withdraw") + +class main(object): + + def __init__(self): + + parser = argparse.ArgumentParser(description = __doc__) + parser.add_argument("--rcynic-tree", default = "rcynic-data/unauthenticated", + help = "directory tree in which to write extracted RPKI objects") + parser.add_argument("rrdp_file", nargs = "+", + help = "RRDP snapshot or deltas file") + self.args = parser.parse_args() + + if not os.path.isdir(self.args.rcynic_tree): + os.makedirs(self.args.rcynic_tree) + + for rrdp_file in self.args.rrdp_file: + xml = lxml.etree.ElementTree(file = rrdp_file).getroot() + rpki.relaxng.rrdp.assertValid(xml) + getattr(self, xml.tag[len(rpki.relaxng.rrdp.xmlns):])(xml) + + + def snapshot(self, xml): + assert xml.tag == tags.snapshot + + print "Unpacking version %s session %s serial %s" % ( + xml.get("version"), xml.get("session_id"), xml.get("serial")) + + for elt in xml: + assert elt.tag == tags.publish + uri = elt.get("uri") + print " ", uri + assert uri.startswith("rsync://") + fn = os.path.join(self.args.rcynic_tree, uri[len("rsync://"):]) + dn = os.path.dirname(fn) + if not os.path.isdir(dn): + os.makedirs(dn) + with open(fn, "wb") as f: + f.write(elt.text.decode("base64")) + + +if __name__ == "__main__": + main() |