3 from types import StringTypes
5 from PLC.Faults import *
6 from PLC.Parameter import Parameter
7 from PLC.Table import Row, Table
11 Stores the list of peering PLCs in the peers table.
12 See the Row class for more details
16 primary_key = 'peer_id'
18 'peer_id' : Parameter (int, "Peer identifier"),
19 'peername' : Parameter (str, "Peer name"),
20 'peer_url' : Parameter (str, "Peer API url"),
21 'person_id' : Parameter (int, "person_id of the account used to log there"),
22 'foreign_node_ids' : Parameter ([int], "doc")
25 def validate_peer_url (self, url):
27 Validate URL, checks it looks like https
29 invalid_url = PLCInvalidArgument("Invalid URL")
30 if not re.compile ("^https://.*$").match(url) :
34 def delete (self, commit=True):
39 assert 'peer_id' in self
41 self['deleted'] = True
46 Maps to the peers table in the database
49 def __init__ (self, api, peer_id_or_peername_list = None):
52 sql="SELECT %s FROM view_peers WHERE deleted IS False" % \
53 ", ".join(Peer.fields)
54 if peer_id_or_peername_list:
55 peer_ids = [x for x in peer_id_or_peername_list if isinstance(x, (int, long))]
56 peernames = [x for x in peer_id_or_peername_list if isinstance(x, StringTypes)]
59 sql += " OR peer_id in (%s)"% ", ".join([str(i) for i in peer_ids])
61 sql += " OR peername in (%s)"% ". ".join(api.db.quote(peernames)).lower()
64 rows = self.api.db.selectall(sql)
67 self[row['peer_id']] = peer = Peer(api,row)
68 for aggregate in ['foreign_node_ids']:
69 if not peer.has_key(aggregate) or peer[aggregate] is None:
72 peer[aggregate] = map(int, peer[aggregate].split(','))