d220ddce61ee7f3187483903037283393ceea761
[plcapi.git] / PLC / Methods / UpdateInitScript.py
1 # $Id$
2 # $URL$
3 from PLC.Faults import *
4 from PLC.Method import Method
5 from PLC.Parameter import Parameter, Mixed
6 from PLC.InitScripts import InitScript, InitScripts
7 from PLC.Auth import Auth
8
9 can_update = lambda (field, value): field not in \
10              ['initscript_id']
11
12 class UpdateInitScript(Method):
13     """
14     Updates an initscript. Only the fields specified in
15     initscript_fields are updated, all other fields are left untouched.
16
17     Returns 1 if successful, faults otherwise.
18     """
19
20     roles = ['admin']
21
22     initscript_fields = dict(filter(can_update, InitScript.fields.items()))
23
24     accepts = [
25         Auth(),
26         InitScript.fields['initscript_id'],
27         initscript_fields
28         ]
29
30     returns = Parameter(int, '1 if successful')
31
32     def call(self, auth, initscript_id, initscript_fields):
33         initscript_fields = dict(filter(can_update, initscript_fields.items()))
34
35         initscripts = InitScripts(self.api, [initscript_id])
36         if not initscripts:
37             raise PLCInvalidArgument, "No such initscript"
38
39         initscript = initscripts[0]
40         initscript.update(initscript_fields)
41         initscript.sync()
42         self.event_objects = {'InitScript': [initscript['initscript_id']]}
43
44         return 1