migrate-dbus-scripts.py
authorKonstantin Stepanov <kstep@p-nut.info>
Tue, 21 Dec 2010 21:38:46 +0000 (23:38 +0200)
committerKonstantin Stepanov <kstep@p-nut.info>
Tue, 21 Dec 2010 23:44:26 +0000 (01:44 +0200)
migrate-dbus-scripts.py [new file with mode: 0755]

diff --git a/migrate-dbus-scripts.py b/migrate-dbus-scripts.py
new file mode 100755 (executable)
index 0000000..b543c5a
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+from __future__ import with_statement
+import os, sys
+
+if '-h' in sys.argv or '--help' in sys.argv:
+    print '''
+%(name)s [ dbus-scripts-dir ] [ dbuscrontab-dir ]
+
+    Convert all files from dbus-scripts-dir from
+    dbus-scripts config format to dbuscron config
+    format and put them under the same names into
+    dbuscrontab-dir.
+
+    If omitted, dbus-scripts-dir defaults to
+    `/etc/dbus-scripts.d', dbuscrontab-dir
+    defaults to `/etc/dbuscrontab.d'.
+''' % dict(name=sys.argv[0])
+    os._exit(0)
+
+try:
+    dbus_scripts_dir = sys.argv[1]
+except IndexError:
+    dbus_scripts_dir = '/etc/dbus-scripts.d'
+
+try:
+    dbuscron_dir = sys.argv[2]
+except IndexError:
+    dbuscron_dir = '/etc/dbuscrontab.d'
+
+for fn in os.listdir(dbus_scripts_dir):
+    fnam = os.path.join(dbus_scripts_dir, fn)
+    if not os.path.isfile(fnam):
+        continue
+
+    fout = os.path.join(dbuscron_dir, fn)
+
+    with open(fnam, 'rb') as f:
+        with open(fout, 'wb') as o:
+            for line in f:
+                line = line.strip()
+                if not line or line.startswith('#'):
+                    continue
+
+                cmd, src, dest, iface, meth, args = line.split(' ', 5)
+                args = args.replace(' ',';')
+                opts = dict(
+                        cmd=cmd,
+                        src=src,
+                        dest=dest,
+                        iface=iface,
+                        meth=meth,
+                        args=args)
+                # bus type sender interface path member destination args command
+                print >> o, 'S signal,method_call %(src)s %(iface)s * %(meth)s %(dest)s %(args)s %(cmd)s' % opts
+