X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FUpdatePCU.py;h=1c915acde4e65894884025e0b2f23147082fffb4;hb=90a9c8342a4f5bcf02e6407dcf4ed1975ad15baf;hp=b338d7eb6f046a5c289ed5719af8011a3d37869f;hpb=af5644b603a81681801771f996f82a39cf01c081;p=plcapi.git diff --git a/PLC/Methods/UpdatePCU.py b/PLC/Methods/UpdatePCU.py index b338d7e..1c915ac 100644 --- a/PLC/Methods/UpdatePCU.py +++ b/PLC/Methods/UpdatePCU.py @@ -2,7 +2,10 @@ 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 + +can_update = lambda (field, value): field not in \ + ['pcu_id', 'site_id'] class UpdatePCU(Method): """ @@ -16,12 +19,10 @@ class UpdatePCU(Method): roles = ['admin', 'pi', 'tech'] - can_update = lambda (field, value): field not in \ - ['pcu_id', 'site_id'] update_fields = dict(filter(can_update, PCU.fields.items())) accepts = [ - PasswordAuth(), + Auth(), PCU.fields['pcu_id'], update_fields ] @@ -29,27 +30,23 @@ class UpdatePCU(Method): returns = Parameter(int, '1 if successful') def call(self, auth, pcu_id, pcu_fields): - # Make sure only valid fields are specified - if filter(lambda field: field not in self.update_fields, pcu_fields): - raise PLCInvalidArgument, "Invalid field specified" + pcu_fields = dict(filter(can_update, pcu_fields.items())) # Get associated PCU details - pcus = PCUs(self.api, [pcu_id]).values() + pcus = PCUs(self.api, [pcu_id]) if not pcus: raise PLCInvalidArgument, "No such PCU" pcu = pcus[0] if 'admin' not in self.caller['roles']: - ok = False - sites = Sites(self.api, self.caller['site_ids']).values() - for site in sites: - if pcu['pcu_id'] in site['pcu_ids']: - ok = True - break - if not ok: + if pcu['site_id'] not in self.caller['site_ids']: raise PLCPermissionDenied, "Not allowed to update that PCU" pcu.update(pcu_fields) pcu.sync() - + + # Logging variables + self.object_ids = [pcu['pcu_id']] + self.message = 'PCU %d updated: %s' % \ + (pcu['pcu_id'], ", ".join(pcu_fields.keys())) return 1