X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/92bbb6ddedd2d02abb7e1289f0a50827429593d5..1b3bce36430d275a1b9148fb63ba601b43c4c1db:/templates/webcommon.py diff --git a/templates/webcommon.py b/templates/webcommon.py new file mode 100644 index 0000000..01b820a --- /dev/null +++ b/templates/webcommon.py @@ -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)