diff options
author | Rob Austein <sra@hactrn.net> | 2009-09-29 00:06:00 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2009-09-29 00:06:00 +0000 |
commit | 6113a59890ba4c56a56b921f6c3a1b0e6a7b0792 (patch) | |
tree | 390f649d1ea1855b6761564358968b45250f8ece | |
parent | 4ac358688ab18b33421885b0180b079ec24f0e38 (diff) |
Refactor text-bearing XML code snippets into rpki.xml_utils.text_elt class.
svn path=/rpkid/left-right-schema.rng; revision=2791
-rw-r--r-- | rpkid/left-right-schema.rng | 2 | ||||
-rw-r--r-- | rpkid/rpki/left_right.py | 29 | ||||
-rw-r--r-- | rpkid/rpki/publication.py | 11 | ||||
-rw-r--r-- | rpkid/rpki/relaxng.py | 2 | ||||
-rw-r--r-- | rpkid/rpki/xml_utils.py | 24 | ||||
-rwxr-xr-x | rpkid/xml-parse-test.py | 2 |
6 files changed, 38 insertions, 32 deletions
diff --git a/rpkid/left-right-schema.rng b/rpkid/left-right-schema.rng index 68ef0aeb..ede0c291 100644 --- a/rpkid/left-right-schema.rng +++ b/rpkid/left-right-schema.rng @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - $Id: left-right-schema.rnc 2781 2009-09-23 13:19:55Z sra $ + $Id: left-right-schema.rnc 2790 2009-09-28 23:40:13Z sra $ RelaxNG Schema for RPKI left-right protocol. diff --git a/rpkid/rpki/left_right.py b/rpkid/rpki/left_right.py index bc1aec01..c8a8d2f8 100644 --- a/rpkid/rpki/left_right.py +++ b/rpkid/rpki/left_right.py @@ -936,13 +936,14 @@ class list_roa_requests_elt(rpki.xml_utils.base_elt, left_right_namespace): if self.ipv6 is not None: self.ipv6 = rpki.resource_set.roa_prefix_set_ipv6(self.ipv6) -class list_published_objects_elt(rpki.xml_utils.base_elt, left_right_namespace): +class list_published_objects_elt(rpki.xml_utils.text_elt, left_right_namespace): """ <list_published_objects/> element. """ element_name = "list_published_objects" attributes = ("self_handle", "tag", "uri") + text_attribute = "obj" obj = None @@ -970,28 +971,14 @@ class list_published_objects_elt(rpki.xml_utils.base_elt, left_right_namespace): r_pdu.obj = obj.get_Base64() return r_pdu - def endElement(self, stack, name, text): - """ - Extract Base64 value from parsed XML. - """ - rpki.xml_utils.base_elt.endElement(self, stack, name, text) - self.obj = text - - def toXML(self): - """ - Insert Base64 value into generated XML. - """ - elt = self.make_elt() - elt.text = self.obj - return elt - -class report_error_elt(rpki.xml_utils.base_elt, left_right_namespace): +class report_error_elt(rpki.xml_utils.text_elt, left_right_namespace): """ <report_error/> element. """ element_name = "report_error" attributes = ("tag", "self_handle", "error_code") + text_attribute = "error_text" error_text = None @@ -1007,14 +994,6 @@ class report_error_elt(rpki.xml_utils.base_elt, left_right_namespace): self.error_text = str(e) return self - def toXML(self): - """ - Insert error text into generated XML. - """ - elt = self.make_elt() - elt.text = self.error_text - return elt - class msg(rpki.xml_utils.msg, left_right_namespace): """ Left-right PDU. diff --git a/rpkid/rpki/publication.py b/rpkid/rpki/publication.py index 5708595d..c1a982dc 100644 --- a/rpkid/rpki/publication.py +++ b/rpkid/rpki/publication.py @@ -312,13 +312,16 @@ class roa_elt(publication_object_elt): publication_object_elt.obj2elt = dict((e.payload_type, e) for e in (certificate_elt, crl_elt, manifest_elt, roa_elt)) -class report_error_elt(rpki.xml_utils.base_elt, publication_namespace): +class report_error_elt(rpki.xml_utils.text_elt, publication_namespace): """ <report_error/> element. """ element_name = "report_error" attributes = ("tag", "error_code") + text_attribute = "error_text" + + error_text = None @classmethod def from_exception(cls, e, tag = None): @@ -328,7 +331,7 @@ class report_error_elt(rpki.xml_utils.base_elt, publication_namespace): self = cls() self.tag = tag self.error_code = e.__class__.__name__ - self.text = str(e) + self.error_text = str(e) return self def __str__(self): @@ -336,8 +339,8 @@ class report_error_elt(rpki.xml_utils.base_elt, publication_namespace): if getattr(self, "tag", None) is not None: s += "[%s] " % self.tag s += self.error_code - if getattr(self, "text", None) is not None: - s += ": " + self.text + if getattr(self, "error_text", None) is not None: + s += ": " + self.error_text return s class msg(rpki.xml_utils.msg, publication_namespace): diff --git a/rpkid/rpki/relaxng.py b/rpkid/rpki/relaxng.py index 1e0f5632..67b72eaf 100644 --- a/rpkid/rpki/relaxng.py +++ b/rpkid/rpki/relaxng.py @@ -6,7 +6,7 @@ import lxml.etree ## Parsed RelaxNG left_right schema left_right = lxml.etree.RelaxNG(lxml.etree.fromstring('''<?xml version="1.0" encoding="UTF-8"?> <!-- - $Id: left-right-schema.rnc 2781 2009-09-23 13:19:55Z sra $ + $Id: left-right-schema.rnc 2790 2009-09-28 23:40:13Z sra $ RelaxNG Schema for RPKI left-right protocol. diff --git a/rpkid/rpki/xml_utils.py b/rpkid/rpki/xml_utils.py index bc3c833e..e3b9a7f0 100644 --- a/rpkid/rpki/xml_utils.py +++ b/rpkid/rpki/xml_utils.py @@ -216,6 +216,30 @@ class base_elt(object): setattr(self, k, v) return self +class text_elt(base_elt): + """ + Virtual base class for XML message elements that contain text. + """ + + ## @var text_attribute + # Name of the class attribute that holds the text value. + text_attribute = None + + def endElement(self, stack, name, text): + """ + Extract text from parsed XML. + """ + base_elt.endElement(self, stack, name, text) + setattr(self, self.text_attribute, text) + + def toXML(self): + """ + Insert text into generated XML. + """ + elt = self.make_elt() + elt.text = getattr(self, self.text_attribute) or None + return elt + class data_elt(base_elt): """ Virtual base class for PDUs that map to SQL objects. These objects diff --git a/rpkid/xml-parse-test.py b/rpkid/xml-parse-test.py index 88146d4f..48154a79 100755 --- a/rpkid/xml-parse-test.py +++ b/rpkid/xml-parse-test.py @@ -19,7 +19,7 @@ PERFORMANCE OF THIS SOFTWARE. import glob, lxml.etree, lxml.sax import rpki.up_down, rpki.left_right, rpki.publication, rpki.relaxng -verbose = True +verbose = False def test(fileglob, rng, sax_handler, encoding, tester = None): files = glob.glob(fileglob) |