--- /dev/null
+# -*- 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(host=None, port=None):#{{{
+ """"""
+ ## get connection id from ENV VAR
+ con_id, passwd = get_mpd_environ()
+ if host:
+ con_id.update({'host': host})
+ if port:
+ con_id.update({'port': port})
+ ## 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#}}}
+
+def collapse_tags(value):
+ if isinstance(value, list):
+ #self.__dict__[tag] = ", ".join(set(value))
+ self.collapse_tags_bool = True
+ return ', '.join(set(value))
+ return value#}}}
+
+# Script starts here
+if __name__ == '__main__':
+ cli = mconnect()
+ cli.disconnect()
+
+# VIM MODLINE
+# vim: ai ts=4 sw=4 sts=4 expandtab
+