Separated the client classes.
[cnetworkmanager.git] / monitor.py
blob5e6013603ff8d9f8302c5f28663182b8ea9f67b5
1 import string
3 class MonitorBase:
4 def __init__(self, bus):
5 self.bus = bus
7 self.amap = {}
8 self.specific = {}
9 self.bus.add_signal_receiver(self.abbr_h,
10 path_keyword="path",
11 interface_keyword="interface",
12 member_keyword="member")
14 def ignore(self, dbus_interface, signal_name):
15 self.watch(self.null_h, dbus_interface, signal_name)
17 def null_h(self, *args, **kwargs):
18 pass
20 def watch(self, handler, dbus_interface, signal_name):
21 self.specific[dbus_interface +"."+ signal_name] = True
22 self.bus.add_signal_receiver(handler,
23 dbus_interface=dbus_interface,
24 signal_name=signal_name,
25 path_keyword="path")
27 def abbr_h(self, *args, **kwargs):
28 ifc = kwargs["interface"]
29 sig = kwargs["member"]
30 if self.specific.has_key(ifc +"."+ sig):
31 return
33 opath = kwargs["path"]
34 line = "SIG %s: %s.%s%s" % (self.abbrev(opath,"/"),
35 self.abbrev(ifc,"."),
36 sig, args)
37 print line
39 def abbrev(self, s, sep):
40 words = s.split(sep)
41 words = map (self.a1, words)
42 result = sep.join(words)
43 if self.amap.has_key(result):
44 if self.amap[result] != s:
45 print "ABBR COLLISION %s was %s now %s" % (result, self.amap[result], s)
46 else:
47 print "ABBR %s is %s" % (result, s)
48 self.amap[result] = s
49 return result
51 def a1(self, s):
52 if s == "":
53 return ""
54 #print "#A", s
55 # first char, delete lowercase and _ from the rest
56 return s[0] + s[1:].translate(string.maketrans("", ""),
57 string.lowercase + "_")