diff --git a/src/scriptform b/src/scriptform index 4f1cfbf..ddf590b 100755 --- a/src/scriptform +++ b/src/scriptform @@ -201,20 +201,18 @@ class WebSrv: """ Very basic web server. """ - def __init__(self, app_class, listen_addr='', listen_port=80): - WebAppHandler.app_class = app_class + def __init__(self, request_handler, listen_addr='', listen_port=80): httpd = BaseHTTPServer.HTTPServer((listen_addr, listen_port), - WebAppHandler) + request_handler) httpd.serve_forever() class WebAppHandler(BaseHTTPRequestHandler): """ - Basic web server request handler. Handles GET and POST requests. Uses - self.app_class (set by WebSrv) to dispatch GET and POST requests to a - custom class. It looks for a method with the name of the request path in - self.app_class and then dispatches the request to that method. If no path - is set, it dispatches to the 'index' or 'default' method. + Basic web server request handler. Handles GET and POST requests. This class + should be extended with methods (starting with 'h_') to handle the actual + requests. If no path is set, it dispatches to the 'index' or 'default' + method. """ def do_GET(self): self.call(*self.parse(self.path)) @@ -241,14 +239,15 @@ class WebAppHandler(BaseHTTPRequestHandler): Find a method to call on self.app_class based on `path` and call it. """ response_code = 200 + method_name = 'h_{}'.format(path) try: - if hasattr(self.app_class, path) and \ - callable(getattr(self.app_class, path)): - out = getattr(self.app_class, path)(**params) - elif path == '' and hasattr(self.app_class, 'index'): - out = self.app_class.index(**params) - elif hasattr(self.app_class, 'default'): - out = self.app_class.default(**params) + if hasattr(self, method_name) and \ + callable(getattr(self, method_name)): + out = getattr(self, method_name)(**params) + elif path == '' and hasattr(self, 'index'): + out = self.index(**params) + elif hasattr(self, 'default'): + out = self.default(**params) else: response_code = 404 out = 'Not Found' @@ -261,18 +260,14 @@ class WebAppHandler(BaseHTTPRequestHandler): self.wfile.write(out) -class ScriptFormWebApp: +class ScriptFormWebApp(WebAppHandler): """ This class is a request handler for WebSrv. """ - def __init__(self, vitaform, callbacks): - self.vitaform = vitaform - self.callbacks = callbacks - def index(self): - return self.list() + return self.h_list() - def list(self): + def h_list(self): h_form_list = [] for form_name, form_def in self.vitaform.forms.items(): h_form_list.append(''' @@ -298,7 +293,7 @@ class ScriptFormWebApp: footer=html_footer, form_list=''.join(h_form_list)) - def form(self, form_name): + def h_form(self, form_name): field_tpl = { "string": '', "number": '', @@ -387,7 +382,7 @@ class ScriptFormWebApp: submit_title=form.submit_title ) - def submit(self, form_values): + def h_submit(self, form_values): form_name = form_values.getfirst('form_name', None) # Validate the form values @@ -481,9 +476,10 @@ class ScriptForm: return self.forms[form_name] def run(self, listen_addr='0.0.0.0', listen_port=80): - vitaform = self - webapp = ScriptFormWebApp(vitaform, self.callbacks) - WebSrv(webapp, listen_addr=listen_addr, listen_port=listen_port) + ScriptFormWebApp.vitaform = self + ScriptFormWebApp.callbacks = self.callbacks + #webapp = ScriptFormWebApp(vitaform, self.callbacks) + WebSrv(ScriptFormWebApp, listen_addr=listen_addr, listen_port=listen_port) if __name__ == "__main__":