- support updating 'enabled' field
[plcapi.git] / PLC / Methods / UpdateNodeNetwork.py
index d5ae238..244647c 100644 (file)
@@ -3,44 +3,43 @@ from PLC.Method import Method
 from PLC.Parameter import Parameter, Mixed
 from PLC.Nodes import Node, Nodes
 from PLC.NodeNetworks import NodeNetwork, NodeNetworks
 from PLC.Parameter import Parameter, Mixed
 from PLC.Nodes import Node, Nodes
 from PLC.NodeNetworks import NodeNetwork, NodeNetworks
-from PLC.Auth import PasswordAuth
+from PLC.Auth import Auth
 
 can_update = lambda (field, value): field not in \
              ['nodenetwork_id']
 
 class UpdateNodeNetwork(Method):
     """
 
 can_update = lambda (field, value): field not in \
              ['nodenetwork_id']
 
 class UpdateNodeNetwork(Method):
     """
-    Updates an existing node network. Any values specified in update_fields 
-    are used, otherwise defaults are used. Acceptable values for method are
-    dhcp and static. If type is static, the parameter update_fields must
-    be present and ip, gateway, network, broadcast, netmask, and dns1 must
-    all be specified. If type is dhcp, these parameters, even if
-    specified, are ignored.
+    Updates an existing node network. Any values specified in
+    nodenetwork_fields are used, otherwise defaults are
+    used. Acceptable values for method are dhcp and static. If type is
+    static, then ip, gateway, network, broadcast, netmask, and dns1
+    must all be specified in nodenetwork_fields. If type is dhcp,
+    these parameters, even if specified, are ignored.
     
     PIs and techs may only update networks associated with their own
     
     PIs and techs may only update networks associated with their own
-    nodes. ins may update any node network.
+    nodes. Admins may update any node network.
  
     Returns 1 if successful, faults otherwise.
     """
 
     roles = ['admin', 'pi', 'tech']
 
  
     Returns 1 if successful, faults otherwise.
     """
 
     roles = ['admin', 'pi', 'tech']
 
-    update_fields = dict(filter(can_update, NodeNetwork.fields.items()))
+    nodenetwork_fields = dict(filter(can_update, NodeNetwork.fields.items()))
 
     accepts = [
 
     accepts = [
-        PasswordAuth(),
-       Mixed(NodeNetwork.fields['nodenetwork_id'],
-             NodeNetwork.fields['ip']),
-       update_fields
+        Auth(),
+       NodeNetwork.fields['nodenetwork_id'],
+       nodenetwork_fields
         ]
 
     returns = Parameter(int, '1 if successful')
 
         ]
 
     returns = Parameter(int, '1 if successful')
 
-    def call(self, auth, nodenetwork_id_or_ip, nodenetwork_fields):
+    def call(self, auth, nodenetwork_id, nodenetwork_fields):
         nodenetwork_fields = dict(filter(can_update, nodenetwork_fields.items()))
 
        # Get node network information
         nodenetwork_fields = dict(filter(can_update, nodenetwork_fields.items()))
 
        # Get node network information
-       nodenetworks = NodeNetworks(self.api, [nodenetwork_id_or_ip]).values()
+       nodenetworks = NodeNetworks(self.api, [nodenetwork_id])
        if not nodenetworks:
             raise PLCInvalidArgument, "No such node network"
 
        if not nodenetworks:
             raise PLCInvalidArgument, "No such node network"
 
@@ -52,7 +51,7 @@ class UpdateNodeNetwork(Method):
        # If we are not an admin, make sure that the caller is a
         # member of the site where the node exists.
         if 'admin' not in self.caller['roles']:
        # If we are not an admin, make sure that the caller is a
         # member of the site where the node exists.
         if 'admin' not in self.caller['roles']:
-            nodes = Nodes(self.api, [nodenetwork['node_id']]).values()
+            nodes = Nodes(self.api, [nodenetwork['node_id']])
             if not nodes:
                 raise PLCPermissionDenied, "Node network is not associated with a node"
             node = nodes[0]
             if not nodes:
                 raise PLCPermissionDenied, "Node network is not associated with a node"
             node = nodes[0]
@@ -63,4 +62,8 @@ class UpdateNodeNetwork(Method):
        nodenetwork.update(nodenetwork_fields)
         nodenetwork.sync()
        
        nodenetwork.update(nodenetwork_fields)
         nodenetwork.sync()
        
+       self.object_ids = [nodenetwork['nodenetwork_id']]
+       self.message = "Node network %d updated: %s " % \
+           (nodenetwork['nodenetwork_id'], ", ".join(nodenetwork_fields.keys()))
+
         return 1
         return 1