2 # Thierry Parmentelat - INRIA
7 from PLC.Faults import *
8 from PLC.Method import Method
9 from PLC.Parameter import Parameter, Mixed
10 from PLC.Auth import Auth
12 from PLC.Peers import Peer, Peers
13 from PLC.Persons import Person, Persons
14 ##from PLC.ForeignNodes import ForeignNode, ForeignNodes
17 class RefreshPeer(Method):
19 Query a peer PLC for its list of nodes, and refreshes
20 the local database accordingly
22 Returns a tuple containing
24 (*) the number of new nodes from that peer - may be negative
25 (*) the number of new slices from that peer - may be negative
31 Parameter (int, "Peer id") ]
33 returns = Parameter(int, "Delta in number of foreign nodes attached to that peer")
35 def call (self, auth, peer_id):
37 ### retrieve peer info
38 peers = Peers (self.api,[peer_id])
42 raise PLCInvalidArgument,'no such peer_id:%d'%peer_id
44 ### retrieve account info
45 person_id = peer['person_id']
46 persons = Persons (self.api,[person_id])
50 raise PLCInvalidArgument,'no such person_id:%d'%person_id
52 ### build up foreign auth
53 auth={ 'Username': person['email'],
54 'AuthMethod' : 'password',
55 'AuthString' : person['password'],
58 ## connect to the peer's API
61 apiserver = xmlrpclib.Server (url)
64 peer_get_nodes = apiserver.GetNodes(auth)
65 nb_new_nodes = peer.refresh_nodes(peer_get_nodes)
67 peer_get_slices = apiserver.GetSlices(auth)
68 nb_new_slices = peer.refresh_slices(peer_get_slices)
70 return (self.api.config.PLC_NAME,nb_new_nodes,nb_new_slices)