Future Compatible

New commands or special handling of commands can be easily implemented. Use add_command() or remove_command() to modify the commands of the MPDClient class and all its instances.:

def fetch_cover(client):
    """"Take a MPDClient instance as its arguments and return mimetype and image"""
    # this command may come in the future.
    pass

self.client.add_command("get_cover", fetch_cover)
# you can then use:
self.client.fetch_cover()

# remove the command, because it doesn't exist already.
self.client.remove_command("get_cover")

Thread-Safety

Currently MPDClient is NOT thread-safe. As it use a socket internaly, only one thread can send or receive at the time.

But MPDClient can be easily extended to be thread-safe using locks. Take a look at examples/locking.py for further informations.

Unicode Handling

To quote the mpd protocol documentation:

> All data to be sent between the client and server must be encoded in UTF-8.

With Python 3:

In Python 3, Unicode string is the default string type. So just pass these strings as arguments for MPD commands and python-mpd2 will also return such Unicode string.

With Python 2.x

For backward compatibility with python-mpd, when running with Python 2.x, python-mpd2 accepts both Unicode strings (ex. u”♥”) and UTF-8 encoded strings (ex. “♥”).

In order for MPDClient to return Unicode strings with Python 2, create the instance with the use_unicode parameter set to True.

Using Unicode strings should be prefered as it is done transparently by the library for you, and makes the transition to Python 3 easier:

>>> import mpd
>>> client = MPDClient(use_unicode=True)
>>> client.urlhandlers()[0]
u'http'
>>> client.use_unicode = False # Can be switched back later
>>> client.urlhandlers()[0]
'http'

Using this option in Python 3 doesn’t have any effect.