Allow adding items from different servers to playlist by JonnyWong16 · Pull Request #1411 · pushingkarmaorg/python-plexapi
I currently put together something like this. this is able to take existing playlist (via server.playlist() call) and save it.
def addItems(self, items): """ Add items to the playlist. Parameters: items (List): List of :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to be added to the playlist. Raises: :class:`plexapi.exceptions.BadRequest`: When trying to add items to a smart playlist. """ if self.smart: raise BadRequest('Cannot add items to a smart playlist.') if items and not isinstance(items, (list, tuple)): items = [items] # Group items by server to maintain order when adding items from multiple servers # for server, _items in groupby(items, key=lambda item: item._server): for sourceURI, _items in groupby(items, key=lambda item: item.sourceURI): ratingKeys = [] for item in _items: if item.listType != self.playlistType: # pragma: no cover raise BadRequest(f'Can not mix media types when building a playlist: ' f'{self.playlistType} and {item.listType}') sourceURI = item._server._uriRoot() if sourceURI is None else sourceURI ratingKeys.append(str(item.ratingKey)) ratingKeys = ','.join(ratingKeys) # uri = f'{server._uriRoot()}/library/metadata/{ratingKeys}' uri = f'{sourceURI}/library/metadata/{ratingKeys}' args = {'uri': uri} key = f"{self.key}/items{utils.joinArgs(args)}" self._server.query(key, method=self._server._session.put) return self