Make modify form work
authorQuentin Smith <quentin@mit.edu>
Mon, 28 Sep 2009 04:58:53 +0000 (00:58 -0400)
committerQuentin Smith <quentin@mit.edu>
Mon, 28 Sep 2009 04:58:53 +0000 (00:58 -0400)
svn path=/package_branches/invirt-web/cherrypy-rebased/; revision=2691

code/main.py
code/templates/info.mako

index 5de084e..baf4ff9 100755 (executable)
@@ -220,6 +220,28 @@ console will suffer artifacts.
         index = info
 
         @cherrypy.expose
+        @cherrypy.tools.mako(filename="/info.mako")
+        @cherrypy.tools.require_POST()
+        def modify(self, machine_id, **fields):
+            """Handler for modifying attributes of a machine."""
+            try:
+                modify_dict = modifyDict(cherrypy.request.login, cherrypy.request.state, machine_id, fields)
+            except InvalidInput, err:
+                result = None
+                machine = validation.Validate(cherrypy.request.login, cherrypy.request.state, machine_id=machine_id).machine
+            else:
+                machine = modify_dict['machine']
+                result = 'Success!'
+                err = None
+            info_dict = infoDict(cherrypy.request.login, cherrypy.request.state, machine)
+            info_dict['err'] = err
+            if err:
+                for field in fields.keys():
+                    setattr(info_dict['defaults'], field, fields.get(field))
+            info_dict['result'] = result
+            return info_dict
+
+        @cherrypy.expose
         @cherrypy.tools.mako(filename="/vnc.mako")
         def vnc(self, machine_id):
             """VNC applet page.
@@ -349,6 +371,7 @@ class Defaults:
     autoinstall = ''
     name = ''
     description = ''
+    administrator = ''
     type = 'linux-hvm'
 
     def __init__(self, max_memory=None, max_disk=None, **kws):
@@ -480,15 +503,16 @@ def getDiskInfo(data_dict, machine):
         data_dict['%s_size' % name] = "%0.1f GiB" % (disk.size / 1024.)
     return disk_fields
 
-def modifyDict(username, state, fields):
+def modifyDict(username, state, machine_id, fields):
     """Modify a machine as specified by CGI arguments.
 
-    Return a list of local variables for modify.tmpl.
+    Return a dict containing the machine that was modified.
     """
     olddisk = {}
     session.begin()
     try:
-        kws = dict([(kw, fields.getfirst(kw)) for kw in 'machine_id owner admin contact name description memory vmtype disksize'.split()])
+        kws = dict([(kw, fields.get(kw)) for kw in 'owner admin contact name description memory vmtype disksize'.split() if fields.get(kw)])
+        kws['machine_id'] = machine_id
         validate = validation.Validate(username, state, **kws)
         machine = validate.machine
         oldname = machine.name
@@ -535,28 +559,8 @@ def modifyDict(username, state, fields):
         controls.resizeDisk(oldname, diskname, str(olddisk[diskname]))
     if hasattr(validate, 'name'):
         controls.renameMachine(machine, oldname, validate.name)
-    return dict(user=username,
-                command="modify",
-                machine=machine)
+    return dict(machine=machine)
 
-def modify(username, state, path, fields):
-    """Handler for modifying attributes of a machine."""
-    try:
-        modify_dict = modifyDict(username, state, fields)
-    except InvalidInput, err:
-        result = None
-        machine = validation.Validate(username, state, machine_id=fields.getfirst('machine_id')).machine
-    else:
-        machine = modify_dict['machine']
-        result = 'Success!'
-        err = None
-    info_dict = infoDict(username, state, machine)
-    info_dict['err'] = err
-    if err:
-        for field in fields.keys():
-            setattr(info_dict['defaults'], field, fields.getfirst(field))
-    info_dict['result'] = result
-    return templates.info(searchList=[info_dict])
 
 def badOperation(u, s, p, e):
     """Function called when accessing an unknown URI."""
@@ -633,7 +637,8 @@ def infoDict(username, state, machine):
     max_disk = validation.maxDisk(machine.owner, machine)
     defaults = Defaults()
     for name in 'machine_id name description administrator owner memory contact'.split():
-        setattr(defaults, name, getattr(machine, name))
+        if getattr(machine, name):
+            setattr(defaults, name, getattr(machine, name))
     defaults.type = machine.type.type_id
     defaults.disk = "%0.2f" % (machine.disks[0].size/1024.)
     checkpoint.checkpoint('Got defaults')
@@ -655,7 +660,6 @@ def unauthFront(_, _2, _3, fields):
             'hostname' : socket.getfqdn()}])
 
 mapping = dict(
-               modify=modify,
                unauth=unauthFront)
 
 def printHeaders(headers):
index d6a1cfb..35e5074 100644 (file)
@@ -59,7 +59,7 @@ Info on ${machine.name}
 % if on:
 (To edit ram, disk size, or machine name, turn off the machine first.)
 % endif
-<form action="modify" method="POST">
+<form action="machine/${machine.machine_id}/modify" method="POST">
   <input type="hidden" name="machine_id" value="${defaults.machine_id}"/>
   <table>
     <tr><td>Description:</td><td colspan="2"><textarea name="description" rows="4" cols="60">${defaults.description}</textarea></td></tr>