aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2010-07-07 17:00:49 +0000
committerRob Austein <sra@hactrn.net>2010-07-07 17:00:49 +0000
commitef6584ea48e9ec99271fb0609d41ffb9c87dc9eb (patch)
treed23612e765886f81f74b6ed319e96407515ec5fb
parent60ca14959a69a3f42695f88aeeedb13bb5095d28 (diff)
Refactor .parse_str() methods
svn path=/rpkid/rpki/resource_set.py; revision=3356
-rw-r--r--rpkid/rpki/resource_set.py55
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