3 from PLC.Faults import *
4 from PLC.Method import Method
5 from PLC.Parameter import Parameter, Mixed
6 from PLC.Sites import Site, Sites
7 from PLC.Nodes import Node, Nodes
8 from PLC.NodeNetworks import NodeNetwork, NodeNetworks, valid_ip
9 from PLC.Auth import Auth
11 class AdmQuerySite(Method):
13 Deprecated. Functionality can be implemented with GetSites and
19 roles = ['admin', 'pi', 'user', 'tech']
23 {'site_name': Site.fields['name'],
24 'site_abbreviatedname': Site.fields['abbreviated_name'],
25 'site_loginbase': Site.fields['login_base'],
26 'node_hostname': Node.fields['hostname'],
27 'node_id': Node.fields['node_id'],
28 'nodenetwork_ip': NodeNetwork.fields['ip'],
29 'nodenetwork_mac': NodeNetwork.fields['mac']}
32 returns = [Site.fields['site_id']]
34 def call(self, auth, search_vals):
35 if 'site_loginbase' in search_vals:
36 sites = Sites(self.api, [search_vals['site_loginbase']])
38 sites = Sites(self.api)
40 if 'site_name' in search_vals:
41 sites = filter(lambda site: \
42 site['name'] == search_vals['site_name'],
45 if 'site_abbreviatedname' in search_vals:
46 sites = filter(lambda site: \
47 site['abbreviatedname'] == search_vals['site_abbreviatedname'],
50 if 'node_id' in search_vals:
51 sites = filter(lambda site: \
52 search_vals['node_id'] in site['node_ids'],
55 if 'node_hostname' in search_vals or \
56 'nodenetwork_ip' in search_vals or \
57 'nodenetwork_mac' in search_vals:
59 site['hostnames'] = []
63 nodes = Nodes(self.api, site['node_ids'])
65 site['hostnames'].append(node['hostname'])
66 if 'nodenetwork_ip' in search_vals or \
67 'nodenetwork_mac' in search_vals:
68 nodenetworks = NodeNetworks(self.api, node['nodenetwork_ids'])
69 site['ips'] += [nodenetwork['ip'] for nodenetwork in nodenetworks]
70 site['macs'] += [nodenetwork['mac'] for nodenetwork in nodenetworks]
72 if 'node_hostname' in search_vals:
73 sites = filter(lambda site: \
74 search_vals['node_hostname'] in site['hostnames'],
77 if 'nodenetwork_ip' in search_vals:
78 sites = filter(lambda site: \
79 search_vals['nodenetwork_ip'] in site['ips'],
82 if 'nodenetwork_mac' in search_vals:
83 sites = filter(lambda site: \
84 search_vals['nodenetwork_mac'] in site['macs'],
87 return [site['site_id'] for site in sites]