Added docstrings for DBusMio and others.
[cnetworkmanager.git] / dbusclient / monitor.py
blob74a9a2488022607b8d41623d33aaec8bf567c27b
1 import string
3 class Monitor(object):
4 """A Base for printing signals on the bus"""
6 def __init__(self, bus):
7 self.bus = bus
9 self.amap = {}
10 self.specific = {}
11 self.bus.add_signal_receiver(self.abbr_h,
12 path_keyword="path",
13 interface_keyword="interface",
14 member_keyword="member")
16 def ignore(self, dbus_interface, signal_name):
17 self.watch(self.null_h, dbus_interface, signal_name)
19 def null_h(self, *args, **kwargs):
20 pass
22 def watch(self, handler, dbus_interface, signal_name):
23 self.specific[dbus_interface +"."+ signal_name] = True
24 self.bus.add_signal_receiver(handler,
25 dbus_interface=dbus_interface,
26 signal_name=signal_name,
27 path_keyword="path")
29 def abbr_h(self, *args, **kwargs):
30 ifc = kwargs["interface"]
31 sig = kwargs["member"]
32 if self.specific.has_key(ifc +"."+ sig):
33 return
35 opath = kwargs["path"]
36 line = "SIG %s: %s.%s%s" % (self.abbrev(opath,"/"),
37 self.abbrev(ifc,"."),
38 sig, args)
39 print line
41 def abbrev(self, s, sep):
42 words = s.split(sep)
43 words = map (self.a1, words)
44 result = sep.join(words)
45 if self.amap.has_key(result):
46 if self.amap[result] != s:
47 print "ABBR COLLISION %s was %s now %s" % (result, self.amap[result], s)
48 else:
49 print "ABBR %s is %s" % (result, s)
50 self.amap[result] = s
51 return result
53 def a1(self, s):
54 if s == "":
55 return ""
56 #print "#A", s
57 # first char, delete lowercase and _ from the rest
58 return s[0] + s[1:].translate(string.maketrans("", ""),
59 string.lowercase + "_")