'Play the given track, or if the given tl_track and tlid is
:class:`None`, play the currently active track.
Note that the track **must** already be in the tracklist.
:param tl_track: track to play
:type tl_track: :class:`mopidy.models.TlTrack` or :class:`None`
:param tlid: TLID of the track to play
:type tlid: :class:`int` or :class:`None`'

def play(self, tl_track=None, tlid=None):

    if (sum(((o is not None) for o in [tl_track, tlid])) > 1):
        raise ValueError(u'At    most    one    of    "tl_track"    and    "tlid"    may    be    set')
    ((tl_track is None) or validation.check_instance(tl_track, models.TlTrack))
    ((tlid is None) or validation.check_integer(tlid, min=1))
    if tl_track:
        deprecation.warn(u'core.playback.play:tl_track_kwarg', pending=True)
    if ((tl_track is None) and (tlid is not None)):
        for tl_track in self.core.tracklist.get_tl_tracks():
            if (tl_track.tlid == tlid):
                break
        else:
            tl_track = None
    if (tl_track is not None):
        assert (tl_track in self.core.tracklist.get_tl_tracks())
    elif ((tl_track is None) and (self.get_state() == PlaybackState.PAUSED)):
        self.resume()
        return
    current = (self._pending_tl_track or self._current_tl_track)
    pending = (tl_track or current or self.core.tracklist.next_track(None))
    count = (self.core.tracklist.get_length() * 2)
    while pending:
        if self._change(pending, PlaybackState.PLAYING):
            break
        else:
            self.core.tracklist._mark_unplayable(pending)
        current = pending
        pending = self.core.tracklist.next_track(current)
        count -= 1
        if (not count):
            logger.info(u'No    playable    track    in    the    list.')
            break
