Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add LibrarySection methods to multi-edit items #1184

Merged
merged 9 commits into from
Jul 27, 2023
15 changes: 5 additions & 10 deletions plexapi/audio.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,12 @@
from plexapi.mixins import (
AdvancedSettingsMixin, SplitMergeMixin, UnmatchMatchMixin, ExtrasMixin, HubsMixin, PlayedUnplayedMixin, RatingMixin,
ArtUrlMixin, ArtMixin, PosterUrlMixin, PosterMixin, ThemeMixin, ThemeUrlMixin,
AddedAtMixin, OriginallyAvailableMixin, SortTitleMixin, StudioMixin, SummaryMixin, TitleMixin,
TrackArtistMixin, TrackDiscNumberMixin, TrackNumberMixin,
CollectionMixin, CountryMixin, GenreMixin, LabelMixin, MoodMixin, SimilarArtistMixin, StyleMixin
ArtistEditMixins, AlbumEditMixins, TrackEditMixins
)
from plexapi.playlist import Playlist


class Audio(PlexPartialObject, PlayedUnplayedMixin, AddedAtMixin):
class Audio(PlexPartialObject, PlayedUnplayedMixin):
""" Base class for all audio objects including :class:`~plexapi.audio.Artist`,
:class:`~plexapi.audio.Album`, and :class:`~plexapi.audio.Track`.

Expand Down Expand Up @@ -132,8 +130,7 @@ class Artist(
Audio,
AdvancedSettingsMixin, SplitMergeMixin, UnmatchMatchMixin, ExtrasMixin, HubsMixin, RatingMixin,
ArtMixin, PosterMixin, ThemeMixin,
SortTitleMixin, SummaryMixin, TitleMixin,
CollectionMixin, CountryMixin, GenreMixin, LabelMixin, MoodMixin, SimilarArtistMixin, StyleMixin
ArtistEditMixins
):
""" Represents a single Artist.

Expand Down Expand Up @@ -244,8 +241,7 @@ class Album(
Audio,
UnmatchMatchMixin, RatingMixin,
ArtMixin, PosterMixin, ThemeUrlMixin,
OriginallyAvailableMixin, SortTitleMixin, StudioMixin, SummaryMixin, TitleMixin,
CollectionMixin, GenreMixin, LabelMixin, MoodMixin, StyleMixin
AlbumEditMixins
):
""" Represents a single Album.

Expand Down Expand Up @@ -364,8 +360,7 @@ class Track(
Audio, Playable,
ExtrasMixin, RatingMixin,
ArtUrlMixin, PosterUrlMixin, ThemeUrlMixin,
TitleMixin, TrackArtistMixin, TrackNumberMixin, TrackDiscNumberMixin,
CollectionMixin, LabelMixin, MoodMixin
TrackEditMixins
):
""" Represents a single Track.

Expand Down
12 changes: 7 additions & 5 deletions plexapi/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,9 @@ def fetchItems(self, ekey, cls=None, container_start=None, container_size=None,
and attrs.

Parameters:
ekey (str): API URL path in Plex to fetch items from.
ekey (str or List<int>): API URL path in Plex to fetch items from. If a list of ints is passed
in, the key will be translated to /library/metadata/<key1,key2,key3>. This allows
fetching multiple items only knowing their key-ids.
cls (:class:`~plexapi.base.PlexObject`): If you know the class of the
items to be fetched, passing this in will help the parser ensure
it only returns those items. By default we convert the xml elements
Expand Down Expand Up @@ -225,6 +227,9 @@ def fetchItems(self, ekey, cls=None, container_start=None, container_size=None,
if ekey is None:
raise BadRequest('ekey was not provided')

if isinstance(ekey, list) and all(isinstance(key, int) for key in ekey):
ekey = f'/library/metadata/{",".join(str(key) for key in ekey)}'

container_start = container_start or 0
container_size = container_size or X_PLEX_CONTAINER_SIZE
offset = container_start
Expand Down Expand Up @@ -557,13 +562,10 @@ def _edit(self, **kwargs):
self._edits.update(kwargs)
return self

if 'id' not in kwargs:
kwargs['id'] = self.ratingKey
if 'type' not in kwargs:
kwargs['type'] = utils.searchType(self._searchType)

part = f'/library/sections/{self.librarySectionID}/all{utils.joinArgs(kwargs)}'
self._server.query(part, method=self._server._session.put)
self.section()._edit(items=self, **kwargs)
return self

def edit(self, **kwargs):
Expand Down
6 changes: 2 additions & 4 deletions plexapi/collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@
from plexapi.mixins import (
AdvancedSettingsMixin, SmartFilterMixin, HubsMixin, RatingMixin,
ArtMixin, PosterMixin, ThemeMixin,
AddedAtMixin, ContentRatingMixin, SortTitleMixin, SummaryMixin, TitleMixin,
LabelMixin
CollectionEditMixins
)
from plexapi.utils import deprecated

Expand All @@ -19,8 +18,7 @@ class Collection(
PlexPartialObject,
AdvancedSettingsMixin, SmartFilterMixin, HubsMixin, RatingMixin,
ArtMixin, PosterMixin, ThemeMixin,
AddedAtMixin, ContentRatingMixin, SortTitleMixin, SummaryMixin, TitleMixin,
LabelMixin
CollectionEditMixins
):
""" Represents a single Collection.

Expand Down
Loading