aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2007-09-12 15:46:14 +0000
committerRob Austein <sra@hactrn.net>2007-09-12 15:46:14 +0000
commit54dc62c1cc1e5a2a9fe99f8dd51150ef34d8100b (patch)
tree64ca37179ff4e5d2b142bfaf5af611a9369ced08 /scripts/rpki
parent81d2323560b9685c067c60f708807f58d1ffafff (diff)
Checkpoint
svn path=/scripts/rpki/left_right.py; revision=947
Diffstat (limited to 'scripts/rpki')
-rw-r--r--scripts/rpki/left_right.py16
-rw-r--r--scripts/rpki/sql.py22
2 files changed, 37 insertions, 1 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py
index 63caec3d..8aaf64a9 100644
--- a/scripts/rpki/left_right.py
+++ b/scripts/rpki/left_right.py
@@ -318,6 +318,22 @@ class route_origin_elt(base_elt, rpki.sql.sql_persistant):
"route_origin_id" : self.route_origin_id,
"as_number" : self.asn }
+ def sql_fetch_hook(self, db, cur):
+ self.ipv4 = rpki.resource_set.resource_set_ipv4()
+ self.ipv4.from_sql(cur, """SELECT start_ip, end_ip FROM route_origin_prefix WHERE route_origin_id = %s AND start_ip NOT LIKE '%:%'""", self.route_origin_id)
+ self.ipv6 = rpki.resource_set.resource_set_ipv6()
+ self.ipv4.from_sql(cur, """SELECT start_ip, end_ip FROM route_origin_prefix WHERE route_origin_id = %s AND start_ip LIKE '%:%'""", self.route_origin_id)
+
+ def sql_insert_hook(self, db, cur):
+ cur.executemany("""INSERT route_origin_prefix (route_origin_id, start_ip, end_ip) VALUES (%s, %s, %s)""", [(x.min, x.max) for x in self.ipv4 + self.ipv6])
+
+ def sql_update_hook(self, db, cur):
+ self.delete_hook(db, cur)
+ self.insert_hook(db, cur)
+
+ def sql_delete_hook(self, db, cur):
+ cur.execute("""DELETE FROM route_origin_prefix WHERE route_origin_id = %s""", self.route_origin_id)
+
def startElement(self, stack, name, attrs):
"""Handle <route_origin/> element."""
assert name == "route_origin", "Unexpected name %s, stack %s" % (name, stack)
diff --git a/scripts/rpki/sql.py b/scripts/rpki/sql.py
index 7064bd2b..438c9e78 100644
--- a/scripts/rpki/sql.py
+++ b/scripts/rpki/sql.py
@@ -81,8 +81,9 @@ class sql_persistant(object):
self = cls()
self.in_sql = True
self.sql_decode(sql_parent, *row)
- result.append(self)
self_dict = self.sql_encode()
+ self.sql_fetch_hook(db, cur)
+ result.append(self)
for k,v in self.sql_children:
setattr(self, k, v.sql_fetch(db, cur, self_dict, self))
if cls.sql_id_name is not None:
@@ -98,8 +99,10 @@ class sql_persistant(object):
cur.execute(self.sql_insert_cmd, self.sql_encode())
if self.sql_id_name is not None:
setattr(self, self.sql_id_name, cur.lastrowid)
+ self.sql_insert_hook(db, cur)
elif self.sql_dirty:
cur.execute(self.sql_update_cmd, self.sql_encode())
+ self.sql_update_hook(db, cur)
self.sql_dirty = False
self.sql_in_db = True
for k,v in self.sql_children:
@@ -113,6 +116,7 @@ class sql_persistant(object):
cur = db.cursor()
if self.sql_in_db:
cur.execute(self.sql_delete_cmd, self.sql_encode())
+ self.sql_delete_hook(db, cur)
self.sql_in_db = False
for k,v in self.sql_children:
for kid in getattr(self, k):
@@ -129,3 +133,19 @@ class sql_persistant(object):
"""Initialize an object with values returned by self.sql_fetch().
"""
raise NotImplementedError
+
+ def sql_fetch_hook(self, db, cur):
+ """Customization hook."""
+ pass
+
+ def sql_insert_hook(self, db, cur):
+ """Customization hook."""
+ pass
+
+ def sql_update_hook(self, db, cur):
+ """Customization hook."""
+ pass
+
+ def sql_delete_hook(self, db, cur):
+ """Customization hook."""
+ pass