~mandel/bacchus/rhythmbox-client

« back to all changes in this revision

Viewing changes to server-ubuntu/bacchus_server/serve.py

  • Committer: C Miller
  • Date: 2013-10-17 21:03:00 UTC
  • Revision ID: bzrdev@chad.org-20131017210300-wusg3oamogo1c1d4
Abandon Python. Use Go.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
 
3
 
SERVICE_NAME = "Bacchinalia"
4
 
SERVICE_TYPE1 = "_bacchus._tcp"
5
 
SERVICE_TYPE2 = "_http._tcp"
6
 
 
7
 
# Effing Avahi is still Python2 only.
8
 
import django
9
 
import dbus
10
 
import os
11
 
 
12
 
class ZeroconfAdvertizement:
13
 
 
14
 
    def __init__(self, port, domain="", host="", text=u"".encode("UTF8")):
15
 
        self.name = SERVICE_NAME
16
 
        self.stypes = (SERVICE_TYPE1, SERVICE_TYPE2)
17
 
        self.domain = domain
18
 
        self.host = host
19
 
        self.port = port
20
 
        self.text = text
21
 
 
22
 
    def __enter__(self):
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')
30
 
        return self.group
31
 
 
32
 
    def __exit__(self, type, value, traceback):
33
 
        self.group.Reset(dbus_interface='org.freedesktop.Avahi.EntryGroup')
34
 
        del self.group
35
 
 
36
 
 
37
 
if __name__ == "__main__":
38
 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bacchus_server.settings")
39
 
    from django.core.management import call_command
40
 
    port = 3000
41
 
    with ZeroconfAdvertizement(port):
42
 
        call_command("testserver", "bacchus_server", addrport="0.0.0.0:%d" % (port,))