X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;ds=sidebyside;f=xsetbg-wsgi.py;h=f4b78737100232015282fd358a2b963ca7a49419;hb=HEAD;hp=d7815a9ca3a18482a8e7aad98a929d4b1bef521f;hpb=68a81dfa66254e7176b29854a86efd29b321a0ef;p=xsetbg.git diff --git a/xsetbg-wsgi.py b/xsetbg-wsgi.py index d7815a9..aad53ee 100755 --- a/xsetbg-wsgi.py +++ b/xsetbg-wsgi.py @@ -1,47 +1,55 @@ -#! /usr/bin/env python +#! /usr/bin/env python3 """XSetBg (WSGI version) """ -__version__ = "$Revision$"[11:-2] -__revision__ = "$Id$"[5:-2] -__date__ = "$Date$"[7:-2] - -__author__ = "Oleg Broytman " -__copyright__ = "Copyright (C) 2000-2010 PhiloSoft Design" -__license__ = "GNU GPL" - - +import sys from wsgiref import simple_server from wsgiref.handlers import SimpleHandler from wsgiref.simple_server import WSGIServer, make_server -simple_server.ServerHandler = SimpleHandler # Stop logging to stdout -from xsetbg import host, port, change as _change +from xsetbg_conf import xsetbg_conf +from xsetbg import change as _change + +simple_server.ServerHandler = SimpleHandler # Stop logging to stdout + +# get httpd settings from config +if xsetbg_conf.has_option("httpd", "host"): + host = xsetbg_conf.get("httpd", "host") +else: + host = 'localhost' + +if xsetbg_conf.has_option("httpd", "port"): + port = xsetbg_conf.getint("httpd", "port") +else: + def error(error_str): + sys.exit("%s: Error: %s\n" % (sys.argv[0], error_str)) + error("Config must specify a port to listen. Abort.") + + +commands = {} def published(func): - func._wsgi_published = True + commands[func.__name__] = func return func + @published def change(force=False): _change() + @published def force(): _change(force=True) + @published def stop(): QuitWSGIServer._quit_flag = True -g = globals().copy() -commands = dict([(name, g[name]) for name in g - if getattr(g[name], '_wsgi_published', False)]) -del g - class QuitWSGIServer(WSGIServer): _quit_flag = False @@ -49,8 +57,9 @@ class QuitWSGIServer(WSGIServer): while not self._quit_flag: self.handle_request() + def app(env, start_response): - command = env['PATH_INFO'][1:] # Remove the leading slash + command = env['PATH_INFO'][1:] # Remove the leading slash if command not in commands: status = '404 Not found' response_headers = [('Content-type', 'text/plain')] @@ -59,7 +68,7 @@ def app(env, start_response): try: commands[command]() - except: + except Exception: status = '500 Error' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) @@ -70,6 +79,7 @@ def app(env, start_response): start_response(status, response_headers) return ['Ok\n'] + force() httpd = make_server(host, port, app, server_class=QuitWSGIServer) httpd.serve_forever()