source: trunk/packages/invirt-web/code/webcommon.py @ 1640

Last change on this file since 1640 was 1624, checked in by broder, 16 years ago

List all machines in admin mode, even if you can't do anything

File size: 1.3 KB
Line 
1"""Exceptions for the web interface."""
2
3import time
4from invirt import database
5from invirt.database import Machine, MachineAccess
6
7import controls
8
9def cachedproperty(func):
10    name = '__cache_' + func.__name__ + '_' + str(id(func))
11    def getter(self):
12        try:
13            return getattr(self, name)
14        except AttributeError:
15            value = func(self)
16            setattr(self, name, value)
17            return value
18    return property(getter)
19
20class State(object):
21    """State for a request"""
22    def __init__(self, user, isadmin=False):
23        self.username = user
24        self.isadmin = isadmin
25
26    def getMachines(self):
27        if self.isadmin:
28            return Machine.query().join('acl').all()
29        else:
30            return Machine.query().join('acl').filter_by(user=self.username)
31
32    machines = cachedproperty(getMachines)
33    xmlist_raw = cachedproperty(lambda self: controls.getList())
34    xmlist = cachedproperty(lambda self:
35                                dict((m, self.xmlist_raw[m.name])
36                                     for m in self.machines
37                                     if m.name in self.xmlist_raw))
38
39    def clear(self):
40        """Clear the state so future accesses reload it."""
41        for attr in list(self.__dict__):
42            if attr.startswith('__cache_'):
43                delattr(self, attr)
Note: See TracBrowser for help on using the repository browser.