diff options
author | Rob Austein <sra@hactrn.net> | 2008-06-02 23:43:01 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2008-06-02 23:43:01 +0000 |
commit | 7fe2be97aa63bff93e7afca074d42e169a8b92f5 (patch) | |
tree | 37960080bd1fdc7b0de75d9c52549a41b13d7897 /rpkid/rpki/xml_utils.py | |
parent | fec873c92b1fb4445d30dd03592a0b8935a460fa (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.py | 32 |
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: |