Merge remote-tracking branch 'origin/github/pr/11'
[grml-scripts.git] / usr_bin / notifyd.py
index 312c9b0..ec50fce 100755 (executable)
@@ -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):