X-Git-Url: http://git.grml.org/?p=grml-scripts.git;a=blobdiff_plain;f=usr_bin%2Fnotifyd.py;fp=usr_bin%2Fnotifyd.py;h=ec50fce8a6539b85524d97066586d962746073e1;hp=312c9b0ad9b8b9df7669678ce64bed39ca8904ae;hb=54e2502b301f2220e49e619b263be0e015d807cc;hpb=29bfc533ade39978f73afaecf01062151e43e267 diff --git a/usr_bin/notifyd.py b/usr_bin/notifyd.py index 312c9b0..ec50fce 100755 --- a/usr_bin/notifyd.py +++ b/usr_bin/notifyd.py @@ -29,7 +29,7 @@ host = "127.0.0.1" port = 8901 logfile = os.path.expanduser("~/.event.log") osdparams = "-p bottom --color=red --delay=4 --age=4 " \ - "--font=\-\*\-helvetica\-medium\-r\-\*\-\*\-34\-\*\-\*\-\*\-\*\-\*\-\*\-15 " \ + "--font=\-\*\-helvetica\-medium\-r\-\*\-\*\-34\-\*\-\*\-\*\-\*\-\*\-\*\-15 " \ # noqa: W605,E501 "--offset=100 --shadow=0 --lines=5 --align=right --indent=100" actions = ( (".*", [log], True), @@ -40,78 +40,101 @@ actions = ( """ +import getopt +import logging import os -import sys import re -import string import socket -import logging -import getopt +import string import subprocess +import sys -default_hostname = 'localhost' +default_hostname = "localhost" default_port = 1234 -default_osd_params = osdparams = "-p bottom --color=red --delay=4 --age=4 " \ - "--font=\-\*\-helvetica\-medium\-r\-\*\-\*\-34\-\*\-\*\-\*\-\*\-\*\-\*\-15 " \ - "--offset=100 --shadow=0 --lines=5 --align=right --indent=100" +default_osd_params = osdparams = ( + "-p bottom --color=red --delay=4 --age=4 " + "--font=\-\*\-helvetica\-medium\-r\-\*\-\*\-34\-\*\-\*\-\*\-\*\-\*\-\*\-15 " # noqa: W605,E501 + "--offset=100 --shadow=0 --lines=5 --align=right --indent=100" +) default_logfile = None def play(sound_file): def play_wrapper(msg): - with open(os.devnull, 'w') as devnull: - subprocess.Popen(['/usr/bin/aplay', sound_file], stderr=devnull) + with open(os.devnull, "w") as devnull: + subprocess.Popen(["/usr/bin/aplay", sound_file], stderr=devnull) + return play_wrapper + def execute(command): def command_wrapper(msg): - subprocess.call(command % dict(msg = msg)) + subprocess.call(command % dict(msg=msg)) + return command_wrapper + def osd(msg): osdcmd = "/usr/bin/osd_cat" - osdpipe = os.popen("%s %s" % (osdcmd, osdparams), 'w') + osdpipe = os.popen("%s %s" % (osdcmd, osdparams), "w") osdpipe.write(msg) osdpipe.close() + def libnotify(msg): try: import dbus except ImportError: - sys.stderr.write('Please install python-dbus\n') + sys.stderr.write("Please install python-dbus\n") raise SystemExit(1) bus = dbus.SessionBus() - notifyService = bus.get_object("org.freedesktop.Notifications", '/org/freedesktop/Notifications') - interface = dbus.Interface(notifyService, 'org.freedesktop.Notifications') + notifyService = bus.get_object( + "org.freedesktop.Notifications", "/org/freedesktop/Notifications" + ) + interface = dbus.Interface(notifyService, "org.freedesktop.Notifications") - message, title = (':' + msg).split(':')[::-1][0:2] + message, title = (":" + msg).split(":")[::-1][0:2] if not title: title, message = message, title - interface.Notify('notify-server', 0, 'notification-message-im', title, message, [], {'x-canonical-append':'allowed'}, -1) + interface.Notify( + "notify-server", + 0, + "notification-message-im", + title, + message, + [], + {"x-canonical-append": "allowed"}, + -1, + ) + def log(msg): if logger: logger.info(msg) + def syntax(): - print "osd_server.py [options]" - print " options:" - print " -h --help print this message" - print " -H --host host of the osd server (def: " + default_hostname + ")" - print " -P --port port of the osd server (def: " + str(default_port) + ")" - print " -l --log log file ('-' logs to stdout)" - - -env = { 'play' : play, - 'execute' : execute, - 'osd' : osd, - 'libnotify' : libnotify, - 'log' : log, - 'host' : default_hostname, - 'port' : default_port, - 'logfile' : default_logfile, - } + print("osd_server.py [options]") + print(" options:") + print(" -h --help print this message") + print(" -H --host host of the osd server (def: " + default_hostname + ")") + print( + " -P --port port of the osd server (def: " + str(default_port) + ")" + ) + print(" -l --log log file ('-' logs to stdout)") + + +env = { + "play": play, + "execute": execute, + "osd": osd, + "libnotify": libnotify, + "log": log, + "host": default_hostname, + "port": default_port, + "logfile": default_logfile, +} default_actions = ( (".*", [log], True), @@ -122,12 +145,22 @@ default_actions = ( default_bind = (default_hostname, default_port) try: - execfile(os.path.expanduser('~/.notifyd.conf'), {}, env) + exec( + compile( + open(os.path.expanduser("~/.notifyd.conf"), "rb").read(), + os.path.expanduser("~/.notifyd.conf"), + "exec", + ), + {}, + env, + ) except IOError: pass try: - opts, args = getopt.getopt(sys.argv[1:], "hH:P:l:", ["help", "host=", "port=", "log="]) + opts, args = getopt.getopt( + sys.argv[1:], "hH:P:l:", ["help", "host=", "port=", "log="] + ) except getopt.GetoptError: syntax() sys.exit(2) @@ -137,23 +170,23 @@ for opt, arg in opts: syntax() sys.exit(3) elif opt in ("-H", "--host"): - env['host'] = arg + env["host"] = arg elif opt in ("-P", "--port"): - env['port'] = int(arg) + env["port"] = int(arg) elif opt in ("-l", "--log"): - env['logfile'] = arg + env["logfile"] = arg -actions = env.get('actions', default_actions) -logfile_name = env.get('logfile') -logfile_format = env.get('logformat', '%(asctime)s %(message)s') -bind_address = (env['host'], env['port']) -osd_params = env.get('osdparams', default_osd_params) +actions = env.get("actions", default_actions) +logfile_name = env.get("logfile") +logfile_format = env.get("logformat", "%(asctime)s %(message)s") +bind_address = (env["host"], env["port"]) +osd_params = env.get("osdparams", default_osd_params) if logfile_name: - logger = logging.getLogger('notify_server') + logger = logging.getLogger("notify_server") lformatter = logging.Formatter(logfile_format) - if logfile_name not in ('', '-'): + if logfile_name not in ("", "-"): lfh = logging.FileHandler(logfile_name) lfh.setFormatter(lformatter) logger.addHandler(lfh) @@ -165,23 +198,25 @@ if logfile_name: else: logger = None -l = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -l.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) -l.bind(bind_address) -l.listen(5) +listen = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +listen.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) +listen.bind(bind_address) +listen.listen(5) + def filter_char(c): - return c in string.printable + "äöüßÄÖÜ" and c or '_' + return c in string.printable + "äöüßÄÖÜ" and c or "_" + while 1: try: - (con, addr) = l.accept() - except: + (con, addr) = listen.accept() + except OSError: continue data = con.recv(50).strip() con.close() - log = ''.join(filter_char(c) for c in data) + log = "".join(filter_char(c) for c in data) for pattern, handlers, cont in actions: if re.match(pattern, log):