#
# Thierry Parmentelat - INRIA
#
+import time
from types import StringTypes
'version' : Parameter (str,"Version, see Node"),
'date_created': Parameter(int, "Creation time, see Node"),
'last_updated': Parameter(int, "Update time, see Node"),
+ 'slice_ids': Parameter([int], "List of slices on this node"),
}
def __init__(self,api,fields={},uptodate=True):
Row.__init__(self,api,fields)
self.uptodate=uptodate
+ def validate_date_created(self,timestamp):
+ return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(timestamp))
+
+ def validate_last_updated(self,timestamp):
+ return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(timestamp))
+
+ def purge_peer_node (self,commit=True):
+ sql = "DELETE FROM peer_node WHERE node_id=%d"%self['node_id']
+ self.api.db.do(sql)
+ if commit:
+ self.api.db.commit()
+
def delete (self, commit=True):
"""
Delete existing foreign node.
"""
- print 'in ForeignNode::delete',self
+ self.purge_peer_node()
self['deleted']=True
self.sync(commit)
class ForeignNodes (Table):
+ def __init__ (self, api, foreign_node_filter = None, columns = None):
+ Table.__init__(self, api, ForeignNode, columns)
- def __init__ (self, api, foreign_node_filter = None):
- Table.__init__(self, api, ForeignNode)
-
- sql = "SELECT %s FROM view_foreign_nodes WHERE deleted IS False" % \
- ", ".join(ForeignNode.fields)
-
+ sql = ""
+ sql += "SELECT %s FROM view_foreign_nodes " % ", ".join(self.columns)
+ sql += "WHERE deleted IS False "
+
if foreign_node_filter is not None:
if isinstance(foreign_node_filter, (list, tuple, set)):
# Separate the list into integers and strings
sql += " AND (%s)" % foreign_node_filter.sql(api, "AND")
self.selectall(sql)
+
+ # managing an index by hostname
+ def hostname_index(self):
+ if 'hostname' not in self.columns:
+ raise PLCFault,"ForeignNodes::index_hostname, hostname not selected"
+ self.index={}
+ for foreign_node in self:
+ self.index[foreign_node['hostname']]=foreign_node
+
+ def hostname_add_by(self,foreign_node):
+ self.index[foreign_node['hostname']]=foreign_node
+
+ def hostname_locate(self,hostname):
+ return self.index[hostname]
+