Split main.py in four.
[invirt/packages/invirt-web.git] / templates / webcommon.py
diff --git a/templates/webcommon.py b/templates/webcommon.py
new file mode 100644 (file)
index 0000000..01b820a
--- /dev/null
@@ -0,0 +1,44 @@
+"""Exceptions for the web interface."""
+
+from sipb_xen_database import Machine
+
+class MyException(Exception):
+    """Base class for my exceptions"""
+    pass
+
+class InvalidInput(MyException):
+    """Exception for user-provided input is invalid but maybe in good faith.
+
+    This would include setting memory to negative (which might be a
+    typo) but not setting an invalid boot CD (which requires bypassing
+    the select box).
+    """
+    def __init__(self, err_field, err_value, expl=None):
+        MyException.__init__(self, expl)
+        self.err_field = err_field
+        self.err_value = err_value
+
+class CodeError(MyException):
+    """Exception for internal errors or bad faith input."""
+    pass
+
+import controls
+
+class Global(object):
+    """Global state of the system, to avoid duplicate remctls to get state"""
+    def __init__(self, user):
+        self.user = user
+
+    def __get_uptimes(self):
+        if not hasattr(self, '_uptimes'):
+            self._uptimes = controls.getUptimes(Machine.select())
+        return self._uptimes
+    uptimes = property(__get_uptimes)
+
+    def clear(self):
+        """Clear the state so future accesses reload it."""
+        for attr in ('_uptimes', ):
+            if hasattr(self, attr):
+                delattr(self, attr)
+
+g = Global(None)