| 
                Last change
                  on this file since 2077 was
                  1644,
                  checked in by broder, 17 years ago
           | 
        
        
          | 
               
I still want to see all VMs, even the ones without an ACL 
 
           | 
        
        | 
            File size:
            1.3 KB
           | 
      
      
        
  | Line |   | 
|---|
| 1 | """Exceptions for the web interface.""" | 
|---|
| 2 |  | 
|---|
| 3 | import time | 
|---|
| 4 | from invirt import database | 
|---|
| 5 | from invirt.database import Machine, MachineAccess | 
|---|
| 6 |  | 
|---|
| 7 | import controls | 
|---|
| 8 |  | 
|---|
| 9 | def 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 |  | 
|---|
| 20 | class 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().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.