aboutsummaryrefslogtreecommitdiff
path: root/rpkid/rpki/xml_utils.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2008-06-02 23:43:01 +0000
committerRob Austein <sra@hactrn.net>2008-06-02 23:43:01 +0000
commit7fe2be97aa63bff93e7afca074d42e169a8b92f5 (patch)
tree37960080bd1fdc7b0de75d9c52549a41b13d7897 /rpkid/rpki/xml_utils.py
parentfec873c92b1fb4445d30dd03592a0b8935a460fa (diff)
Add BPKI CRL to pubd's SQL database, and clean up a lot of redundant
SAX code. svn path=/rpkid/irbe-cli.py; revision=1835
Diffstat (limited to 'rpkid/rpki/xml_utils.py')
-rw-r--r--rpkid/rpki/xml_utils.py32
1 files changed, 31 insertions, 1 deletions
diff --git a/rpkid/rpki/xml_utils.py b/rpkid/rpki/xml_utils.py
index 97f9c5f7..5e9c613e 100644
--- a/rpkid/rpki/xml_utils.py
+++ b/rpkid/rpki/xml_utils.py
@@ -117,12 +117,19 @@ class base_elt(object):
def startElement(self, stack, name, attrs):
"""Default startElement() handler: just process attributes."""
- self.read_attrs(attrs)
+ if name not in self.elements:
+ assert name == self.element_name, "Unexpected name %s, stack %s" % (name, stack)
+ self.read_attrs(attrs)
def endElement(self, stack, name, text):
"""Default endElement() handler: just pop the stack."""
+ assert name == self.element_name, "Unexpected name %s, stack %s" % (name, stack)
stack.pop()
+ def toXML(self):
+ """Default toXML() element generator."""
+ return self.make_elt()
+
def read_attrs(self, attrs):
"""Template-driven attribute reader."""
for key in self.attributes:
@@ -172,6 +179,29 @@ class data_elt(base_elt):
attribute.
"""
+ def endElement(self, stack, name, text):
+ """Default endElement handler for SQL-based objects. This assumes
+ that sub-elements are Base64-encoded using the sql_template mechanism.
+ """
+ if name in self.elements:
+ elt_type = self.sql_template.map.get(name)
+ assert elt_type is not None, "Couldn't find element type for %s, stack %s" % (name, stack)
+ setattr(self, name, elt_type(Base64 = text))
+ else:
+ assert name == self.element_name, "Unexpected name %s, stack %s" % (name, stack)
+ stack.pop()
+
+ def toXML(self):
+ """Default element generator for SQL-based objects. This assumes
+ that sub-elements are Base64-encoded DER objects.
+ """
+ elt = self.make_elt()
+ for i in self.elements:
+ x = getattr(self, i, None)
+ if x and not x.empty():
+ self.make_b64elt(elt, i, x.get_DER())
+ return elt
+
def make_reply(self, r_pdu = None):
"""Construct a reply PDU."""
if r_pdu is None: