*********** Development *********** Development of Mopidy is coordinated through the IRC channel ``#mopidy`` at ``irc.freenode.net`` and through `GitHub `_. Scope ===== To limit scope, we will start by implementing an MPD server which only supports Spotify, and not playback of files from disk. We will make Mopidy modular, so we can extend it with other backends in the future, like file playback and other online music services such as Last.fm. Running tests ============= To run tests, you need a couple of dependiencies. Some can be installed through Debian/Ubuntu package management:: sudo aptitude install python-coverage The rest can be installed using pip:: sudo aptitude install python-pip python-setuptools bzr pip install -r test-requirements.txt Then, to run all tests:: python tests Music Player Daemon (MPD) ========================= The `MPD protocol documentation `_ is a useful resource. It is rather incomplete with regards to data formats, both for requests and responses. Thus we have to talk a great deal with the the original `MPD server `_ using telnet to get the details we need to implement our own MPD server which is compatible with the numerous existing `MPD clients `_. spytify ======= `spytify `_ is the Python bindings for the open source `despotify `_ library. It got no documentation to speak of, but a couple of examples are available. Issues ------ A list of the issues we currently experience with spytify, both bugs and features we wished was there. * r483: Track lookup support. Possibly fixed in r497. To reproduce:: >>> import spytify >>> s = spytify.Spytify('alice', 'secret') >>> s.lookup('spotify:track:1mr3616BzLdhXfJmLmRsO8') --------------------------------------------------------------------------- SpytifyError Traceback (most recent call last) /home/jodal/ in () /usr/local/lib/python2.6/dist-packages/spytify.so in spytify.Spytify.lookup (src/spytify.c:7914)() SpytifyError: URI specifies invalid type: track * r483: Error when accessing an album through an artist. To reproduce:: >>> import spytify >>> s = spytify.Spytify('alice', 'secret') >>> result = s.search('Gorillaz') >>> artist = result.playlist.tracks[0].artists[0] >>> artist >>> artist.albums ERROR: An unexpected error occurred while tokenizing input The following traceback may be corrupted or invalid The error message is: ('EOF in multi-line statement', (1423, 0)) ERROR: An unexpected error occurred while tokenizing input The following traceback may be corrupted or invalid The error message is: ('EOF in multi-line statement', (1455, 0)) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) /home/jodal/ in () /usr/local/lib/python2.6/dist-packages/spytify.so in spytify.Artist.albums.__get__ (src/spytify.c:4867)() /usr/local/lib/python2.6/dist-packages/spytify.so in spytify.Artist.get_full_data (src/spytify.c:4539)() TypeError: Cannot convert spytify.AlbumDataFull to spytify.ArtistDataFull * r483: Sometimes segfaults when traversing stored playlists, their tracks, artists, and albums. As it is not predictable, it may be a concurrency issue. * r483: Segfaults when looking up playlists, both your own lists and other peoples shared lists. To reproduce:: >>> import spytify >>> s = spytify.Spytify('alice', 'secret') >>> s.lookup('spotify:user:klette:playlist:5rOGYPwwKqbAcVX8bW4k5V') Segmentation fault * r497: spytify fails on ``make`` because the despotify API has changed:: src/spytify.c: In function ‘__pyx_pf_7spytify_7Spytify___init__’: src/spytify.c:7325: error: too few arguments to function ‘despotify_init_client’ pyspotify ========= `pyspotify `_ is the Python bindings for the official Spotify library, libspotify. It got no documentation to speak of, but multiple examples are available. Issues ------ A list of the issues we currently experience with pyspotify, both bugs and features we wished was there. * None at the moment.