aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/irdb.py29
-rw-r--r--scripts/rpki/resource_set.py12
2 files changed, 25 insertions, 16 deletions
diff --git a/scripts/irdb.py b/scripts/irdb.py
index d33b1cf7..88229415 100755
--- a/scripts/irdb.py
+++ b/scripts/irdb.py
@@ -36,33 +36,30 @@ def handler(query, path):
# Hmm, I screwed up when I described this table to Tim,
# valid_until should be on the top-level "registrant" table, not
# the "resource_class" table. It's an optional attribute in the
- # XML so maybe just punt it for now.
+ # XML so just punt it for now.
for resource_class_id, subject_name in resource_classes:
resource_class = rpki.left_right.resource_class_elt()
if subject_name:
resource_class.subject_name = subject_name
- cur.execute("""SELECT start_as, end_as FROM asn
- WHERE resource_class_id = '%s'
- """ % resource_class_id)
resource_class.as = rpki.resource_set.resource_set_as()
- for b,e in cur.fetchall():
- resource_class.as.append(rpki.resource_set.resource_range_as(b, e))
+ resource_class.as.from_sql(cur,
+ """SELECT start_as, end_as FROM asn
+ WHERE resource_class_id = '%s'
+ """ % resource_class_id)
- cur.execute("""SELECT start_ip, end_ip FROM net
- WHERE resource_class_id = '%s' AND version = 4
- """ % resource_class_id)
resource_class.ipv4 = rpki.resource_set.resource_set_ipv4()
- for b,e in cur.fetchall():
- resource_class.ipv4.append(rpki.resource_set.resource_range_ipv4(b, e))
+ resource_class.ipv4.from_sql(cur,
+ """SELECT start_ip, end_ip FROM net
+ WHERE resource_class_id = '%s' AND version = 4
+ """ % resource_class_id)
- cur.execute("""SELECT start_ip, end_ip FROM net
- WHERE resource_class_id = '%s' AND version = 6
- """ % resource_class_id)
resource_class.ipv6 = rpki.resource_set.resource_set_ipv6()
- for b,e in cur.fetchall():
- resource_class.ipv6.append(rpki.resource_set.resource_range_ipv6(b, e))
+ resource_class.ipv6.from_sql(cur,
+ """SELECT start_ip, end_ip FROM net
+ WHERE resource_class_id = '%s' AND version = 6
+ """ % resource_class_id)
r_pdu.resources.append(resource_class)
diff --git a/scripts/rpki/resource_set.py b/scripts/rpki/resource_set.py
index 518a65b9..1cfd845d 100644
--- a/scripts/rpki/resource_set.py
+++ b/scripts/rpki/resource_set.py
@@ -183,9 +183,21 @@ class resource_set(list):
assert isinstance(item, (type(i), type(i.min)))
return False
+ def from_sql(self, cursor, query):
+ """Populate resource set from an SQL query.
+
+ cursor is a DB API 2.0 cursor object.
+
+ query is an SQL query that returns a sequence of (min, max) pairs.
+ """
+ cursor.execute(query)
+ self[:] = [self.range_type(b, e) for (b,e) in cursor.fetchall()]
+
class resource_set_as(resource_set):
"""ASN resource set."""
+ range_type = resource_range_as
+
def parse_str(self, x):
"""Parse AS resource sets from text (eg, XML attributes)."""
r = re.match("^([0-9]+)-([0-9]+)$", x)