X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FGetSites.py;h=d148b5d0f044e0d6d3c44d3ec3b1aa7d4a5a39d2;hb=27cf5b47876b378a43b89a503d22bb1f78f6f547;hp=2fb73e0890404456a553a3fa6e76b211a706e58b;hpb=40d33ca5c3e174e3ac07e3519c07e43825b4c797;p=plcapi.git diff --git a/PLC/Methods/GetSites.py b/PLC/Methods/GetSites.py index 2fb73e0..d148b5d 100644 --- a/PLC/Methods/GetSites.py +++ b/PLC/Methods/GetSites.py @@ -1,52 +1,30 @@ -import os - from PLC.Method import Method from PLC.Parameter import Parameter, Mixed -from PLC.Auth import PasswordAuth +from PLC.Filter import Filter +from PLC.Auth import Auth from PLC.Sites import Site, Sites class GetSites(Method): """ - Return an array of structs containing details about all sites. If - site_id_list is specified, only the specified sites will be - queried. - - If return_fields is specified, only the specified fields will be - returned, if set. Otherwise, the default set of fields returned is: - + Returns an array of structs containing details about sites. If + site_filter is specified and is an array of site identifiers or + hostnames, or a struct of site attributes, only sites matching the + filter will be returned. If return_fields is specified, only the + specified details will be returned. """ roles = ['admin', 'pi', 'user', 'tech'] accepts = [ - PasswordAuth(), - [Mixed(Site.fields['site_id'], - Site.fields['login_base'])], - Parameter([str], 'List of fields to return') + Auth(), + Mixed([Mixed(Site.fields['site_id'], + Site.fields['login_base'])], + Filter(Site.fields)), + Parameter([str], "List of fields to return", nullok = True) ] returns = [Site.fields] - def __init__(self, *args, **kwds): - Method.__init__(self, *args, **kwds) - # Update documentation with list of default fields returned - self.__doc__ += os.linesep.join(Site.fields.keys()) - - def call(self, auth, site_id_or_login_base_list = None, return_fields = None): - # Make sure that only valid fields are specified - if return_fields is None: - return_fields = Site.fields - elif filter(lambda field: field not in Site.fields, return_fields): - raise PLCInvalidArgument, "Invalid return field specified" - - # Get site information - sites = Sites(self.api, site_id_or_login_base_list) - - # Filter out undesired or None fields (XML-RPC cannot marshal - # None) and turn each site into a real dict. - valid_return_fields_only = lambda (key, value): \ - key in return_fields and value is not None - sites = [dict(filter(valid_return_fields_only, site.items())) \ - for site in sites.values()] - - return sites + + def call(self, auth, site_filter = None, return_fields = None): + return Sites(self.api, site_filter, return_fields)