Skip to main content

MopidyAPI

Project description

MopidyAPI

MopidyAPI is a Python (3.6+) library for interacting with Mopidy via its JSON RPC API.

MopidyAPI uses HTTP to call RPC methods, and websockets to listen for events.

It is compatible with all functions present in Mopidy 2.2.

Installation

pip install mopidyapi

Usage

MopidyAPI contains functions mapping to each of the Mopidy v2.2 core API functions.

For example mopidy.core.PlaybackController.pause() in the documentation maps to MopidyAPI.playback.pause() here.

Quick example

>>> from mopidyapi import MopidyAPI
>>> m = MopidyAPI()
>>> tracks = m.tracklist.get_tracks()
>>> tracks[0].name

	'I've Seen Footage'

>>> tracks[0].artists

	[Artist(name='Death Grips', uri='spotify:artist:5RADpgYLOuS2ZxDq7ggYYH')]

>>> tracks[0]._fields

	('album',
	 'name',
	 'disc_no',
	 'uri',
	 'length',
	 'track_no',
	 'artists',
	 'date',
	 'bitrate')

Connecting to Mopidy

Instantiate a MopidyAPI object. By default, it connects to Mopidy at localhost:6680, so you might not need to give the constructor any arguments.

from mopidyapi import MopidyAPI
m = MopidyAPI(host='my.mopidy.host.com', port=6680)

You can also pass use_websockets=False, to prevent starting the websocket listener, which runs in a separate thread. However, event listening (described below) won't work with this set.

Calling Mopidy functions

All of the functions described in the Mopidy 2.2 core API documentation are available in MopidyAPI.

Functions named in the Mopidy docs as core.<ControllerName>Controller.<functionname>(), will be under the name MopidyAPI.<controllername>.<functionname>()

For example, you can pause the music by calling m.playback.pause(), or you could add a song by calling e.g. m.tracklist.add(artist='Rick Astley')(where m = MopidyAPI()).

Functions will return Python native namedtuple representations of the returned data.

Event listening

You can use function decorators to mark specific functions to be called when an event arrives. See example below.

The events used are described in Mopidy's core events documentation.

from mopidyapi import MopidyAPI
m = MopidyAPI()

@m.on_event('volume_changed')
def print_volume(event):
    print(f"Volume changed to: {event.volume}")

@m.on_event('track_playback_started')
def print_newtracks(event):
    print(f"Started playing track: {track.}")

Like with function calls, the events passed are namedtuples.

Note on the choice of namedtuples

Why namedtuples?

The choice of namedtuples might seem unusual (or even inconvenient), but they have a number of advantages over dicts for this application:

1. Less verbose than dicts.

event.tl_track.track.album.name is shorter and easier on the eyes than event['tl_track']['track']['album']['name']

2. They print much more neatly.

Artist(name='Death Grips', uri='spotify:artist:5RADpgYLOuS2ZxDq7ggYYH') is much better than {'name': 'Death Grips', 'uri': 'spotify:artist:5RADpgYLOuS2ZxDq7ggYYH'}.

3. namedtuples accurately represent the immutable nature of the data.

Being allowed to mutate the data coming from Mopidy might give one the idea that this would change the data inside Mopidy, which is obviously not the case.

...but, I know dicts!

Okay, so if you need .keys(), you can use ._fields() instead, and if you absolutely need a dict, you can use ._asdict(), will return an actual dict.

Contributing

Please do tell me bout bugs via the github issue tracker.

Also feel free to write, if you're just in the mood to help me improve this project. I don't bite :)

License

This project is licensed under the GPLv3. See the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mopidyapi-0.4.1.tar.gz (28.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mopidyapi-0.4.1-py3-none-any.whl (76.9 kB view details)

Uploaded Python 3

File details

Details for the file mopidyapi-0.4.1.tar.gz.

File metadata

  • Download URL: mopidyapi-0.4.1.tar.gz
  • Upload date:
  • Size: 28.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.22.0

File hashes

Hashes for mopidyapi-0.4.1.tar.gz
Algorithm Hash digest
SHA256 62b70cede460fc8e351e6702553a14a4390b7a76c48cf679b3b418d76c970f69
MD5 83e5ca2a31a1610c63e03b5535138a58
BLAKE2b-256 294d86122b4a33dee0311e8a4160d94bef69c2a6f1620c691d400b2a21b158bc

See more details on using hashes here.

File details

Details for the file mopidyapi-0.4.1-py3-none-any.whl.

File metadata

  • Download URL: mopidyapi-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 76.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.22.0

File hashes

Hashes for mopidyapi-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 acae9daf34824ceb3913591a293f424c99060315ad45af33f7d85802ae7d5245
MD5 8b91b4a1e3eb8fd92c59caa97c00fd83
BLAKE2b-256 221cdabfbe0bd823d2ab39048ddae969528d6961e2cfc89733b122215bfa7c6a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page