X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FAddPCU.py;h=63dd3951a593f0ccb4318445568509a555d051a9;hb=c3fc031363ac794e6b1245c6ed1a05329cba69c9;hp=1f66dcf004b8bd836881e928140e36f8a4326370;hpb=dda3bb83c9030737f301bda2773f5dcb818fed2e;p=plcapi.git diff --git a/PLC/Methods/AddPCU.py b/PLC/Methods/AddPCU.py index 1f66dcf..63dd395 100644 --- a/PLC/Methods/AddPCU.py +++ b/PLC/Methods/AddPCU.py @@ -2,13 +2,18 @@ from PLC.Faults import * from PLC.Method import Method from PLC.Parameter import Parameter, Mixed from PLC.PCUs import PCU, PCUs -from PLC.Auth import PasswordAuth +from PLC.Auth import Auth from PLC.Sites import Site, Sites +can_update = lambda field_value: field_value[0] in \ + ['ip', 'hostname', 'protocol', + 'username', 'password', + 'model', 'notes'] + class AddPCU(Method): """ Adds a new power control unit (PCU) to the specified site. Any - fields specified in optional_vals are used, otherwise defaults are + fields specified in pcu_fields are used, otherwise defaults are used. PIs and technical contacts may only add PCUs to their own sites. @@ -18,37 +23,39 @@ class AddPCU(Method): roles = ['admin', 'pi', 'tech'] - can_update = lambda (field, value): field in \ - ['hostname', 'ip', 'protocol', - 'username', 'password', - 'model', 'notes'] - update_fields = dict(filter(can_update, PCU.fields.items())) + pcu_fields = dict(list(filter(can_update, list(PCU.fields.items())))) accepts = [ - PasswordAuth(), + Auth(), Mixed(Site.fields['site_id'], Site.fields['login_base']), - update_fields + pcu_fields ] returns = Parameter(int, 'New pcu_id (> 0) if successful') - def call(self, auth, site_id_or_login_base, optional_vals = {}): - if filter(lambda field: field not in self.update_fields, optional_vals): - raise PLCInvalidArgument, "Invalid field specified" + + def call(self, auth, site_id_or_login_base, pcu_fields): + pcu_fields = dict(list(filter(can_update, list(pcu_fields.items())))) # Get associated site details - sites = Sites(self.api, [site_id_or_login_base]).values() + sites = Sites(self.api, [site_id_or_login_base]) if not sites: - raise PLCInvalidArgument, "No such site" + raise PLCInvalidArgument("No such site") site = sites[0] if 'admin' not in self.caller['roles']: if site['site_id'] not in self.caller['site_ids']: - raise PLCPermissionDenied, "Not allowed to add a PCU to that site" + raise PLCPermissionDenied("Not allowed to add a PCU to that site") - pcu = PCU(self.api, optional_vals) + pcu = PCU(self.api, pcu_fields) pcu['site_id'] = site['site_id'] pcu.sync() + # Logging variables + self.event_objects = {'Site': [site['site_id']], + 'PCU': [pcu['pcu_id']]} + self.message = 'PCU %d added site %s' % \ + (pcu['pcu_id'], site['site_id']) + return pcu['pcu_id']