mopidy.models
— Data models
These immutable data models are used for all data transfer within the Mopidy backends and between the backends and the MPD frontend. All fields are optional and immutable. In other words, they can only be set through the class constructor during instance creation. Additionally fields are type checked.
If you want to modify a model, use the
replace()
method. It accepts keyword
arguments for the parts of the model you want to change, and copies the rest of
the data from the model you call it on. Example:
>>> from mopidy.models import Track
>>> track1 = Track(name='Christmas Carol', length=171)
>>> track1
Track(artists=[], length=171, name='Christmas Carol')
>>> track2 = track1.replace(length=37)
>>> track2
Track(artists=[], length=37, name='Christmas Carol')
>>> track1
Track(artists=[], length=171, name='Christmas Carol')
Data model relations
Data model API
- class mopidy.models.Ref(*args: Any, **kwargs: Any)[source]
Model to represent URI references with a human friendly name and type attached. This is intended for use a lightweight object “free” of metadata that can be passed around instead of using full blown models.
- Parameters:
uri (string) – object URI
name (string) – object name
type (string) – object type
- name
The object name. Read-only.
- type
The object type, e.g. “artist”, “album”, “track”, “playlist”, “directory”. Read-only.
- uri
The object URI. Read-only.
- class mopidy.models.Track(*args: Any, **kwargs: Any)[source]
- Parameters:
uri (string) – track URI
name (string) – track name
artists (list of
Artist
) – track artistsalbum (
Album
) – track albumcomposers (list of
Artist
) – track composersperformers (list of
Artist
) – track performersgenre (string) – track genre
track_no (integer or
None
if unknown) – track number in albumdisc_no (integer or
None
if unknown) – disc number in albumdate (string) – track release date (YYYY or YYYY-MM-DD)
length (integer or
None
if there is no duration) – track length in millisecondsbitrate (integer) – bitrate in kbit/s
comment (string) – track comment
musicbrainz_id (string) – MusicBrainz ID
last_modified (integer or
None
if unknown) – Represents last modification time
- artists
A set of track artists. Read-only.
- bitrate
The track’s bitrate in kbit/s. Read-only.
- comment
The track comment. Read-only.
- composers
A set of track composers. Read-only.
- date
The track release date. Read-only.
- disc_no
The disc number in the album. Read-only.
- genre
The track genre. Read-only.
- last_modified
Integer representing when the track was last modified. Exact meaning depends on source of track. For local files this is the modification time in milliseconds since Unix epoch. For other backends it could be an equivalent timestamp or simply a version counter.
- length
The track length in milliseconds. Read-only.
- musicbrainz_id
The MusicBrainz ID of the track. Read-only.
- name
The track name. Read-only.
- performers
A set of track performers`. Read-only.
- track_no
The track number in the album. Read-only.
- uri
The track URI. Read-only.
- class mopidy.models.Album(*args: Any, **kwargs: Any)[source]
- Parameters:
uri (string) – album URI
name (string) – album name
artists (list of
Artist
) – album artistsnum_tracks (integer or
None
if unknown) – number of tracks in albumnum_discs (integer or
None
if unknown) – number of discs in albumdate (string) – album release date (YYYY or YYYY-MM-DD)
musicbrainz_id (string) – MusicBrainz ID
- artists
A set of album artists. Read-only.
- date
The album release date. Read-only.
- musicbrainz_id
The MusicBrainz ID of the album. Read-only.
- name
The album name. Read-only.
- num_discs
The number of discs in the album. Read-only.
- num_tracks
The number of tracks in the album. Read-only.
- uri
The album URI. Read-only.
- class mopidy.models.Artist(*args: Any, **kwargs: Any)[source]
- Parameters:
uri (string) – artist URI
name (string) – artist name
sortname (string) – artist name for sorting
musicbrainz_id (string) – MusicBrainz ID
- musicbrainz_id
The MusicBrainz ID of the artist. Read-only.
- name
The artist name. Read-only.
- sortname
Artist name for better sorting, e.g. with articles stripped
- uri
The artist URI. Read-only.
- class mopidy.models.Playlist(*args: Any, **kwargs: Any)[source]
- Parameters:
- last_modified
The playlist modification time in milliseconds since Unix epoch. Read-only.
Integer, or
None
if unknown.
- property length
The number of tracks in the playlist. Read-only.
- name
The playlist name. Read-only.
- tracks
The playlist’s tracks. Read-only.
- uri
The playlist URI. Read-only.
- class mopidy.models.Image(*args: Any, **kwargs: Any)[source]
- Parameters:
- height
Optional height of the image or
None
. Read-only.
- uri
The image URI. Read-only.
- width
Optional width of the image or
None
. Read-only.
- class mopidy.models.TlTrack(*args: Any, **kwargs: Any)[source]
A tracklist track. Wraps a regular track and it’s tracklist ID.
The use of
TlTrack
allows the same track to appear multiple times in the tracklist.This class also accepts it’s parameters as positional arguments. Both arguments must be provided, and they must appear in the order they are listed here.
This class also supports iteration, so your extract its values like this:
(tlid, track) = tl_track
- tlid
The tracklist ID. Read-only.
- track
The track. Read-only.
Data model helpers
- class mopidy.models.ValidatedImmutableObject(*args: Any, **kwargs: Any)[source]
Superclass for immutable objects whose fields can only be modified via the constructor. Fields should be
Field
instances to ensure type safety in our models.Note that since these models can not be changed, we heavily memoize them to save memory. So constructing a class with the same arguments twice will give you the same instance twice.
- replace(**kwargs)[source]
Replace the fields in the model and return a new instance.
Examples:
# Returns a track with a new name Track(name='foo').replace(name='bar') # Return an album with a new number of tracks Album(num_tracks=2).replace(num_tracks=5)
Note that internally we memoize heavily to keep memory usage down given our overly repetitive data structures. So you might get an existing instance if it contains the same values.
- Parameters:
kwargs (any) – kwargs to set as fields on the object
- Return type:
instance of the model with replaced fields
Data model (de)serialization
- mopidy.models.model_json_decoder(dct)[source]
Automatically deserialize Mopidy models from JSON.
Usage:
>>> import json >>> json.loads( ... '{"a_track": {"__model__": "Track", "name": "name"}}', ... object_hook=model_json_decoder) {u'a_track': Track(artists=[], name=u'name')}
- class mopidy.models.ModelJSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)[source]
Automatically serialize Mopidy models to JSON.
Usage:
>>> import json >>> json.dumps({'a_track': Track(name='name')}, cls=ModelJSONEncoder) '{"a_track": {"__model__": "Track", "name": "name"}}'
Data model field types
- class mopidy.models.fields.Field(default=None, type=None, choices=None) None [source]
Base field for use in
ValidatedImmutableObject
. These fields are responsible for type checking and other data sanitation in our models.For simplicity fields use the Python descriptor protocol to store the values in the instance dictionary. Also note that fields are mutable if the object they are attached to allow it.
Default values will be validated with the exception of
None
.
- class mopidy.models.fields.String(default=None) None [source]
Specialized
Field
which is wired up for bytes and unicode.
- class mopidy.models.fields.Identifier(default=None) None [source]
Field
for storing values such as GUIDs or other identifiers.Values will be interned.
- class mopidy.models.fields.URI(default=None, type=None, choices=None) None [source]
Field
for storing URIs.Values will be interned, currently not validated.
- class mopidy.models.fields.Date(default=None) None [source]
Field
for storing ISO 8601 dates as a string.Supported formats are
YYYY-MM-DD
,YYYY-MM
andYYYY
, currently not validated.