aboutsummaryrefslogtreecommitdiff
path: root/scripts/rpki
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2007-09-11 19:46:06 +0000
committerRob Austein <sra@hactrn.net>2007-09-11 19:46:06 +0000
commit63acecdc38a602eafb5beb49fb0b9b4a291c3378 (patch)
treeb4cc6eb007b394e0ae54f6dd744518c1aa4f7000 /scripts/rpki
parent39f8909f26b1e58329796077f09bcdac0dc39cdf (diff)
Checkpoint
svn path=/scripts/rpki/left_right.py; revision=942
Diffstat (limited to 'scripts/rpki')
-rw-r--r--scripts/rpki/left_right.py94
-rw-r--r--scripts/rpki/sql.py32
2 files changed, 78 insertions, 48 deletions
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py
index 0e3dcb78..62fc69ec 100644
--- a/scripts/rpki/left_right.py
+++ b/scripts/rpki/left_right.py
@@ -58,9 +58,9 @@ class extension_preference_elt(base_elt, rpki.sql.sql_persistant):
attributes = ("name",)
sql_select_cmd = """SELECT pref_name, pref_value FROM self_pref WHERE self_id = %(self_id)s"""
- sql_insert_cmd = """INSERT self_pref (self_id, pref_name, pref_value) VALUES (%(self_id)s, %(name)s, %(value)"""
- sql_update_cmd = """UPDATE self_pref SET pref_value = %(value)s WHERE self_id = %(self_id) AND pref_name = %(name)s"""
- sql_delete_cmd = """DELETE FROM self_pref WHERE self_id = %(self_id) AND pref_name = %(name)s"""
+ sql_insert_cmd = """INSERT self_pref (self_id, pref_name, pref_value) VALUES (%(self_id)s, %(name)s, %(value)s"""
+ sql_update_cmd = """UPDATE self_pref SET pref_value = %(value)s WHERE self_id = %(self_id)s AND pref_name = %(name)s"""
+ sql_delete_cmd = """DELETE FROM self_pref WHERE self_id = %(self_id)s AND pref_name = %(name)s"""
def sql_decode(self, sql_parent, self_id, name, value):
self.self_obj = sql_parent
@@ -88,38 +88,6 @@ class extension_preference_elt(base_elt, rpki.sql.sql_persistant):
elt.text = self.value
return elt
-class self_elt(base_elt, rpki.sql.sql_persistant):
- """<self/> element."""
-
- element_name = "self"
- attributes = ("action", "type", "self_id")
- booleans = ("rekey", "reissue", "revoke", "run_now", "publish_world_now")
-
- def __init__(self):
- self.prefs = []
-
- def startElement(self, stack, name, attrs):
- """Handle <self/> element."""
- if name == "extension_preference":
- pref = extension_preference_elt()
- self.prefs.append(pref)
- stack.append(pref)
- pref.startElement(stack, name, attrs)
- else:
- assert name == "self", "Unexpected name %s, stack %s" % (name, stack)
- self.read_attrs(attrs)
-
- def endElement(self, stack, name, text):
- """Handle <self/> element."""
- assert name == "self", "Unexpected name %s, stack %s" % (name, stack)
- stack.pop()
-
- def toXML(self):
- """Generate <self/> element."""
- elt = self.make_elt()
- elt.extend([i.toXML() for i in self.prefs])
- return elt
-
class bsc_elt(base_elt, rpki.sql.sql_persistant):
"""<bsc/> (Business Signing Context) element."""
@@ -277,6 +245,62 @@ class route_origin_elt(base_elt, rpki.sql.sql_persistant):
"""Generate <route_origin/> element."""
return self.make_elt()
+class self_elt(base_elt, rpki.sql.sql_persistant):
+ """<self/> element."""
+
+ element_name = "self"
+ attributes = ("action", "type", "self_id")
+ booleans = ("rekey", "reissue", "revoke", "run_now", "publish_world_now")
+
+ sql_id_name = "self_id"
+ sql_select_cmd = """SELECT self_id, use_hsm FROM self WHERE self_id = %(self_id)s"""
+ sql_insert_cmd = """INSERT self (use_hsm) VALUES (%(use_hsm)s"""
+ sql_update_cmd = """UPDATE self SET use_hsm = %(use_hsm)s WHERE self_id = %(self_id)s"""
+ sql_delete_cmd = """DELETE FROM self WHERE self_id = %(self_id)s"""
+ sql_children = (("prefs", extension_preference_elt),
+ ("bscs", bsc_elt),
+ ("repos", repository_elt),
+ ("parents", parent_elt),
+ ("children", child_elt),
+ ("route_origins", route_origin_elt))
+
+ self_id = None
+
+ def __init__(self):
+ for k,v in self.sql_children:
+ setattr(self, k, [])
+
+ def sql_decode(self, sql_parent, self_id, use_hsm):
+ assert sql_parent is None
+ self.self_id = self_id
+ self.use_hsm = use_hsm
+
+ def sql_encode(self):
+ return { "self_id" : self.self_id,
+ "use_hsm" : self.use_hsm }
+
+ def startElement(self, stack, name, attrs):
+ """Handle <self/> element."""
+ if name == "extension_preference":
+ pref = extension_preference_elt()
+ self.prefs.append(pref)
+ stack.append(pref)
+ pref.startElement(stack, name, attrs)
+ else:
+ assert name == "self", "Unexpected name %s, stack %s" % (name, stack)
+ self.read_attrs(attrs)
+
+ def endElement(self, stack, name, text):
+ """Handle <self/> element."""
+ assert name == "self", "Unexpected name %s, stack %s" % (name, stack)
+ stack.pop()
+
+ def toXML(self):
+ """Generate <self/> element."""
+ elt = self.make_elt()
+ elt.extend([i.toXML() for i in self.prefs])
+ return elt
+
class resource_class_elt(base_elt):
"""<resource_class/> element."""
diff --git a/scripts/rpki/sql.py b/scripts/rpki/sql.py
index ed8bfe58..c7c0fe0d 100644
--- a/scripts/rpki/sql.py
+++ b/scripts/rpki/sql.py
@@ -16,15 +16,21 @@ class sql_persistant(object):
"""
## @var sql_children
- # Dictionary listing this class's children in the tree of SQL
- # tables. Key the name of the attribute in this class at which a
- # list of the resulting child objects are stored; value is is the
- # class object of a child.
- sql_children = {}
+ # Tuple of tuples associating this class's children in the tree of
+ # SQL tables with the attribute names by which this class refers to
+ # them. Conceptually, this is an ordered dictionary; not being able
+ # to use a real Python dictionary here is a minor inconvenience.
+ # Making this an ordered data structure allows us to defer the
+ # objects with complex cross-linking until after the simpler objects
+ # to which they link have already been loaded.
+ #
+ # "Key" is the name of the attribute in this class at which a list
+ # of the resulting child objects are stored; "value" is is the class
+ # object of a child.
+ sql_children = ()
## @var sql_in_db
- # Whether this object is already in SQL or not. Perhaps this should
- # instead be a None value in the object's ID field?
+ # Whether this object is already in SQL or not.
sql_in_db = False
## @var sql_dirty
@@ -75,8 +81,8 @@ class sql_persistant(object):
self.sql_decode(sql_parent, *row)
result.append(self)
self_dict = self.sql_encode()
- for kid_name,kid_type in self.sql_children.items():
- setattr(self, kid_name, kid_type.sql_fetch(db, cur, self_dict, self))
+ for k,v in self.sql_children:
+ setattr(self, k, v.sql_fetch(db, cur, self_dict, self))
return result
def sql_store(self, db, cur=None):
@@ -92,8 +98,8 @@ class sql_persistant(object):
cur.execute(self.sql_update_cmd, self.sql_encode())
self.sql_dirty = False
self.sql_in_db = True
- for kids in self.sql_children:
- for kid in getattr(self, kids):
+ for k,v in self.sql_children:
+ for kid in getattr(self, k):
kid.sql_store(db, cur)
def sql_delete(self, db, cur=None):
@@ -104,8 +110,8 @@ class sql_persistant(object):
if self.sql_in_db:
cur.execute(self.sql_delete_cmd, self.sql_encode())
self.sql_in_db = False
- for kids in self.sql_children:
- for kid in getattr(self, kids):
+ for k,v in self.sql_children:
+ for kid in getattr(self, k):
kid.sql_delete(db, cur)
def sql_encode(self):