- implement AddressType and Address manipulation
[plcapi.git] / PLC / Methods / GetAddresses.py
1 from PLC.Faults import *
2 from PLC.Method import Method
3 from PLC.Parameter import Parameter, Mixed
4 from PLC.Addresses import Address, Addresses
5 from PLC.Sites import Site, Sites
6 from PLC.Auth import PasswordAuth
7
8 class GetAddresses(Method):
9     """
10     Get an array of structs containing the addresses of the specified
11     site. If address_id_list is specified, only the specified
12     addresses will be queried.
13     """
14
15     roles = ['admin', 'pi', 'user', 'tech']
16
17     accepts = [
18         PasswordAuth(),
19         Mixed(Site.fields['site_id'],
20               Site.fields['login_base']),
21         [Address.fields['address_id']],
22         ]
23
24     returns = [Address.fields]
25
26     def call(self, auth, site_id_or_login_base, address_id_list = None):
27         sites = Sites(self.api, [site_id_or_login_base]).values()
28         if not sites:
29             raise PLCInvalidArgument, "No such site"
30         site = sites[0]
31
32         if address_id_list is None:
33             address_id_list = site['address_ids']
34         else:
35             if set(address_id_list).intersection(site['address_ids']) != \
36                set(address_id_list):
37                 raise PLCInvalidArgument, "Invalid address ID(s)"
38
39         addresses = Addresses(self.api, address_id_list).values()
40
41         return addresses