aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2009-09-29 00:06:00 +0000
committerRob Austein <sra@hactrn.net>2009-09-29 00:06:00 +0000
commit6113a59890ba4c56a56b921f6c3a1b0e6a7b0792 (patch)
tree390f649d1ea1855b6761564358968b45250f8ece
parent4ac358688ab18b33421885b0180b079ec24f0e38 (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.rng2
-rw-r--r--rpkid/rpki/left_right.py29
-rw-r--r--rpkid/rpki/publication.py11
-rw-r--r--rpkid/rpki/relaxng.py2
-rw-r--r--rpkid/rpki/xml_utils.py24
-rwxr-xr-xrpkid/xml-parse-test.py2
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)