Use joins, new xmlist.py
[invirt/packages/invirt-web.git] / code / validation.py
index 97a8819..874dbb0 100644 (file)
@@ -4,7 +4,7 @@ import cache_acls
 import getafsgroups
 import re
 import string
-from sipb_xen_database import Machine, NIC, Type
+from sipb_xen_database import Machine, NIC, Type, Disk
 from webcommon import InvalidInput, g
 
 MAX_MEMORY_TOTAL = 512
@@ -44,7 +44,7 @@ def maxMemory(user, machine=None, on=True):
     if not on:
         return MAX_MEMORY_SINGLE
     machines = getMachinesByOwner(user, machine)
-    active_machines = [x for x in machines if g.uptimes.get(x)]
+    active_machines = [x for x in machines if g.xmlist.get(x)]
     mem_usage = sum([x.memory for x in active_machines if x != machine])
     return min(MAX_MEMORY_SINGLE, MAX_MEMORY_TOTAL-mem_usage)
 
@@ -54,14 +54,17 @@ def maxDisk(user, machine=None):
     If machine is None, the maximum disk for a new machine. Otherwise,
     return the maximum that a given machine can be changed to.
     """
-    machines = getMachinesByOwner(user, machine)
-    disk_usage = sum([sum([y.size for y in x.disks])
-                      for x in machines if x != machine])
+    if machine is not None:
+        machine_id = machine.machine_id
+    else:
+        machine_id = None
+    disk_usage = Disk.query().filter_by(Disk.c.machine_id != machine_id,
+                                        owner=user).sum(Disk.c.size)
     return min(MAX_DISK_SINGLE, MAX_DISK_TOTAL-disk_usage/1024.)
 
 def cantAddVm(user):
     machines = getMachinesByOwner(user)
-    active_machines = [x for x in machines if g.uptimes.get(x)]
+    active_machines = [x for x in machines if g.xmlist.get(x)]
     if len(machines) >= MAX_VMS_TOTAL:
         return 'You have too many VMs to create a new one.'
     if len(active_machines) >= MAX_VMS_ACTIVE: