X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FUpdatePCU.py;h=d92d799f737c08562198be22fb53421718091ae8;hb=28fe8179bbf9cef0ab89edb25b0563e54c9becf0;hp=b338d7eb6f046a5c289ed5719af8011a3d37869f;hpb=af5644b603a81681801771f996f82a39cf01c081;p=plcapi.git diff --git a/PLC/Methods/UpdatePCU.py b/PLC/Methods/UpdatePCU.py index b338d7e..d92d799 100644 --- a/PLC/Methods/UpdatePCU.py +++ b/PLC/Methods/UpdatePCU.py @@ -1,8 +1,12 @@ +# $Id$ 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 +20,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 +31,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.event_objects = {'PCU': [pcu['pcu_id']]} + self.message = 'PCU %d updated: %s' % \ + (pcu['pcu_id'], ", ".join(pcu_fields.keys())) return 1