diff options
author | Rob Austein <sra@hactrn.net> | 2010-07-07 17:00:49 +0000 |
---|---|---|
committer | Rob Austein <sra@hactrn.net> | 2010-07-07 17:00:49 +0000 |
commit | ef6584ea48e9ec99271fb0609d41ffb9c87dc9eb (patch) | |
tree | d23612e765886f81f74b6ed319e96407515ec5fb | |
parent | 60ca14959a69a3f42695f88aeeedb13bb5095d28 (diff) |
Refactor .parse_str() methods
svn path=/rpkid/rpki/resource_set.py; revision=3356
-rw-r--r-- | rpkid/rpki/resource_set.py | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/rpkid/rpki/resource_set.py b/rpkid/rpki/resource_set.py index 71da1176..de136c72 100644 --- a/rpkid/rpki/resource_set.py +++ b/rpkid/rpki/resource_set.py @@ -102,6 +102,17 @@ class resource_range_as(resource_range): else: return ("range", (self.min, self.max)) + @classmethod + def parse_str(cls, x): + """ + Parse ASN resource range from text (eg, XML attributes). + """ + r = re.match("^([0-9]+)-([0-9]+)$", x) + if r: + return cls(long(r.group(1)), long(r.group(2))) + else: + return cls(long(x), long(x)) + class resource_range_ip(resource_range): """ Range of (generic) IP addresses. @@ -155,6 +166,19 @@ class resource_range_ip(resource_range): _long2bs(self.max, self.datum_type.bits, strip = 1))) @classmethod + def parse_str(cls, x): + """ + Parse IP address range or prefix from text (eg, XML attributes). + """ + r = re.match("^([0-9:.a-fA-F]+)-([0-9:.a-fA-F]+)$", x) + if r: + return cls(cls.datum_type(r.group(1)), cls.datum_type(r.group(2))) + r = re.match("^([0-9:.a-fA-F]+)/([0-9]+)$", x) + if r: + return cls.make_prefix(cls.datum_type(r.group(1)), int(r.group(2))) + raise RuntimeError, 'Bad IP resource "%s"' % (x) + + @classmethod def make_prefix(cls, prefix, prefixlen): """ Construct a resource range corresponding to a prefix. @@ -440,6 +464,15 @@ class resource_set(list): cls.range_type.datum_type(e)) for (b, e) in sql.fetchall()]) + @classmethod + def parse_str(cls, s): + """ + Parse resource set from text string (eg, XML attributes). This is + a backwards compatability wrapper, real functionality is now part + of the range classes. + """ + return cls.range_type.parse_str(s) + class resource_set_as(resource_set): """ Autonomous System Number resource set. @@ -450,16 +483,6 @@ class resource_set_as(resource_set): range_type = resource_range_as - def parse_str(self, x): - """ - Parse ASN resource sets from text (eg, XML attributes). - """ - r = re.match("^([0-9]+)-([0-9]+)$", x) - if r: - return resource_range_as(long(r.group(1)), long(r.group(2))) - else: - return resource_range_as(long(x), long(x)) - def parse_rfc3779_tuple(self, x): """ Parse ASN resource from tuple format generated by RFC 3779 ASN.1 @@ -499,18 +522,6 @@ class resource_set_ip(resource_set): directly. """ - def parse_str(self, x): - """ - Parse IP address resource sets from text (eg, XML attributes). - """ - r = re.match("^([0-9:.a-fA-F]+)-([0-9:.a-fA-F]+)$", x) - if r: - return self.range_type(self.range_type.datum_type(r.group(1)), self.range_type.datum_type(r.group(2))) - r = re.match("^([0-9:.a-fA-F]+)/([0-9]+)$", x) - if r: - return self.range_type.make_prefix(self.range_type.datum_type(r.group(1)), int(r.group(2))) - raise RuntimeError, 'Bad IP resource "%s"' % (x) - def parse_rfc3779_tuple(self, x): """ Parse IP address resource sets from tuple format generated by RFC |