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

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

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

Thread-Safety

Currently MPDClient is NOT thread-safe. As it use a socket internally, 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 between the client and the server is 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.