2 # Thierry Parmentelat - INRIA
5 from types import StringTypes
7 from PLC.Table import Row, Table
8 from PLC.Parameter import Parameter
9 from PLC.Filter import Filter
11 class ForeignNode (Row) :
13 This object stores information about nodes hosted on
14 other peering instances of myplc
18 primary_key = 'node_id'
21 'node_id': Parameter (int, "Node Id"),
22 'hostname': Parameter (str, "Node name"),
23 'peer_id': Parameter (str, "Peer id"),
24 'boot_state' : Parameter (str, "Boot state, see Node"),
25 'model' : Parameter (str,"Model, see Node"),
26 'version' : Parameter (str,"Version, see Node"),
27 'date_created': Parameter(int, "Creation time, see Node"),
28 'last_updated': Parameter(int, "Update time, see Node"),
31 def __init__(self,api,fields={},uptodate=True):
32 Row.__init__(self,api,fields)
33 self.uptodate=uptodate
35 def delete (self, commit=True):
37 Delete existing foreign node.
39 print 'in ForeignNode::delete',self
44 class ForeignNodes (Table):
46 def __init__ (self, api, foreign_node_filter = None):
47 Table.__init__(self, api, ForeignNode)
49 sql = "SELECT %s FROM view_foreign_nodes WHERE deleted IS False" % \
50 ", ".join(ForeignNode.fields)
52 if foreign_node_filter is not None:
53 if isinstance(foreign_node_filter, (list, tuple, set)):
54 # Separate the list into integers and strings
55 ints = filter(lambda x: isinstance(x, (int, long)), foreign_node_filter)
56 strs = filter(lambda x: isinstance(x, StringTypes), foreign_node_filter)
57 foreign_node_filter = Filter(ForeignNode.fields, {'node_id': ints, 'hostname': strs})
58 sql += " AND (%s)" % foreign_node_filter.sql(api, "OR")
59 elif isinstance(foreign_node_filter, dict):
60 foreign_node_filter = Filter(ForeignNode.fields, foreign_node_filter)
61 sql += " AND (%s)" % foreign_node_filter.sql(api, "AND")