aboutsummaryrefslogtreecommitdiff
path: root/rpki/left_right.py
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2015-10-07 01:04:40 +0000
committerRob Austein <sra@hactrn.net>2015-10-07 01:04:40 +0000
commita5b40805829252dadc4cc45fe2b91a8d53cd14d0 (patch)
treebe048d4d8a7332db07732c3a9aaa3904a1fa3ae0 /rpki/left_right.py
parent5600ad7641c6c7084e1ebb849553b93aefa75311 (diff)
Move all the special-case glorp for attribute types into templates,
thereby eliminating still more parsing code. No clue why we didn't do this years ago. svn path=/branches/tk705/; revision=6095
Diffstat (limited to 'rpki/left_right.py')
-rw-r--r--rpki/left_right.py93
1 files changed, 18 insertions, 75 deletions
diff --git a/rpki/left_right.py b/rpki/left_right.py
index 2f1b7577..b102187a 100644
--- a/rpki/left_right.py
+++ b/rpki/left_right.py
@@ -1282,37 +1282,18 @@ class list_resources_elt(rpki.xml_utils.base_elt, left_right_namespace):
"""
element_name = "list_resources"
- attributes = ("self_handle", "tag", "child_handle", "valid_until", "asn", "ipv4", "ipv6")
+
valid_until = None
+ attributes = dict(valid_until = rpki.sundial.datetime.fromXMLtime,
+ asn = rpki.resource_set.resource_set_as,
+ ipv4 = rpki.resource_set.resource_set_ipv4,
+ ipv6 = rpki.resource_set.resource_set_ipv6)
+ attributes.update((_, None) for _ in ("self_handle", "tag", "child_handle"))
+
def __repr__(self):
return rpki.log.log_repr(self, self.self_handle, self.child_handle, self.asn, self.ipv4, self.ipv6)
- def fix_attribute_types(self):
- """
- Fix data types for certain attributes.
- """
-
- if isinstance(self.valid_until, str):
- self.valid_until = rpki.sundial.datetime.fromXMLtime(self.valid_until)
- if self.asn is not None:
- self.asn = rpki.resource_set.resource_set_as(self.asn)
- if self.ipv4 is not None:
- self.ipv4 = rpki.resource_set.resource_set_ipv4(self.ipv4)
- if self.ipv6 is not None:
- self.ipv6 = rpki.resource_set.resource_set_ipv6(self.ipv6)
-
- @classmethod
- def fromXML(cls, elt):
- """
- Handle <list_resources/> element. This requires special handling
- due to the data types of some of the attributes.
- """
-
- self = super(list_resources_elt, cls).fromXML(elt)
- self.fix_attribute_types()
- return self
-
def toXML(self):
"""
Generate <list_resources/> element. This requires special
@@ -1330,28 +1311,11 @@ class list_roa_requests_elt(rpki.xml_utils.base_elt, left_right_namespace):
"""
element_name = "list_roa_requests"
- attributes = ("self_handle", "tag", "asn", "ipv4", "ipv6")
-
- def fix_attribute_types(self):
- """
- Fix data types for certain attributes.
- """
- if self.ipv4 is not None:
- self.ipv4 = rpki.resource_set.roa_prefix_set_ipv4(self.ipv4)
- if self.ipv6 is not None:
- self.ipv6 = rpki.resource_set.roa_prefix_set_ipv6(self.ipv6)
-
- @classmethod
- def fromXML(self, elt):
- """
- Handle <list_roa_requests/> element. This requires special handling
- due to the data types of some of the attributes.
- """
-
- self = super(list_roa_requests_elt, cls).fromXML(elt)
- self.fix_attribute_types()
- return self
+ attributes = dict(asn = rpki.resource_set.resource_set_as,
+ ipv4 = rpki.resource_set.resource_set_ipv4,
+ ipv6 = rpki.resource_set.resource_set_ipv6)
+ attributes.update((_, None) for _ in ("self_handle", "tag"))
def __repr__(self):
return rpki.log.log_repr(self, self.self_handle, self.asn, self.ipv4, self.ipv6)
@@ -1376,7 +1340,13 @@ class list_ee_certificate_requests_elt(rpki.xml_utils.base_elt, left_right_names
"""
element_name = "list_ee_certificate_requests"
- attributes = ("self_handle", "tag", "gski", "valid_until", "asn", "ipv4", "ipv6", "cn", "sn", "eku")
+
+ attributes = dict(valid_until = rpki.sundial.datetime.fromXMLtime,
+ asn = rpki.resource_set.resource_set_as,
+ ipv4 = rpki.resource_set.resource_set_ipv4,
+ ipv6 = rpki.resource_set.resource_set_ipv6,
+ eku = lambda x: x.split(","))
+ attributes.update((_, None) for _ in ("self_handle", "tag", "gski", "cn", "sn"))
elements = collections.OrderedDict((
("pkcs10", rpki.x509.PKCS10),))
@@ -1388,33 +1358,6 @@ class list_ee_certificate_requests_elt(rpki.xml_utils.base_elt, left_right_names
def __repr__(self):
return rpki.log.log_repr(self, self.self_handle, self.gski, self.cn, self.sn, self.asn, self.ipv4, self.ipv6)
- def fix_attribute_types(self):
- """
- Fix data types for certain attributes.
- """
-
- if isinstance(self.valid_until, str):
- self.valid_until = rpki.sundial.datetime.fromXMLtime(self.valid_until)
- if self.asn is not None:
- self.asn = rpki.resource_set.resource_set_as(self.asn)
- if self.ipv4 is not None:
- self.ipv4 = rpki.resource_set.resource_set_ipv4(self.ipv4)
- if self.ipv6 is not None:
- self.ipv6 = rpki.resource_set.resource_set_ipv6(self.ipv6)
- if self.eku is not None:
- self.eku = self.eku.split(",")
-
- @classmethod
- def fromXML(cls, elt):
- """
- Handle <list_ee_certificate_requests/> element. This requires special
- handling due to the data types of some of the attributes.
- """
-
- self = super(list_ee_certificate_requests_elt, cls).fromXML(elt)
- self.fix_attribute_types()
- return self
-
def toXML(self):
"""
Generate <list_ee_certificate_requests/> element. This requires special