-#! /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 <phd@phdru.name>"
-__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
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')]
try:
commands[command]()
- except:
+ except Exception:
status = '500 Error'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
start_response(status, response_headers)
return ['Ok\n']
+
force()
httpd = make_server(host, port, app, server_class=QuitWSGIServer)
httpd.serve_forever()