"""Exceptions for the web interface."""
import time
-from sipb_xen_database import Machine, MachineAccess
+from invirt import database
+from invirt.database import Machine, MachineAccess
class MyException(Exception):
"""Base class for my exceptions"""
return value
return property(getter)
-class Global(object):
- """Global state of the system, to avoid duplicate remctls to get state"""
- def __init__(self, user):
- self.user = user
+class State(object):
+ """State for a request"""
+ def __init__(self, user, isadmin=False):
+ self.username = user
+ self.isadmin = isadmin
- machines = cachedproperty(lambda self:
- Machine.query().join('acl').select_by(user=self.user))
+ def getMachines(self):
+ if self.isadmin:
+ return Machine.query().join('acl').select_by(
+ database.or_(MachineAccess.c.user == self.username,
+ Machine.c.adminable == True))
+ else:
+ return Machine.query().join('acl').select_by(user=self.username)
+
+ machines = cachedproperty(getMachines)
+ xmlist_raw = cachedproperty(lambda self: controls.getList())
xmlist = cachedproperty(lambda self:
- controls.getList(self.machines))
+ dict((m, self.xmlist_raw[m.name])
+ for m in self.machines
+ if m.name in self.xmlist_raw))
def clear(self):
"""Clear the state so future accesses reload it."""
for attr in list(self.__dict__):
if attr.startswith('__cache_'):
delattr(self, attr)
-
-g = Global(None)