Hi all,
this was already posted on Turbogears mailing list but here is more
appropriate,
is anyone using Bonjour/Zeroconf in Paste?
I found useful for testing purposes in Turbogears.
I googled around and haven't found anything so i grabbed some code
from turbogears/startup.py
and adapted to Paste httpserver.py.
Applied the patch just add bonjour=True do [server:main] section of
config, if you want you can add also server_name and
server_description to the same section of the ini file.
Michele.
diff against Paste-1.6:
--- httpserver.py.old 2008-03-31 23:21:09.000000000 +0200
+++ httpserver.py 2008-06-06 01:55:13.000000000 +0200
@@ -1122,12 +1122,54 @@
Raised to tell the server to really exit (SystemExit is normally
caught)
"""
+
+DNS_SD_PID = None
+
+def start_bonjour(host=None, port=None, server_name=None,
server_description=None):
+ global DNS_SD_PID
+ if DNS_SD_PID:
+ return
+
+ if host=='0.0.0.0': host=''
+ if not server_name: server_name='Paste'
+ if not server_description: server_description='port '+str(port)
+ name = server_name + ": " + server_description
+ type = "_http._tcp"
+ port = str(port)
+ cmds = [['/usr/bin/avahi-publish-service', ["-H", host, name,
type, port]],
+ ['/usr/bin/dns-sd', ['-R', name, type, "."+host, port,
"path=/"]]]
+
+ for cmd, args in cmds:
+ # TODO:. This check is flawed. If one has both services
installed and
+ # avahi isn't the one running, then this won't work. We
should either
+ # try registering with both or checking what service is
running and use
+ # that. Program availability on the filesystem was never
enough...
+ if os.path.exists(cmd):
+ DNS_SD_PID = os.spawnv(os.P_NOWAIT, cmd, [cmd]+args)
+ atexit.register(stop_bonjour)
+ break
+
+
+def stop_bonjour():
+ import signal
+ if not DNS_SD_PID:
+ return
+ try:
+ os.kill(DNS_SD_PID, signal.SIGTERM)
+ except OSError:
+ pass
+
+
+class DaemonizeException(Exception):
+ pass
+
+
def serve(application, host=None, port=None, handler=None,
ssl_pem=None,
ssl_context=None, server_version=None,
protocol_version=None,
start_loop=True, daemon_threads=None, socket_timeout=None,
use_threadpool=None, threadpool_workers=10,
- threadpool_options=None):
+ threadpool_options=None,bonjour=None,server_name=None,
server_description=None):
"""
Serves your ``application`` over HTTP(S) via WSGI interface
@@ -1244,7 +1286,8 @@
else:
port = 8080
server_address = (host, int(port))
-
+ if bonjour:
+ start_bonjour(host=host,port=port,server_name=server_name,
server_description=server_description)
if not handler:
handler = WSGIHandler
if server_version:
_______________________________________________
Paste-users mailing list
[email protected]
http://webwareforpython.org/cgi-bin/mailman/listinfo/paste-users