2 # Thierry Parmentelat - INRIA
5 from types import StringTypes
7 from PLC.Table import Row, Table
8 from PLC.Parameter import Parameter
10 class ForeignNode (Row) :
12 This object stores information about nodes hosted on
13 other peering instances of myplc
17 primary_key = 'node_id'
20 'node_id': Parameter (int, "Node Id"),
21 'hostname': Parameter (str, "Node name"),
22 'peer_id': Parameter (str, "Peer id"),
23 'boot_state' : Parameter (str, "Boot state, see Node"),
24 'model' : Parameter (str,"Model, see Node"),
25 'version' : Parameter (str,"Version, see Node"),
26 'date_created': Parameter(int, "Creation time, see Node"),
27 'last_updated': Parameter(int, "Update time, see Node"),
30 def __init__(self,api,fields={},uptodate=True):
31 Row.__init__(self,api,fields)
32 self.uptodate=uptodate
34 def delete (self, commit=True):
36 Delete existing foreign node.
38 print 'in ForeignNode::delete',self
43 class ForeignNodes (Table):
45 def __init__ (self, api, foreign_node_id_or_hostname_list=None):
50 sql += "SELECT %s FROM view_foreign_nodes " % ", ".join(ForeignNode.fields)
51 sql += "WHERE view_foreign_nodes.deleted IS False "
53 if foreign_node_id_or_hostname_list:
54 foreign_node_id_list = [ str(x) for x in foreign_node_id_or_hostname_list
55 if isinstance(x, (int,long))]
56 hostname_list = [ x for x in foreign_node_id_or_hostname_list
57 if isinstance(x, StringTypes)]
59 if foreign_node_id_list:
60 sql += " OR node_id in (%s)" % ", ".join(foreign_node_id_list)
62 ## figure how to retrieve peer_id from the hostname(s)
63 sql += " OR hostname IN (%s)" % ", ".join(api.db.quote(hostname_list))
66 rows = self.api.db.selectall (sql)
69 self[row['hostname']] = ForeignNode (api,row)