]> kaliko git repositories - mpd-goodies.git/blobdiff - lib/mpdutils.py
* add new goodies fadeio.py (sleep command)
[mpd-goodies.git] / lib / mpdutils.py
diff --git a/lib/mpdutils.py b/lib/mpdutils.py
new file mode 100644 (file)
index 0000000..a64d239
--- /dev/null
@@ -0,0 +1,107 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2009 Efrim <efrim@azylum.org> {{{
+#
+#   This program is free software: you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation, either version 3 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+#  }}}
+
+import sys
+
+from os import environ
+from socket import error as SocketError
+
+try:
+    from mpd import (MPDClient, CommandError)
+except ImportError, err:
+    print 'ERROR: "%s"\n\nPlease install python-mpd module.\n' % err
+    sys.exit(1)
+
+
+def get_mpd_environ():#{{{
+    """
+    Retrieve MPD env. var.
+    """
+    con_id = dict({'host': 'localhost',
+                   'port': int(6600)})
+    passwd = None
+    mpd_host_env = environ.get('MPD_HOST')
+    if mpd_host_env:
+        # If password is set:
+        # mpd_host_env = ['pass', 'host'] because MPD_HOST=pass@host
+        mpd_host_env = mpd_host_env.split('@')
+        mpd_host_env.reverse()
+        con_id.update({'host': mpd_host_env[0]})
+        if len(mpd_host_env) > 1:
+            print 'passwd set in MPD_HOST'
+            passwd = mpd_host_env[1]
+
+    con_id.update({'port': int(environ.get('MPD_PORT', con_id.get('port')))})
+    return (con_id, passwd)#}}}
+
+
+def mpdConnect(client, con_id):#{{{
+    """
+    Simple wrapper to connect MPD.
+    """
+    try:
+        client.connect(**con_id)
+    except SocketError:
+        return False
+    return True#}}}
+
+
+def mpdAuth(client, secret):#{{{
+    """
+    Authenticate
+    """
+    try:
+        client.password(secret)
+    except CommandError:
+        return False
+    return True#}}}
+
+
+def mconnect():
+    """"""
+    ## get connection id
+    con_id, passwd = get_mpd_environ()
+    ## MPD object instance
+    client = MPDClient()
+    if mpdConnect(client, con_id):
+        #print 'Got connected!'
+        True
+    else:
+        print 'ERROR: fail to connect MPD server.'
+        sys.exit(1)
+
+    ## Auth if password is set non False
+    if passwd:
+        if mpdAuth(client, passwd):
+            #print 'Pass auth!'
+            True
+        else:
+            print 'ERROR: fail trying to pass auth. Check password?'
+            client.disconnect()
+            sys.exit(1)
+    return client
+
+# Script starts here
+if __name__ == '__main__':
+    cli = mconnect()
+    cli.disconnect()
+
+# VIM MODLINE
+# vim: ai ts=4 sw=4 sts=4 expandtab
+