X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/d37941f98e7a15e191c77c6d45bf41cff53bf811..8af4d9d694c4491601cb6f9394b811fc36f13cb2:/code/webcommon.py diff --git a/code/webcommon.py b/code/webcommon.py index 58d9333..eaf533c 100644 --- a/code/webcommon.py +++ b/code/webcommon.py @@ -1,7 +1,8 @@ """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""" @@ -36,13 +37,21 @@ def cachedproperty(func): 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: dict((m, self.xmlist_raw[m.name]) @@ -54,5 +63,3 @@ class Global(object): for attr in list(self.__dict__): if attr.startswith('__cache_'): delattr(self, attr) - -g = Global(None)