diff options
-rw-r--r-- | rpki/left_right.py | 93 | ||||
-rw-r--r-- | rpki/xml_utils.py | 12 |
2 files changed, 21 insertions, 84 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 diff --git a/rpki/xml_utils.py b/rpki/xml_utils.py index 89a9095f..b85a60c5 100644 --- a/rpki/xml_utils.py +++ b/rpki/xml_utils.py @@ -73,7 +73,9 @@ class base_elt(object): val = elt.get(key, None) if val is not None: val = val.encode("ascii") - if val.isdigit() and not key.endswith("_handle"): + if isinstance(self.attributes, dict) and self.attributes[key] is not None: + val = self.attributes[key](val) + elif val.isdigit() and not key.endswith("_handle"): val = long(val) setattr(self, key, val) for key in self.booleans: @@ -110,14 +112,6 @@ class base_elt(object): Template-driven attribute reader. """ - for key in self.attributes: - val = attrs.get(key, None) - if isinstance(val, str) and val.isdigit() and not key.endswith("_handle"): - val = long(val) - setattr(self, key, val) - for key in self.booleans: - setattr(self, key, attrs.get(key, False)) - def make_elt(self): """ XML element constructor. |