3
SERVICE_NAME = "Bacchinalia"
4
SERVICE_TYPE1 = "_bacchus._tcp"
5
SERVICE_TYPE2 = "_http._tcp"
7
# Effing Avahi is still Python2 only.
12
class ZeroconfAdvertizement:
14
def __init__(self, port, domain="", host="", text=u"".encode("UTF8")):
15
self.name = SERVICE_NAME
16
self.stypes = (SERVICE_TYPE1, SERVICE_TYPE2)
23
assert not hasattr(self, "group")
24
system_bus = dbus.SystemBus()
25
avahi = system_bus.get_object('org.freedesktop.Avahi', '/')
26
self.group = system_bus.get_object('org.freedesktop.Avahi', avahi.EntryGroupNew(dbus_interface='org.freedesktop.Avahi.Server'))
27
for service_type in self.stypes:
28
self.group.AddService(dbus.Int32(-1), dbus.Int32(-1), dbus.UInt32(0), self.name, service_type, self.domain, self.host, dbus.UInt16(self.port), self.text, dbus_interface='org.freedesktop.Avahi.EntryGroup')
29
self.group.Commit(dbus_interface='org.freedesktop.Avahi.EntryGroup')
32
def __exit__(self, type, value, traceback):
33
self.group.Reset(dbus_interface='org.freedesktop.Avahi.EntryGroup')
37
if __name__ == "__main__":
38
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bacchus_server.settings")
39
from django.core.management import call_command
41
with ZeroconfAdvertizement(port):
42
call_command("testserver", "bacchus_server", addrport="0.0.0.0:%d" % (port,))