aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki/sax_utils.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2007-07-11 18:15:42 +0000
committerRob Austein <sra@hactrn.net>2007-07-11 18:15:42 +0000
commit290374ca89c59d1f92290bf70cfd8715896d990e (patch)
tree70ac0693a5adea7d6f10f9dad40cd61b3dd28bb9 /scripts/rpki/sax_utils.py
parent26f34227a333db277f99aa67f038fa7174c6369f (diff)
Checkpoint
svn path=/scripts/rpki/sax_handler.py; revision=751
Diffstat (limited to 'scripts/rpki/sax_utils.py')
-rw-r--r--scripts/rpki/sax_utils.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/scripts/rpki/sax_utils.py b/scripts/rpki/sax_utils.py
new file mode 100644
index 00000000..b4259d2a
--- /dev/null
+++ b/scripts/rpki/sax_utils.py
@@ -0,0 +1,38 @@
+# $Id$
+
+import xml.sax
+
+def snarf(obj, attrs, key, func=None):
+ """
+ Utility function to consolidate the steps needed to extract a field
+ from the SAX XML parse and insert it as an object attribute of the
+ same name.
+ """
+
+ try:
+ val = attrs.getValue(key).encode("ascii")
+ if func:
+ val = func(val)
+ except KeyError:
+ val = None
+ setattr(obj, key, val)
+
+class handler(xml.sax.handler.ContentHandler):
+ """
+ SAX handler for RPKI protocols. Handles a few tasks
+ common to all of these protocols, needs to be subtyped
+ to handle protocol-specific details.
+ """
+
+ def __init__(self):
+ self.text = ""
+ self.obj = None
+
+ def startElementNS(self, name, qname, attrs):
+ return self.startElement(name[1], attrs)
+
+ def endElementNS(self, name, qname):
+ return self.endElement(name[1])
+
+ def characters(self, content):
+ self.text += content