From 4b908a8f2d8f7c87fa7fc17ef2ac24de9639de16 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 15 Jul 2020 14:37:46 -0400 Subject: [PATCH 001/356] create media.Review class --- plexapi/media.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/plexapi/media.py b/plexapi/media.py index 7a106232e..b1f095add 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -651,6 +651,26 @@ class Role(MediaTag): FILTER = 'role' +@utils.registerPlexObject +class Review(MediaTag): + """ Represents a single Review for a Movie. + + Attributes: + TAG (str): 'Review' + """ + TAG = 'Review' + + def _loadData(self, data): + self._data = data + self.id = cast(int, data.attrib.get('id', 0)) + self.filter = data.attrib.get('filter') + self.tag = data.attrib.get('tag') + self.text = data.attrib.get('text') + self.image = data.attrib.get('image') + self.link = data.attrib.get('link') + self.source = data.attrib.get('source') + + @utils.registerPlexObject class Similar(MediaTag): """ Represents a single Similar media tag. From c7f8b86ec511b2c58450deb5e64a4744eb7d668e Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 15 Jul 2020 14:41:09 -0400 Subject: [PATCH 002/356] add reviews method to video.Movie class --- plexapi/video.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plexapi/video.py b/plexapi/video.py index 5396d87fa..680a093bb 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -332,6 +332,15 @@ def _prettyfilename(self): # This is just for compat. return self.title + def reviews(self): + """ Returns a list of :class:`~plexapi.media.Review` objects. """ + items = [] + data = self._server.query(self.key + '?includeReviews=1') + for item in data.iter('Review'): + items.append(media.Review(data=item, server=self._server)) + + return items + def download(self, savepath=None, keep_original_name=False, **kwargs): """ Download video files to specified directory. From 7b364a5cb86ae0e707888dda3423eea6367b11df Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 15 Jul 2020 14:41:52 -0400 Subject: [PATCH 003/356] create Extra class in video --- plexapi/video.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/plexapi/video.py b/plexapi/video.py index 680a093bb..9ef2122de 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -793,3 +793,32 @@ def _loadData(self, data): self.title = data.attrib.get('title') self.type = data.attrib.get('type') self.year = data.attrib.get('year') + + +@utils.registerPlexObject +class Extra(Clip): + """ Represents a single Extra (trailer, behindTheScenes, etc). + + Attributes: + TAG (str): 'Extras' + """ + TAG = 'Extras' + + def _loadData(self, data): + """ Load attribute values from Plex XML response. """ + self._data = data + self.addedAt = utils.toDatetime(data.attrib.get('addedAt')) + self.duration = utils.cast(int, data.attrib.get('duration')) + self.extraType = data.attrib.get('extraType') + self.index = data.attrib.get('index') + self.key = data.attrib.get('key', '') + self.media = self.findItems(data, media.Media) + self.originallyAvailableAt = utils.toDatetime( + data.attrib.get('originallyAvailableAt'), '%Y-%m-%d') + self.ratingKey = utils.cast(int, data.attrib.get('ratingKey')) + self.subtype = data.attrib.get('subtype') + self.summary = data.attrib.get('summary') + self.thumb = data.attrib.get('thumb') + self.title = data.attrib.get('title') + self.type = data.attrib.get('type') + self.year = data.attrib.get('year') From 3fcfe23d233f8a16b6b05b3d87eb998894416ed4 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 15 Jul 2020 14:42:23 -0400 Subject: [PATCH 004/356] add extras method to video.Movie class --- plexapi/video.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plexapi/video.py b/plexapi/video.py index 9ef2122de..ccaf19797 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -341,6 +341,16 @@ def reviews(self): return items + def extras(self): + """ Returns a list of :class:`~plexapi.video.Extra` objects. """ + items = [] + data = self._server.query(self._details_key) + for extra in data.iter('Extras'): + for video in extra.iter('Video'): + items.append(Extra(data=video, server=self._server)) + + return items + def download(self, savepath=None, keep_original_name=False, **kwargs): """ Download video files to specified directory. From 6f37a7b8c2abed9a5cda789a155bed63f4443192 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 15 Jul 2020 16:07:02 -0400 Subject: [PATCH 005/356] move hubs into video.Video --- plexapi/video.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plexapi/video.py b/plexapi/video.py index ccaf19797..68f73c47d 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -80,6 +80,12 @@ def markUnwatched(self): self._server.query(key) self.reload() + def hubs(self): + """ Returns a list of :class:`~plexapi.library.Hub` objects. """ + data = self._server.query(self._details_key) + for item in data.iter('Related'): + return self.findItems(item, library.Hub) + def rate(self, rate): """ Rate video. """ key = '/:/rate?key=%s&identifier=com.plexapp.plugins.library&rating=%s' % (self.ratingKey, rate) @@ -465,12 +471,6 @@ def preferences(self): return items - def hubs(self): - """ Returns a list of :class:`~plexapi.library.Hub` objects. """ - data = self._server.query(self._details_key) - for item in data.iter('Related'): - return self.findItems(item, library.Hub) - def onDeck(self): """ Returns shows On Deck :class:`~plexapi.video.Video` object. If show is unwatched, return will likely be the first episode. From 451b689c0d9be0017a1d201855b175b3ba643e57 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 15 Jul 2020 16:09:05 -0400 Subject: [PATCH 006/356] create MediaContainer class in base.py --- plexapi/base.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/plexapi/base.py b/plexapi/base.py index 101a0b435..4b4b1fee6 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -766,3 +766,26 @@ def _loadData(self, data): self.fixed = data.attrib.get('fixed') self.downloadURL = data.attrib.get('downloadURL') self.state = data.attrib.get('state') + + +class MediaContainer(PlexObject): + """ Represents a single MediaContainer. + + Attributes: + TAG (str): 'MediaContainer' + + """ + TAG = 'MediaContainer' + + def _loadData(self, data): + self._data = data + self.allowSync = utils.cast(int, data.attrib.get('allowSync')) + self.librarySectionID = data.attrib.get('librarySectionID') + self.librarySectionTitle = data.attrib.get('librarySectionTitle') + self.librarySectionUUID = data.attrib.get('librarySectionUUID') + self.augmentationKey = data.attrib.get('augmentationKey') + self.identifier = data.attrib.get('identifier') + self.mediaTagVersion = data.attrib.get('mediaTagVersion') + self.mediaTagPrefix = data.attrib.get('mediaTagPrefix') + self.mediaTagVersion = data.attrib.get('mediaTagVersion') + self.size = utils.cast(int, data.attrib.get('size')) From c0454f6eb5419ab202545bcb7e72da960a74a381 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 15 Jul 2020 16:15:35 -0400 Subject: [PATCH 007/356] import MediaContainer from base --- plexapi/video.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/video.py b/plexapi/video.py index 68f73c47d..c5888d59e 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -3,7 +3,7 @@ from urllib.parse import quote_plus, urlencode from plexapi import media, utils, settings, library -from plexapi.base import Playable, PlexPartialObject +from plexapi.base import Playable, PlexPartialObject, MediaContainer from plexapi.exceptions import BadRequest, NotFound From f36f54968162f9384da75e2202f1909ab12e3fdb Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 16 Jul 2020 05:27:44 -0400 Subject: [PATCH 008/356] video.Video hubs method correction --- plexapi/video.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plexapi/video.py b/plexapi/video.py index c5888d59e..f486375fa 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -82,9 +82,11 @@ def markUnwatched(self): def hubs(self): """ Returns a list of :class:`~plexapi.library.Hub` objects. """ + items = [] data = self._server.query(self._details_key) - for item in data.iter('Related'): - return self.findItems(item, library.Hub) + for item in data.iter('Hub'): + items.append(library.Hub(data=item, server=self._server)) + return items def rate(self, rate): """ Rate video. """ From c46aa3b5bb0b627029c25861158ba703c6c27b56 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 16 Jul 2020 05:29:52 -0400 Subject: [PATCH 009/356] create augmentation method in video.Video --- plexapi/video.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/plexapi/video.py b/plexapi/video.py index f486375fa..cb92595c2 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -88,6 +88,19 @@ def hubs(self): items.append(library.Hub(data=item, server=self._server)) return items + def augmentation(self): + """ Returns a list of :class:`~plexapi.library.Hub` objects. + + augmentation returns hub items relating to online media sources + such as Tidal Music "Track From {item}" or "Soundtrack of {item}" + + """ + + data = self._server.query(self.key + '?asyncAugmentMetadata=1') + mediaContainer = MediaContainer(data=data, server=self._server) + augmentationKey = mediaContainer.augmentationKey + return self.fetchItems(augmentationKey) + def rate(self, rate): """ Rate video. """ key = '/:/rate?key=%s&identifier=com.plexapp.plugins.library&rating=%s' % (self.ratingKey, rate) From fd89bacba244646f71f7b094ed788503a8452d2c Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 16 Jul 2020 20:59:27 -0400 Subject: [PATCH 010/356] add SETTINGS endpoint for user settings --- plexapi/myplex.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 5585c8852..e30d0a3aa 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -76,6 +76,7 @@ class MyPlexAccount(PlexObject): REQUESTS = 'https://plex.tv/api/invites/requests' # get SIGNIN = 'https://plex.tv/users/sign_in.xml' # get with auth WEBHOOKS = 'https://plex.tv/api/v2/user/webhooks' # get, post with data + SETTINGS = 'https://plex.tv/api/v2/user/{userUUID}/settings' # Hub sections VOD = 'https://vod.provider.plex.tv/' # get WEBSHOWS = 'https://webshows.provider.plex.tv/' # get From 50515730b08cf6e6f5e5bfab221c60a61975ef1c Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 16 Jul 2020 21:00:45 -0400 Subject: [PATCH 011/356] create onlineMediaSources method pulls in opt in/out status of Online Media Sources --- plexapi/myplex.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index e30d0a3aa..f3faaca70 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -684,6 +684,18 @@ def tidal(self): elem = ElementTree.fromstring(req.text) return self.findItems(elem) + def onlineMediaSources(self): + """ Returns an user account Online Media Sourcessettings :class:`~plexapi.myplex.AccountOptOut` + """ + services = [] + req = requests.get(self.SETTINGS.format(userUUID=self.uuid) + '/opt_outs', + headers={'X-Plex-Token': self._token, + 'X-Plex-Client-Identifier': X_PLEX_IDENTIFIER}) + elem = ElementTree.fromstring(req.text) + for item in elem.iter('optOut'): + services.append(AccountOptOut(data=item, server=self._server)) + + return services class MyPlexUser(PlexObject): """ This object represents non-signed in users such as friends and linked From 120dbc5f1c438c3ef521ad288978cb8d9456c3e2 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 16 Jul 2020 21:01:49 -0400 Subject: [PATCH 012/356] create AccountOptOut class --- plexapi/myplex.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index f3faaca70..c9d0e3358 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -1307,3 +1307,11 @@ def _chooseConnection(ctype, name, results): log.info('Connecting to %s: %s?X-Plex-Token=%s', ctype, results[0]._baseurl, results[0]._token) return results[0] raise NotFound('Unable to connect to %s: %s' % (ctype.lower(), name)) + + +class AccountOptOut(PlexObject): + + TYPE = 'array' + def _loadData(self, data): + self.key = data.attrib.get('key') + self.value = data.attrib.get('value') From b917a331319e06f8fa392967a3c6e694ffb81d5a Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 16 Jul 2020 21:05:35 -0400 Subject: [PATCH 013/356] create settings method and myplex.AccountSettings class --- plexapi/myplex.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index c9d0e3358..a7b153472 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -697,6 +697,16 @@ def onlineMediaSources(self): return services + def settings(self): + """ Returns an user account settings :class:`~plexapi.myplex.AccountSettings` + """ + req = requests.get(self.SETTINGS.format(userUUID=self.uuid), + headers={'X-Plex-Token': self._token, + 'X-Plex-Client-Identifier': X_PLEX_IDENTIFIER}) + elem = ElementTree.fromstring(req.text) + for item in elem.iter('setting'): + return AccountSettings(data=item, server=self._server) + class MyPlexUser(PlexObject): """ This object represents non-signed in users such as friends and linked accounts. NOTE: This should not be confused with the :class:`~myplex.MyPlexAccount` @@ -1309,6 +1319,19 @@ def _chooseConnection(ctype, name, results): raise NotFound('Unable to connect to %s: %s' % (ctype.lower(), name)) +class AccountSettings(PlexObject): + + def _loadData(self, data): + self.id = data.attrib.get('id') + self.type = data.attrib.get('type') + self.value = eval(self.values(data.attrib.get('value'))) + self.hidden = data.attrib.get('hidden') + self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) + + def values(self, value): + return value.replace(':false', ':False').replace(':true', ':True').replace(':null', ':None') + + class AccountOptOut(PlexObject): TYPE = 'array' From de58965a9d3982c6d7c51208d3afdd60324e8f11 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 16 Jul 2020 21:10:50 -0400 Subject: [PATCH 014/356] add check in augmentation method for Plex Pass or tidal opt-in update docstring for method --- plexapi/video.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plexapi/video.py b/plexapi/video.py index cb92595c2..c81ded8c5 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -93,9 +93,14 @@ def augmentation(self): augmentation returns hub items relating to online media sources such as Tidal Music "Track From {item}" or "Soundtrack of {item}" + Plex Pass and linked Tidal account are required """ - + account = self._server.myPlexAccount() + tidalOptOut = [service.value for service in account.onlineMediaSources() + if service.key.endswith('music')][0] + if account.subscriptionStatus != 'Active' or tidalOptOut == 'opt_out': + raise BadRequest('Requires Plex Pass and Tidal Music enabled.') data = self._server.query(self.key + '?asyncAugmentMetadata=1') mediaContainer = MediaContainer(data=data, server=self._server) augmentationKey = mediaContainer.augmentationKey From 998ed04a6c071063e5fe2e1bde640e5e694a3ae2 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 16 Jul 2020 21:21:26 -0400 Subject: [PATCH 015/356] update docstrings for AccountSettings and AccountOptOut --- plexapi/myplex.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index a7b153472..1f1a0fc5f 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -1320,6 +1320,17 @@ def _chooseConnection(ctype, name, results): class AccountSettings(PlexObject): + """ Represents a single Account Setting + 'https://plex.tv/api/v2/user/{userUUID}/settings' + + Attributes: + id (str): Unknown. "experience"? + type (str): "json" + value (dict): Lots of user server, library, + and other endpoints and settings + hidden (str): Unknown. Are these settings hidden? + updatedAt (datetime): Datetime last updated + """ def _loadData(self, data): self.id = data.attrib.get('id') @@ -1333,8 +1344,14 @@ def values(self, value): class AccountOptOut(PlexObject): + """ Represents a single AccountOptOut + 'https://plex.tv/api/v2/user/{userUUID}/settings/opt_outs' + + Attributes: + key (str): Online Media Source key + value (str): Online Media Source opt_in or opt_out + """ - TYPE = 'array' def _loadData(self, data): self.key = data.attrib.get('key') self.value = data.attrib.get('value') From 34e1ea344445265d4a2c4d99a6e4146e32613169 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 30 Aug 2020 01:11:26 -0400 Subject: [PATCH 016/356] master conflict resolution --- plexapi/video.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plexapi/video.py b/plexapi/video.py index c81ded8c5..835d68a2c 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -823,6 +823,13 @@ def _loadData(self, data): self.title = data.attrib.get('title') self.type = data.attrib.get('type') self.year = data.attrib.get('year') + self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0)) + + def section(self): + """Return the :class:`~plexapi.library.LibrarySection` this item belongs to.""" + # Clip payloads currently do not contain 'librarySectionID'. + # Return None to avoid unnecessary attribute lookup attempts. + return None @utils.registerPlexObject From 1316d4ae43ac6c9c120f12a106d8b4d932dcfdc8 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 30 Aug 2020 01:18:26 -0400 Subject: [PATCH 017/356] spacing --- plexapi/myplex.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 1f1a0fc5f..7267973be 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -707,6 +707,7 @@ def settings(self): for item in elem.iter('setting'): return AccountSettings(data=item, server=self._server) + class MyPlexUser(PlexObject): """ This object represents non-signed in users such as friends and linked accounts. NOTE: This should not be confused with the :class:`~myplex.MyPlexAccount` From de83d245c8165528b7804e4687f4290c639bfa08 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 30 Aug 2020 02:02:07 -0400 Subject: [PATCH 018/356] add updateOptOut method for MyAccount.AccountOptOut class --- plexapi/myplex.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 7267973be..c53d829fc 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -688,12 +688,15 @@ def onlineMediaSources(self): """ Returns an user account Online Media Sourcessettings :class:`~plexapi.myplex.AccountOptOut` """ services = [] - req = requests.get(self.SETTINGS.format(userUUID=self.uuid) + '/opt_outs', + optOuts = self.SETTINGS.format(userUUID=self.uuid) + '/opt_outs' + req = requests.get(optOuts, headers={'X-Plex-Token': self._token, 'X-Plex-Client-Identifier': X_PLEX_IDENTIFIER}) elem = ElementTree.fromstring(req.text) for item in elem.iter('optOut'): - services.append(AccountOptOut(data=item, server=self._server)) + service = AccountOptOut(data=item, server=self._server) + service._initpath = optOuts + services.append(service) return services @@ -1353,6 +1356,15 @@ class AccountOptOut(PlexObject): value (str): Online Media Source opt_in or opt_out """ + CHOICES = ['opt_in', 'opt_out', 'opt_out_managed'] def _loadData(self, data): self.key = data.attrib.get('key') self.value = data.attrib.get('value') + + def updateOptOut(self, option): + if option not in self.CHOICES: + raise NotFound('%s not found in available choices: %s' % (option, self.CHOICES)) + if option == self.value: + raise BadRequest('OptOut option is already set to %s' % option) + url = self._initpath + '?key=%s&value=%s&' % (self.key, option) + self._server.query(url, method=self._server._session.post) From 2d08f2d1793108081c5e383b7d77689142ce5e01 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 30 Aug 2020 02:20:30 -0400 Subject: [PATCH 019/356] add test for opting out of a onlineMediaSource --- tests/test_myplex.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/test_myplex.py b/tests/test_myplex.py index d09e1ed1c..dd7851059 100644 --- a/tests/test_myplex.py +++ b/tests/test_myplex.py @@ -126,6 +126,20 @@ def enabled(): utils.wait_until(lambda: enabled() == (False, False)) +def test_myplex_onlineMediaSources_optOut(account): + mediaOptOut = account.onlineMediaSources()[0] + optOutValue = mediaOptOut.value + with pytest.raises(NotFound): + assert mediaOptOut.updateOptOut('what') + with pytest.raises(BadRequest): + assert mediaOptOut.updateOptOut(optOutValue) + choices = mediaOptOut.CHOICES + choices.remove(optOutValue) + mediaOptOut.updateOptOut(choices[0]) + assert account.onlineMediaSources()[0].value == choices[0] + mediaOptOut.updateOptOut(optOutValue) + + def test_myplex_inviteFriend_remove(account, plex, mocker): inv_user = "hellowlol" vid_filter = {"contentRating": ["G"], "label": ["foo"]} From aaa0a9758b8d09a0b22a8046806c8918f24db106 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 30 Aug 2020 02:35:48 -0400 Subject: [PATCH 020/356] add tests for presence of movie reviews and extras --- tests/test_video.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_video.py b/tests/test_video.py index 139031e09..12192c6c5 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -159,6 +159,8 @@ def test_video_Movie_attrs(movies): assert movie.duration >= 160000 assert movie.fields == [] assert movie.posters() + assert movie.reviews() + assert movie.extras() assert sorted([i.tag for i in movie.genres]) == [ "Animation", "Comedy", From bb9a1b25730335c044d9617e0e268ce6f81c0ae9 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 31 Aug 2020 21:12:36 -0400 Subject: [PATCH 021/356] flake fix --- plexapi/myplex.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 1b04500a6..922bfe9cb 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -1357,6 +1357,7 @@ class AccountOptOut(PlexObject): """ CHOICES = ['opt_in', 'opt_out', 'opt_out_managed'] + def _loadData(self, data): self.key = data.attrib.get('key') self.value = data.attrib.get('value') From 675cfd3f492ec13456d487c064db97fc3ba56985 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 31 Aug 2020 21:41:43 -0400 Subject: [PATCH 022/356] append original choice back in --- tests/test_myplex.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_myplex.py b/tests/test_myplex.py index dd7851059..2a73599f7 100644 --- a/tests/test_myplex.py +++ b/tests/test_myplex.py @@ -137,7 +137,8 @@ def test_myplex_onlineMediaSources_optOut(account): choices.remove(optOutValue) mediaOptOut.updateOptOut(choices[0]) assert account.onlineMediaSources()[0].value == choices[0] - mediaOptOut.updateOptOut(optOutValue) + choices.append(optOutValue) + account.onlineMediaSources()[0].updateOptOut(optOutValue) def test_myplex_inviteFriend_remove(account, plex, mocker): From d948669204e1466f159382f7ed9bbe93d9c521c8 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 7 Oct 2020 11:24:20 -0400 Subject: [PATCH 023/356] failing in the unclaimed server CI run --- tests/test_myplex.py | 2 ++ tests/test_video.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test_myplex.py b/tests/test_myplex.py index 2a73599f7..786dd622f 100644 --- a/tests/test_myplex.py +++ b/tests/test_myplex.py @@ -126,6 +126,8 @@ def enabled(): utils.wait_until(lambda: enabled() == (False, False)) +@pytest.mark.skip(reason="account.onlineMediaSources() is empty " + "in the CI test run against an unclaimed server.") def test_myplex_onlineMediaSources_optOut(account): mediaOptOut = account.onlineMediaSources()[0] optOutValue = mediaOptOut.value diff --git a/tests/test_video.py b/tests/test_video.py index b5fa6df86..7b5a23cda 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -158,8 +158,8 @@ def test_video_Movie_attrs(movies): assert [i.tag for i in movie.directors] == ["Nina Paley"] assert movie.duration >= 160000 assert movie.fields == [] - assert movie.posters() - assert movie.reviews() + # assert movie.posters() # failing in the unclaimed server CI run + # assert movie.reviews() # failing in the unclaimed server CI run assert movie.extras() assert sorted([i.tag for i in movie.genres]) == [ "Animation", From 06bbd284a3d8bc17b64fa8ed3b1c3fb085ddafff Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 7 Oct 2020 11:54:45 -0400 Subject: [PATCH 024/356] correction, failing in the unclaimed server CI run --- tests/test_video.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_video.py b/tests/test_video.py index 7b5a23cda..89ac6ccb5 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -158,9 +158,9 @@ def test_video_Movie_attrs(movies): assert [i.tag for i in movie.directors] == ["Nina Paley"] assert movie.duration >= 160000 assert movie.fields == [] - # assert movie.posters() # failing in the unclaimed server CI run + assert movie.posters() # assert movie.reviews() # failing in the unclaimed server CI run - assert movie.extras() + # assert movie.extras() # failing in the unclaimed server CI run assert sorted([i.tag for i in movie.genres]) == [ "Animation", "Comedy", From 0f0cd03f82a89d79105b4710200662519690bcdd Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 18 Jan 2021 15:57:41 -0500 Subject: [PATCH 025/356] correction of import --- plexapi/video.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/video.py b/plexapi/video.py index a8dd01c34..de150e48b 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -3,7 +3,7 @@ from urllib.parse import quote_plus, urlencode from plexapi import library, media, settings, utils -from plexapi.base import Playable, PlexPartialObject +from plexapi.base import Playable, PlexPartialObject, MediaContainer from plexapi.exceptions import BadRequest, NotFound From 63a1d10d11adbcc3829169858c662ca1a7702df9 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 25 Jan 2021 14:28:47 -0500 Subject: [PATCH 026/356] remove hubs method from Video class --- plexapi/video.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/plexapi/video.py b/plexapi/video.py index 28f434d24..63b2320e5 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -94,14 +94,6 @@ def markUnwatched(self): self._server.query(key) self.reload() - def hubs(self): - """ Returns a list of :class:`~plexapi.library.Hub` objects. """ - items = [] - data = self._server.query(self._details_key) - for item in data.iter('Hub'): - items.append(library.Hub(data=item, server=self._server)) - return items - def augmentation(self): """ Returns a list of :class:`~plexapi.library.Hub` objects. From 811f661576696649dbde1ad73cbc08d90cab2ff7 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 10 Mar 2021 21:53:24 -0800 Subject: [PATCH 027/356] Add LibrarySection.hubSearch() --- plexapi/library.py | 14 ++++++++++---- plexapi/server.py | 9 ++++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 8d3749a80..d6007e50b 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -319,8 +319,8 @@ class LibrarySection(PlexObject): art (str): Background artwork used to respresent the library section. composite (str): Composite image used to represent the library section. createdAt (datetime): Datetime the library section was created. - filters (str): Unknown - key (str): Key (or ID) of this library section. + filters (bool): True if filters are available for the library section. + key (int): Key (or ID) of this library section. language (str): Language represented in this section (en, xn, etc). locations (List): List of folder paths added to the library section. refreshing (bool): True if this section is currently being refreshed. @@ -339,8 +339,8 @@ def _loadData(self, data): self.art = data.attrib.get('art') self.composite = data.attrib.get('composite') self.createdAt = utils.toDatetime(data.attrib.get('createdAt')) - self.filters = data.attrib.get('filters') - self.key = data.attrib.get('key') # invalid key from plex + self.filters = utils.cast(bool, data.attrib.get('filters')) + self.key = utils.cast(int, data.attrib.get('key')) self.language = data.attrib.get('language') self.locations = self.listAttrs(data, 'path', etag='Location') self.refreshing = utils.cast(bool, data.attrib.get('refreshing')) @@ -626,6 +626,12 @@ def listChoices(self, category, libtype=None, **kwargs): key = '/library/sections/%s/%s%s' % (self.key, category, utils.joinArgs(args)) return self.fetchItems(key, cls=FilterChoice) + def hubSearch(self, query, mediatype=None, limit=None): + """ Returns the hub search results for this library. See :func:`~plexapi.server.PlexServer.search` + for details and parameters. + """ + return self._server.search(query, mediatype, limit, sectionId=self.key) + def search(self, title=None, sort=None, maxresults=None, libtype=None, container_start=0, container_size=X_PLEX_CONTAINER_SIZE, **kwargs): """ Search the library. The http requests will be batched in container_size. If you're only looking for the first diff --git a/plexapi/server.py b/plexapi/server.py index d90c76dac..1cae64f9f 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -512,7 +512,7 @@ def query(self, key, method=None, headers=None, timeout=None, **kwargs): data = response.text.encode('utf8') return ElementTree.fromstring(data) if data.strip() else None - def search(self, query, mediatype=None, limit=None): + def search(self, query, mediatype=None, limit=None, sectionId=None): """ Returns a list of media items or filter categories from the resulting `Hub Search `_ against all items in your Plex library. This searches genres, actors, directors, @@ -526,10 +526,11 @@ def search(self, query, mediatype=None, limit=None): Parameters: query (str): Query to use when searching your library. - mediatype (str): Optionally limit your search to the specified media type. + mediatype (str, optional): Limit your search to the specified media type. actor, album, artist, autotag, collection, director, episode, game, genre, movie, photo, photoalbum, place, playlist, shared, show, tag, track - limit (int): Optionally limit to the specified number of results per Hub. + limit (int, optional): Limit to the specified number of results per Hub. + sectionId (int, optional): The section ID (key) of the library to search within. """ results = [] params = { @@ -538,6 +539,8 @@ def search(self, query, mediatype=None, limit=None): 'includeExternalMedia': 1} if limit: params['limit'] = limit + if sectionId: + params['sectionId'] = sectionId key = '/hubs/search?%s' % urlencode(params) for hub in self.fetchItems(key, Hub): if mediatype: From 0398895ce6bd4643014dbee17b90b236a68aeaaf Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 10 Mar 2021 23:45:29 -0800 Subject: [PATCH 028/356] Update all library filtering related objects --- plexapi/library.py | 207 +++++++++++++++++++++++++-------------------- 1 file changed, 117 insertions(+), 90 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index d6007e50b..816313ce7 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1107,34 +1107,6 @@ def sync(self, resolution, limit=None, **kwargs): return super(PhotoSection, self).sync(**kwargs) -class FilterChoice(PlexObject): - """ Represents a single filter choice. These objects are gathered when using filters - while searching for library items and is the object returned in the result set of - :func:`~plexapi.library.LibrarySection.listChoices`. - - Attributes: - TAG (str): 'Directory' - server (:class:`~plexapi.server.PlexServer`): PlexServer this client is connected to. - initpath (str): Relative path requested when retrieving specified `data` (optional). - fastKey (str): API path to quickly list all items in this filter - (/library/sections/
/all?genre=) - key (str): Short key (id) of this filter option (used ad in fastKey above). - thumb (str): Thumbnail used to represent this filter option. - title (str): Human readable name for this filter option. - type (str): Filter type (genre, contentRating, etc). - """ - TAG = 'Directory' - - def _loadData(self, data): - """ Load attribute values from Plex XML response. """ - self._data = data - self.fastKey = data.attrib.get('fastKey') - self.key = data.attrib.get('key') - self.thumb = data.attrib.get('thumb') - self.title = data.attrib.get('title') - self.type = data.attrib.get('type') - - @utils.registerPlexObject class LibraryTimeline(PlexObject): """Represents a LibrarySection timeline. @@ -1193,25 +1165,6 @@ def _loadData(self, data): self.path = data.attrib.get('path') -class Filter(PlexObject): - """ Represents a single Filter. - - Attributes: - TAG (str): 'Directory' - TYPE (str): 'filter' - """ - TAG = 'Directory' - TYPE = 'filter' - - def _loadData(self, data): - self._data = data - self.filter = data.attrib.get('filter') - self.filterType = data.attrib.get('filterType') - self.key = data.attrib.get('key') - self.title = data.attrib.get('title') - self.type = data.attrib.get('type') - - @utils.registerPlexObject class Hub(PlexObject): """ Represents a single Hub (or category) in the PlexServer search. @@ -1392,16 +1345,68 @@ def __len__(self): return self.size -class Sort(PlexObject): - """ Represents a Sort element found in library. +class FilteringType(PlexObject): + """ Represents a single filtering Type object for a library. + + Attributes: + TAG (str): 'Type' + active (bool): True if this filter type is currently active. + fields (List<:class:`~plexapi.library.FilteringField`>): List of field objects. + filters (List<:class:`~plexapi.library.FilteringFilter`>): List of filter objects. + key (str): The API URL path for the libtype filter. + sorts (List<:class:`~plexapi.library.FilteringSort`>): List of sort objects. + title (str): The title for the libtype filter. + type (str): The libtype for the filter. + """ + TAG = 'Type' + + def __repr__(self): + _type = self._clean(self.firstAttr('type')) + return '<%s>' % ':'.join([p for p in [self.__class__.__name__, _type] if p]) + + def _loadData(self, data): + self._data = data + self.active = utils.cast(bool, data.attrib.get('active', '0')) + self.fields = self.findItems(data, FilteringField) + self.filters = self.findItems(data, FilteringFilter) + self.key = data.attrib.get('key') + self.sorts = self.findItems(data, FilteringSort) + self.title = data.attrib.get('title') + self.type = data.attrib.get('type') + + +class FilteringFilter(PlexObject): + """ Represents a single Filter object for a :class:`~plexapi.library.FilteringType`. + + Attributes: + TAG (str): 'Filter' + filter (str): The key for the filter. + filterType (str): The :class:`~plexapi.library.FilteringFieldType` type (string, boolean, integer, date, etc). + key (str): The API URL path for the filter. + title (str): The title of the filter. + type (str): 'filter' + """ + TAG = 'Filter' + + def _loadData(self, data): + self._data = data + self.filter = data.attrib.get('filter') + self.filterType = data.attrib.get('filterType') + self.key = data.attrib.get('key') + self.title = data.attrib.get('title') + self.type = data.attrib.get('type') + + +class FilteringSort(PlexObject): + """ Represents a single Sort object for a :class:`~plexapi.library.FilteringType`. Attributes: TAG (str): 'Sort' - defaultDirection (str): Default sorting direction. - descKey (str): Url key for sorting with desc. - key (str): Url key for sorting, - title (str): Title of sorting, - firstCharacterKey (str): Url path for first character endpoint. + defaultDirection (str): The default sorting direction. + descKey (str): The URL key for sorting with desc. + firstCharacterKey (str): API URL path for first character endpoint. + key (str): The URL key for the sorting. + title (str): The title of the sorting. """ TAG = 'Sort' @@ -1410,21 +1415,20 @@ def _loadData(self, data): self._data = data self.defaultDirection = data.attrib.get('defaultDirection') self.descKey = data.attrib.get('descKey') + self.firstCharacterKey = data.attrib.get('firstCharacterKey') self.key = data.attrib.get('key') self.title = data.attrib.get('title') - self.firstCharacterKey = data.attrib.get('firstCharacterKey') -class FilterField(PlexObject): - """ Represents a Filters Field element found in library. +class FilteringField(PlexObject): + """ Represents a single Field object for a :class:`~plexapi.library.FilteringType`. Attributes: TAG (str): 'Field' - key (str): Url key for filter, - title (str): Title of filter. - type (str): Type of filter (string, boolean, integer, date, etc). - subType (str): Subtype of filter (decade, rating, etc). - operators (str): Operators available for this filter. + key (str): The URL key for the filter field. + title (str): The title of the filter field. + type (str): The :class:`~plexapi.library.FilteringFieldType` type (string, boolean, integer, date, etc). + subType (str): The subtype of the filter (decade, rating, etc). """ TAG = 'Field' @@ -1435,17 +1439,36 @@ def _loadData(self, data): self.title = data.attrib.get('title') self.type = data.attrib.get('type') self.subType = data.attrib.get('subType') - self.operators = [] -@utils.registerPlexObject -class Operator(PlexObject): - """ Represents an Operator available for filter. +class FilteringFieldType(PlexObject): + """ Represents a single FieldType for library filtering. + + Attributes: + TAG (str): 'FieldType' + type (str): The filtering data type (string, boolean, integer, date, etc). + operators (List<:class:`~plexapi.library.FilteringOperator`>): List of operator objects. + """ + TAG = 'FieldType' + + def __repr__(self): + _type = self._clean(self.firstAttr('type')) + return '<%s>' % ':'.join([p for p in [self.__class__.__name__, _type] if p]) + + def _loadData(self, data): + """ Load attribute values from Plex XML response. """ + self._data = data + self.type = data.attrib.get('type') + self.operators = self.findItems(data, FilteringOperator) + + +class FilteringOperator(PlexObject): + """ Represents an single Operator for a :class:`~plexapi.library.FilteringFieldType`. Attributes: TAG (str): 'Operator' - key (str): Url key for operator. - title (str): Title of operator. + key (str): The URL key for the operator. + title (str): The title of the operator. """ TAG = 'Operator' @@ -1455,6 +1478,32 @@ def _loadData(self, data): self.title = data.attrib.get('title') +class FilterChoice(PlexObject): + """ Represents a single FilterChoice object. + These objects are gathered when using filters while searching for library items and is the + object returned in the result set of :func:`~plexapi.library.LibrarySection.listFilterChoices`. + + Attributes: + TAG (str): 'Directory' + fastKey (str): API URL path to quickly list all items with this filter choice. + (/library/sections/
/all?genre=) + key (str): The id value of this filter choice. + thumb (str): Thumbnail URL for the filter choice. + title (str): The title of the filter choice. + type (str): The filter type (genre, contentRating, etc). + """ + TAG = 'Directory' + + def _loadData(self, data): + """ Load attribute values from Plex XML response. """ + self._data = data + self.fastKey = data.attrib.get('fastKey') + self.key = data.attrib.get('key') + self.thumb = data.attrib.get('thumb') + self.title = data.attrib.get('title') + self.type = data.attrib.get('type') + + class Folder(PlexObject): """ Represents a Folder inside a library. @@ -1494,28 +1543,6 @@ def allSubfolders(self): return folders -@utils.registerPlexObject -class FieldType(PlexObject): - """ Represents a FieldType for filter. - - Attributes: - TAG (str): 'Operator' - type (str): Type of filter (string, boolean, integer, date, etc), - operators (str): Operators available for this filter. - """ - TAG = 'FieldType' - - def __repr__(self): - _type = self._clean(self.firstAttr('type')) - return '<%s>' % ':'.join([p for p in [self.__class__.__name__, _type] if p]) - - def _loadData(self, data): - """ Load attribute values from Plex XML response. """ - self._data = data - self.type = data.attrib.get('type') - self.operators = self.findItems(data, Operator) - - class FirstCharacter(PlexObject): """ Represents a First Character element from a library. From abbace6792881144874585781c18275643f1cd45 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 10 Mar 2021 23:48:11 -0800 Subject: [PATCH 029/356] Update library search filtering methods --- plexapi/library.py | 306 ++++++++++++++++++++++++++++++--------------- 1 file changed, 202 insertions(+), 104 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 816313ce7..9381b65d2 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import re from urllib.parse import quote, quote_plus, unquote, urlencode from plexapi import X_PLEX_CONTAINER_SIZE, log, media, utils @@ -351,6 +352,8 @@ def _loadData(self, data): self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) self.uuid = data.attrib.get('uuid') # Private attrs as we dont want a reload. + self._filterTypes = None + self._fieldTypes = None self._total_size = None def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, **kwargs): @@ -454,40 +457,6 @@ def hubs(self): key = '/hubs/sections/%s' % self.key return self.fetchItems(key) - def _filters(self): - """ Returns a list of :class:`~plexapi.library.Filter` from this library section. """ - key = '/library/sections/%s/filters' % self.key - return self.fetchItems(key, cls=Filter) - - def _sorts(self, mediaType=None): - """ Returns a list of available :class:`~plexapi.library.Sort` for this library section. - """ - items = [] - for data in self.listChoices('sorts', mediaType): - sort = Sort(server=self._server, data=data._data) - sort._initpath = data._initpath - items.append(sort) - return items - - def filterFields(self, mediaType=None): - """ Returns a list of available :class:`~plexapi.library.FilterField` for this library section. - """ - items = [] - key = '/library/sections/%s/filters?includeMeta=1' % self.key - data = self._server.query(key) - for meta in data.iter('Meta'): - for metaType in meta.iter('Type'): - if not mediaType or metaType.attrib.get('type') == mediaType: - fields = self.findItems(metaType, FilterField) - for field in fields: - field._initpath = metaType.attrib.get('key') - fieldType = [_ for _ in self.findItems(meta, FieldType) if _.type == field.type] - field.operators = fieldType[0].operators - items += fields - if not items and mediaType: - raise BadRequest('mediaType (%s) not found.' % mediaType) - return items - def agents(self): """ Returns a list of available :class:`~plexapi.media.Agent` for this library section. """ @@ -601,30 +570,198 @@ def deleteMediaPreviews(self): key = '/library/sections/%s/indexes' % self.key self._server.query(key, method=self._server._session.delete) - def listChoices(self, category, libtype=None, **kwargs): - """ Returns a list of :class:`~plexapi.library.FilterChoice` objects for the - specified category and libtype. kwargs can be any of the same kwargs in - :func:`~plexapi.library.LibraySection.search` to help narrow down the choices - to only those that matter in your current context. + def _loadFilters(self): + """ Retrieves and caches the :class:`~plexapi.library.FilteringType` and + :class:`~plexapi.library.FilteringFieldType` for this library section. + """ + key = '/library/sections/%s/all?includeMeta=1&X-Plex-Container-Start=0&X-Plex-Container-Size=0' % self.key + data = self._server.query(key) + meta = data.find('Meta') + if meta: + self._filterTypes = self.findItems(meta, FilteringType) + self._fieldTypes = self.findItems(meta, FilteringFieldType) + + def filterTypes(self): + """ Returns a list of available :class:`~plexapi.library.FilteringType` for this library section. """ + if self._filterTypes is None: + self._loadFilters() + return self._filterTypes + + def getFilterType(self, libtype=None): + """ Returns a :class:`~plexapi.library.FilteringType` for a specified libtype. Parameters: - category (str): Category to list choices for (genre, contentRating, etc). - libtype (int): Library type of item filter. - **kwargs (dict): Additional kwargs to narrow down the choices. + libtype (str, optional): The library type to filter (movie, show, season, episode, + artist, album, track, photoalbum, photo). Raises: - :exc:`~plexapi.exceptions.BadRequest`: Cannot include kwarg equal to specified category. + :exc:`~plexapi.exceptions.BadRequest`: Invalid libtype for this library. """ - # TODO: Should this be moved to base? - if category in kwargs: - raise BadRequest('Cannot include kwarg equal to specified category: %s' % category) - args = {} - for subcategory, value in kwargs.items(): - args[category] = self._cleanSearchFilter(subcategory, value) - if libtype is not None: - args['type'] = utils.searchType(libtype) - key = '/library/sections/%s/%s%s' % (self.key, category, utils.joinArgs(args)) - return self.fetchItems(key, cls=FilterChoice) + libtype = libtype or self.TYPE + try: + return next(f for f in self.filterTypes() if f.type == libtype) + except StopIteration: + raise BadRequest('Invalid libtype for this library: %s' % libtype) from None + + def listFilters(self, libtype=None): + """ Returns a list of available :class:`~plexapi.library.FilteringFilter` for a specified libtype. + + Parameters: + libtype (str, optional): The library type to filter (movie, show, season, episode, + artist, album, track, photoalbum, photo). + """ + return self.getFilterType(libtype).filters + + def listSorts(self, libtype=None): + """ Returns a list of available :class:`~plexapi.library.FilteringSort` for a specified libtype. + + Parameters: + libtype (str, optional): The library type to filter (movie, show, season, episode, + artist, album, track, photoalbum, photo). + """ + return self.getFilterType(libtype).sorts + + def listFields(self, libtype=None): + """ Returns a list of available :class:`~plexapi.library.FilteringFields` for a specified libtype. + + Parameters: + libtype (str, optional): The library type to filter (movie, show, season, episode, + artist, album, track, photoalbum, photo). + """ + return self.getFilterType(libtype).fields + + def listFilterChoices(self, field, libtype=None): + """ Returns a list of available :class:`~plexapi.library.FilterChoice` for a specified + :class:`~plexapi.library.FilteringFilter` or filter field. + + Parameters: + field (str): :class:`~plexapi.library.FilteringFilter` object, + or the name of the field (genre, year, contentRating, etc.). + libtype (str, optional): The library type to filter (movie, show, season, episode, + artist, album, track, photoalbum, photo). + + Raises: + :exc:`~plexapi.exceptions.BadRequest`: Unknown filter field. + """ + if isinstance(field, str): + try: + field = next(f for f in self.listFilters(libtype) if f.filter == field) + except StopIteration: + raise BadRequest('Unknown filter field: %s' % field) from None + + data = self._server.query(field.key) + return self.findItems(data, FilterChoice) + + def fieldTypes(self): + """ Returns a list of available :class:`~plexapi.library.FilteringFieldType` for this library section. """ + if self._fieldTypes is None: + self._loadFilters() + return self._fieldTypes + + def getFieldType(self, fieldType): + """ Returns a :class:`~plexapi.library.FilteringFieldType` for a specified fieldType. + + Parameters: + fieldType (str): The data type for the field (tag, integer, string, boolean, date, + subtitleLanguage, audioLanguage, resolution). + + Raises: + :exc:`~plexapi.exceptions.BadRequest`: Invalid libtype for this library. + """ + try: + return next(f for f in self.fieldTypes() if f.type == fieldType) + except StopIteration: + raise BadRequest('Invalid fieldType for this library: %s' % fieldType) from None + + def listOperators(self, fieldType): + """ Returns a list of available :class:`~plexapi.library.FilteringOperator` for a specified fieldType. + + Parameters: + fieldType (str): The data type for the field (tag, integer, string, boolean, date, + subtitleLanguage, audioLanguage, resolution). + """ + return self.getFieldType(fieldType).operators + + def _validateFieldValue(self, field, values, libtype=None): + """ Validates a filter field and value is available as a custom filter for the library. + Returns the validated field and value. + """ + match = re.match(r'([a-zA-Z\.]+)([!<>=]*)', field) + if not match: + raise BadRequest('Invalid filter field: %s' % field) + field, operator = match.groups() + + # Validate field + try: + filterField = next(f for f in self.listFields(libtype) if f.key.endswith(field)) + except StopIteration: + raise BadRequest('Unknown filter field: %s' % field) from None + + fieldType = self.getFieldType(filterField.type) + if fieldType.type == 'string' and operator in {'=', '!='}: + operator += '=' + operator = (operator[:-1] if operator[-1:] == '=' else operator) + '=' + + # Validate operator + try: + next(o for o in fieldType.operators if o.key == operator) + except StopIteration: + raise BadRequest('Invalid filter field operator: %s' % operator) from None + + # Validate values + if not isinstance(values, (list, tuple)): + values = [values] + + choiceTypes = {'tag', 'subtitleLanguage', 'audioLanguage', 'resolution'} + filterChoices = self.listFilterChoices(field, libtype) if filterField.type in choiceTypes else [] + + result = [] + + for value in values: + try: + if fieldType.type == 'boolean': + value = int(utils.cast(bool, value)) + elif fieldType.type == 'date': + value = int(utils.toDatetime(value, '%Y-%m-%d').timestamp()) + elif fieldType.type == 'integer': + value = utils.cast(int, value) + elif fieldType.type == 'string': + value = str(value) + elif fieldType.type in choiceTypes: + matchValue = str(value).lower() + for filterChoice in filterChoices: + if matchValue in {filterChoice.key.lower(), filterChoice.title.lower()}: + value = filterChoice.key + break + result.append(value) + except ValueError: + raise BadRequest('Invalid filter value: %s, value should be type %s' + % (value, fieldType.type)) from None + + return field + operator[:-1], value + + def _validateSortValue(self, sort, libtype=None): + """ Validates a filter sort value is available for the library. Returns the validated sort value. + """ + match = re.match(r'([a-zA-Z]+):?([a-zA-Z]*)', sort) + if not match: + raise BadRequest('Invalid filter sort: %s' % sort) + sortField, sortDir = match.groups() + + # Validate sort field + try: + filterSort = next(f for f in self.listSorts(libtype) if f.key == sortField) + except StopIteration: + raise BadRequest('Unknown sort field: %s' % sortField) from None + + # Validate sort direction + if not sortDir: + sortDir = filterSort.defaultDirection + + if sortDir not in {'asc', 'desc'}: + raise BadRequest('Invalid sort direction: %s' % sortDir) + + return '%s:%s' % (sortField, sortDir) def hubSearch(self, query, mediatype=None, limit=None): """ Returns the hub search results for this library. See :func:`~plexapi.server.PlexServer.search` @@ -647,7 +784,7 @@ def search(self, title=None, sort=None, maxresults=None, album, track; optional). container_start (int): default 0 container_size (int): default X_PLEX_CONTAINER_SIZE in your config file. - **kwargs (dict): Any of the available filters for the current library section. Partial string + **kwargs (dict): Any of the available custom filters for the current library section. Partial string matches allowed. Multiple matches OR together. Negative filtering also possible, just add an exclamation mark to the end of filter name, e.g. `resolution!=1x1`. @@ -666,18 +803,19 @@ def search(self, title=None, sort=None, maxresults=None, * year: List of years to search within ([yyyy, ...]). [all] Raises: - :exc:`~plexapi.exceptions.BadRequest`: When applying an unknown filter. + :exc:`~plexapi.exceptions.BadRequest`: When applying an unknown sort or filter. """ # cleanup the core arguments args = {} - for category, value in list(kwargs.items()): - if category.split('__')[-1] not in OPERATORS: - args[category] = self._cleanSearchFilter(category, value, libtype) - del kwargs[category] + for field, values in list(kwargs.items()): + if field.split('__')[-1] not in OPERATORS: + _field, _values = self._validateFieldValue(field, values, libtype) + args[_field] = _values + del kwargs[field] if title is not None: args['title'] = title if sort is not None: - args['sort'] = self._cleanSearchSort(sort) + args['sort'] = self._validateSortValue(sort, libtype) if libtype is not None: args['type'] = utils.searchType(libtype) @@ -713,47 +851,6 @@ def search(self, title=None, sort=None, maxresults=None, return results - def _cleanSearchFilter(self, category, value, libtype=None): - # check a few things before we begin - categories = [x.key for x in self.filterFields()] - booleanFilters = [x.key for x in self.filterFields() if x.type == 'boolean'] - if category.endswith('!'): - if category[:-1] not in categories: - raise BadRequest('Unknown filter category: %s' % category[:-1]) - elif category not in categories: - raise BadRequest('Unknown filter category: %s' % category) - if category in booleanFilters: - return '1' if value else '0' - if not isinstance(value, (list, tuple)): - value = [value] - # convert list of values to list of keys or ids - result = set() - choices = self.listChoices(category, libtype) - lookup = {c.title.lower(): unquote(unquote(c.key)) for c in choices} - allowed = {c.key for c in choices} - for item in value: - item = str((item.id or item.tag) if isinstance(item, media.MediaTag) else item).lower() - # find most logical choice(s) to use in url - if item in allowed: result.add(item); continue - if item in lookup: result.add(lookup[item]); continue - matches = [k for t, k in lookup.items() if item in t] - if matches: map(result.add, matches); continue - # nothing matched; use raw item value - log.debug('Filter value not listed, using raw item value: %s' % item) - result.add(item) - return ','.join(result) - - def _cleanSearchSort(self, sort): - sort = '%s:asc' % sort if ':' not in sort else sort - scol, sdir = sort.lower().split(':') - allowedSort = [sort.key for sort in self._sorts()] - lookup = {s.lower(): s for s in allowedSort} - if scol not in lookup: - raise BadRequest('Unknown sort column: %s' % scol) - if sdir not in ('asc', 'desc'): - raise BadRequest('Unknown sort dir: %s' % sdir) - return '%s:%s' % (lookup[scol], sdir) - def _locations(self): """ Returns a list of :class:`~plexapi.library.Location` objects """ @@ -812,10 +909,11 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so raise BadRequest('The requested library is not allowed to sync') args = {} - for category, value in kwargs.items(): - args[category] = self._cleanSearchFilter(category, value, libtype) + for field, values in kwargs.items(): + _field, _values = self._validateFieldValue(field, values, libtype) + args[_field] = _values if sort is not None: - args['sort'] = self._cleanSearchSort(sort) + args['sort'] = self._validateSortValue(sort, libtype) if libtype is not None: args['type'] = utils.searchType(libtype) From 146a184838f73f2abca5b4eeeb290340af2404db Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 10 Mar 2021 23:56:43 -0800 Subject: [PATCH 030/356] Add searchMovies method to MovieSection --- plexapi/library.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plexapi/library.py b/plexapi/library.py index 9381b65d2..932a1c1fc 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -969,6 +969,10 @@ class MovieSection(LibrarySection): METADATA_TYPE = 'movie' CONTENT_TYPE = 'video' + def searchMovies(self, **kwargs): + """ Search for a movie. See :func:`~plexapi.library.LibrarySection.search` for usage. """ + return self.search(libtype='movie', **kwargs) + def sync(self, videoQuality, limit=None, unwatched=False, **kwargs): """ Add current Movie library section as sync item for specified device. See description of :func:`~plexapi.library.LibrarySection.search` for details about filtering / sorting and From 13cc13c57dbd753910294590f7d50d47e4a3d7eb Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 10 Mar 2021 23:56:54 -0800 Subject: [PATCH 031/356] Add searchSeasons method to ShowSection --- plexapi/library.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plexapi/library.py b/plexapi/library.py index 932a1c1fc..e8fa094f4 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1026,6 +1026,10 @@ def searchShows(self, **kwargs): """ Search for a show. See :func:`~plexapi.library.LibrarySection.search` for usage. """ return self.search(libtype='show', **kwargs) + def searchSeasons(self, **kwargs): + """ Search for a season. See :func:`~plexapi.library.LibrarySection.search` for usage. """ + return self.search(libtype='season', **kwargs) + def searchEpisodes(self, **kwargs): """ Search for an episode. See :func:`~plexapi.library.LibrarySection.search` for usage. """ return self.search(libtype='episode', **kwargs) From 1e8d98f074c88c77f388b559b6fc6eeb75c9e38a Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 12:02:37 -0800 Subject: [PATCH 032/356] Add & operator for library search --- plexapi/library.py | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index e8fa094f4..224f43b2d 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -684,9 +684,9 @@ def listOperators(self, fieldType): def _validateFieldValue(self, field, values, libtype=None): """ Validates a filter field and value is available as a custom filter for the library. - Returns the validated field and value. + Returns the validated field and value as a URL param. """ - match = re.match(r'([a-zA-Z\.]+)([!<>=]*)', field) + match = re.match(r'([a-zA-Z\.]+)([!<>=&]*)', field) if not match: raise BadRequest('Invalid filter field: %s' % field) field, operator = match.groups() @@ -695,9 +695,15 @@ def _validateFieldValue(self, field, values, libtype=None): try: filterField = next(f for f in self.listFields(libtype) if f.key.endswith(field)) except StopIteration: - raise BadRequest('Unknown filter field: %s' % field) from None + raise BadRequest('Unknown filter field "%s" for libtype "%s"' % (field, libtype)) from None + field = filterField.key fieldType = self.getFieldType(filterField.type) + + and_operator = False + if operator == '&': + and_operator = True + operator = '' if fieldType.type == 'string' and operator in {'=', '!='}: operator += '=' operator = (operator[:-1] if operator[-1:] == '=' else operator) + '=' @@ -706,7 +712,7 @@ def _validateFieldValue(self, field, values, libtype=None): try: next(o for o in fieldType.operators if o.key == operator) except StopIteration: - raise BadRequest('Invalid filter field operator: %s' % operator) from None + raise BadRequest('Invalid operator "%s" for filter field "%s"' % (operator, field)) from None # Validate values if not isinstance(values, (list, tuple)): @@ -738,7 +744,12 @@ def _validateFieldValue(self, field, values, libtype=None): raise BadRequest('Invalid filter value: %s, value should be type %s' % (value, fieldType.type)) from None - return field + operator[:-1], value + if and_operator: + args = {field + operator[:-1]: result} + return urlencode(args, doseq=True) + else: + args = {field + operator[:-1]: ','.join(result)} + return urlencode(args) def _validateSortValue(self, sort, libtype=None): """ Validates a filter sort value is available for the library. Returns the validated sort value. @@ -752,14 +763,14 @@ def _validateSortValue(self, sort, libtype=None): try: filterSort = next(f for f in self.listSorts(libtype) if f.key == sortField) except StopIteration: - raise BadRequest('Unknown sort field: %s' % sortField) from None + raise BadRequest('Unknown sort field "%s" for libtype "%s"' % (sortField, libtype)) from None # Validate sort direction if not sortDir: sortDir = filterSort.defaultDirection if sortDir not in {'asc', 'desc'}: - raise BadRequest('Invalid sort direction: %s' % sortDir) + raise BadRequest('Invalid sort direction: %s, must be "asc" or "desc"' % sortDir) return '%s:%s' % (sortField, sortDir) @@ -805,12 +816,13 @@ def search(self, title=None, sort=None, maxresults=None, Raises: :exc:`~plexapi.exceptions.BadRequest`: When applying an unknown sort or filter. """ + libtype = libtype or self.TYPE # cleanup the core arguments args = {} + filter_args = [] for field, values in list(kwargs.items()): if field.split('__')[-1] not in OPERATORS: - _field, _values = self._validateFieldValue(field, values, libtype) - args[_field] = _values + filter_args.append(self._validateFieldValue(field, values, libtype)) del kwargs[field] if title is not None: args['title'] = title @@ -825,8 +837,12 @@ def search(self, title=None, sort=None, maxresults=None, if maxresults is not None: container_size = min(container_size, maxresults) + + key = '/library/sections/%s/all%s' % (self.key, utils.joinArgs(args)) + if filter_args: + key += '&%s' % '&'.join(filter_args) + while True: - key = '/library/sections/%s/all%s' % (self.key, utils.joinArgs(args)) subresults = self.fetchItems(key, container_start=container_start, container_size=container_size, **kwargs) if not len(subresults): @@ -909,9 +925,9 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so raise BadRequest('The requested library is not allowed to sync') args = {} + filter_args = [] for field, values in kwargs.items(): - _field, _values = self._validateFieldValue(field, values, libtype) - args[_field] = _values + filter_args.append(self._validateFieldValue(field, values, libtype)) if sort is not None: args['sort'] = self._validateSortValue(sort, libtype) if libtype is not None: @@ -925,9 +941,11 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so sync_item.metadataType = self.METADATA_TYPE sync_item.machineIdentifier = self._server.machineIdentifier - key = '/library/sections/%s/all' % self.key + key = '/library/sections/%s/all%s' % (self.key, utils.joinArgs(args)) + if filter_args: + key += '&%s' % '&'.join(filter_args) - sync_item.location = 'library://%s/directory/%s' % (self.uuid, quote_plus(key + utils.joinArgs(args))) + sync_item.location = 'library://%s/directory/%s' % (self.uuid, quote_plus(key)) sync_item.policy = policy sync_item.mediaSettings = mediaSettings From c77dc4a595fcc1ef468e8433098e639f69427073 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 12:20:56 -0800 Subject: [PATCH 033/356] Cast librarySectionID to int --- plexapi/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/base.py b/plexapi/base.py index 96dbad604..889cfa317 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -204,7 +204,7 @@ def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, data = self._server.query(ekey, params=url_kw) items = self.findItems(data, cls, ekey, **kwargs) - librarySectionID = data.attrib.get('librarySectionID') + librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) if librarySectionID: for item in items: item.librarySectionID = librarySectionID From b35dc5360226c163091966db7da1ff08dfe02f1f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 12:22:44 -0800 Subject: [PATCH 034/356] Make sure filter values are casted to string --- plexapi/library.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 224f43b2d..1a83fdba9 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -699,7 +699,7 @@ def _validateFieldValue(self, field, values, libtype=None): field = filterField.key fieldType = self.getFieldType(filterField.type) - + and_operator = False if operator == '&': and_operator = True @@ -739,7 +739,7 @@ def _validateFieldValue(self, field, values, libtype=None): if matchValue in {filterChoice.key.lower(), filterChoice.title.lower()}: value = filterChoice.key break - result.append(value) + result.append(str(value)) except ValueError: raise BadRequest('Invalid filter value: %s, value should be type %s' % (value, fieldType.type)) from None From ee161e46ed01adaceea5e675059d3586c26aa075 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 12:23:08 -0800 Subject: [PATCH 035/356] Fix searching using MediaTag --- plexapi/library.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plexapi/library.py b/plexapi/library.py index 1a83fdba9..47b8c2029 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -734,6 +734,7 @@ def _validateFieldValue(self, field, values, libtype=None): elif fieldType.type == 'string': value = str(value) elif fieldType.type in choiceTypes: + value = str((value.id or value.tag) if isinstance(value, media.MediaTag) else value) matchValue = str(value).lower() for filterChoice in filterChoices: if matchValue in {filterChoice.key.lower(), filterChoice.title.lower()}: From c4f4743325f703d8a2c8987931b28339b344a054 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 12:24:02 -0800 Subject: [PATCH 036/356] Fix sorting with libtype --- plexapi/library.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 47b8c2029..a57ff98f8 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -755,7 +755,7 @@ def _validateFieldValue(self, field, values, libtype=None): def _validateSortValue(self, sort, libtype=None): """ Validates a filter sort value is available for the library. Returns the validated sort value. """ - match = re.match(r'([a-zA-Z]+):?([a-zA-Z]*)', sort) + match = re.match(r'([a-zA-Z\.]+):?([a-zA-Z]*)', sort) if not match: raise BadRequest('Invalid filter sort: %s' % sort) sortField, sortDir = match.groups() @@ -1053,13 +1053,13 @@ def searchEpisodes(self, **kwargs): """ Search for an episode. See :func:`~plexapi.library.LibrarySection.search` for usage. """ return self.search(libtype='episode', **kwargs) - def recentlyAdded(self, libtype='episode', maxresults=50): + def recentlyAdded(self, maxresults=50): """ Returns a list of recently added episodes from this library section. Parameters: maxresults (int): Max number of items to return (default 50). """ - return self.search(sort='episode.addedAt:desc', libtype=libtype, maxresults=maxresults) + return self.search(sort='episode.addedAt:desc', maxresults=maxresults) def sync(self, videoQuality, limit=None, unwatched=False, **kwargs): """ Add current Show library section as sync item for specified device. From ddc5e98ab9f7fa35ae3f0dfd5227b7cdbaba6d9c Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 12:24:32 -0800 Subject: [PATCH 037/356] Update library tests --- tests/test_library.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index 7e5a91afa..57cf03987 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -31,7 +31,7 @@ def test_library_sectionByID_with_attrs(plex, movies): movies.composite, prefix="/library/sections/", contains="/composite/" ) assert utils.is_datetime(movies.createdAt) - assert movies.filters == "1" + assert movies.filters is True assert movies._initpath == "/library/sections" assert utils.is_int(movies.key) assert movies.language == "en-US" @@ -47,8 +47,8 @@ def test_library_sectionByID_with_attrs(plex, movies): assert len(movies.uuid) == 36 -def test_library_section_get_movie(plex): - assert plex.library.section("Movies").get("Sita Sings the Blues") +def test_library_section_get_movie(movies): + assert movies.get("Sita Sings the Blues") def test_library_section_movies_all(movies): @@ -229,10 +229,10 @@ def test_library_PhotoSection_searchPhotos(photos, photoalbum): assert len(photos.searchPhotos(title)) -def test_library_and_section_search_for_movie(plex): - find = "16 blocks" +def test_library_and_section_search_for_movie(plex, movies): + find = "Elephants Dream" l_search = plex.library.search(find) - s_search = plex.library.section("Movies").search(find) + s_search = movies.search(find) assert l_search == s_search @@ -258,17 +258,16 @@ def test_library_editAdvanced_default(movies): assert str(setting.value) == str(setting.default) -def test_search_with_weird_a(plex): +def test_search_with_weird_a(plex, tvshows): ep_title = "Coup de Grâce" result_root = plex.search(ep_title) - result_shows = plex.library.section("TV Shows").searchEpisodes(title=ep_title) + result_shows = tvshows.searchEpisodes(title=ep_title) assert result_root assert result_shows assert result_root == result_shows -def test_crazy_search(plex, movie): - movies = plex.library.section("Movies") +def test_crazy_search(plex, movies, movie): assert movie in movies.search( actor=movie.actors[0], sort="titleSort" ), "Unable to search movie by actor." @@ -287,8 +286,7 @@ def test_crazy_search(plex, movie): assert len(movies.search(container_start=2, container_size=1)) == 2 -def test_library_section_timeline(plex): - movies = plex.library.section("Movies") +def test_library_section_timeline(plex, movies): tl = movies.timeline() assert tl.TAG == "LibraryTimeline" assert tl.size > 0 From 9e063bfcd64e1420b90a8bad5337f4d546b48815 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 13:04:04 -0800 Subject: [PATCH 038/356] Separate validate functions --- plexapi/library.py | 135 +++++++++++++++++++++++++-------------------- 1 file changed, 74 insertions(+), 61 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index a57ff98f8..5150a2e57 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -603,6 +603,27 @@ def getFilterType(self, libtype=None): except StopIteration: raise BadRequest('Invalid libtype for this library: %s' % libtype) from None + def fieldTypes(self): + """ Returns a list of available :class:`~plexapi.library.FilteringFieldType` for this library section. """ + if self._fieldTypes is None: + self._loadFilters() + return self._fieldTypes + + def getFieldType(self, fieldType): + """ Returns a :class:`~plexapi.library.FilteringFieldType` for a specified fieldType. + + Parameters: + fieldType (str): The data type for the field (tag, integer, string, boolean, date, + subtitleLanguage, audioLanguage, resolution). + + Raises: + :exc:`~plexapi.exceptions.BadRequest`: Invalid libtype for this library. + """ + try: + return next(f for f in self.fieldTypes() if f.type == fieldType) + except StopIteration: + raise BadRequest('Invalid fieldType for this library: %s' % fieldType) from None + def listFilters(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringFilter` for a specified libtype. @@ -630,6 +651,15 @@ def listFields(self, libtype=None): """ return self.getFilterType(libtype).fields + def listOperators(self, fieldType): + """ Returns a list of available :class:`~plexapi.library.FilteringOperator` for a specified fieldType. + + Parameters: + fieldType (str): The data type for the field (tag, integer, string, boolean, date, + subtitleLanguage, audioLanguage, resolution). + """ + return self.getFieldType(fieldType).operators + def listFilterChoices(self, field, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilterChoice` for a specified :class:`~plexapi.library.FilteringFilter` or filter field. @@ -652,52 +682,35 @@ def listFilterChoices(self, field, libtype=None): data = self._server.query(field.key) return self.findItems(data, FilterChoice) - def fieldTypes(self): - """ Returns a list of available :class:`~plexapi.library.FilteringFieldType` for this library section. """ - if self._fieldTypes is None: - self._loadFilters() - return self._fieldTypes - - def getFieldType(self, fieldType): - """ Returns a :class:`~plexapi.library.FilteringFieldType` for a specified fieldType. - - Parameters: - fieldType (str): The data type for the field (tag, integer, string, boolean, date, - subtitleLanguage, audioLanguage, resolution). - - Raises: - :exc:`~plexapi.exceptions.BadRequest`: Invalid libtype for this library. - """ - try: - return next(f for f in self.fieldTypes() if f.type == fieldType) - except StopIteration: - raise BadRequest('Invalid fieldType for this library: %s' % fieldType) from None - - def listOperators(self, fieldType): - """ Returns a list of available :class:`~plexapi.library.FilteringOperator` for a specified fieldType. - - Parameters: - fieldType (str): The data type for the field (tag, integer, string, boolean, date, - subtitleLanguage, audioLanguage, resolution). - """ - return self.getFieldType(fieldType).operators - - def _validateFieldValue(self, field, values, libtype=None): - """ Validates a filter field and value is available as a custom filter for the library. - Returns the validated field and value as a URL param. + def _validateFilterField(self, field, values, libtype=None): + """ Validates a filter field and values are available as a custom filter for the library. + Returns the validated field and values as a URL param. """ match = re.match(r'([a-zA-Z\.]+)([!<>=&]*)', field) if not match: raise BadRequest('Invalid filter field: %s' % field) field, operator = match.groups() - # Validate field try: filterField = next(f for f in self.listFields(libtype) if f.key.endswith(field)) except StopIteration: raise BadRequest('Unknown filter field "%s" for libtype "%s"' % (field, libtype)) from None field = filterField.key + operator = self._validateFieldOperator(filterField, operator) + result = self._validateFieldValue(filterField, values, libtype) + + if operator.startswith('&'): + args = {field + operator[:-1]: result} + return urlencode(args, doseq=True) + else: + args = {field + operator[:-1]: ','.join(result)} + return urlencode(args) + + def _validateFieldOperator(self, filterField, operator): + """ Validates filter operator is in the available operators. + Returns the validated operator. + """ fieldType = self.getFieldType(filterField.type) and_operator = False @@ -708,23 +721,32 @@ def _validateFieldValue(self, field, values, libtype=None): operator += '=' operator = (operator[:-1] if operator[-1:] == '=' else operator) + '=' - # Validate operator try: next(o for o in fieldType.operators if o.key == operator) except StopIteration: - raise BadRequest('Invalid operator "%s" for filter field "%s"' % (operator, field)) from None + raise BadRequest('Invalid operator "%s" for filter field "%s"' + % (operator, filterField.key)) from None + + return '&=' if and_operator else operator - # Validate values + def _validateFieldValue(self, filterField, values, libtype=None): + """ Validates filter values are the correct datatype and in the available filter choices. + Returns the validated list of values. + """ if not isinstance(values, (list, tuple)): values = [values] + fieldType = self.getFieldType(filterField.type) choiceTypes = {'tag', 'subtitleLanguage', 'audioLanguage', 'resolution'} - filterChoices = self.listFilterChoices(field, libtype) if filterField.type in choiceTypes else [] + if fieldType.type in choiceTypes: + filterChoices = self.listFilterChoices(filterField.key, libtype) + else: + filterChoices = [] - result = [] + results = [] - for value in values: - try: + try: + for value in values: if fieldType.type == 'boolean': value = int(utils.cast(bool, value)) elif fieldType.type == 'date': @@ -735,22 +757,15 @@ def _validateFieldValue(self, field, values, libtype=None): value = str(value) elif fieldType.type in choiceTypes: value = str((value.id or value.tag) if isinstance(value, media.MediaTag) else value) - matchValue = str(value).lower() - for filterChoice in filterChoices: - if matchValue in {filterChoice.key.lower(), filterChoice.title.lower()}: - value = filterChoice.key - break - result.append(str(value)) - except ValueError: - raise BadRequest('Invalid filter value: %s, value should be type %s' - % (value, fieldType.type)) from None - - if and_operator: - args = {field + operator[:-1]: result} - return urlencode(args, doseq=True) - else: - args = {field + operator[:-1]: ','.join(result)} - return urlencode(args) + matchValue = value.lower() + value = next((f.key for f in filterChoices + if matchValue in {f.key.lower(), f.title.lower()}), value) + results.append(str(value)) + except ValueError: + raise BadRequest('Invalid filter value "%s" for filter field "%s", value should be type %s' + % (value, filterField.key, fieldType.type)) from None + + return results def _validateSortValue(self, sort, libtype=None): """ Validates a filter sort value is available for the library. Returns the validated sort value. @@ -760,13 +775,11 @@ def _validateSortValue(self, sort, libtype=None): raise BadRequest('Invalid filter sort: %s' % sort) sortField, sortDir = match.groups() - # Validate sort field try: filterSort = next(f for f in self.listSorts(libtype) if f.key == sortField) except StopIteration: raise BadRequest('Unknown sort field "%s" for libtype "%s"' % (sortField, libtype)) from None - # Validate sort direction if not sortDir: sortDir = filterSort.defaultDirection @@ -823,7 +836,7 @@ def search(self, title=None, sort=None, maxresults=None, filter_args = [] for field, values in list(kwargs.items()): if field.split('__')[-1] not in OPERATORS: - filter_args.append(self._validateFieldValue(field, values, libtype)) + filter_args.append(self._validateFilterField(field, values, libtype)) del kwargs[field] if title is not None: args['title'] = title @@ -928,7 +941,7 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so args = {} filter_args = [] for field, values in kwargs.items(): - filter_args.append(self._validateFieldValue(field, values, libtype)) + filter_args.append(self._validateFilterField(field, values, libtype)) if sort is not None: args['sort'] = self._validateSortValue(sort, libtype) if libtype is not None: From 0de234911321223bd1f2844ead15eadf244664f0 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 13:06:16 -0800 Subject: [PATCH 039/356] Rename validateSortField --- plexapi/library.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 5150a2e57..8aadc1d15 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -767,8 +767,9 @@ def _validateFieldValue(self, filterField, values, libtype=None): return results - def _validateSortValue(self, sort, libtype=None): - """ Validates a filter sort value is available for the library. Returns the validated sort value. + def _validateSortField(self, sort, libtype=None): + """ Validates a filter sort field is available for the library. + Returns the validated sort field. """ match = re.match(r'([a-zA-Z\.]+):?([a-zA-Z]*)', sort) if not match: @@ -841,7 +842,7 @@ def search(self, title=None, sort=None, maxresults=None, if title is not None: args['title'] = title if sort is not None: - args['sort'] = self._validateSortValue(sort, libtype) + args['sort'] = self._validateSortField(sort, libtype) if libtype is not None: args['type'] = utils.searchType(libtype) @@ -943,7 +944,7 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so for field, values in kwargs.items(): filter_args.append(self._validateFilterField(field, values, libtype)) if sort is not None: - args['sort'] = self._validateSortValue(sort, libtype) + args['sort'] = self._validateSortField(sort, libtype) if libtype is not None: args['type'] = utils.searchType(libtype) From 95c47c67c7eb8e4819e35476d5d5dea644da56ad Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 13:06:29 -0800 Subject: [PATCH 040/356] Remove unused import --- plexapi/library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 8aadc1d15..bd1133cfa 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- import re -from urllib.parse import quote, quote_plus, unquote, urlencode +from urllib.parse import quote, quote_plus, urlencode from plexapi import X_PLEX_CONTAINER_SIZE, log, media, utils from plexapi.base import OPERATORS, PlexObject From b3dd52680ef609d0c66f423fa4fc7c49b3aed2de Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 13:09:11 -0800 Subject: [PATCH 041/356] Update validate value exception message --- plexapi/library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index bd1133cfa..8dfa79811 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -762,7 +762,7 @@ def _validateFieldValue(self, filterField, values, libtype=None): if matchValue in {f.key.lower(), f.title.lower()}), value) results.append(str(value)) except ValueError: - raise BadRequest('Invalid filter value "%s" for filter field "%s", value should be type %s' + raise BadRequest('Invalid value "%s" for filter field "%s", value should be type %s' % (value, filterField.key, fieldType.type)) from None return results From 6d4c8e5ea110d8305b1636504073218659d53f2a Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 13:12:41 -0800 Subject: [PATCH 042/356] Fix flake8 search complexity --- plexapi/library.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 8dfa79811..02b2d9656 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -853,10 +853,9 @@ def search(self, title=None, sort=None, maxresults=None, if maxresults is not None: container_size = min(container_size, maxresults) - key = '/library/sections/%s/all%s' % (self.key, utils.joinArgs(args)) - if filter_args: - key += '&%s' % '&'.join(filter_args) - + joined_filter_args = '&' + '&'.join(filter_args) if filter_args else '' + key = '/library/sections/%s/all%s%s' % (self.key, utils.joinArgs(args), joined_filter_args) + while True: subresults = self.fetchItems(key, container_start=container_start, container_size=container_size, **kwargs) @@ -956,9 +955,8 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so sync_item.metadataType = self.METADATA_TYPE sync_item.machineIdentifier = self._server.machineIdentifier - key = '/library/sections/%s/all%s' % (self.key, utils.joinArgs(args)) - if filter_args: - key += '&%s' % '&'.join(filter_args) + joined_filter_args = '&' + '&'.join(filter_args) if filter_args else '' + key = '/library/sections/%s/all%s%s' % (self.key, utils.joinArgs(args), joined_filter_args) sync_item.location = 'library://%s/directory/%s' % (self.uuid, quote_plus(key)) sync_item.policy = policy From 6e501728a0f09c1a32d18300777c660d6113ecc5 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 13:27:08 -0800 Subject: [PATCH 043/356] Cast librarySectionID to int --- plexapi/audio.py | 2 +- plexapi/collection.py | 2 +- plexapi/library.py | 2 +- plexapi/photo.py | 4 ++-- plexapi/video.py | 2 +- tools/plex-bootstraptest.py | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/plexapi/audio.py b/plexapi/audio.py index d76f7f1c5..71d01b622 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -52,7 +52,7 @@ def _loadData(self, data): self.index = utils.cast(int, data.attrib.get('index')) self.key = data.attrib.get('key', '') self.lastViewedAt = utils.toDatetime(data.attrib.get('lastViewedAt')) - self.librarySectionID = data.attrib.get('librarySectionID') + self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) self.librarySectionKey = data.attrib.get('librarySectionKey') self.librarySectionTitle = data.attrib.get('librarySectionTitle') self.listType = 'audio' diff --git a/plexapi/collection.py b/plexapi/collection.py index 52762aed1..b342e73e8 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -59,7 +59,7 @@ def _loadData(self, data): self.index = utils.cast(int, data.attrib.get('index')) self.key = data.attrib.get('key', '').replace('/children', '') # FIX_BUG_50 self.labels = self.findItems(data, media.Label) - self.librarySectionID = data.attrib.get('librarySectionID') + self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) self.librarySectionKey = data.attrib.get('librarySectionKey') self.librarySectionTitle = data.attrib.get('librarySectionTitle') self.maxYear = utils.cast(int, data.attrib.get('maxYear')) diff --git a/plexapi/library.py b/plexapi/library.py index 02b2d9656..9cd5ac109 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -384,7 +384,7 @@ def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, items = self.findItems(data, cls, ekey, **kwargs) - librarySectionID = data.attrib.get('librarySectionID') + librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) if librarySectionID: for item in items: item.librarySectionID = librarySectionID diff --git a/plexapi/photo.py b/plexapi/photo.py index 398cd7daf..a83073339 100644 --- a/plexapi/photo.py +++ b/plexapi/photo.py @@ -46,7 +46,7 @@ def _loadData(self, data): self.guid = data.attrib.get('guid') self.index = utils.cast(int, data.attrib.get('index')) self.key = data.attrib.get('key', '').replace('/children', '') # FIX_BUG_50 - self.librarySectionID = data.attrib.get('librarySectionID') + self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) self.librarySectionKey = data.attrib.get('librarySectionKey') self.librarySectionTitle = data.attrib.get('librarySectionTitle') self.listType = 'photo' @@ -186,7 +186,7 @@ def _loadData(self, data): self.guid = data.attrib.get('guid') self.index = utils.cast(int, data.attrib.get('index')) self.key = data.attrib.get('key', '') - self.librarySectionID = data.attrib.get('librarySectionID') + self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) self.librarySectionKey = data.attrib.get('librarySectionKey') self.librarySectionTitle = data.attrib.get('librarySectionTitle') self.listType = 'photo' diff --git a/plexapi/video.py b/plexapi/video.py index ed4fbf1dc..e42ca45fe 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -48,7 +48,7 @@ def _loadData(self, data): self.guid = data.attrib.get('guid') self.key = data.attrib.get('key', '') self.lastViewedAt = utils.toDatetime(data.attrib.get('lastViewedAt')) - self.librarySectionID = data.attrib.get('librarySectionID') + self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) self.librarySectionKey = data.attrib.get('librarySectionKey') self.librarySectionTitle = data.attrib.get('librarySectionTitle') self.listType = 'video' diff --git a/tools/plex-bootstraptest.py b/tools/plex-bootstraptest.py index 1ff4da297..a2835aff3 100755 --- a/tools/plex-bootstraptest.py +++ b/tools/plex-bootstraptest.py @@ -295,7 +295,7 @@ def alert_callback(data): cnt = 1 if entry["type"] == SEARCHTYPES["show"]: show = server.library.sectionByID( - str(entry["sectionID"]) + entry["sectionID"] ).get(entry["title"]) cnt = show.leafCount bar.update(cnt) From 42163b85e269e93ae0c5fcd6c96fda4d880c85e0 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 13:28:25 -0800 Subject: [PATCH 044/356] Fix smart playlist listFilterChoices --- plexapi/playlist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 36179dc58..531de39cf 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -237,7 +237,7 @@ def _createSmart(cls, server, title, section, limit=None, **kwargs): uri = uri + '&limit=%s' % str(limit) for category, value in kwargs.items(): - sectionChoices = section.listChoices(category) + sectionChoices = section.listFilterChoices(category) for choice in sectionChoices: if str(choice.title).lower() == str(value).lower(): uri = uri + '&%s=%s' % (category.lower(), str(choice.key)) From e5607e10dbce4fc65394237cd64bfa6dd4cf0d81 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 15:19:08 -0800 Subject: [PATCH 045/356] Improve matching of libtype for filter field and sort --- plexapi/library.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 9cd5ac109..bfa22a7e1 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -686,10 +686,11 @@ def _validateFilterField(self, field, values, libtype=None): """ Validates a filter field and values are available as a custom filter for the library. Returns the validated field and values as a URL param. """ - match = re.match(r'([a-zA-Z\.]+)([!<>=&]*)', field) + match = re.match(r'(?:([a-zA-Z]*)\.)?([a-zA-Z]+)([!<>=&]*)', field) if not match: raise BadRequest('Invalid filter field: %s' % field) - field, operator = match.groups() + _libtype, field, operator = match.groups() + libtype = _libtype or libtype try: filterField = next(f for f in self.listFields(libtype) if f.key.endswith(field)) @@ -777,10 +778,12 @@ def _validateSortField(self, sort, libtype=None): sortField, sortDir = match.groups() try: - filterSort = next(f for f in self.listSorts(libtype) if f.key == sortField) + filterSort = next(f for f in self.listSorts(libtype) if f.key.endswith(sortField)) except StopIteration: raise BadRequest('Unknown sort field "%s" for libtype "%s"' % (sortField, libtype)) from None + sortField = filterSort.key + if not sortDir: sortDir = filterSort.defaultDirection From cd5b0e38986a6dcd3e7b8c7c133af0dd228e2da0 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 15:37:36 -0800 Subject: [PATCH 046/356] Update doc strings for list filter methods --- plexapi/library.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/plexapi/library.py b/plexapi/library.py index bfa22a7e1..cb212bdb6 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -626,43 +626,87 @@ def getFieldType(self, fieldType): def listFilters(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringFilter` for a specified libtype. + This is the list of options in the filter dropdown menu + (`screenshot `_). Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, artist, album, track, photoalbum, photo). + + Example: + + .. code-block:: python + + availableFilters = [f.filter for f in library.listFilters()] + print("Available filter fields:", availableFilters) + """ return self.getFilterType(libtype).filters def listSorts(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringSort` for a specified libtype. + This is the list of options in the sorting dropdown menu + (`screenshot `_). Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, artist, album, track, photoalbum, photo). + + Example: + + .. code-block:: python + + availableSorts = [f.key for f in library.listSorts()] + print("Available sort fields:", availableSorts) + """ return self.getFilterType(libtype).sorts def listFields(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringFields` for a specified libtype. + This is the list of options in the custom filter dropdown menu + (`screenshot `_). Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, artist, album, track, photoalbum, photo). + + Example: + + .. code-block:: python + + availableFields = [f.key.split('.')[-1] for f in library.listFields()] + print("Available fields:", availableFields) + """ return self.getFilterType(libtype).fields def listOperators(self, fieldType): """ Returns a list of available :class:`~plexapi.library.FilteringOperator` for a specified fieldType. + This is the list of options in the custom filter operator dropdown menu + (`screenshot `_). Parameters: fieldType (str): The data type for the field (tag, integer, string, boolean, date, subtitleLanguage, audioLanguage, resolution). + + Example: + + .. code-block:: python + + field = 'genre' # Available filter field from listFields() + filterField = next(f for f in library.listFields() if f.key.endswith(field)) + availableOperators = [o.key for o in library.listOperators(filterField.type)] + print("Available operators for %s:" % field, availableOperators) + """ return self.getFieldType(fieldType).operators def listFilterChoices(self, field, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilterChoice` for a specified :class:`~plexapi.library.FilteringFilter` or filter field. + This is the list of available values for a custom filter + (`screenshot `_). Parameters: field (str): :class:`~plexapi.library.FilteringFilter` object, @@ -672,6 +716,15 @@ def listFilterChoices(self, field, libtype=None): Raises: :exc:`~plexapi.exceptions.BadRequest`: Unknown filter field. + + Example: + + .. code-block:: python + + field = 'genre' # Available filter field from listFilters() + availableChoices = [f.title for f in library.listFilterChoices(field)] + print("Available choices for %s:" % field, availableChoices) + """ if isinstance(field, str): try: From 08ea6cad4ca90bdc34d9bb905e5d673cb6d284bd Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 16:33:03 -0800 Subject: [PATCH 047/356] Fallback to assume libtype for a filter --- plexapi/library.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index cb212bdb6..8fc2f31c5 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -748,7 +748,13 @@ def _validateFilterField(self, field, values, libtype=None): try: filterField = next(f for f in self.listFields(libtype) if f.key.endswith(field)) except StopIteration: - raise BadRequest('Unknown filter field "%s" for libtype "%s"' % (field, libtype)) from None + for filterType in reversed(self.filterTypes()): + if filterType.type != libtype: + filterField = next((f for f in filterType.fields if f.key.endswith(field)), None) + break + else: + raise NotFound('Unknown filter field "%s" for libtype "%s"' + % (field, libtype)) from None field = filterField.key operator = self._validateFieldOperator(filterField, operator) From 5cece7d1cece4a16ea4dca5ce123863150edcd43 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 16:33:34 -0800 Subject: [PATCH 048/356] Change unknown search filters to NotFound --- plexapi/library.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 8fc2f31c5..7d9dec537 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -601,7 +601,7 @@ def getFilterType(self, libtype=None): try: return next(f for f in self.filterTypes() if f.type == libtype) except StopIteration: - raise BadRequest('Invalid libtype for this library: %s' % libtype) from None + raise NotFound('Invalid libtype for this library: %s' % libtype) from None def fieldTypes(self): """ Returns a list of available :class:`~plexapi.library.FilteringFieldType` for this library section. """ @@ -622,7 +622,7 @@ def getFieldType(self, fieldType): try: return next(f for f in self.fieldTypes() if f.type == fieldType) except StopIteration: - raise BadRequest('Invalid fieldType for this library: %s' % fieldType) from None + raise NotFound('Invalid fieldType for this library: %s' % fieldType) from None def listFilters(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringFilter` for a specified libtype. @@ -730,7 +730,7 @@ def listFilterChoices(self, field, libtype=None): try: field = next(f for f in self.listFilters(libtype) if f.filter == field) except StopIteration: - raise BadRequest('Unknown filter field: %s' % field) from None + raise NotFound('Unknown filter field: %s' % field) from None data = self._server.query(field.key) return self.findItems(data, FilterChoice) @@ -784,8 +784,8 @@ def _validateFieldOperator(self, filterField, operator): try: next(o for o in fieldType.operators if o.key == operator) except StopIteration: - raise BadRequest('Invalid operator "%s" for filter field "%s"' - % (operator, filterField.key)) from None + raise NotFound('Unknown operator "%s" for filter field "%s"' + % (operator, filterField.key)) from None return '&=' if and_operator else operator @@ -839,7 +839,8 @@ def _validateSortField(self, sort, libtype=None): try: filterSort = next(f for f in self.listSorts(libtype) if f.key.endswith(sortField)) except StopIteration: - raise BadRequest('Unknown sort field "%s" for libtype "%s"' % (sortField, libtype)) from None + raise NotFound('Unknown sort field "%s" for libtype "%s"' + % (sortField, libtype)) from None sortField = filterSort.key @@ -847,7 +848,7 @@ def _validateSortField(self, sort, libtype=None): sortDir = filterSort.defaultDirection if sortDir not in {'asc', 'desc'}: - raise BadRequest('Invalid sort direction: %s, must be "asc" or "desc"' % sortDir) + raise NotFound('unknown sort direction: %s, must be "asc" or "desc"' % sortDir) return '%s:%s' % (sortField, sortDir) @@ -891,7 +892,8 @@ def search(self, title=None, sort=None, maxresults=None, * year: List of years to search within ([yyyy, ...]). [all] Raises: - :exc:`~plexapi.exceptions.BadRequest`: When applying an unknown sort or filter. + :exc:`~plexapi.exceptions.BadRequest`: When the sort or filter is invalid. + :exc:`~plexapi.exceptions.NotFound`: When applying an unknown sort or filter. """ libtype = libtype or self.TYPE # cleanup the core arguments From 2c8c5277b54037ba0e917771c633b114f33308f1 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 16:36:29 -0800 Subject: [PATCH 049/356] Fix build docs --- plexapi/library.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 7d9dec537..64a9cb76c 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -627,7 +627,7 @@ def getFieldType(self, fieldType): def listFilters(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringFilter` for a specified libtype. This is the list of options in the filter dropdown menu - (`screenshot `_). + (`screenshot `__). Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, @@ -646,7 +646,7 @@ def listFilters(self, libtype=None): def listSorts(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringSort` for a specified libtype. This is the list of options in the sorting dropdown menu - (`screenshot `_). + (`screenshot `__). Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, @@ -665,7 +665,7 @@ def listSorts(self, libtype=None): def listFields(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringFields` for a specified libtype. This is the list of options in the custom filter dropdown menu - (`screenshot `_). + (`screenshot `__). Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, @@ -684,7 +684,7 @@ def listFields(self, libtype=None): def listOperators(self, fieldType): """ Returns a list of available :class:`~plexapi.library.FilteringOperator` for a specified fieldType. This is the list of options in the custom filter operator dropdown menu - (`screenshot `_). + (`screenshot `__). Parameters: fieldType (str): The data type for the field (tag, integer, string, boolean, date, @@ -706,7 +706,7 @@ def listFilterChoices(self, field, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilterChoice` for a specified :class:`~plexapi.library.FilteringFilter` or filter field. This is the list of available values for a custom filter - (`screenshot `_). + (`screenshot `__). Parameters: field (str): :class:`~plexapi.library.FilteringFilter` object, From 86072c2cfb5e01b8f7a00e8f6e4abf3bcd67e159 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 17:43:16 -0800 Subject: [PATCH 050/356] Move libtype to validate functions --- plexapi/library.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 64a9cb76c..8679f903c 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -743,7 +743,7 @@ def _validateFilterField(self, field, values, libtype=None): if not match: raise BadRequest('Invalid filter field: %s' % field) _libtype, field, operator = match.groups() - libtype = _libtype or libtype + libtype = _libtype or libtype or self.TYPE try: filterField = next(f for f in self.listFields(libtype) if f.key.endswith(field)) @@ -831,10 +831,11 @@ def _validateSortField(self, sort, libtype=None): """ Validates a filter sort field is available for the library. Returns the validated sort field. """ - match = re.match(r'([a-zA-Z\.]+):?([a-zA-Z]*)', sort) + match = re.match(r'(?:([a-zA-Z]*)\.)?([a-zA-Z]+):?([a-zA-Z]*)', sort) if not match: raise BadRequest('Invalid filter sort: %s' % sort) - sortField, sortDir = match.groups() + _libtype, sortField, sortDir = match.groups() + libtype = _libtype or libtype or self.TYPE try: filterSort = next(f for f in self.listSorts(libtype) if f.key.endswith(sortField)) @@ -895,7 +896,6 @@ def search(self, title=None, sort=None, maxresults=None, :exc:`~plexapi.exceptions.BadRequest`: When the sort or filter is invalid. :exc:`~plexapi.exceptions.NotFound`: When applying an unknown sort or filter. """ - libtype = libtype or self.TYPE # cleanup the core arguments args = {} filter_args = [] From da5699cd0d2238dcddae4967918a90eb908f0514 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 20:32:07 -0800 Subject: [PATCH 051/356] Fix joining search params --- plexapi/library.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 8679f903c..dc5580927 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -917,9 +917,11 @@ def search(self, title=None, sort=None, maxresults=None, if maxresults is not None: container_size = min(container_size, maxresults) - joined_filter_args = '&' + '&'.join(filter_args) if filter_args else '' - key = '/library/sections/%s/all%s%s' % (self.key, utils.joinArgs(args), joined_filter_args) - + joined_args = utils.joinArgs(args).lstrip('?') + joined_filter_args = '&'.join(filter_args) if filter_args else '' + params = '&'.join([joined_args, joined_filter_args]).strip('&') + key = '/library/sections/%s/all?%s' % (self.key, params) + while True: subresults = self.fetchItems(key, container_start=container_start, container_size=container_size, **kwargs) @@ -1019,8 +1021,10 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so sync_item.metadataType = self.METADATA_TYPE sync_item.machineIdentifier = self._server.machineIdentifier - joined_filter_args = '&' + '&'.join(filter_args) if filter_args else '' - key = '/library/sections/%s/all%s%s' % (self.key, utils.joinArgs(args), joined_filter_args) + joined_args = utils.joinArgs(args).lstrip('?') + joined_filter_args = '&'.join(filter_args) if filter_args else '' + params = '&'.join([joined_args, joined_filter_args]).strip('&') + key = '/library/sections/%s/all?%s' % (self.key, params) sync_item.location = 'library://%s/directory/%s' % (self.uuid, quote_plus(key)) sync_item.policy = policy From cbdda0b80eb1ae40e2eb9854ca00f87442ec5b87 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 21:14:46 -0800 Subject: [PATCH 052/356] Allow datetime object for filtering date values --- plexapi/library.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index dc5580927..949c3ad23 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import re +from datetime import datetime from urllib.parse import quote, quote_plus, urlencode from plexapi import X_PLEX_CONTAINER_SIZE, log, media, utils @@ -810,7 +811,10 @@ def _validateFieldValue(self, filterField, values, libtype=None): if fieldType.type == 'boolean': value = int(utils.cast(bool, value)) elif fieldType.type == 'date': - value = int(utils.toDatetime(value, '%Y-%m-%d').timestamp()) + if isinstance(value, datetime): + value = int(value.timestamp()) + else: + value = int(utils.toDatetime(value, '%Y-%m-%d').timestamp()) elif fieldType.type == 'integer': value = utils.cast(int, value) elif fieldType.type == 'string': From 93a5ab6d6d05451574ec9419254dde1705979f3d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 22:44:16 -0800 Subject: [PATCH 053/356] Fix filter libtype fallback --- plexapi/library.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 949c3ad23..7815ebb6c 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -752,7 +752,8 @@ def _validateFilterField(self, field, values, libtype=None): for filterType in reversed(self.filterTypes()): if filterType.type != libtype: filterField = next((f for f in filterType.fields if f.key.endswith(field)), None) - break + if filterField: + break else: raise NotFound('Unknown filter field "%s" for libtype "%s"' % (field, libtype)) from None From 618ed2267699349c270ff4a75562f6f75f22fcbe Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 22:44:54 -0800 Subject: [PATCH 054/356] Update search doc string with examples --- .../images/LibrarySection.listFilters.png | Bin 0 -> 176773 bytes .../images/LibrarySection.listSorts.png | Bin 0 -> 150660 bytes docs/_static/images/LibrarySection.search.png | Bin 0 -> 254104 bytes plexapi/library.py | 185 ++++++++++++++---- 4 files changed, 150 insertions(+), 35 deletions(-) create mode 100644 docs/_static/images/LibrarySection.listFilters.png create mode 100644 docs/_static/images/LibrarySection.listSorts.png create mode 100644 docs/_static/images/LibrarySection.search.png diff --git a/docs/_static/images/LibrarySection.listFilters.png b/docs/_static/images/LibrarySection.listFilters.png new file mode 100644 index 0000000000000000000000000000000000000000..ec91d3ab3eca04e854effbcda1c7b957e3594a9d GIT binary patch literal 176773 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

j2G*q& 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�_$ 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

;%gAmIn~fUf?~Pb;=)pYyLopQiD89cB3q#) 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 literal 0 HcmV?d00001 diff --git a/docs/_static/images/LibrarySection.search.png b/docs/_static/images/LibrarySection.search.png new file mode 100644 index 0000000000000000000000000000000000000000..fc87b493aa80871412cc6738aa259b363c655a67 GIT binary patch literal 254104 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

pdNJmUn-3!hNa8UavBZy**E))KT!#zFoMN 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 DZO)u5 literal 0 HcmV?d00001 diff --git a/plexapi/library.py b/plexapi/library.py index 7815ebb6c..a40a998bf 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -441,7 +441,7 @@ def get(self, title): def all(self, libtype=None, **kwargs): """ Returns a list of all items from this library section. - See description of :func:`plexapi.library.LibrarySection.search()` for details about filtering / sorting. + See description of :func:`~plexapi.library.LibrarySection.search()` for details about filtering / sorting. """ libtype = libtype or self.TYPE return self.search(libtype=libtype, **kwargs) @@ -628,7 +628,7 @@ def getFieldType(self, fieldType): def listFilters(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringFilter` for a specified libtype. This is the list of options in the filter dropdown menu - (`screenshot `__). + (`screenshot <../_static/images/LibrarySection.listFilters.png>`__). Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, @@ -647,7 +647,7 @@ def listFilters(self, libtype=None): def listSorts(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringSort` for a specified libtype. This is the list of options in the sorting dropdown menu - (`screenshot `__). + (`screenshot <../_static/images/LibrarySection.listSorts.png>`__). Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, @@ -666,7 +666,7 @@ def listSorts(self, libtype=None): def listFields(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringFields` for a specified libtype. This is the list of options in the custom filter dropdown menu - (`screenshot `__). + (`screenshot <../_static/images/LibrarySection.search.png>`__). Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, @@ -685,7 +685,7 @@ def listFields(self, libtype=None): def listOperators(self, fieldType): """ Returns a list of available :class:`~plexapi.library.FilteringOperator` for a specified fieldType. This is the list of options in the custom filter operator dropdown menu - (`screenshot `__). + (`screenshot <../_static/images/LibrarySection.search.png>`__). Parameters: fieldType (str): The data type for the field (tag, integer, string, boolean, date, @@ -707,7 +707,7 @@ def listFilterChoices(self, field, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilterChoice` for a specified :class:`~plexapi.library.FilteringFilter` or filter field. This is the list of available values for a custom filter - (`screenshot `__). + (`screenshot <../_static/images/LibrarySection.search.png>`__). Parameters: field (str): :class:`~plexapi.library.FilteringFilter` object, @@ -859,47 +859,162 @@ def _validateSortField(self, sort, libtype=None): return '%s:%s' % (sortField, sortDir) def hubSearch(self, query, mediatype=None, limit=None): - """ Returns the hub search results for this library. See :func:`~plexapi.server.PlexServer.search` + """ Returns the hub search results for this library. See :func:`plexapi.server.PlexServer.search` for details and parameters. """ return self._server.search(query, mediatype, limit, sectionId=self.key) def search(self, title=None, sort=None, maxresults=None, libtype=None, container_start=0, container_size=X_PLEX_CONTAINER_SIZE, **kwargs): - """ Search the library. The http requests will be batched in container_size. If you're only looking for the first - results, it would be wise to set the maxresults option to that amount so this functions - doesn't iterate over all results on the server. + """ Search the library. The http requests will be batched in container_size. If you are only looking for the + first results, it would be wise to set the maxresults option to that amount so the search doesn't iterate + over all results on the server. Parameters: - title (str): General string query to search for (optional). - sort (str): column:dir; column can be any of {addedAt, originallyAvailableAt, lastViewedAt, - titleSort, rating, mediaHeight, duration}. dir can be asc or desc (optional). - maxresults (int): Only return the specified number of results (optional). - libtype (str): Filter results to a spcifiec libtype (movie, show, episode, artist, - album, track; optional). - container_start (int): default 0 - container_size (int): default X_PLEX_CONTAINER_SIZE in your config file. - **kwargs (dict): Any of the available custom filters for the current library section. Partial string - matches allowed. Multiple matches OR together. Negative filtering also possible, just add an - exclamation mark to the end of filter name, e.g. `resolution!=1x1`. - - * unwatched: Display or hide unwatched content (True, False). [all] - * duplicate: Display or hide duplicate items (True, False). [movie] - * actor: List of actors to search ([actor_or_id, ...]). [movie] - * collection: List of collections to search within ([collection_or_id, ...]). [all] - * contentRating: List of content ratings to search within ([rating_or_key, ...]). [movie,tv] - * country: List of countries to search within ([country_or_key, ...]). [movie,music] - * decade: List of decades to search within ([yyy0, ...]). [movie] - * director: List of directors to search ([director_or_id, ...]). [movie] - * genre: List Genres to search within ([genere_or_id, ...]). [all] - * network: List of TV networks to search within ([resolution_or_key, ...]). [tv] - * resolution: List of video resolutions to search within ([resolution_or_key, ...]). [movie] - * studio: List of studios to search within ([studio_or_key, ...]). [music] - * year: List of years to search within ([yyyy, ...]). [all] + title (str, optional): General string query to search for. Partial string matches are allowed. + sort (str, optional): The sort field in the format ``column:dir``. + See :func:`~plexapi.library.LibrarySection.listSorts` to get a list of available sort fields. + maxresults (int, optional): Only return the specified number of results. + libtype (str, optional): Return results of a specific type (movie, show, season, episode, + artist, album, track, photoalbum, photo) (e.g. ``libtype='episode'`` will only return + :class:`~plexapi.video.Episode` objects) + container_start (int, optional): Default 0. + container_size (int, optional): Default X_PLEX_CONTAINER_SIZE in your config file. + **kwargs (dict): Additional custom filters to apply to the search results. + See the examples below for more details. Raises: :exc:`~plexapi.exceptions.BadRequest`: When the sort or filter is invalid. :exc:`~plexapi.exceptions.NotFound`: When applying an unknown sort or filter. + + Examples: + Any of the available custom filters can be applied to the search results + (`screenshot <../_static/images/LibrarySection.search.png>`__). + + * See :func:`~plexapi.library.LibrarySection.listFields` to get a list of all available fields. + * See :func:`~plexapi.library.LibrarySection.listOperators` to get a list of all available operators. + * See :func:`~plexapi.library.LibrarySection.listFilterChoices` to get a list of all available filter values. + + The following filter fields are just some examples of the possible filters. The list is not exaustive, + and not all filters apply to all library types. For tag type filters, a :class:`~plexapi.media.MediaTag` + object, the exact name :attr:`MediaTag.tag` (*str*), or the exact id :attr:`MediaTag.id` (*int*) can be + provided. For date type filters, either a ``datetime`` object or a date in ``YYYY-MM-DD`` (*str*) format + can be provided. Multiple values can be ``OR`` together by providing a list of values. + + * **actor** (:class:`~plexapi.media.MediaTag`): Search for the name of an actor. + * **addedAt** (*datetime*): Search for items added before or after a date. See operators below. + * **audioLanguage** (*str*): Search for a specific audio language (3 character code, e.g. jpn). + * **collection** (:class:`~plexapi.media.MediaTag`): Search for the name of a collection. + * **contentRating** (:class:`~plexapi.media.MediaTag`): Search for a specific content rating. + * **country** (:class:`~plexapi.media.MediaTag`): Search for the name of a country. + * **decade** (*int*): Search for a specific decade (e.g. 2000). + * **director** (:class:`~plexapi.media.MediaTag`): Search for the name of a director. + * **duplicate** (*bool*) Search for duplicate items. + * **genre** (:class:`~plexapi.media.MediaTag`): Search for a specific genre. + * **hdr** (*bool*): Search for HDR items. + * **inProgress** (*bool*): Search for in progress items. + * **label** (:class:`~plexapi.media.MediaTag`): Search for a specific label. + * **lastViewedAt** (*datetime*): Search for items watched before or after a date. See operators below. + * **mood** (:class:`~plexapi.media.MediaTag`): Search for a specific mood. + * **producer** (:class:`~plexapi.media.MediaTag`): Search for the name of a producer. + * **resolution** (*str*): Search for a specific resolution (e.g. 1080). + * **studio** (*str*): Search for the name of a studio. + * **style** (:class:`~plexapi.media.MediaTag`): Search for a specific style. + * **subtitleLanguage** (*str*): Search for a specific subtitle language (3 character code, e.g. eng) + * **unmatched** (*bool*): Search for unmatched items. + * **unwatched** (*bool*): Search for unwatched items. + * **userRating** (*int*): Search for items with a specific user rating. + * **writer** (:class:`~plexapi.media.MediaTag`): Search for the name of a writer. + * **year** (*int*): Search for a specific year. + + .. code-block:: python + + library.search(unwatched=True, year=2020, resolution="4k") + library.search(actor="Arnold Schwarzenegger", decade=1990) + library.search(contentRating="TV-G", genre="animation") + library.search(genre=["animation", "comedy"]) # Genre is animation OR comedy + library.search(studio=["Disney", "Pixar"]) # Studio contains Disney OR Pixar + + Some filters may be prefixed by the ``libtype`` (e.g. ``show.collection``, ``episode.title``, + ``artist.style``, ``album.genre``, ``track.userRating``, etc.). This should not to be confused with the + ``libtype`` parameter. If no ``libtype`` prefix is provided, then the main library type is assumed. + For example, in a TV show library ``viewCout`` is assumed to be ``show.viewCount``. + If you want to search for episode view count then you must specify ``episode.viewCount`` explicitly. + The ``libtype`` prefix cannot be included directly in the function parameters so the ``**kwargs`` + must be provided as a dictionary. + + .. code-block:: python + + library.search(**{"show.collection": "Documentary", "episode.inProgress": True}) + library.search(**{"artist.genre": "pop", "album.decade": 2000}) + + # The following three options are identical and will return Episode objects + showLibrary.search(title="Winter is Coming", libtype='episode') + showLibrary.search(libtype='episode', **{"episode.title": "Winter is Coming"}) + showLibrary.searchEpisodes(title="Winter is Coming") + + # The following will search for the episode title but return Show objects + showLibrary.search(**{"episode.title": "Winter is Coming"}) + + **Using operators** + + Operators can be included to filter the results with more granularity. If no operator is specified, + the default operator is assumed to be ``=``. The following is a list of possible operators depending + on the data type of the filter being applied. A special ``&`` operator can also be used to ``AND`` + together a list of values. + + Type: :class:`~plexapi.media.MediaTag` or *subtitleLanguage* or *audioLanguage* + + * ``=``: ``is`` + * ``!=``: ``is not`` + + Type: *int* + + * ``=``: ``is`` + * ``!=``: ``is not`` + * ``>>=``: ``is greater than`` + * ``<<=``: ``is less than`` + + Type: *str* + + * ``=``: ``contains`` + * ``!=``: ``does not contain`` + * ``==``: ``is`` + * ``!==``: ``is not`` + * ``<=``: ``begins with`` + * ``>=``: ``ends with`` + + Type: *bool* + + * ``=``: ``is true`` + * ``!=``: ``is false`` + + Type: *datetime* + + * ``<<=``: ``is before`` + * ``>>=``: ``is after`` + + Type: *resolution* + + * ``=``: ``is`` + + Operators cannot be included directly in the function parameters so the ``**kwargs`` + must be provided as a dictionary. + + .. code-block:: python + + # Genre is horror AND thriller + library.search(**{"genre&": ["horror", "thriller"]}) + + # Director is not Steven Spielberg + library.search(**{"director!": "Steven Spielberg"}) + + # Title starts with Marvel and added before 2021-01-01 + library.search(**{"title<": "Marvel", "addedAt<<": "2021-01-01"}) + + # Collection is James Bond and user rating is greater than 8 + library.search(**{"collection": "James Bond", "userRating>>": 8}) + """ # cleanup the core arguments args = {} From f90b5ac70ae834eaf7925b19dd09c9ea051effab Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 23:22:46 -0800 Subject: [PATCH 055/356] Update search doc string with plexapi operator examples --- plexapi/library.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index a40a998bf..db7f28ff6 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -572,8 +572,8 @@ def deleteMediaPreviews(self): self._server.query(key, method=self._server._session.delete) def _loadFilters(self): - """ Retrieves and caches the :class:`~plexapi.library.FilteringType` and - :class:`~plexapi.library.FilteringFieldType` for this library section. + """ Retrieves and caches the list of :class:`~plexapi.library.FilteringType` and + list of :class:`~plexapi.library.FilteringFieldType` for this library section. """ key = '/library/sections/%s/all?includeMeta=1&X-Plex-Container-Start=0&X-Plex-Container-Size=0' % self.key data = self._server.query(key) @@ -738,7 +738,7 @@ def listFilterChoices(self, field, libtype=None): def _validateFilterField(self, field, values, libtype=None): """ Validates a filter field and values are available as a custom filter for the library. - Returns the validated field and values as a URL param. + Returns the validated field and values as a URL encoded parameter string. """ match = re.match(r'(?:([a-zA-Z]*)\.)?([a-zA-Z]+)([!<>=&]*)', field) if not match: @@ -771,7 +771,7 @@ def _validateFilterField(self, field, values, libtype=None): def _validateFieldOperator(self, filterField, operator): """ Validates filter operator is in the available operators. - Returns the validated operator. + Returns the validated operator string. """ fieldType = self.getFieldType(filterField.type) @@ -834,7 +834,7 @@ def _validateFieldValue(self, filterField, values, libtype=None): def _validateSortField(self, sort, libtype=None): """ Validates a filter sort field is available for the library. - Returns the validated sort field. + Returns the validated sort field string. """ match = re.match(r'(?:([a-zA-Z]*)\.)?([a-zA-Z]+):?([a-zA-Z]*)', sort) if not match: @@ -1015,6 +1015,15 @@ def search(self, title=None, sort=None, maxresults=None, # Collection is James Bond and user rating is greater than 8 library.search(**{"collection": "James Bond", "userRating>>": 8}) + For even more advanced filtering which cannot be achieved in Plex, the PlexAPI operators can be applied. + See :func:`plexapi.base.PlexObject.fetchItem` for more details. + + .. code-block:: python + + library.search(summary__icontains="Christmas") + library.search(duration__gt=7200000) + library.search(audienceRating__lte=6.0, audienceRatingImage__startswith="rottentomatoes://") + """ # cleanup the core arguments args = {} From d752b351d52ad91593481b781f3da10780839750 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 11 Mar 2021 23:23:03 -0800 Subject: [PATCH 056/356] Update fetchItem doc string --- plexapi/base.py | 61 ++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/plexapi/base.py b/plexapi/base.py index 889cfa317..a0adc43e7 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -144,34 +144,39 @@ def fetchItem(self, ekey, cls=None, **kwargs): it only returns those items. By default we convert the xml elements with the best guess PlexObjects based on tag and type attrs. etag (str): Only fetch items with the specified tag. - **kwargs (dict): Optionally add attribute filters on the items to fetch. For - example, passing in viewCount=0 will only return matching items. Filtering - is done before the Python objects are built to help keep things speedy. - Note: Because some attribute names are already used as arguments to this - function, such as 'tag', you may still reference the attr tag byappending - an underscore. For example, passing in _tag='foobar' will return all items - where tag='foobar'. Also Note: Case very much matters when specifying kwargs - -- Optionally, operators can be specified by append it - to the end of the attribute name for more complex lookups. For example, - passing in viewCount__gte=0 will return all items where viewCount >= 0. - Available operations include: - - * __contains: Value contains specified arg. - * __endswith: Value ends with specified arg. - * __exact: Value matches specified arg. - * __exists (bool): Value is or is not present in the attrs. - * __gt: Value is greater than specified arg. - * __gte: Value is greater than or equal to specified arg. - * __icontains: Case insensative value contains specified arg. - * __iendswith: Case insensative value ends with specified arg. - * __iexact: Case insensative value matches specified arg. - * __in: Value is in a specified list or tuple. - * __iregex: Case insensative value matches the specified regular expression. - * __istartswith: Case insensative value starts with specified arg. - * __lt: Value is less than specified arg. - * __lte: Value is less than or equal to specified arg. - * __regex: Value matches the specified regular expression. - * __startswith: Value starts with specified arg. + **kwargs (dict): Optionally add attribute filters on the items to fetch. + For example, passing in ``viewCount=0`` will only return matching items. + See the examples below for more details. + + Examples: + Filtering is done before the Python objects are built to help keep things speedy. + Note that because some attribute names are already used as arguments to this + function, such as ``tag``, you may still reference the attr tag by prepending an + underscore. For example, passing in ``_tag='foobar'`` will return all items where + ``tag='foobar'``. Also note That case matters when specifying ``**kwargs``. + + Optionally, operators can be specified by append it to the end of the attribute + name for more complex lookups. For example, passing in ``viewCount__gte=0`` will + return all items where ``viewCount >= 0``. + + Available operations include: + + * ``__contains``: Value contains specified arg. + * ``__endswith``: Value ends with specified arg. + * ``__exact``: Value matches specified arg. + * ``__exists`` (*bool*): Value is or is not present in the attrs. + * ``__gt``: Value is greater than specified arg. + * ``__gte``: Value is greater than or equal to specified arg. + * ``__icontains``: Case insensative value contains specified arg. + * ``__iendswith``: Case insensative value ends with specified arg. + * ``__iexact``: Case insensative value matches specified arg. + * ``__in``: Value is in a specified list or tuple. + * ``__iregex``: Case insensative value matches the specified regular expression. + * ``__istartswith``: Case insensative value starts with specified arg. + * ``__lt``: Value is less than specified arg. + * ``__lte``: Value is less than or equal to specified arg. + * ``__regex``: Value matches the specified regular expression. + * ``__startswith``: Value starts with specified arg. """ if ekey is None: raise BadRequest('ekey was not provided') From 1c180c074cb150b0d90a85b9331e6f3941f7f74c Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 12 Mar 2021 00:02:51 -0800 Subject: [PATCH 057/356] Update screenshots --- .../images/LibrarySection.listFilters.png | Bin 176773 -> 171273 bytes .../images/LibrarySection.listSorts.png | Bin 150660 -> 147071 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/_static/images/LibrarySection.listFilters.png b/docs/_static/images/LibrarySection.listFilters.png index ec91d3ab3eca04e854effbcda1c7b957e3594a9d..9d423fca8040ef2e76c7a65e18e5cabd96964af7 100644 GIT binary patch delta 169606 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�&2*nu0J*n6qJDYbTqDY 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 z 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 S16=|M@uRP8tn~uz6!AX?x8;=p literal 176773 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

0les$VJ z$PgZ{NjQuxDm6j16M*taBnEA59qc1&DH7KL>H3k!kw!!whZ<+agZvX=cl+%(7?Ic? zV^Mzp^h)(=MSru`>?ZE-I^Bn9g2ocvvZUObx5EXgkf!p+O(k`{5N0dN!5{tl5cbVMgyb0a4MIGKtE1%>*QpMzC{Oz|`iv8h^R2OSlQIkQe>eoAz8BgUHr zk5BQN9YQ(h;nl^Yj)A0*^g5wPl1eeQ`aRs==?D9i!%g%0N=_5kGn{&fziIC<`9zpR z>g>a~v%*B$-~Wa$#~MV%p)VeSdv@xq-|aHll@IY=eDU(6XOnZ`eOLLg!FE5BTW}xK zb$RkD@(cq_I}4YQo;mp24cq#7t9liF`QJEzTde`}Gw2nJH^xVav9U(uZv+2`P{n!q z$vg#8PYhc2=Vj1FA-ISV&c^xWr`W2o@O_A0-0}~Skd4|5DuG^rR@JnYuL+E2S|0LY9XTZxuB@8KE$X+bd*v{%TYE z?wh?9bz0O1YI4@RsUqCQF<>k&gi<`MGJcFqH?Cc^>hrj=cBAd6=JrS+Kpbn-!4FF^ znYmP;1+%rk^;!AE@?&|+xn}&#soa>`2a^x{);xyxUBf_CAuznn*uFSv%WtVg+{@7T z*FKDFz7;7{TKfWsVJg+PW-1Y>AuB9VB2++n{8Uz7kADlk8V$+OYX3G>Na#h-O4*+z zMy!PkE)ZXSq0Ag%@DL(K)Y4aBO|mGo4Q!;JU!))LiHse$joK<4ze+m*;ygaYo1^Rl z^4naGPNd{=H~w3lVui$~XY|H>{pFnQgF*r(yud79exZ=4ZfW9D*Y*H-7Eh7FoU>|n zE=l)sxSF;vawJglIv7l)Z{M6n4c82?Jdy$CihO*g zd<2iHeRmd)t!e0+R)9UM6!NpZ>fLv9%~DKcTNa|j5(bO_yMH%~`-=e_f3*vDF?g*o ztuv~uEx;u-VXi3Jh?wyIWqMPO@z8Q(e~N55;7kc+M%BOmNo#SG*Fh>fW6z6p zz0>>&6oyXDEaEEjM|m8tNT<}c_vWX>z=_!egEh@SRO0&+fSgs&RziB$b!AE-!kc*z zR2HVI6#gYinJhkBRovlmX=(=T3eZz2ZG#mC)>$R0(ugxc0>( zj88scs%FAd-4c#GF|%!>_u4^6NmlgWwiJ}aQF8thqXI?;BAz~VYMOQ>BB7y_V>~mPeX2l26vIJ; zkG!;&e{sXrIdtT6F((>}Z*F6wG1yH;hV_CXvghvMys+WH!>z9E`^^1Z@VzJ>`Syr~ zqFKXwzCvBAon6B8C2?87X{)IPgZQ9 zL#$NYrsdH9l28JzJEwmipZnD`jMY#t z+DF%+om|v2(}{?42N(KR7Pxlsy1W`^yFxzvT7KxjB*IvZqwaqMuYTzSQQZ3++5`IX@SEj5>q01IT)d1~j1Szwgv#`~*HKv+m zkURE?F@eZso+MFt6v;5OQs%JIb2^!goUZ)->Kw4klW0 zz*NWo)57!$s{5$i05W@9(LxsbD*W0;hz{TSI}!UN2JFWai6j z`@K~}LNP3vQ7w$GkA09w9#txD#0pZglQ3eY5Jva;P{;u27l8a3-H>Nq^pCR=BvfUX zSijtTv-8fh^$4C<+-Fso`L%MyvJPp#R#_e7?NWat6Q$3(5{R1`?)|XKY#AJyYDD5J`+uWSSC84|3&wyq-+wU?{f8%U$b!&U+Y`{?p#gDZLedB5e{L0_poJ@zo(K}S`c zCl(Y9@Gn-lwpvcWtKZl(!3&RSwsN9I5>6F4e#jJVZ=te!fbBr+ z9tK-4Oa9h@Z%tTWIOT<-l+2e{AyfZ;M;VzsQd07uiM@rQxPQ~IgERL2hoLj1%KQ<$ zU4XWV50-SryQ89mJRXb$T&;(*3r%%3mZ*JZXak%wr$a9wb0L=ZL; zX(dzPLpfQ--T0<7i`q@vDE^R<*T;pmZ+)~Fhl`g`#Xz+W{nI2v2NrtG{`L_;GX zBp{#JesN~Udg|T770--D<+BjVv{?Uiz``C|li(@-Ryr`rgS_+RbaN4^$2r412fuCk zlhu~{HUiGnF-X%To$j+oUrzt=@mS*g)Zm<+paH9t zs^AjXaDu`Z1Re9HMs$kziaCs~I8-GHq^}sUpB%iI_sY6B2XGck$aE zm$`rRaDtmYlsa&AHST3SQ(3`xh7PDgE6LJPcuxd*>`z~4K45)>>`?~V%zO1EbmAUi zzk~}J_f8o{Jfi04gxi+{Le4xRyB|6N;cKFX@ zXQWD&JgKl$+zIqU=dxU7nO_~aJ^o)kxCP_r2kQiKe&<2l`#O=Uk1`5o@wSBXkWgTS z&mH3cx5Xe$q1+nLvd+u>N3@S{Xb<(w09TM`z$8oM_b8EEs`*JU6_w16G|6zcOQ->Z zm*?M)iUUA_Ds_dvI5aL53Z_ECO(px;T#3L|GkP~D4Up!G&6IrwfTZ8ZaRJV1>o#+) zYCpb08U5oDLg7{@BMmnMY_Tni@b^85t=j9uBZw`F=I<(LW#N3T^MO%&u-mT&{Tx?( z8Q%i2MD;QQ+%iAE@Fta|Pdl;07y{gjWgC%PKXpq-E2H?~Vv95KrV-P1D$B>=2qE_> zPvVcQM(m|b)#`7~8=1Y(a9_00;dgs)sUC=Sm1yHz2`zH|n@Y=jc5-sWd?_g|>urdniFZuMM58O7Ijn^8Fy?-p*-7=^d}6 z{cpB%uUZiH+~Uznbny~8d1Ri>A}r|81=SVm?5QDNWz_;b35C3BE;HBbQKR zyq(Gl3N|Y@%4FS*E?8W7Sx>iUD={n16IOJypR6*1NA^vFW}8$)o4*6;>Iva}d%Rj& z8(Hnvx4XuOG&0jWHg>1{n^tca@9Os`V@g=SCtn_BwBG_G{niyzmalT_18La=hn0JY z%>dwAuwT{uP)PPG{k_!*GNNdU^Sn2d7QTD|{J12`EPJ!$1hI(iGN;Vul=(hZn7c=NY#(y7 zD4h%Q7?YF63X08iM|x*QCuXcA%2&%hJld)C7o|>#7f4yZ)z2=> zQqT#*f$ldH`(()&=$_hp5n!i-4&QSh$jZU+<8N{Ths~A2xKia$kK}M(#8UX$@VR5n z4O-i;rBfp6Raw;F7Rfj1RZ#Bdmc3##J~|zY)Il;_fGF#$f57i4p<9%H^EMx@23mH3 z37#x0K8$}`Mg_l zida}cJEbQtkSFx56^(q9o2YO6lX?UzutS2P)+VBc*HBbK4bCQEp|S@lGA&vNLP;b4 zbn12!1jRAo-;-XV)#rp4h$aWWJz^LB)1*XI43aN7#483`9#0xKnupOoW+QCp4bEc zr4AWNEnJk_rZ2>i#wJMkhfYa!IhR(PV1yHgbf=`dqSRqYd=i=bvsOeosE9O5I>vZ( z6Y!kEhcP+D2>6u9p@j%k5LyV}Os_hql*xP8v4-MS>yEHP>A=2j$uY?wl-v(dr{}Xz zVT3opB6_)hJROrADywNXSwJ17F6mVb8S01!`*OyARh`A+?|bmHf}j6$qSq4*{9UVQ z{a*kCsQc)U79|w&ktys)2g|8&u;!Hea;Qt|Q^QACh_Ie@X8l|7$+d7`wB`8lr0S`h z>77?lvKB--*vYIzt^qZOx+|X8n%y8JA<@tavL)0Bw#W)6CcDXqc)?*nK;)-Uq9gOB zYt4@`PJ~8`L%Lx2b4WY`4irIY;p*H8)JO?C6uORKLBaDEkrHr03o*W>P$Oj&3O*Pk zCtJ~c2ZL~9+7h16XVkDrcn1eq#0BO??eZ#!p^m?JLCN1c@7C?yssX`JVMlg|r7=bw z6F7p5-3o^2SZal3Fhy044yPk=1Z1E=)G|EuZ#AI>q@OK1_Pu*uufq|O)Ts>goYarA zP^ON)pq+>v4OHP2rU?`xkbjHgZU$7+!9QXKocb+0&#>r}O7+r(Jm&&6^kl}9iXx5d zS1A<^!V3RhiE1zh?9zhjOA4 z=cU3=?fTabRfh)zn8KC19+e%%o9j5cyW)gK!iJDoS3SCO7=LiEn)SFSZnV>g8mcbohWXp5Vs0lt*q-RG~&GBVZd3%XLnQe)Qd=-aX*S` z;#0Rb<3G#6X5L#>-PNpH0hfWUMMo~Qnf2xab@vp*A#Nx0K4}G`af)cCvOvJ9&TVi} zb;NUBb##jR;nMRS7s9v!8dnemRE-ZYpit^_{)>&&a=L&NM<*5eNN+vi?9tiMpXyo- zwf?#ua>{^^b|721+IT`#r11VxPbCn{kq=-31k~Xt3e>Y3O_v%9v=pG|lzTD_$-oG_?5Q#acpIBEo?U zG6?bz!J#f4p)5mbg_02tOa0EKaW)!gr$lQ|;ud|8apDhI(j8t{kJP)rFr_MGX0#Y- zON|fyT~__DgF~?c>A}AweQ>ZxVC#^lAEu~2m`@e1)L}~8imB1<)N!MWzY=uFIK(qb zA%I{^ghL`<`&P{+AVo<>GA0=hPoibkqk^_y;w&A+zw*9Psv!>gaGB2XAl0K!aB;^Y z`Pji4$;<5J?j&1v=f0ag%(Qw>8A@JfhgdR$jmqjQN$XNtoT%< zaY#k+;|fC&RP-X=6hfLjf?0CrLdySnT=NvI`tos{Gcv=Lmc(A3(zMV$0hx}(e-62v zeU4A(13kJ&M^x%7j*qxHpwYWwUYjVUxFs^DN5m>64|XyOY^9HD)sK4O9HVb4w4(wr zt!q>r%JhO7>gf7fLmd%sjG$efvksN~)tcI5gsKY;9RGbp#Mxp15n_zM;Sv}*CE3jM zQDUbg!?Tr^U{B|!hF&3`_$?Lf%Ou`Fh9ca*1yAHtCm>4P?d#gnt9l{yv{NMHEy&X()?m9{4Ph`zYU%dFXrE;Pu$fCFbn);QW@ zPR7x@b27cXnVeN90{xP!(V#F6Ba8-BgaC^UO>jE$Gd&?6&wX%;UbM@{I)(U0Yy6v* zMv@p7`fd8sQGLDRgUeCwK@EriERvW|LJi6slCY4f6td_mqzd&er4@&!xToVIaG*Fh zO3)@aP!jWDf#r#^8!9q?QVe9!*LDmkN<3p6uB!nkfh-tz!uTomg!hcy+MhMVR$Nqh z#8KtvKc@f(-Kq1C=V6dn5DTgSf}&~f;-7;-dgbAd5C5het3*p5DZb$! zH~-f8*PM9M6H?Q4VL_Zrui`)#$EvR7kk&ZVxfYFS$9NhinAcU80X2@V!l~26z;UbZ zYvxg}3h|tFcfpeZIhA42{C1;DhdK@nj=!$OVI75GYex0yk>)sscGmb~FE;ILm%1Vkd~78yXmF5WB0v!0{D^Wr;p%7vM%E4s%KS96#__H#>dieIpDuK_ zKw(|yAi5BZFanyK%(|!y%9F~kv3b|VKno>ip&35^ji33BsAGa8W$7^J{K6-EPm+zffjsah_ZyvA5D z1?tb8Gn59zO=s6&OYf)T65$lx?^~X5YA+L_*#m~vLc{wwQdhg@M=|1`G9U>eer6LE%b4E*$Cz5lDz^0{`aNr;(%y8y0jsq=< znMibpE8#~w13G|-uHkky*UTvXN`>?}zXW*<91#Bz6rlqF zA3+hC#0?_Qj+@b-j3#rXnD~+n9jD?>2E2>zP|7o`mtzYxi1w_=mP0C18Ae7}K*_1f zdp+U<1=P}zMaI7~qldE`qD{mOpUNPq5T$^_PjX70$^6r=-;|+*0#qm?RZt}-^C8iW zGbOz+ZV#<~vVc3%N7C(p&y7SHqY?0MFc>;TOerkI0s zx*5R@=zjbjEk3pSuy)`S23CRwN(R3m6nSDh{xLDal7tE)#4YrJ1q~f01pMW4NX)x3 zxbmOLDH=&wXaOaf`!GrX2dv4@wVhiUoGG4-82)R}-OI5ILM50Wup<_fp6qPX$f;71 zM(|Dz5Fj+f{K`Daf}v>FAVQcJ!8ip&ITh}>W$+Lj#2aPeoJujmJMB9t87Ah134lU) zJFnr8)Pt6M8(q6U5GnQ-ERy4>7tSG$+ZE4{MRGv+@SOk!IHgoVI2fTsG)^_#=yz@9 zk8nWIsFZ@xwpRoZp4`TQ=i5SGKa^tPR=F8#C8aP@%Og!pNc~dbucI=QBG7Z5N9%~n zb}#ZboQrg%(}N z903z}f(9BB^R!cP50rHGii|3pWduQC>y&3_j)O5Ng&U7xA5}`;L8$AUG|LTwAK}1& zaf^t+f(+#>_90y11>m5>7)L`Xu*IPBIXQynFEGM5IEYdpu$8TN;U)p^it0FM1WBQw zq;3y800-GefD%1|KZguXi~Xf*;vX>GR$Z^v*Rnz^uw)26(wGV@MLwhvBlx8k=E#i$ zjBpKNG6F2XIb`9K#xzR8kqnqI8H)HUk|7mT0~&!kXF&is025>-C=Q1`|IkGc4wtj; zb~V-Nj#Ejh&hgxo>Kf4Y=C&f-=aPyrVk{`*K85c94W3Og;7srXAd zUd7;1&vQ?5fT&hJLRk(|M{%UWSz?9?hiSx(3N3^sVRJ$LVhUgcGbQcx^03fE8??AI z6@}{>YzY?pX8|8+i_(&rq z=2!T|1%{;*AdnBsF{da2#EFH5W6Yj*hx9K}1s<>SDPOB@!+e z4Ji3ZX+d#NGA!fA^J2w+LtThECQTuXTF7|G1OI4~CK%E)XrJzR2Y+XE<`0=7?u{0VQOf{ zx2GhOp*XyS21-ox8lI{MCL${+(-?wq>2%B?LV!c+b`uon5_8>e#97pcDU=c*nP-)c zLVDRJ{>eUY10M(kS{%j+W>GT3B3rz#+zAM9abL}nDnXDEffq@6D6f`e2h)3=7NuRF z(XMlKiFTk4AfSV@2~A-pydCHD_6=|oX9xlXC_@1u#!ItVsVzQXhnyK4w`Rabcl7mk zY|s$PVN^p70YpeaoyN3N;zLfssm)@rm~{Y0K6DHe2;kLBM8J&}B@P}OtwCwB)L%9= zr-&lKhyaenU>uBg#kui;zM$mrY)NDilcRNw0Btmgc}}Ezx>O^lu8K9$irWUS~of3EYXEO@sp=LXXB4EgXkgOJi{3Qqk>+DvcQ=Z z#)(5BS&x0fM$-q9DvDK~~f=KR7F0a+LC~?PSd1IhnaqcYS7p&?5FqohLtmhd`jw zn9ww2DHFXo$6qa4N~pWzPe(=|oZ?1IQsO2(LR5IAgZiD5X)QfSC_E-z;*-HSMai8o zI3;yXN#i(Mkz2Eoyg4Pl(86exalm{AH5mNBv zk0_w7%UL*(fDrK10RiSyRvezcz@IYl&sj>WkRqq3cubMvfo>0W2q^KV9e*hftf&ku zLL==F6scg40(`^)BmOzeWMoBP5U8GsTk1ktOCeW)n-^)eO13NgivQc>#kK?u-lhE>fRdOGI|z8r#*;d3lsU@?U_v>F zr#Xt;kb@U=skl*CqzlfuG?l$d%c7zH?4S%O0tHIy3Hyi(@`ZA$h>=yMOAQoGK?*7o z8nbSZ8=AMtX!D;6OyM;*hNHrVL8rUtE}3b(;b(3&oDOSn=dX zK`>NBJa7tSA?ZO$okmL)u>-}Cc?80k_)O#zT0|_tsTPOpLm$@@+q9>PKoHQF6r3Vx z%k%_>prBDtem(FtNs*BmFypAj7o~-gv$QY>CA}a5EtHWMv?$l0yJFiDG+uMPBnTCF z28Wh=g%}3ce55(DsXEFgcr5#ghiNqZMac_<642m_B7y=7O;S>E#^Ko0l!5YdEayLtZl{CM`XJjMOtuWC#un zLYZg>2O7tNyfL;4!vpO zZ+zmGL?a6*Z~;2lN4SaHkf!j`>_Z>dv%DhzjTTli4o1*IfrKt{g9^yN?rB$Op8UNy z5aEPHxQRXk}c~23TRJnMwl9k zcGCe0P=*&_gy_&L#Nrn9k#?X!J=2*w<&KdanBd}7k9svk3nDtiEy%F4s7X<`cs2nG zI7m{8+<+Yfe?&wR|4Q;T2kGufRpem4M3~q)sg1gv!X{0ZDhE;US4!XsNFK-pYD9q| zxk(mi^uxUN#|Y-y*g8dfasQd6Tc<$p2*i(8+A+p>HOuK+v6{?5AjTpGc0v(fRc8u z2nEuYUf~yK6aN^8bRqH$3!x#Th^#2VA7?7@1XH6XP18j?yNIy_utJ@bL9?4) z&Tt(gXhR2lKn8BKB*JqRno!{^y(lsK33x}Z(v}k5G0vuYoT)P=7uBIv2`xDl%FrmE zr6wbJ@)J2U;x8mMsziTDA zhC>7hV{$DjqJ~MKWuPX7feUHGq&{>TQWil*oGl{iNs!c`1JZ+(1QtY(L}*Y#69u#0 zg{}8o5YmLJG8erkQm?i^heSBeL^afia}5ja`>ZuZk_(eUXrNL4=8*^22mpdh#DPXB n3+og-DK((3+9?yn}Q00000NkvXXu0mjfL;n_3 diff --git a/docs/_static/images/LibrarySection.listSorts.png b/docs/_static/images/LibrarySection.listSorts.png index b9dc40d123e4ded7156b39de51ee7ea332640081..16859826b62dc3e681b5a6fa375ec68f82035031 100644 GIT binary patch delta 145577 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

$CxU*#5i4t18-= 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

Ag-WMrl6on0 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 delta 149076 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%0Dvv?FF8zx-u$pOJ%R~XQZH%hG{GE+UX{H>dXnH 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 z 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 From ba98669610922db05016655583fd65310fda110e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 12 Mar 2021 00:03:17 -0800 Subject: [PATCH 058/356] Update search doc string --- plexapi/library.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index db7f28ff6..301b8f11a 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1016,13 +1016,17 @@ def search(self, title=None, sort=None, maxresults=None, library.search(**{"collection": "James Bond", "userRating>>": 8}) For even more advanced filtering which cannot be achieved in Plex, the PlexAPI operators can be applied. - See :func:`plexapi.base.PlexObject.fetchItem` for more details. + See :func:`plexapi.base.PlexObject.fetchItem` for more details. Note that using the Plex filters above will + be faster since the filters are applied by the Plex server before the results are returned to PlexAPI. + Using the PlexAPI operators requires the Plex server to return *all* results to allow PlexAPI to do the + filtering. The Plex filters and the PlexAPI operators can be used in conjunction with each other. .. code-block:: python library.search(summary__icontains="Christmas") library.search(duration__gt=7200000) library.search(audienceRating__lte=6.0, audienceRatingImage__startswith="rottentomatoes://") + library.search(genre="holiday", viewCount__gte=3) """ # cleanup the core arguments From 061ad9fefd05c5108af04a19368c01dc3c39db4f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 12 Mar 2021 09:18:36 -0800 Subject: [PATCH 059/356] More PlexAPI filtering docs to fetchItems --- plexapi/base.py | 104 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 69 insertions(+), 35 deletions(-) diff --git a/plexapi/base.py b/plexapi/base.py index a0adc43e7..6f2836f97 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -144,39 +144,9 @@ def fetchItem(self, ekey, cls=None, **kwargs): it only returns those items. By default we convert the xml elements with the best guess PlexObjects based on tag and type attrs. etag (str): Only fetch items with the specified tag. - **kwargs (dict): Optionally add attribute filters on the items to fetch. - For example, passing in ``viewCount=0`` will only return matching items. - See the examples below for more details. - - Examples: - Filtering is done before the Python objects are built to help keep things speedy. - Note that because some attribute names are already used as arguments to this - function, such as ``tag``, you may still reference the attr tag by prepending an - underscore. For example, passing in ``_tag='foobar'`` will return all items where - ``tag='foobar'``. Also note That case matters when specifying ``**kwargs``. - - Optionally, operators can be specified by append it to the end of the attribute - name for more complex lookups. For example, passing in ``viewCount__gte=0`` will - return all items where ``viewCount >= 0``. - - Available operations include: - - * ``__contains``: Value contains specified arg. - * ``__endswith``: Value ends with specified arg. - * ``__exact``: Value matches specified arg. - * ``__exists`` (*bool*): Value is or is not present in the attrs. - * ``__gt``: Value is greater than specified arg. - * ``__gte``: Value is greater than or equal to specified arg. - * ``__icontains``: Case insensative value contains specified arg. - * ``__iendswith``: Case insensative value ends with specified arg. - * ``__iexact``: Case insensative value matches specified arg. - * ``__in``: Value is in a specified list or tuple. - * ``__iregex``: Case insensative value matches the specified regular expression. - * ``__istartswith``: Case insensative value starts with specified arg. - * ``__lt``: Value is less than specified arg. - * ``__lte``: Value is less than or equal to specified arg. - * ``__regex``: Value matches the specified regular expression. - * ``__startswith``: Value starts with specified arg. + **kwargs (dict): Optionally add XML attribute to filter the items. + See :func:`~plexapi.base.PlexObject.fetchItems` for more details + on how this is used. """ if ekey is None: raise BadRequest('ekey was not provided') @@ -190,12 +160,76 @@ def fetchItem(self, ekey, cls=None, **kwargs): def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, **kwargs): """ Load the specified key to find and build all items with the specified tag - and attrs. See :func:`~plexapi.base.PlexObject.fetchItem` for more details - on how this is used. + and attrs. Parameters: + ekey (str): API URL path in Plex to fetch items from. + 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 + with the best guess PlexObjects based on tag and type attrs. + etag (str): Only fetch items with the specified tag. container_start (None, int): offset to get a subset of the data container_size (None, int): How many items in data + **kwargs (dict): Optionally add XML attribute to filter the items. + See the details below for more info. + + **Filtering XML Attributes** + + Any XML attribute can be filtered when fetching results. Filtering is done before + the Python objects are built to help keep things speedy. For example, passing in + ``viewCount=0`` will only return matching items where the view count is ``0``. + Note that case matters when specifying attributes. Attributes futher down in the XML + tree can be filtered by *prepending* the attribute with each element tag ``Tag__``. + + Examples: + + .. code-block:: python + + fetchItem(ekey, viewCount=0) + fetchItem(ekey, contentRating="PG") + fetchItem(ekey, Genre__tag="Animation") + fetchItem(ekey, Media__videoCodec="h265") + fetchItem(ekey, Media__Part__container="mp4) + + Note that because some attribute names are already used as arguments to this + function, such as ``tag``, you may still reference the attr tag by prepending an + underscore. For example, passing in ``_tag='foobar'`` will return all items where + ``tag='foobar'``. + + **Using PlexAPI Operators** + + Optionally, PlexAPI operators can be specified by *appending* it to the end of the + attribute for more complex lookups. For example, passing in ``viewCount__gte=0`` + will return all items where ``viewCount >= 0``. + + List of Available Operators: + + * ``__contains``: Value contains specified arg. + * ``__endswith``: Value ends with specified arg. + * ``__exact``: Value matches specified arg. + * ``__exists`` (*bool*): Value is or is not present in the attrs. + * ``__gt``: Value is greater than specified arg. + * ``__gte``: Value is greater than or equal to specified arg. + * ``__icontains``: Case insensative value contains specified arg. + * ``__iendswith``: Case insensative value ends with specified arg. + * ``__iexact``: Case insensative value matches specified arg. + * ``__in``: Value is in a specified list or tuple. + * ``__iregex``: Case insensative value matches the specified regular expression. + * ``__istartswith``: Case insensative value starts with specified arg. + * ``__lt``: Value is less than specified arg. + * ``__lte``: Value is less than or equal to specified arg. + * ``__regex``: Value matches the specified regular expression. + * ``__startswith``: Value starts with specified arg. + + Examples: + + .. code-block:: python + + fetchItem(ekey, viewCount__gte=0) + fetchItem(ekey, Media__container__in=["mp4", "mkv"]) + fetchItem(ekey, guid__iregex=r"(imdb:\/\/|themoviedb:\/\/)") + fetchItem(ekey, Media__Part__file__startswith="D:\\Movies") """ url_kw = {} From b9840eee5c61e32bb2dfa5a585d96260e718035b Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 12 Mar 2021 09:18:51 -0800 Subject: [PATCH 060/356] Update search docs formatting --- plexapi/library.py | 177 ++++++++++++++++++++++++--------------------- 1 file changed, 96 insertions(+), 81 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 301b8f11a..8120dca37 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -881,51 +881,54 @@ def search(self, title=None, sort=None, maxresults=None, container_start (int, optional): Default 0. container_size (int, optional): Default X_PLEX_CONTAINER_SIZE in your config file. **kwargs (dict): Additional custom filters to apply to the search results. - See the examples below for more details. + See the details below for more info. Raises: :exc:`~plexapi.exceptions.BadRequest`: When the sort or filter is invalid. :exc:`~plexapi.exceptions.NotFound`: When applying an unknown sort or filter. + **Using Plex Filters** + + Any of the available custom filters can be applied to the search results + (`screenshot <../_static/images/LibrarySection.search.png>`__). + + * See :func:`~plexapi.library.LibrarySection.listFields` to get a list of all available fields. + * See :func:`~plexapi.library.LibrarySection.listOperators` to get a list of all available operators. + * See :func:`~plexapi.library.LibrarySection.listFilterChoices` to get a list of all available filter values. + + The following filter fields are just some examples of the possible filters. The list is not exaustive, + and not all filters apply to all library types. For tag type filters, a :class:`~plexapi.media.MediaTag` + object, the exact name :attr:`MediaTag.tag` (*str*), or the exact id :attr:`MediaTag.id` (*int*) can be + provided. For date type filters, either a ``datetime`` object or a date in ``YYYY-MM-DD`` (*str*) format + can be provided. Multiple values can be ``OR`` together by providing a list of values. + + * **actor** (:class:`~plexapi.media.MediaTag`): Search for the name of an actor. + * **addedAt** (*datetime*): Search for items added before or after a date. See operators below. + * **audioLanguage** (*str*): Search for a specific audio language (3 character code, e.g. jpn). + * **collection** (:class:`~plexapi.media.MediaTag`): Search for the name of a collection. + * **contentRating** (:class:`~plexapi.media.MediaTag`): Search for a specific content rating. + * **country** (:class:`~plexapi.media.MediaTag`): Search for the name of a country. + * **decade** (*int*): Search for a specific decade (e.g. 2000). + * **director** (:class:`~plexapi.media.MediaTag`): Search for the name of a director. + * **duplicate** (*bool*) Search for duplicate items. + * **genre** (:class:`~plexapi.media.MediaTag`): Search for a specific genre. + * **hdr** (*bool*): Search for HDR items. + * **inProgress** (*bool*): Search for in progress items. + * **label** (:class:`~plexapi.media.MediaTag`): Search for a specific label. + * **lastViewedAt** (*datetime*): Search for items watched before or after a date. See operators below. + * **mood** (:class:`~plexapi.media.MediaTag`): Search for a specific mood. + * **producer** (:class:`~plexapi.media.MediaTag`): Search for the name of a producer. + * **resolution** (*str*): Search for a specific resolution (e.g. 1080). + * **studio** (*str*): Search for the name of a studio. + * **style** (:class:`~plexapi.media.MediaTag`): Search for a specific style. + * **subtitleLanguage** (*str*): Search for a specific subtitle language (3 character code, e.g. eng) + * **unmatched** (*bool*): Search for unmatched items. + * **unwatched** (*bool*): Search for unwatched items. + * **userRating** (*int*): Search for items with a specific user rating. + * **writer** (:class:`~plexapi.media.MediaTag`): Search for the name of a writer. + * **year** (*int*): Search for a specific year. + Examples: - Any of the available custom filters can be applied to the search results - (`screenshot <../_static/images/LibrarySection.search.png>`__). - - * See :func:`~plexapi.library.LibrarySection.listFields` to get a list of all available fields. - * See :func:`~plexapi.library.LibrarySection.listOperators` to get a list of all available operators. - * See :func:`~plexapi.library.LibrarySection.listFilterChoices` to get a list of all available filter values. - - The following filter fields are just some examples of the possible filters. The list is not exaustive, - and not all filters apply to all library types. For tag type filters, a :class:`~plexapi.media.MediaTag` - object, the exact name :attr:`MediaTag.tag` (*str*), or the exact id :attr:`MediaTag.id` (*int*) can be - provided. For date type filters, either a ``datetime`` object or a date in ``YYYY-MM-DD`` (*str*) format - can be provided. Multiple values can be ``OR`` together by providing a list of values. - - * **actor** (:class:`~plexapi.media.MediaTag`): Search for the name of an actor. - * **addedAt** (*datetime*): Search for items added before or after a date. See operators below. - * **audioLanguage** (*str*): Search for a specific audio language (3 character code, e.g. jpn). - * **collection** (:class:`~plexapi.media.MediaTag`): Search for the name of a collection. - * **contentRating** (:class:`~plexapi.media.MediaTag`): Search for a specific content rating. - * **country** (:class:`~plexapi.media.MediaTag`): Search for the name of a country. - * **decade** (*int*): Search for a specific decade (e.g. 2000). - * **director** (:class:`~plexapi.media.MediaTag`): Search for the name of a director. - * **duplicate** (*bool*) Search for duplicate items. - * **genre** (:class:`~plexapi.media.MediaTag`): Search for a specific genre. - * **hdr** (*bool*): Search for HDR items. - * **inProgress** (*bool*): Search for in progress items. - * **label** (:class:`~plexapi.media.MediaTag`): Search for a specific label. - * **lastViewedAt** (*datetime*): Search for items watched before or after a date. See operators below. - * **mood** (:class:`~plexapi.media.MediaTag`): Search for a specific mood. - * **producer** (:class:`~plexapi.media.MediaTag`): Search for the name of a producer. - * **resolution** (*str*): Search for a specific resolution (e.g. 1080). - * **studio** (*str*): Search for the name of a studio. - * **style** (:class:`~plexapi.media.MediaTag`): Search for a specific style. - * **subtitleLanguage** (*str*): Search for a specific subtitle language (3 character code, e.g. eng) - * **unmatched** (*bool*): Search for unmatched items. - * **unwatched** (*bool*): Search for unwatched items. - * **userRating** (*int*): Search for items with a specific user rating. - * **writer** (:class:`~plexapi.media.MediaTag`): Search for the name of a writer. - * **year** (*int*): Search for a specific year. .. code-block:: python @@ -935,13 +938,17 @@ def search(self, title=None, sort=None, maxresults=None, library.search(genre=["animation", "comedy"]) # Genre is animation OR comedy library.search(studio=["Disney", "Pixar"]) # Studio contains Disney OR Pixar - Some filters may be prefixed by the ``libtype`` (e.g. ``show.collection``, ``episode.title``, - ``artist.style``, ``album.genre``, ``track.userRating``, etc.). This should not to be confused with the - ``libtype`` parameter. If no ``libtype`` prefix is provided, then the main library type is assumed. - For example, in a TV show library ``viewCout`` is assumed to be ``show.viewCount``. - If you want to search for episode view count then you must specify ``episode.viewCount`` explicitly. - The ``libtype`` prefix cannot be included directly in the function parameters so the ``**kwargs`` - must be provided as a dictionary. + **Using a** ``libtype`` **Prefix** + + Some filters may be prefixed by the ``libtype`` (e.g. ``show.collection``, ``episode.title``, + ``artist.style``, ``album.genre``, ``track.userRating``, etc.). This should not to be confused with the + ``libtype`` parameter. If no ``libtype`` prefix is provided, then the main library type is assumed. + For example, in a TV show library ``viewCout`` is assumed to be ``show.viewCount``. + If you want to search for episode view count then you must specify ``episode.viewCount`` explicitly. + The ``libtype`` prefix cannot be included directly in the function parameters so the ``**kwargs`` + must be provided as a dictionary. + + Examples: .. code-block:: python @@ -956,50 +963,52 @@ def search(self, title=None, sort=None, maxresults=None, # The following will search for the episode title but return Show objects showLibrary.search(**{"episode.title": "Winter is Coming"}) - **Using operators** + **Using Plex Operators** + + Operators can be included to filter the results with more granularity. If no operator is specified, + the default operator is assumed to be ``=``. The following is a list of possible operators depending + on the data type of the filter being applied. A special ``&`` operator can also be used to ``AND`` + together a list of values. - Operators can be included to filter the results with more granularity. If no operator is specified, - the default operator is assumed to be ``=``. The following is a list of possible operators depending - on the data type of the filter being applied. A special ``&`` operator can also be used to ``AND`` - together a list of values. + Type: :class:`~plexapi.media.MediaTag` or *subtitleLanguage* or *audioLanguage* - Type: :class:`~plexapi.media.MediaTag` or *subtitleLanguage* or *audioLanguage* + * ``=``: ``is`` + * ``!=``: ``is not`` - * ``=``: ``is`` - * ``!=``: ``is not`` + Type: *int* - Type: *int* + * ``=``: ``is`` + * ``!=``: ``is not`` + * ``>>=``: ``is greater than`` + * ``<<=``: ``is less than`` - * ``=``: ``is`` - * ``!=``: ``is not`` - * ``>>=``: ``is greater than`` - * ``<<=``: ``is less than`` + Type: *str* - Type: *str* + * ``=``: ``contains`` + * ``!=``: ``does not contain`` + * ``==``: ``is`` + * ``!==``: ``is not`` + * ``<=``: ``begins with`` + * ``>=``: ``ends with`` - * ``=``: ``contains`` - * ``!=``: ``does not contain`` - * ``==``: ``is`` - * ``!==``: ``is not`` - * ``<=``: ``begins with`` - * ``>=``: ``ends with`` + Type: *bool* - Type: *bool* + * ``=``: ``is true`` + * ``!=``: ``is false`` - * ``=``: ``is true`` - * ``!=``: ``is false`` + Type: *datetime* - Type: *datetime* + * ``<<=``: ``is before`` + * ``>>=``: ``is after`` - * ``<<=``: ``is before`` - * ``>>=``: ``is after`` + Type: *resolution* - Type: *resolution* + * ``=``: ``is`` - * ``=``: ``is`` + Operators cannot be included directly in the function parameters so the ``**kwargs`` + must be provided as a dictionary. - Operators cannot be included directly in the function parameters so the ``**kwargs`` - must be provided as a dictionary. + Examples: .. code-block:: python @@ -1015,17 +1024,23 @@ def search(self, title=None, sort=None, maxresults=None, # Collection is James Bond and user rating is greater than 8 library.search(**{"collection": "James Bond", "userRating>>": 8}) - For even more advanced filtering which cannot be achieved in Plex, the PlexAPI operators can be applied. - See :func:`plexapi.base.PlexObject.fetchItem` for more details. Note that using the Plex filters above will - be faster since the filters are applied by the Plex server before the results are returned to PlexAPI. - Using the PlexAPI operators requires the Plex server to return *all* results to allow PlexAPI to do the - filtering. The Plex filters and the PlexAPI operators can be used in conjunction with each other. + **Using PlexAPI Operators** + + For even more advanced filtering which cannot be achieved in Plex, the PlexAPI operators can be applied + to any XML attribute. See :func:`plexapi.base.PlexObject.fetchItems` for a list of operators and how they + are used. Note that using the Plex filters above will be faster since the filters are applied by the Plex + server before the results are returned to PlexAPI. Using the PlexAPI operators requires the Plex server + to return *all* results to allow PlexAPI to do the filtering. The Plex filters and the PlexAPI operators + can be used in conjunction with each other. + + Examples: .. code-block:: python library.search(summary__icontains="Christmas") library.search(duration__gt=7200000) library.search(audienceRating__lte=6.0, audienceRatingImage__startswith="rottentomatoes://") + library.search(media__videoCodec__exact="h265") library.search(genre="holiday", viewCount__gte=3) """ From 4b25d4ab88a2ea5d8ba0983c69835f56f4ff9f6a Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 12 Mar 2021 10:08:14 -0800 Subject: [PATCH 061/356] Print available filters when raising NotFound --- plexapi/library.py | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 8120dca37..4a6e4bc30 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -602,7 +602,7 @@ def getFilterType(self, libtype=None): try: return next(f for f in self.filterTypes() if f.type == libtype) except StopIteration: - raise NotFound('Invalid libtype for this library: %s' % libtype) from None + raise BadRequest('Invalid libtype for this library: %s' % libtype) from None def fieldTypes(self): """ Returns a list of available :class:`~plexapi.library.FilteringFieldType` for this library section. """ @@ -623,7 +623,7 @@ def getFieldType(self, fieldType): try: return next(f for f in self.fieldTypes() if f.type == fieldType) except StopIteration: - raise NotFound('Invalid fieldType for this library: %s' % fieldType) from None + raise BadRequest('Invalid fieldType for this library: %s' % fieldType) from None def listFilters(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringFilter` for a specified libtype. @@ -716,7 +716,7 @@ def listFilterChoices(self, field, libtype=None): artist, album, track, photoalbum, photo). Raises: - :exc:`~plexapi.exceptions.BadRequest`: Unknown filter field. + :exc:`~plexapi.exceptions.NotFound`: Unknown filter. Example: @@ -731,7 +731,10 @@ def listFilterChoices(self, field, libtype=None): try: field = next(f for f in self.listFilters(libtype) if f.filter == field) except StopIteration: - raise NotFound('Unknown filter field: %s' % field) from None + availableFilters = [f.filter for f in self.listFilters()] + raise NotFound('Unknown filter: %s. ' + 'Available filters: %s' + % (field, availableFilters)) from None data = self._server.query(field.key) return self.findItems(data, FilterChoice) @@ -755,8 +758,10 @@ def _validateFilterField(self, field, values, libtype=None): if filterField: break else: - raise NotFound('Unknown filter field "%s" for libtype "%s"' - % (field, libtype)) from None + availableFields = [f.key for f in self.listFields(libtype)] + raise NotFound('Unknown filter field "%s" for libtype "%s". ' + 'Available filter fields: %s' + % (field, libtype, availableFields)) from None field = filterField.key operator = self._validateFieldOperator(filterField, operator) @@ -786,8 +791,10 @@ def _validateFieldOperator(self, filterField, operator): try: next(o for o in fieldType.operators if o.key == operator) except StopIteration: - raise NotFound('Unknown operator "%s" for filter field "%s"' - % (operator, filterField.key)) from None + availableOperators = [o.key for o in self.listOperators(filterField.type)] + raise NotFound('Unknown operator "%s" for filter field "%s". ' + 'Available operators: %s' + % (operator, filterField.key, availableOperators)) from None return '&=' if and_operator else operator @@ -845,16 +852,21 @@ def _validateSortField(self, sort, libtype=None): try: filterSort = next(f for f in self.listSorts(libtype) if f.key.endswith(sortField)) except StopIteration: - raise NotFound('Unknown sort field "%s" for libtype "%s"' - % (sortField, libtype)) from None + availableSorts = [f.key for f in self.listSorts(libtype)] + raise NotFound('Unknown sort field "%s" for libtype "%s". ' + 'Available sort fields: %s' + % (sortField, libtype, availableSorts)) from None sortField = filterSort.key if not sortDir: sortDir = filterSort.defaultDirection - if sortDir not in {'asc', 'desc'}: - raise NotFound('unknown sort direction: %s, must be "asc" or "desc"' % sortDir) + availableDirections = ['asc', 'desc'] + if sortDir not in availableDirections: + raise NotFound('Unknown sort direction: %s. ' + 'Available sort directions: %s' + % (sortDir, availableDirections)) return '%s:%s' % (sortField, sortDir) @@ -1129,6 +1141,8 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so Raises: :exc:`~plexapi.exceptions.BadRequest`: When the library is not allowed to sync. + :exc:`~plexapi.exceptions.BadRequest`: When the sort or filter is invalid. + :exc:`~plexapi.exceptions.NotFound`: When applying an unknown sort or filter. Example: From 8adedd6b3b944de84727ac3a9d9913f3c35cfed5 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 12 Mar 2021 10:29:40 -0800 Subject: [PATCH 062/356] Add deprecated functions filterFields and listChoices --- plexapi/library.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plexapi/library.py b/plexapi/library.py index 4a6e4bc30..2e4378e47 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1217,6 +1217,14 @@ def playlists(self, **kwargs): key = '/playlists?type=15&playlistType=%s§ionID=%s' % (self.CONTENT_TYPE, self.key) return self.fetchItems(key, **kwargs) + @deprecated('use "listFields" instead') + def filterFields(self, mediaType=None): + return self.listFields(libtype=mediaType) + + @deprecated('use "listFilterChoices" instead') + def listChoices(self, category, libtype=None, **kwargs): + return self.listFilterChoices(field=category, libtype=libtype) + class MovieSection(LibrarySection): """ Represents a :class:`~plexapi.library.LibrarySection` section containing movies. From 5bff309a3218286b1a04a98948b7e123e623a456 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 13 Mar 2021 11:07:27 -0800 Subject: [PATCH 063/356] More search doc string updates --- plexapi/library.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 2e4378e47..05439ab6b 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -952,13 +952,15 @@ def search(self, title=None, sort=None, maxresults=None, **Using a** ``libtype`` **Prefix** - Some filters may be prefixed by the ``libtype`` (e.g. ``show.collection``, ``episode.title``, - ``artist.style``, ``album.genre``, ``track.userRating``, etc.). This should not to be confused with the - ``libtype`` parameter. If no ``libtype`` prefix is provided, then the main library type is assumed. - For example, in a TV show library ``viewCout`` is assumed to be ``show.viewCount``. - If you want to search for episode view count then you must specify ``episode.viewCount`` explicitly. - The ``libtype`` prefix cannot be included directly in the function parameters so the ``**kwargs`` - must be provided as a dictionary. + Some filters may be prefixed by the ``libtype`` separated by a ``.`` (e.g. ``show.collection``, + ``episode.title``, ``artist.style``, ``album.genre``, ``track.userRating``, etc.). This should not be + confused with the ``libtype`` parameter. If no ``libtype`` prefix is provided, then the default library + type is assumed. For example, in a TV show library ``viewCout`` is assumed to be ``show.viewCount``. + If you want to filter using episode view count then you must specify ``episode.viewCount`` explicitly. + In addition, if the filter does not exist for the default library type it will fallback to the most + specific ``libtype`` available. For example, ``show.unwatched`` does not exists so it will fallback to + ``episode.unwatched.`` The ``libtype`` prefix cannot be included directly in the function parameters so + the ``**kwargs`` must be provided as a dictionary. Examples: @@ -975,12 +977,15 @@ def search(self, title=None, sort=None, maxresults=None, # The following will search for the episode title but return Show objects showLibrary.search(**{"episode.title": "Winter is Coming"}) + # The following will fallback to episode.unwatched + showLibrary.search(unwatched=True) + **Using Plex Operators** - Operators can be included to filter the results with more granularity. If no operator is specified, - the default operator is assumed to be ``=``. The following is a list of possible operators depending - on the data type of the filter being applied. A special ``&`` operator can also be used to ``AND`` - together a list of values. + Operators can be appended to the filter field to narrow down results with more granularity. If no + operator is specified, the default operator is assumed to be ``=``. The following is a list of + possible operators depending on the data type of the filter being applied. A special ``&`` operator + can also be used to ``AND`` together a list of values. Type: :class:`~plexapi.media.MediaTag` or *subtitleLanguage* or *audioLanguage* @@ -1018,7 +1023,7 @@ def search(self, title=None, sort=None, maxresults=None, * ``=``: ``is`` Operators cannot be included directly in the function parameters so the ``**kwargs`` - must be provided as a dictionary. + must be provided as a dictionary. The trailing ``=`` on the operator may be excluded. Examples: From 8cc90fc850d00e0bafabceb9ce08dbc40cd1a3f6 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 14 Mar 2021 15:05:37 -0700 Subject: [PATCH 064/356] Fix libtype for listFilterChoices --- plexapi/library.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 05439ab6b..8266de72a 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -716,7 +716,8 @@ def listFilterChoices(self, field, libtype=None): artist, album, track, photoalbum, photo). Raises: - :exc:`~plexapi.exceptions.NotFound`: Unknown filter. + :exc:`~plexapi.exceptions.BadRequest`: Invalid filter field. + :exc:`~plexapi.exceptions.NotFound`: Unknown filter field. Example: @@ -728,13 +729,18 @@ def listFilterChoices(self, field, libtype=None): """ if isinstance(field, str): + match = re.match(r'(?:([a-zA-Z]*)\.)?([a-zA-Z]+)', field) + if not match: + raise BadRequest('Invalid filter field: %s' % field) + _libtype, field = match.groups() + libtype = _libtype or libtype or self.TYPE try: field = next(f for f in self.listFilters(libtype) if f.filter == field) except StopIteration: - availableFilters = [f.filter for f in self.listFilters()] - raise NotFound('Unknown filter: %s. ' + availableFilters = [f.filter for f in self.listFilters(libtype)] + raise NotFound('Unknown filter field "%s" for libtype "%s". ' 'Available filters: %s' - % (field, availableFilters)) from None + % (field, libtype, availableFilters)) from None data = self._server.query(field.key) return self.findItems(data, FilterChoice) From ea187536c23f97759b79ff0ed41d21170c21eeb6 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 14 Mar 2021 15:14:24 -0700 Subject: [PATCH 065/356] Print available libtypes and field types for exception --- plexapi/library.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 8266de72a..3dd692347 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -596,13 +596,16 @@ def getFilterType(self, libtype=None): artist, album, track, photoalbum, photo). Raises: - :exc:`~plexapi.exceptions.BadRequest`: Invalid libtype for this library. + :exc:`~plexapi.exceptions.NotFound`: Unknown libtype for this library. """ libtype = libtype or self.TYPE try: return next(f for f in self.filterTypes() if f.type == libtype) except StopIteration: - raise BadRequest('Invalid libtype for this library: %s' % libtype) from None + availableLibtypes = [f.type for f in self.filterTypes()] + raise NotFound('Unknown libtype "%s" for this library. ' + 'Available libtypes: %s' + % (libtype, availableLibtypes)) from None def fieldTypes(self): """ Returns a list of available :class:`~plexapi.library.FilteringFieldType` for this library section. """ @@ -618,12 +621,15 @@ def getFieldType(self, fieldType): subtitleLanguage, audioLanguage, resolution). Raises: - :exc:`~plexapi.exceptions.BadRequest`: Invalid libtype for this library. + :exc:`~plexapi.exceptions.NotFound`: Unknown fieldType for this library. """ try: return next(f for f in self.fieldTypes() if f.type == fieldType) except StopIteration: - raise BadRequest('Invalid fieldType for this library: %s' % fieldType) from None + availableFieldTypes = [f.type for f in self.fieldTypes()] + raise NotFound('Unknown field type "%s" for this library. ' + 'Available field types: %s' + % (fieldType, availableFieldTypes)) from None def listFilters(self, libtype=None): """ Returns a list of available :class:`~plexapi.library.FilteringFilter` for a specified libtype. @@ -870,7 +876,7 @@ def _validateSortField(self, sort, libtype=None): availableDirections = ['asc', 'desc'] if sortDir not in availableDirections: - raise NotFound('Unknown sort direction: %s. ' + raise NotFound('Unknown sort direction "%s". ' 'Available sort directions: %s' % (sortDir, availableDirections)) From e1ab49f20ec00c207dd089fc6f1e20365f1ffc4c Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 14 Mar 2021 23:34:56 -0700 Subject: [PATCH 066/356] Fix & search operator --- plexapi/library.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 3dd692347..2fac26025 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -779,8 +779,8 @@ def _validateFilterField(self, field, values, libtype=None): operator = self._validateFieldOperator(filterField, operator) result = self._validateFieldValue(filterField, values, libtype) - if operator.startswith('&'): - args = {field + operator[:-1]: result} + if operator == '&=': + args = {field: result} return urlencode(args, doseq=True) else: args = {field + operator[:-1]: ','.join(result)} @@ -793,7 +793,7 @@ def _validateFieldOperator(self, filterField, operator): fieldType = self.getFieldType(filterField.type) and_operator = False - if operator == '&': + if operator in {'&', '&='}: and_operator = True operator = '' if fieldType.type == 'string' and operator in {'=', '!='}: From 684bbde89b035652b2dd761c71a6b3bda7554e7b Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 15 Mar 2021 00:42:11 -0700 Subject: [PATCH 067/356] Change search break condition Fixes #694 When using a PlexAPI operator, fetchItems may return zero results in the first container causing the loop to break early. This changes the break condition to check if the container exceeds the total number of items therefore there will be no more items to fetch. --- plexapi/library.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 2fac26025..6e51146e3 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1105,7 +1105,6 @@ def search(self, title=None, sort=None, maxresults=None, if not len(subresults): if offset > self.totalSize: log.info("container_start is higher then the number of items in the library") - break results.extend(subresults) @@ -1122,6 +1121,9 @@ def search(self, title=None, sort=None, maxresults=None, container_start += container_size + if container_start > self.totalSize: + break + return results def _locations(self): From 357818a857a5a40aa1a241acc9ec06d75d29f01d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 15 Mar 2021 10:03:01 -0700 Subject: [PATCH 068/356] Use separate totalViewSize cache for searching Fixes #695 totalSize was getting overwritten when using search with a different libtype. This makes totalSize independant from search. --- plexapi/library.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 6e51146e3..20e8adade 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -355,7 +355,8 @@ def _loadData(self, data): # Private attrs as we dont want a reload. self._filterTypes = None self._fieldTypes = None - self._total_size = None + self._totalSize = None + self._totalViewSize = None def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, **kwargs): """ Load the specified key to find and build all items with the specified tag @@ -381,7 +382,7 @@ def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, # totalSize is only included in the xml response # if container size is used. total_size = data.attrib.get("totalSize") or data.attrib.get("size") - self._total_size = utils.cast(int, total_size) + self._totalViewSize = utils.cast(int, total_size) items = self.findItems(data, cls, ekey, **kwargs) @@ -394,12 +395,12 @@ def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, @property def totalSize(self): """ Returns the total number of items in the library. """ - if self._total_size is None: - part = '/library/sections/%s/all?X-Plex-Container-Start=0&X-Plex-Container-Size=1' % self.key + if self._totalSize is None: + part = '/library/sections/%s/all?X-Plex-Container-Start=0&X-Plex-Container-Size=0' % self.key data = self._server.query(part) - self._total_size = int(data.attrib.get("totalSize")) + self._totalSize = int(data.attrib.get("totalSize")) - return self._total_size + return self._totalSize def delete(self): """ Delete a library section. """ @@ -1103,15 +1104,15 @@ def search(self, title=None, sort=None, maxresults=None, subresults = self.fetchItems(key, container_start=container_start, container_size=container_size, **kwargs) if not len(subresults): - if offset > self.totalSize: + if offset > self._totalViewSize: log.info("container_start is higher then the number of items in the library") results.extend(subresults) - # self.totalSize is not used as a condition in the while loop as + # self._totalViewSize is not used as a condition in the while loop as # this require a additional http request. - # self.totalSize is updated from .fetchItems - wanted_number_of_items = self.totalSize - offset + # self._totalViewSize is updated from self.fetchItems + wanted_number_of_items = self._totalViewSize - offset if maxresults is not None: wanted_number_of_items = min(maxresults, wanted_number_of_items) container_size = min(container_size, maxresults - len(results)) @@ -1121,7 +1122,7 @@ def search(self, title=None, sort=None, maxresults=None, container_start += container_size - if container_start > self.totalSize: + if container_start > self._totalViewSize: break return results From 3422bb7fb8b822ce7225673f45abee33c6031a2a Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 15 Mar 2021 10:06:54 -0700 Subject: [PATCH 069/356] Separate search function for flake8 complexity --- plexapi/library.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 20e8adade..b808d001f 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1088,6 +1088,15 @@ def search(self, title=None, sort=None, maxresults=None, if libtype is not None: args['type'] = utils.searchType(libtype) + joined_args = utils.joinArgs(args).lstrip('?') + joined_filter_args = '&'.join(filter_args) if filter_args else '' + params = '&'.join([joined_args, joined_filter_args]).strip('&') + key = '/library/sections/%s/all?%s' % (self.key, params) + + return self._search(key, maxresults, container_start, container_size, **kwargs) + + def _search(self, key, maxresults, container_start, container_size, **kwargs): + """ Perform the actual library search and return the results. """ results = [] subresults = [] offset = container_start @@ -1095,11 +1104,6 @@ def search(self, title=None, sort=None, maxresults=None, if maxresults is not None: container_size = min(container_size, maxresults) - joined_args = utils.joinArgs(args).lstrip('?') - joined_filter_args = '&'.join(filter_args) if filter_args else '' - params = '&'.join([joined_args, joined_filter_args]).strip('&') - key = '/library/sections/%s/all?%s' % (self.key, params) - while True: subresults = self.fetchItems(key, container_start=container_start, container_size=container_size, **kwargs) From 1674d08ab327ccfd9eb234bf1d2c7e96874720ad Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 19 Mar 2021 15:53:20 -0700 Subject: [PATCH 070/356] Add tests for library search --- tests/test_library.py | 175 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 170 insertions(+), 5 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index 57cf03987..f455889c6 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- -from datetime import datetime +from collections import namedtuple +from datetime import datetime, timedelta import pytest -from plexapi.exceptions import NotFound +from plexapi.exceptions import BadRequest, NotFound from . import conftest as utils @@ -25,7 +26,7 @@ def test_library_sectionByID_with_attrs(plex, movies): assert movies.agent == "tv.plex.agents.movie" # This seems to fail for some reason. # my account alloew of sync, didnt find any about settings about the library. - # assert movies.allowSync is ('sync' in plex.ownerFeatures) + # assert movies.allowSync is ("sync" in plex.ownerFeatures) assert movies.art == "/:/resources/movie-fanart.jpg" assert utils.is_metadata( movies.composite, prefix="/library/sections/", contains="/composite/" @@ -244,12 +245,12 @@ def test_library_settings(movies): def test_library_editAdvanced_default(movies): movies.editAdvanced(hidden=2) for setting in movies.settings(): - if setting.id == 'hidden': + if setting.id == "hidden": assert int(setting.value) == 2 movies.editAdvanced(collectionMode=0) for setting in movies.settings(): - if setting.id == 'collectionMode': + if setting.id == "collectionMode": assert int(setting.value) == 0 movies.reload() @@ -302,3 +303,167 @@ def test_library_section_timeline(plex, movies): assert utils.is_int(tl.updateQueueSize, gte=0) assert tl.viewGroup == "secondary" assert tl.viewMode == 65592 + + +def test_library_MovieSection_search(movies, movie): + movie.addLabel("test_search") + movie.addCollection("test_search") + _test_library_search(movies, movie) + movie.removeLabel("test_search", locked=False) + movie.removeCollection("test_search", locked=False) + + +def test_library_ShowSection_search(tvshows, show): + show.addLabel("test_search") + show.addCollection("test_search") + _test_library_search(tvshows, show) + show.removeLabel("test_search", locked=False) + show.removeCollection("test_search", locked=False) + + season = show.season(season=1) + _test_library_search(tvshows, season) + + episode = season.episode(episode=1) + _test_library_search(tvshows, episode) + + +def test_library_MusicSection_search(music, artist): + artist.addGenre("test_search") + artist.addStyle("test_search") + artist.addMood("test_search") + artist.addCollection("test_search") + _test_library_search(music, artist) + artist.removeGenre("test_search", locked=False) + artist.removeStyle("test_search", locked=False) + artist.removeMood("test_search", locked=False) + artist.removeCollection("test_search", locked=False) + + album = artist.album("Layers") + album.addGenre("test_search") + album.addStyle("test_search") + album.addMood("test_search") + album.addCollection("test_search") + album.addLabel("test_search") + _test_library_search(music, album) + album.removeGenre("test_search", locked=False) + album.removeStyle("test_search", locked=False) + album.removeMood("test_search", locked=False) + album.removeCollection("test_search", locked=False) + album.removeLabel("test_search", locked=False) + + track = album.track(track=1) + track.addMood("test_search") + _test_library_search(music, track) + track.removeMood("test_search", locked=False) + + +def test_library_PhotoSection_search(photos, photoalbum): + photo = photoalbum.photo("photo1") + photo.addTag("test_search") + _test_library_search(photos, photo) + photo.removeTag("test_search") + + +def test_library_MovieSection_search_sort(movies): + results = movies.search(sort="titleSort") + titleSort = [r.titleSort for r in results] + assert titleSort == sorted(titleSort) + results_asc = movies.search(sort="titleSort:asc") + titleSort_asc = [r.titleSort for r in results_asc] + assert titleSort == titleSort_asc + results_desc = movies.search(sort="titleSort:desc") + titleSort_desc = [r.titleSort for r in results_desc] + assert titleSort_desc == sorted(titleSort_desc, reverse=True) + + +def test_library_search_exceptions(movies): + with pytest.raises(BadRequest): + movies.listFilterChoices(field="123abc.title") + with pytest.raises(BadRequest): + movies.search(**{"123abc": True}) + with pytest.raises(BadRequest): + movies.search(year="123abc") + with pytest.raises(BadRequest): + movies.search(sort="123abc") + with pytest.raises(NotFound): + movies.getFilterType(libtype='show') + with pytest.raises(NotFound): + movies.getFieldType(fieldType="unknown") + with pytest.raises(NotFound): + movies.listFilterChoices(field="unknown") + with pytest.raises(NotFound): + movies.search(**{"episode.title": "unknown"}) + with pytest.raises(NotFound): + movies.search(**{"title<>!=": "unknown"}) + with pytest.raises(NotFound): + movies.search(sort="unknown") + with pytest.raises(NotFound): + movies.search(sort="titleSort:bad") + + +def _test_library_search(library, obj): + # Create & operator + AndOperator = namedtuple('AndOperator', ['key', 'title']) + andOp = AndOperator('&=', 'and') + + fields = library.listFields(obj.type) + for field in fields: + fieldAttr = field.key.split(".")[-1] + operators = library.listOperators(field.type) + if field.type in {'tag', 'string'}: + operators += [andOp] + + for operator in operators: + if fieldAttr == "unmatched" and operator.key == "!=" or fieldAttr == 'userRating': + continue + + value = getattr(obj, fieldAttr, None) + + if field.type == "boolean" and value is None: + value = fieldAttr.startswith("unwatched") + if field.type == "tag" and isinstance(value, list) and value and operator.title != 'and': + value = value[0] + elif value is None: + continue + + if operator.title == "begins with": + searchValue = value[:3] + elif operator.title == "ends with": + searchValue = value[-3:] + elif "contain" in operator.title: + searchValue = value.split(" ")[0] + elif operator.title == "is less than": + searchValue = value + 1 + elif operator.title == "is greater than": + searchValue = max(value - 1, 0) + elif operator.title == "is before": + searchValue = value + timedelta(days=1) + elif operator.title == "is after": + searchValue = value - timedelta(days=1) + else: + searchValue = value + + searchFilter = {field.key + operator.key[:-1]: searchValue} + results = library.search(libtype=obj.type, **searchFilter) + + if operator.key.startswith("!") or operator.key.startswith(">>") and searchValue == 0: + assert obj not in results + else: + assert obj in results + + # Test search again using string tag and date + if field.type in {"tag", "date"}: + if field.type == "tag" and fieldAttr != 'contentRating': + if not isinstance(searchValue, list): + searchValue = [searchValue] + searchValue = [v.tag for v in searchValue] + elif field.type == "date": + searchValue = searchValue.strftime("%Y-%m-%d") + + searchFilter = {field.key + operator.key[:-1]: searchValue} + results = library.search(libtype=obj.type, **searchFilter) + + if operator.key.startswith("!") or operator.key.startswith(">>") and searchValue == 0: + assert obj not in results + else: + assert obj in results From 61d73be8a3ec7b83af870783c4e400ab1a051e83 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 19 Mar 2021 16:27:16 -0700 Subject: [PATCH 071/356] Don't use utils.cast for search values --- plexapi/library.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index b808d001f..1c2312f7c 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -830,14 +830,14 @@ def _validateFieldValue(self, filterField, values, libtype=None): try: for value in values: if fieldType.type == 'boolean': - value = int(utils.cast(bool, value)) + value = int(bool(value)) elif fieldType.type == 'date': if isinstance(value, datetime): value = int(value.timestamp()) else: value = int(utils.toDatetime(value, '%Y-%m-%d').timestamp()) elif fieldType.type == 'integer': - value = utils.cast(int, value) + value = int(value) elif fieldType.type == 'string': value = str(value) elif fieldType.type in choiceTypes: From c02a005a702753b90a0f7198ce0076a7d649b80e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 19 Mar 2021 16:27:28 -0700 Subject: [PATCH 072/356] Add more search tests --- tests/test_library.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index f455889c6..a04fe57cf 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -144,10 +144,6 @@ def test_library_MovieSection_update_path(movies): movies.update(path=movies.locations[0]) -def test_library_ShowSection_all(tvshows): - assert len(tvshows.all(title__iexact="The 100")) - - def test_library_MovieSection_refresh(movies, patched_http_call): movies.refresh() @@ -174,6 +170,10 @@ def test_library_MovieSection_onDeck(movie, movies, tvshows, episode): episode.markUnwatched() +def test_library_MovieSection_searchMovies(movies): + assert movies.searchMovies(title="Elephants Dream") + + def test_library_MovieSection_recentlyAdded(movies): assert len(movies.recentlyAdded()) @@ -186,10 +186,18 @@ def test_library_MovieSection_collections(movies, collection): assert len(movies.collections()) +def test_library_ShowSection_all(tvshows): + assert len(tvshows.all(title__iexact="The 100")) + + def test_library_ShowSection_searchShows(tvshows): assert tvshows.searchShows(title="The 100") +def test_library_ShowSection_searchSseasons(tvshows): + assert tvshows.searchSeasons(title="The 100") + + def test_library_ShowSection_searchEpisodes(tvshows): assert tvshows.searchEpisodes(title="Winter Is Coming") @@ -305,6 +313,10 @@ def test_library_section_timeline(plex, movies): assert tl.viewMode == 65592 +def test_library_MovieSection_hubSearch(movies): + assert movies.hubSearch("Elephants Dream") + + def test_library_MovieSection_search(movies, movie): movie.addLabel("test_search") movie.addCollection("test_search") @@ -392,7 +404,7 @@ def test_library_search_exceptions(movies): with pytest.raises(NotFound): movies.listFilterChoices(field="unknown") with pytest.raises(NotFound): - movies.search(**{"episode.title": "unknown"}) + movies.search(unknown="unknown") with pytest.raises(NotFound): movies.search(**{"title<>!=": "unknown"}) with pytest.raises(NotFound): From b9798e95893bc6c6f43f55ff4f3c66b12149b668 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 19 Mar 2021 16:36:50 -0700 Subject: [PATCH 073/356] Fix searchSeasons test --- tests/test_library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_library.py b/tests/test_library.py index a04fe57cf..2544f5c97 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -195,7 +195,7 @@ def test_library_ShowSection_searchShows(tvshows): def test_library_ShowSection_searchSseasons(tvshows): - assert tvshows.searchSeasons(title="The 100") + assert tvshows.searchSeasons(**{"show.title": "The 100"}) def test_library_ShowSection_searchEpisodes(tvshows): From 813770ac7493d165f35e438d1ea0b8825b3ebfe7 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 19 Mar 2021 16:47:30 -0700 Subject: [PATCH 074/356] Add additional test for libtype fallback for search field --- tests/test_library.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_library.py b/tests/test_library.py index 2544f5c97..053a3b71b 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -338,6 +338,9 @@ def test_library_ShowSection_search(tvshows, show): episode = season.episode(episode=1) _test_library_search(tvshows, episode) + # Additional test for mapping field to the correct libtype + assert tvshows.search(unwatched=True) # equal to episode.unwatched=True + def test_library_MusicSection_search(music, artist): artist.addGenre("test_search") From f92d9d5e8c9f5fe661819ea9317dd96f8047be01 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 22 Mar 2021 12:31:54 -0700 Subject: [PATCH 075/356] Fix myplex share section ID cast to int (#708) * Fix myplex share section ID cast to int * Fix typo in search doc string --- plexapi/library.py | 2 +- plexapi/myplex.py | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 1c2312f7c..68f962e22 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -972,7 +972,7 @@ def search(self, title=None, sort=None, maxresults=None, If you want to filter using episode view count then you must specify ``episode.viewCount`` explicitly. In addition, if the filter does not exist for the default library type it will fallback to the most specific ``libtype`` available. For example, ``show.unwatched`` does not exists so it will fallback to - ``episode.unwatched.`` The ``libtype`` prefix cannot be included directly in the function parameters so + ``episode.unwatched``. The ``libtype`` prefix cannot be included directly in the function parameters so the ``**kwargs`` must be provided as a dictionary. Examples: diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 84970dafd..5d997e365 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -499,15 +499,18 @@ def _getSectionIds(self, server, sections): url = self.PLEXSERVERS.replace('{machineId}', machineIdentifier) data = self.query(url, self._session.get) for elem in data[0]: - allSectionIds[elem.attrib.get('id', '').lower()] = elem.attrib.get('id') - allSectionIds[elem.attrib.get('title', '').lower()] = elem.attrib.get('id') - allSectionIds[elem.attrib.get('key', '').lower()] = elem.attrib.get('id') + _id = utils.cast(int, elem.attrib.get('id')) + _key = utils.cast(int, elem.attrib.get('key')) + _title = elem.attrib.get('title', '').lower() + allSectionIds[_id] = _id + allSectionIds[_key] = _id + allSectionIds[_title] = _id log.debug(allSectionIds) # Convert passed in section items to section ids from above lookup sectionIds = [] for section in sections: - sectionKey = section.key if isinstance(section, LibrarySection) else section - sectionIds.append(allSectionIds[sectionKey.lower()]) + sectionKey = section.key if isinstance(section, LibrarySection) else section.lower() + sectionIds.append(allSectionIds[sectionKey]) return sectionIds def _filterDictToStr(self, filterDict): From bc5f09546079f798c63149646e544cc2025d8e5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Mon, 22 Mar 2021 21:32:57 +0200 Subject: [PATCH 076/356] bugreport: fix snippets typo (#705) --- .github/ISSUE_TEMPLATE/bug_report.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 633c56417..a342e427c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,20 +8,25 @@ assignees: '' --- **Describe the issue** + A clear and concise description the issue. -**Code snipppets** +**Code snippets** + Add code snippet to help explain your problem. - please use markdown [Code and Syntax Highlighting](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code-and-syntax-highlighting) for code snippet **Expected behavior** + A clear and concise description of what you expected to happen. **Enviroment (please complete the following information):** + - OS: [e.g. Linux, Windows, Docker] - Plex version [eg. version 1.21.1.3830] - Python Version [e.g. 3.7.8] - PlexAPI version [e.g. 4.3.0] **Additional context** + Add any other context about the issue here. From b9f897c949b99bc21341f9ded52fba8df6c700de Mon Sep 17 00:00:00 2001 From: jjlawren Date: Mon, 22 Mar 2021 14:34:28 -0500 Subject: [PATCH 077/356] Fix PR template location (#702) --- .github/{PULL_REQUEST_TEMPLATE => }/pull_request_template.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{PULL_REQUEST_TEMPLATE => }/pull_request_template.md (100%) diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/pull_request_template.md similarity index 100% rename from .github/PULL_REQUEST_TEMPLATE/pull_request_template.md rename to .github/pull_request_template.md From ef18e2c25672c0ed092badae81ce39ba4eaab07b Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 22 Mar 2021 12:35:07 -0700 Subject: [PATCH 078/356] Fix parsing episode parentRatingKey from parentThumb (#699) --- plexapi/video.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/video.py b/plexapi/video.py index e42ca45fe..588c40c87 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -832,7 +832,7 @@ def _loadData(self, data): # https://forums.plex.tv/t/parentratingkey-not-in-episode-xml-when-seasons-are-hidden/300553 if self.skipParent and not self.parentRatingKey: # Parse the parentRatingKey from the parentThumb - if self.parentThumb.startswith('/library/metadata/'): + if self.parentThumb and self.parentThumb.startswith('/library/metadata/'): self.parentRatingKey = utils.cast(int, self.parentThumb.split('/')[3]) # Get the parentRatingKey from the season's ratingKey if not self.parentRatingKey and self.grandparentRatingKey: From 1d4e911ef53f7efad89f5ee98c907730f8169e93 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 22 Mar 2021 12:35:57 -0700 Subject: [PATCH 079/356] Add clientIdentifier attribute to SystemDevice (#703) * Add clientIdentifier attribute to SystemDevice * Add test for SystemDevice clientIdentifier * Add methods to return a specific SystemAccount or SystemDevice by ID * Update tests for SystemAccounts and SystemDevices --- plexapi/server.py | 40 ++++++++++++++++++++++++++++------------ tests/test_server.py | 3 +++ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/plexapi/server.py b/plexapi/server.py index 1cae64f9f..4b9c7e886 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -217,19 +217,41 @@ def createToken(self, type='delegation', scope='all'): return q.attrib.get('token') def systemAccounts(self): - """ Returns a list of :class:`~plexapi.server.SystemAccounts` objects this server contains. """ + """ Returns a list of :class:`~plexapi.server.SystemAccount` objects this server contains. """ if self._systemAccounts is None: key = '/accounts' self._systemAccounts = self.fetchItems(key, SystemAccount) return self._systemAccounts + def systemAccount(self, accountID): + """ Returns the :class:`~plexapi.server.SystemAccount` object for the specified account ID. + + Parameters: + accountID (int): The :class:`~plexapi.server.SystemAccount` ID. + """ + try: + return next(account for account in self.systemAccounts() if account.id == accountID) + except StopIteration: + raise NotFound('Unknown account with accountID=%s' % accountID) from None + def systemDevices(self): - """ Returns a list of :class:`~plexapi.server.SystemDevices` objects this server contains. """ + """ Returns a list of :class:`~plexapi.server.SystemDevice` objects this server contains. """ if self._systemDevices is None: key = '/devices' self._systemDevices = self.fetchItems(key, SystemDevice) return self._systemDevices + def systemDevice(self, deviceID): + """ Returns the :class:`~plexapi.server.SystemDevice` object for the specified device ID. + + Parameters: + deviceID (int): The :class:`~plexapi.server.SystemDevice` ID. + """ + try: + return next(device for device in self.systemDevices() if device.id == deviceID) + except StopIteration: + raise NotFound('Unknown device with deviceID=%s' % deviceID) from None + def myPlexAccount(self): """ Returns a :class:`~plexapi.myplex.MyPlexAccount` object using the same token to access this server. If you are not the owner of this PlexServer @@ -845,6 +867,7 @@ class SystemDevice(PlexObject): Attributes: TAG (str): 'Device' + clientIdentifier (str): The unique identifier for the device. createdAt (datatime): Datetime the device was created. id (int): The ID of the device (not the same as :class:`~plexapi.myplex.MyPlexDevice` ID). key (str): API URL (/devices/) @@ -855,6 +878,7 @@ class SystemDevice(PlexObject): def _loadData(self, data): self._data = data + self.clientIdentifier = data.attrib.get('clientIdentifier') self.createdAt = utils.toDatetime(data.attrib.get('createdAt')) self.id = cast(int, data.attrib.get('id')) self.key = '/devices/%s' % self.id @@ -897,19 +921,11 @@ def __repr__(self): def account(self): """ Returns the :class:`~plexapi.server.SystemAccount` associated with the bandwidth data. """ - accounts = self._server.systemAccounts() - try: - return next(account for account in accounts if account.id == self.accountID) - except StopIteration: - raise NotFound('Unknown account for this bandwidth data: accountID=%s' % self.accountID) + return self._server.systemAccount(self.accountID) def device(self): """ Returns the :class:`~plexapi.server.SystemDevice` associated with the bandwidth data. """ - devices = self._server.systemDevices() - try: - return next(device for device in devices if device.id == self.deviceID) - except StopIteration: - raise NotFound('Unknown device for this bandwidth data: deviceID=%s' % self.deviceID) + return self._server.systemDevice(self.deviceID) class StatisticsResources(PlexObject): diff --git a/tests/test_server.py b/tests/test_server.py index eb85177b4..3089d583f 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -388,17 +388,20 @@ def test_server_system_accounts(plex): assert account.thumb == "" assert account.accountID == account.id assert account.accountKey == account.key + assert plex.systemAccount(account.id) == account def test_server_system_devices(plex): devices = plex.systemDevices() assert len(devices) device = devices[-1] + assert device.clientIdentifier or device.clientIdentifier is None assert utils.is_datetime(device.createdAt) assert utils.is_int(device.id) assert len(device.key) assert len(device.name) or device.name == "" assert len(device.platform) or device.platform == "" + assert plex.systemDevice(device.id) == device @pytest.mark.authenticated From f59f150babaad259b0ea6376fcf1b46377826003 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Mon, 22 Mar 2021 14:37:52 -0500 Subject: [PATCH 080/356] Improve PlexClient connections (#701) * Improve PlexClient connections * Add docstring --- plexapi/client.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/plexapi/client.py b/plexapi/client.py index 48a2d6488..1d45c3f1e 100644 --- a/plexapi/client.py +++ b/plexapi/client.py @@ -24,6 +24,8 @@ class PlexClient(PlexObject): data (ElementTree): Response from PlexServer used to build this object (optional). initpath (str): Path used to generate data. baseurl (str): HTTP URL to connect dirrectly to this client. + identifier (str): The resource/machine identifier for the desired client. + May be necessary when connecting to a specific proxied client (optional). token (str): X-Plex-Token used for authenication (optional). session (:class:`~requests.Session`): requests.Session object if you want more control (optional). timeout (int): timeout in seconds on initial connect to client (default config.TIMEOUT). @@ -59,9 +61,10 @@ class PlexClient(PlexObject): key = '/resources' def __init__(self, server=None, data=None, initpath=None, baseurl=None, - token=None, connect=True, session=None, timeout=None): + identifier=None, token=None, connect=True, session=None, timeout=None): super(PlexClient, self).__init__(server, data, initpath) self._baseurl = baseurl.strip('/') if baseurl else None + self._clientIdentifier = identifier self._token = logfilter.add_secret(token) self._showSecrets = CONFIG.get('log.show_secrets', '').lower() == 'true' server_session = server._session if server else None @@ -90,7 +93,25 @@ def connect(self, timeout=None): raise Unsupported('Cannot reload an object not built from a URL.') self._initpath = self.key data = self.query(self.key, timeout=timeout) - self._loadData(data[0]) + if not data: + raise NotFound("Client not found at %s" % self._baseurl) + if self._clientIdentifier: + client = next( + ( + x + for x in data + if x.attrib.get("machineIdentifier") == self._clientIdentifier + ), + None, + ) + if client is None: + raise NotFound( + "Client with identifier %s not found at %s" + % (self._clientIdentifier, self._baseurl) + ) + else: + client = data[0] + self._loadData(client) return self def reload(self): From a3d43781fafda7f0e96651f151bb18d61a51e90f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Mon, 22 Mar 2021 21:40:13 +0200 Subject: [PATCH 081/356] Add deviceID to Playable for history entries (#704) * Add deviceID to Playable for history entries * Add missing documentation for accountID/deviceID --- plexapi/base.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plexapi/base.py b/plexapi/base.py index 6f2836f97..c917cf28d 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -565,6 +565,8 @@ class Playable(object): transcodeSessions (:class:`~plexapi.media.TranscodeSession`): Transcode Session object if item is being transcoded (None otherwise). viewedAt (datetime): Datetime item was last viewed (history). + accountID (int): The associated :class:`~plexapi.server.SystemAccount` ID. + deviceID (int): The associated :class:`~plexapi.server.SystemDevice` ID. playlistItemID (int): Playlist item ID (only populated for :class:`~plexapi.playlist.Playlist` items). playQueueItemID (int): PlayQueue item ID (only populated for :class:`~plexapi.playlist.PlayQueue` items). """ @@ -577,6 +579,7 @@ def _loadData(self, data): self.session = self.findItems(data, etag='Session') # session self.viewedAt = utils.toDatetime(data.attrib.get('viewedAt')) # history self.accountID = utils.cast(int, data.attrib.get('accountID')) # history + self.deviceID = utils.cast(int, data.attrib.get('deviceID')) # history self.playlistItemID = utils.cast(int, data.attrib.get('playlistItemID')) # playlist self.playQueueItemID = utils.cast(int, data.attrib.get('playQueueItemID')) # playqueue From 74de174399a17c4b545330341d3c55d262415bd1 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 14:46:37 -0500 Subject: [PATCH 082/356] Bump tqdm from 4.54.0 to 4.59.0 (#681) Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.54.0 to 4.59.0. - [Release notes](https://github.com/tqdm/tqdm/releases) - [Commits](https://github.com/tqdm/tqdm/compare/v4.54.0...v4.59.0) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 5959aab80..6f5a92271 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -14,5 +14,5 @@ requests==2.25.0 requests-mock==1.8.0 sphinx==3.3.1 sphinx-rtd-theme==0.5.0 -tqdm==4.54.0 +tqdm==4.59.0 websocket-client==0.57.0 From b833ad8ccbbf3f2c2d838adc266b056672e1d4b9 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 14:46:59 -0500 Subject: [PATCH 083/356] Bump coveralls from 2.2.0 to 3.0.1 (#683) Bumps [coveralls](https://github.com/TheKevJames/coveralls-python) from 2.2.0 to 3.0.1. - [Release notes](https://github.com/TheKevJames/coveralls-python/releases) - [Changelog](https://github.com/TheKevJames/coveralls-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/TheKevJames/coveralls-python/compare/2.2.0...3.0.1) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 6f5a92271..4f7bf912d 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -2,7 +2,7 @@ # PlexAPI requirements to run py.test. # pip install -r requirements_dev.txt #--------------------------------------------------------- -coveralls==2.2.0 +coveralls==3.0.1 flake8==3.8.4 pillow==8.0.1 pytest==6.1.2 From 711672c614b6122c9386681f079eca9300195eb6 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 14:47:22 -0500 Subject: [PATCH 084/356] Bump recommonmark from 0.6.0 to 0.7.1 (#684) Bumps [recommonmark](https://github.com/rtfd/recommonmark) from 0.6.0 to 0.7.1. - [Release notes](https://github.com/rtfd/recommonmark/releases) - [Changelog](https://github.com/readthedocs/recommonmark/blob/master/CHANGELOG.md) - [Commits](https://github.com/rtfd/recommonmark/compare/0.6.0...0.7.1) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 4f7bf912d..5982e98f1 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -9,7 +9,7 @@ pytest==6.1.2 pytest-cache==1.0 pytest-cov==2.10.1 pytest-mock<=1.11.1 -recommonmark==0.6.0 +recommonmark==0.7.1 requests==2.25.0 requests-mock==1.8.0 sphinx==3.3.1 From 136dbe71239d913457c7f9e942e75f99de276933 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 14:48:56 -0500 Subject: [PATCH 085/356] Bump sphinx-rtd-theme from 0.5.0 to 0.5.1 (#688) Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 0.5.0 to 0.5.1. - [Release notes](https://github.com/readthedocs/sphinx_rtd_theme/releases) - [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst) - [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/0.5.0...0.5.1) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 5982e98f1..7f76f3ea6 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -13,6 +13,6 @@ recommonmark==0.7.1 requests==2.25.0 requests-mock==1.8.0 sphinx==3.3.1 -sphinx-rtd-theme==0.5.0 +sphinx-rtd-theme==0.5.1 tqdm==4.59.0 websocket-client==0.57.0 From 31e6d4ecb92a8b37adfc4bf7b190dc945307bfc2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 14:49:30 -0500 Subject: [PATCH 086/356] Bump pytest-cov from 2.10.1 to 2.11.1 (#689) Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 2.10.1 to 2.11.1. - [Release notes](https://github.com/pytest-dev/pytest-cov/releases) - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v2.10.1...v2.11.1) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 7f76f3ea6..af06f62ae 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -7,7 +7,7 @@ flake8==3.8.4 pillow==8.0.1 pytest==6.1.2 pytest-cache==1.0 -pytest-cov==2.10.1 +pytest-cov==2.11.1 pytest-mock<=1.11.1 recommonmark==0.7.1 requests==2.25.0 From 424c220f4044ae72ae7fc6bcccd8f84b7e67c1ff Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 14:50:21 -0500 Subject: [PATCH 087/356] Bump websocket-client from 0.57.0 to 0.58.0 (#690) Bumps [websocket-client](https://github.com/websocket-client/websocket-client) from 0.57.0 to 0.58.0. - [Release notes](https://github.com/websocket-client/websocket-client/releases) - [Changelog](https://github.com/websocket-client/websocket-client/blob/master/ChangeLog) - [Commits](https://github.com/websocket-client/websocket-client/compare/v0.57.0...v0.58.0) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index af06f62ae..f6d315521 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -15,4 +15,4 @@ requests-mock==1.8.0 sphinx==3.3.1 sphinx-rtd-theme==0.5.1 tqdm==4.59.0 -websocket-client==0.57.0 +websocket-client==0.58.0 From cb347d2df8a2fcf538319a6c9124c127648f879e Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 14:51:26 -0500 Subject: [PATCH 088/356] Bump pytest from 6.1.2 to 6.2.2 (#687) Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.1.2 to 6.2.2. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/6.1.2...6.2.2) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index f6d315521..8b897d23d 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -5,7 +5,7 @@ coveralls==3.0.1 flake8==3.8.4 pillow==8.0.1 -pytest==6.1.2 +pytest==6.2.2 pytest-cache==1.0 pytest-cov==2.11.1 pytest-mock<=1.11.1 From e30ec8f910fe9e6dc5fd215dca2013b24d2e82e2 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 14:52:31 -0500 Subject: [PATCH 089/356] Bump requests from 2.25.0 to 2.25.1 (#686) Bumps [requests](https://github.com/psf/requests) from 2.25.0 to 2.25.1. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/master/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.25.0...v2.25.1) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 8b897d23d..1f481d841 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -10,7 +10,7 @@ pytest-cache==1.0 pytest-cov==2.11.1 pytest-mock<=1.11.1 recommonmark==0.7.1 -requests==2.25.0 +requests==2.25.1 requests-mock==1.8.0 sphinx==3.3.1 sphinx-rtd-theme==0.5.1 From 5396d853b31fc7275d2773674b080cdb5f9fb61f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 14:59:15 -0500 Subject: [PATCH 090/356] Bump pillow from 8.0.1 to 8.1.2 (#682) Bumps [pillow](https://github.com/python-pillow/Pillow) from 8.0.1 to 8.1.2. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/8.0.1...8.1.2) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 1f481d841..ba105ec79 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -4,7 +4,7 @@ #--------------------------------------------------------- coveralls==3.0.1 flake8==3.8.4 -pillow==8.0.1 +pillow==8.1.2 pytest==6.2.2 pytest-cache==1.0 pytest-cov==2.11.1 From 445fa895dcb39c560dbb753d9ef2365c4f96cadc Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 22 Mar 2021 15:03:07 -0500 Subject: [PATCH 091/356] Update pytest-mock requirement from <=1.11.1 to <3.5.2 (#685) Updates the requirements on [pytest-mock](https://github.com/pytest-dev/pytest-mock) to permit the latest version. - [Release notes](https://github.com/pytest-dev/pytest-mock/releases) - [Changelog](https://github.com/pytest-dev/pytest-mock/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-mock/compare/v0.1.0...v3.5.1) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index ba105ec79..31841c845 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -8,7 +8,7 @@ pillow==8.1.2 pytest==6.2.2 pytest-cache==1.0 pytest-cov==2.11.1 -pytest-mock<=1.11.1 +pytest-mock<3.5.2 recommonmark==0.7.1 requests==2.25.1 requests-mock==1.8.0 From cc313c5d5ab5a4946585f6dcff467c6cfb5723cc Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 22 Mar 2021 13:14:22 -0700 Subject: [PATCH 092/356] Change photos sync test to get photos by date added instead of device (#709) --- tests/test_sync.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_sync.py b/tests/test_sync.py index 0b1ec21ec..60f2593c0 100644 --- a/tests/test_sync.py +++ b/tests/test_sync.py @@ -375,7 +375,7 @@ def test_sync_entire_library_photos(clear_sync_device, photos): sync_item=new_item, ) # It's not that easy, to just get all the photos within the library, so let`s query for photos with device!=0x0 - section_content = photos.search(libtype="photo", **{"device!": "0x0"}) + section_content = photos.search(libtype="photo", **{"addedAt>>": "2000-01-01"}) media_list = utils.wait_until( get_media, delay=0.25, timeout=3, item=item, server=photos._server ) From 2bde2344084721d7015167af4762d3bc397fe5d2 Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Mon, 22 Mar 2021 17:01:32 -0500 Subject: [PATCH 093/356] Bump to 4.5.0 --- plexapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/__init__.py b/plexapi/__init__.py index 7ef3a0bdf..78b5033a5 100644 --- a/plexapi/__init__.py +++ b/plexapi/__init__.py @@ -15,7 +15,7 @@ # PlexAPI Settings PROJECT = 'PlexAPI' -VERSION = '4.4.1' +VERSION = '4.5.0' TIMEOUT = CONFIG.get('plexapi.timeout', 30, int) X_PLEX_CONTAINER_SIZE = CONFIG.get('plexapi.container_size', 100, int) X_PLEX_ENABLE_FAST_CONNECT = CONFIG.get('plexapi.enable_fast_connect', False, bool) From 1c521308e25290b4d8a95b20d7c631cd84abda94 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 24 Mar 2021 18:58:12 -0700 Subject: [PATCH 094/356] Add totalViewSize method to LibrarySection and search bug fixes (#712) * Fix more library section ID cast to int * Add method to return library size for specific libtypes * Add test for library totalViewSize * Fix totalViewSize test episode count * Don't need to use library _totalSize cache * Validate title search arg as a filter kwarg * Only validate search title if it is a list * Update doc string for totalViewSize --- plexapi/library.py | 38 +++++++++++++++++++++++++++++--------- plexapi/myplex.py | 18 +++++++++--------- tests/test_library.py | 12 ++++++++++++ 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 68f962e22..0bfeb1feb 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -62,7 +62,7 @@ def sectionByID(self, sectionID): """ Returns the :class:`~plexapi.library.LibrarySection` that matches the specified sectionID. Parameters: - sectionID (str): ID of the section to return. + sectionID (int): ID of the section to return. """ if not self._sectionsByID or sectionID not in self._sectionsByID: self.sections() @@ -355,7 +355,6 @@ def _loadData(self, data): # Private attrs as we dont want a reload. self._filterTypes = None self._fieldTypes = None - self._totalSize = None self._totalViewSize = None def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, **kwargs): @@ -394,13 +393,31 @@ def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, @property def totalSize(self): - """ Returns the total number of items in the library. """ - if self._totalSize is None: - part = '/library/sections/%s/all?X-Plex-Container-Start=0&X-Plex-Container-Size=0' % self.key - data = self._server.query(part) - self._totalSize = int(data.attrib.get("totalSize")) + """ Returns the total number of items in the library for the default library type. """ + return self.totalViewSize(libtype=self.TYPE, includeCollections=False) - return self._totalSize + def totalViewSize(self, libtype=None, includeCollections=True): + """ Returns the total number of items in the library for a specified libtype. + The number of items for the default library type will be returned if no libtype is specified. + (e.g. Specify ``libtype='episode'`` for the total number of episodes + or ``libtype='albums'`` for the total number of albums.) + + Parameters: + libtype (str, optional): The type of items to return the total number for (movie, show, season, episode, + artist, album, track, photoalbum). Default is the main library type. + includeCollections (bool, optional): True or False to include collections in the total number. + Default is True. + """ + args = { + 'includeCollections': int(bool(includeCollections)), + 'X-Plex-Container-Start': 0, + 'X-Plex-Container-Size': 0 + } + if libtype is not None: + args['type'] = utils.searchType(libtype) + part = '/library/sections/%s/all%s' % (self.key, utils.joinArgs(args)) + data = self._server.query(part) + return utils.cast(int, data.attrib.get("totalSize")) def delete(self): """ Delete a library section. """ @@ -1082,7 +1099,10 @@ def search(self, title=None, sort=None, maxresults=None, filter_args.append(self._validateFilterField(field, values, libtype)) del kwargs[field] if title is not None: - args['title'] = title + if isinstance(title, (list, tuple)): + filter_args.append(self._validateFilterField('title', title, libtype)) + else: + args['title'] = title if sort is not None: args['sort'] = self._validateSortField(sort, libtype) if libtype is not None: diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 5d997e365..5e320e147 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -802,28 +802,28 @@ def history(self, maxresults=9999999, mindate=None): class Section(PlexObject): """ This refers to a shared section. The raw xml for the data presented here - can be found at: https://plex.tv/api/servers/{machineId}/shared_servers/{serverId} + can be found at: https://plex.tv/api/servers/{machineId}/shared_servers Attributes: TAG (str): section - id (int): shared section id - sectionKey (str): what key we use for this section + id (int): The shared section ID + key (int): The shared library section key + shared (bool): If this section is shared with the user title (str): Title of the section - sectionId (str): shared section id type (str): movie, tvshow, artist - shared (bool): If this section is shared with the user """ TAG = 'Section' def _loadData(self, data): self._data = data - # self.id = utils.cast(int, data.attrib.get('id')) # Havnt decided if this should be changed. - self.sectionKey = data.attrib.get('key') + self.id = utils.cast(int, data.attrib.get('id')) + self.key = utils.cast(int, data.attrib.get('key')) + self.shared = utils.cast(bool, data.attrib.get('shared', '0')) self.title = data.attrib.get('title') - self.sectionId = data.attrib.get('id') self.type = data.attrib.get('type') - self.shared = utils.cast(bool, data.attrib.get('shared')) + self.sectionId = self.id # For backwards compatibility + self.sectionKey = self.key # For backwards compatibility def history(self, maxresults=9999999, mindate=None): """ Get all Play History for a user for this section in this shared server. diff --git a/tests/test_library.py b/tests/test_library.py index 053a3b71b..892c045a3 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -58,6 +58,18 @@ def test_library_section_movies_all(movies): assert len(movies.all(container_start=0, container_size=1, maxresults=1)) == 1 +def test_library_section_totalViewSize(tvshows): + assert tvshows.totalViewSize() == 2 + assert tvshows.totalViewSize(libtype="show") == 2 + assert tvshows.totalViewSize(libtype="season") == 4 + assert tvshows.totalViewSize(libtype="episode") == 49 + show = tvshows.get("The 100") + show.addCollection("test_view_size") + assert tvshows.totalViewSize() == 3 + assert tvshows.totalViewSize(includeCollections=False) == 2 + show.removeCollection("test_view_size", locked=False) + + def test_library_section_delete(movies, patched_http_call): movies.delete() From 2a810c63ae80c375d943b38c0873436a90b2d34a Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Wed, 24 Mar 2021 20:58:55 -0500 Subject: [PATCH 095/356] Bump to 4.5.1 --- plexapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/__init__.py b/plexapi/__init__.py index 78b5033a5..90e595a90 100644 --- a/plexapi/__init__.py +++ b/plexapi/__init__.py @@ -15,7 +15,7 @@ # PlexAPI Settings PROJECT = 'PlexAPI' -VERSION = '4.5.0' +VERSION = '4.5.1' TIMEOUT = CONFIG.get('plexapi.timeout', 30, int) X_PLEX_CONTAINER_SIZE = CONFIG.get('plexapi.container_size', 100, int) X_PLEX_ENABLE_FAST_CONNECT = CONFIG.get('plexapi.enable_fast_connect', False, bool) From 2e7ae1f3ece4d7bbbdfc8ed7da3df2f5556ffb14 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 5 Apr 2021 12:36:19 -0700 Subject: [PATCH 096/356] Fix LibrarySection totalViewSize for photo libraries (#715) --- plexapi/library.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 0bfeb1feb..437bda037 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -394,7 +394,7 @@ def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, @property def totalSize(self): """ Returns the total number of items in the library for the default library type. """ - return self.totalViewSize(libtype=self.TYPE, includeCollections=False) + return self.totalViewSize(includeCollections=False) def totalViewSize(self, libtype=None, includeCollections=True): """ Returns the total number of items in the library for a specified libtype. @@ -414,7 +414,10 @@ def totalViewSize(self, libtype=None, includeCollections=True): 'X-Plex-Container-Size': 0 } if libtype is not None: - args['type'] = utils.searchType(libtype) + if libtype == 'photo': + args['clusterZoomLevel'] = 1 + else: + args['type'] = utils.searchType(libtype) part = '/library/sections/%s/all%s' % (self.key, utils.joinArgs(args)) data = self._server.query(part) return utils.cast(int, data.attrib.get("totalSize")) From 5584ef1d4fe31d0e5ec5cc1af4674cdf6a3cb69c Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Mon, 5 Apr 2021 16:44:49 -0400 Subject: [PATCH 097/356] Added AdvancedSettingsMixin (#714) * Added AdvancedSettingsMixin * forgot import * shortened line * remove whitespace * removed unused import * reordered mixins * Add preference method to AdvancedSettingsMixin * Add tests for AdvancedSettingsMixin Co-authored-by: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> --- plexapi/audio.py | 4 ++-- plexapi/mixins.py | 56 +++++++++++++++++++++++++++++++++++++++++++- plexapi/video.py | 45 ++++------------------------------- tests/test_audio.py | 4 ++++ tests/test_mixins.py | 31 ++++++++++++++++++++++++ tests/test_video.py | 27 +++++++-------------- 6 files changed, 105 insertions(+), 62 deletions(-) diff --git a/plexapi/audio.py b/plexapi/audio.py index 71d01b622..f95d71792 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -4,7 +4,7 @@ from plexapi import library, media, utils from plexapi.base import Playable, PlexPartialObject from plexapi.exceptions import BadRequest -from plexapi.mixins import ArtUrlMixin, ArtMixin, PosterUrlMixin, PosterMixin +from plexapi.mixins import AdvancedSettingsMixin, ArtUrlMixin, ArtMixin, PosterUrlMixin, PosterMixin from plexapi.mixins import SplitMergeMixin, UnmatchMatchMixin from plexapi.mixins import CollectionMixin, CountryMixin, GenreMixin, LabelMixin, MoodMixin, SimilarArtistMixin, StyleMixin @@ -114,7 +114,7 @@ def sync(self, bitrate, client=None, clientId=None, limit=None, title=None): @utils.registerPlexObject -class Artist(Audio, ArtMixin, PosterMixin, SplitMergeMixin, UnmatchMatchMixin, +class Artist(Audio, AdvancedSettingsMixin, ArtMixin, PosterMixin, SplitMergeMixin, UnmatchMatchMixin, CollectionMixin, CountryMixin, GenreMixin, MoodMixin, SimilarArtistMixin, StyleMixin): """ Represents a single Artist. diff --git a/plexapi/mixins.py b/plexapi/mixins.py index 4aa6fbcb4..25795c4ac 100644 --- a/plexapi/mixins.py +++ b/plexapi/mixins.py @@ -1,10 +1,64 @@ # -*- coding: utf-8 -*- from urllib.parse import quote_plus, urlencode -from plexapi import media, utils +from plexapi import media, settings, utils from plexapi.exceptions import NotFound +class AdvancedSettingsMixin(object): + """ Mixin for Plex objects that can have advanced settings. """ + + def preferences(self): + """ Returns a list of :class:`~plexapi.settings.Preferences` objects. """ + items = [] + data = self._server.query(self._details_key) + for item in data.iter('Preferences'): + for elem in item: + setting = settings.Preferences(data=elem, server=self._server) + setting._initpath = self.key + items.append(setting) + + return items + + def preference(self, pref): + """ Returns a :class:`~plexapi.settings.Preferences` object for the specified pref. + + Parameters: + pref (str): The id of the preference to return. + """ + prefs = self.preferences() + try: + return next(p for p in prefs if p.id == pref) + except StopIteration: + availablePrefs = [p.id for p in prefs] + raise NotFound('Unknown preference "%s" for %s. ' + 'Available preferences: %s' + % (pref, self.TYPE, availablePrefs)) from None + + def editAdvanced(self, **kwargs): + """ Edit a Plex object's advanced settings. """ + data = {} + key = '%s/prefs?' % self.key + preferences = {pref.id: list(pref.enumValues.keys()) for pref in self.preferences()} + for settingID, value in kwargs.items(): + enumValues = preferences.get(settingID) + if value in enumValues: + data[settingID] = value + else: + raise NotFound('%s not found in %s' % (value, enumValues)) + url = key + urlencode(data) + self._server.query(url, method=self._server._session.put) + + def defaultAdvanced(self): + """ Edit all of a Plex object's advanced settings to default. """ + data = {} + key = '%s/prefs?' % self.key + for preference in self.preferences(): + data[preference.id] = preference.default + url = key + urlencode(data) + self._server.query(url, method=self._server._session.put) + + class ArtUrlMixin(object): """ Mixin for Plex objects that can have a background artwork url. """ diff --git a/plexapi/video.py b/plexapi/video.py index 588c40c87..b984f4316 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -2,10 +2,10 @@ import os from urllib.parse import quote_plus, urlencode -from plexapi import library, media, settings, utils +from plexapi import library, media, utils from plexapi.base import Playable, PlexPartialObject -from plexapi.exceptions import BadRequest, NotFound -from plexapi.mixins import ArtUrlMixin, ArtMixin, BannerMixin, PosterUrlMixin, PosterMixin +from plexapi.exceptions import BadRequest +from plexapi.mixins import AdvancedSettingsMixin, ArtUrlMixin, ArtMixin, BannerMixin, PosterUrlMixin, PosterMixin from plexapi.mixins import SplitMergeMixin, UnmatchMatchMixin from plexapi.mixins import CollectionMixin, CountryMixin, DirectorMixin, GenreMixin, LabelMixin, ProducerMixin, WriterMixin @@ -248,7 +248,7 @@ def sync(self, videoQuality, client=None, clientId=None, limit=None, unwatched=F @utils.registerPlexObject -class Movie(Video, Playable, ArtMixin, PosterMixin, SplitMergeMixin, UnmatchMatchMixin, +class Movie(Video, Playable, AdvancedSettingsMixin, ArtMixin, PosterMixin, SplitMergeMixin, UnmatchMatchMixin, CollectionMixin, CountryMixin, DirectorMixin, GenreMixin, LabelMixin, ProducerMixin, WriterMixin): """ Represents a single Movie. @@ -381,7 +381,7 @@ def download(self, savepath=None, keep_original_name=False, **kwargs): @utils.registerPlexObject -class Show(Video, ArtMixin, BannerMixin, PosterMixin, SplitMergeMixin, UnmatchMatchMixin, +class Show(Video, AdvancedSettingsMixin, ArtMixin, BannerMixin, PosterMixin, SplitMergeMixin, UnmatchMatchMixin, CollectionMixin, GenreMixin, LabelMixin): """ Represents a single Show (including all seasons and episodes). @@ -489,41 +489,6 @@ def isWatched(self): """ Returns True if the show is fully watched. """ return bool(self.viewedLeafCount == self.leafCount) - def preferences(self): - """ Returns a list of :class:`~plexapi.settings.Preferences` objects. """ - items = [] - data = self._server.query(self._details_key) - for item in data.iter('Preferences'): - for elem in item: - setting = settings.Preferences(data=elem, server=self._server) - setting._initpath = self.key - items.append(setting) - - return items - - def editAdvanced(self, **kwargs): - """ Edit a show's advanced settings. """ - data = {} - key = '%s/prefs?' % self.key - preferences = {pref.id: list(pref.enumValues.keys()) for pref in self.preferences()} - for settingID, value in kwargs.items(): - enumValues = preferences.get(settingID) - if value in enumValues: - data[settingID] = value - else: - raise NotFound('%s not found in %s' % (value, enumValues)) - url = key + urlencode(data) - self._server.query(url, method=self._server._session.put) - - def defaultAdvanced(self): - """ Edit all of show's advanced settings to default. """ - data = {} - key = '%s/prefs?' % self.key - for preference in self.preferences(): - data[preference.id] = preference.default - url = key + urlencode(data) - self._server.query(url, method=self._server._session.put) - def hubs(self): """ Returns a list of :class:`~plexapi.library.Hub` objects. """ data = self._server.query(self._details_key) diff --git a/tests/test_audio.py b/tests/test_audio.py index 74a841a2f..e06192e95 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -67,6 +67,10 @@ def test_audio_Artist_albums(artist): assert len(albums) == 1 and albums[0].title == "Layers" +def test_audio_Artist_mixins_edit_advanced_settings(artist): + test_mixins.edit_advanced_settings(artist) + + def test_audio_Artist_mixins_images(artist): test_mixins.edit_art(artist) test_mixins.edit_poster(artist) diff --git a/tests/test_mixins.py b/tests/test_mixins.py index cb7549b6a..e5c86c080 100644 --- a/tests/test_mixins.py +++ b/tests/test_mixins.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +from plexapi.exceptions import NotFound from plexapi.utils import tag_singular +import pytest from . import conftest as utils @@ -146,3 +148,32 @@ def attr_bannerUrl(obj): def attr_posterUrl(obj): _test_mixins_imageUrl(obj, 'thumb') + + +def _test_mixins_editAdvanced(obj): + for pref in obj.preferences(): + currentPref = obj.preference(pref.id) + currentValue = currentPref.value + newValue = next(v for v in pref.enumValues if v != currentValue) + obj.editAdvanced(**{pref.id: newValue}) + obj.reload() + newPref = obj.preference(pref.id) + assert newPref.value == newValue + + +def _test_mixins_editAdvanced_bad_pref(obj): + with pytest.raises(NotFound): + assert obj.preference('bad-pref') + + +def _test_mixins_defaultAdvanced(obj): + obj.defaultAdvanced() + obj.reload() + for pref in obj.preferences(): + assert pref.value == pref.default + + +def edit_advanced_settings(obj): + _test_mixins_editAdvanced(obj) + _test_mixins_editAdvanced_bad_pref(obj) + _test_mixins_defaultAdvanced(obj) diff --git a/tests/test_video.py b/tests/test_video.py index ac102d96f..eeb60030a 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -40,6 +40,10 @@ def test_video_Movie_merge(movie, patched_http_call): movie.merge(1337) +def test_video_Movie_mixins_edit_advanced_settings(movie): + test_mixins.edit_advanced_settings(movie) + + def test_video_Movie_mixins_images(movie): test_mixins.edit_art(movie) test_mixins.edit_poster(movie) @@ -647,25 +651,6 @@ def test_video_Show_settings(show): assert len(preferences) >= 1 -def test_video_Show_editAdvanced_default(show): - show.editAdvanced(showOrdering='absolute') - show.reload() - for pref in show.preferences(): - if pref.id == 'showOrdering': - assert pref.value == 'absolute' - - show.editAdvanced(flattenSeasons=1) - show.reload() - for pref in show.preferences(): - if pref.id == 'flattenSeasons': - assert pref.value == 1 - - show.defaultAdvanced() - show.reload() - for pref in show.preferences(): - assert pref.value == pref.default - - def test_video_Show_reload(plex): show = plex.library.section("TV Shows").get("Game of Thrones") assert utils.is_metadata(show._initpath, prefix="/library/sections/") @@ -737,6 +722,10 @@ def test_video_Show_section(show): assert section.title == "TV Shows" +def test_video_Show_mixins_edit_advanced_settings(show): + test_mixins.edit_advanced_settings(show) + + def test_video_Show_mixins_images(show): test_mixins.edit_art(show) test_mixins.edit_banner(show) From 19fa6c1e503dc8ab6893bd719be3edf734b4fb15 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 5 Apr 2021 13:46:26 -0700 Subject: [PATCH 098/356] Allow relative dates for search filters (#717) * Add validation for relative date search filter values * Update search doc strings for searching using relative dates * Update library search tests for relative dates * Fix relative date search test * Automatically format negative sign in relative dates * Fix relative date search test --- plexapi/library.py | 44 ++++++++++++++++++++++++++++++++++--------- tests/test_library.py | 44 +++++++++++++++++++++---------------------- 2 files changed, 57 insertions(+), 31 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 437bda037..99323b403 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -852,10 +852,7 @@ def _validateFieldValue(self, filterField, values, libtype=None): if fieldType.type == 'boolean': value = int(bool(value)) elif fieldType.type == 'date': - if isinstance(value, datetime): - value = int(value.timestamp()) - else: - value = int(utils.toDatetime(value, '%Y-%m-%d').timestamp()) + value = self._validateFieldValueDate(value) elif fieldType.type == 'integer': value = int(value) elif fieldType.type == 'string': @@ -866,12 +863,23 @@ def _validateFieldValue(self, filterField, values, libtype=None): value = next((f.key for f in filterChoices if matchValue in {f.key.lower(), f.title.lower()}), value) results.append(str(value)) - except ValueError: + except (ValueError, AttributeError): raise BadRequest('Invalid value "%s" for filter field "%s", value should be type %s' % (value, filterField.key, fieldType.type)) from None return results + def _validateFieldValueDate(self, value): + """ Validates a filter date value. A filter date value can be a datetime object, + a relative date (e.g. -30d), or a date in YYYY-MM-DD format. + """ + if isinstance(value, datetime): + return int(value.timestamp()) + elif re.match(r'^-?\d+(mon|[smhdwy])$', value): + return '-' + value.lstrip('-') + else: + return int(utils.toDatetime(value, '%Y-%m-%d').timestamp()) + def _validateSortField(self, sort, libtype=None): """ Validates a filter sort field is available for the library. Returns the validated sort field string. @@ -942,10 +950,7 @@ def search(self, title=None, sort=None, maxresults=None, * See :func:`~plexapi.library.LibrarySection.listFilterChoices` to get a list of all available filter values. The following filter fields are just some examples of the possible filters. The list is not exaustive, - and not all filters apply to all library types. For tag type filters, a :class:`~plexapi.media.MediaTag` - object, the exact name :attr:`MediaTag.tag` (*str*), or the exact id :attr:`MediaTag.id` (*int*) can be - provided. For date type filters, either a ``datetime`` object or a date in ``YYYY-MM-DD`` (*str*) format - can be provided. Multiple values can be ``OR`` together by providing a list of values. + and not all filters apply to all library types. * **actor** (:class:`~plexapi.media.MediaTag`): Search for the name of an actor. * **addedAt** (*datetime*): Search for items added before or after a date. See operators below. @@ -973,6 +978,24 @@ def search(self, title=None, sort=None, maxresults=None, * **writer** (:class:`~plexapi.media.MediaTag`): Search for the name of a writer. * **year** (*int*): Search for a specific year. + Tag type filter values can be a :class:`~plexapi.media.MediaTag` object, the exact name + :attr:`MediaTag.tag` (*str*), or the exact id :attr:`MediaTag.id` (*int*). + + Date type filter values can be a ``datetime`` object, a relative date using a one of the + available date suffixes (e.g. ``30d``) (*str*), or a date in ``YYYY-MM-DD`` (*str*) format. + + Relative date suffixes: + + * ``s``: ``seconds`` + * ``m``: ``minutes`` + * ``h``: ``hours`` + * ``d``: ``days`` + * ``w``: ``weeks`` + * ``mon``: ``months`` + * ``y``: ``years`` + + Multiple values can be ``OR`` together by providing a list of values. + Examples: .. code-block:: python @@ -1071,6 +1094,9 @@ def search(self, title=None, sort=None, maxresults=None, # Title starts with Marvel and added before 2021-01-01 library.search(**{"title<": "Marvel", "addedAt<<": "2021-01-01"}) + # Added in the last 30 days using relative dates + library.search(**{"addedAt>>": "30d"}) + # Collection is James Bond and user rating is greater than 8 library.search(**{"collection": "James Bond", "userRating>>": 8}) diff --git a/tests/test_library.py b/tests/test_library.py index 892c045a3..0b44c1a9e 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -469,28 +469,28 @@ def _test_library_search(library, obj): searchValue = value - timedelta(days=1) else: searchValue = value - - searchFilter = {field.key + operator.key[:-1]: searchValue} - results = library.search(libtype=obj.type, **searchFilter) - if operator.key.startswith("!") or operator.key.startswith(">>") and searchValue == 0: - assert obj not in results - else: - assert obj in results + _do_test_library_search(library, obj, field, operator, searchValue) # Test search again using string tag and date - if field.type in {"tag", "date"}: - if field.type == "tag" and fieldAttr != 'contentRating': - if not isinstance(searchValue, list): - searchValue = [searchValue] - searchValue = [v.tag for v in searchValue] - elif field.type == "date": - searchValue = searchValue.strftime("%Y-%m-%d") - - searchFilter = {field.key + operator.key[:-1]: searchValue} - results = library.search(libtype=obj.type, **searchFilter) - - if operator.key.startswith("!") or operator.key.startswith(">>") and searchValue == 0: - assert obj not in results - else: - assert obj in results + if field.type == "tag" and fieldAttr != "contentRating": + if not isinstance(searchValue, list): + searchValue = [searchValue] + searchValue = [v.tag for v in searchValue] + _do_test_library_search(library, obj, field, operator, searchValue) + + elif field.type == "date": + searchValue = searchValue.strftime("%Y-%m-%d") + _do_test_library_search(library, obj, field, operator, searchValue) + searchValue = "1s" + _do_test_library_search(library, obj, field, operator, searchValue) + + +def _do_test_library_search(library, obj, field, operator, searchValue): + searchFilter = {field.key + operator.key[:-1]: searchValue} + results = library.search(libtype=obj.type, **searchFilter) + + if operator.key.startswith("!") or operator.key.startswith(">>") and (searchValue == 0 or searchValue == '1s'): + assert obj not in results + else: + assert obj in results From da12c00cc6a32766fa4d9921de6f0a07a0bae14b Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 5 Apr 2021 15:46:53 -0500 Subject: [PATCH 099/356] Bump flake8 from 3.8.4 to 3.9.0 (#710) Bumps [flake8](https://gitlab.com/pycqa/flake8) from 3.8.4 to 3.9.0. - [Release notes](https://gitlab.com/pycqa/flake8/tags) - [Commits](https://gitlab.com/pycqa/flake8/compare/3.8.4...3.9.0) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 31841c845..6cf214999 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -3,7 +3,7 @@ # pip install -r requirements_dev.txt #--------------------------------------------------------- coveralls==3.0.1 -flake8==3.8.4 +flake8==3.9.0 pillow==8.1.2 pytest==6.2.2 pytest-cache==1.0 From d7aee45403c1b3f13a5f8a395dc13fcf0a3ba70f Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 5 Apr 2021 15:47:07 -0500 Subject: [PATCH 100/356] Bump sphinx from 3.3.1 to 3.5.3 (#711) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.3.1 to 3.5.3. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/3.x/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/commits) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 6cf214999..d48e62751 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -12,7 +12,7 @@ pytest-mock<3.5.2 recommonmark==0.7.1 requests==2.25.1 requests-mock==1.8.0 -sphinx==3.3.1 +sphinx==3.5.3 sphinx-rtd-theme==0.5.1 tqdm==4.59.0 websocket-client==0.58.0 From bea32faa8b50d88499dda8602fc221d5e70910bd Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Mon, 5 Apr 2021 15:49:21 -0500 Subject: [PATCH 101/356] Bump to 4.5.2 --- plexapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/__init__.py b/plexapi/__init__.py index 90e595a90..33c679f79 100644 --- a/plexapi/__init__.py +++ b/plexapi/__init__.py @@ -15,7 +15,7 @@ # PlexAPI Settings PROJECT = 'PlexAPI' -VERSION = '4.5.1' +VERSION = '4.5.2' TIMEOUT = CONFIG.get('plexapi.timeout', 30, int) X_PLEX_CONTAINER_SIZE = CONFIG.get('plexapi.container_size', 100, int) X_PLEX_ENABLE_FAST_CONNECT = CONFIG.get('plexapi.enable_fast_connect', False, bool) From 4307a995114b39bb177264072c2dafa335613ec3 Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Tue, 6 Apr 2021 16:01:45 -0400 Subject: [PATCH 102/356] fix for advanced settings that dont use ints --- plexapi/library.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 99323b403..3d12a81ff 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -505,7 +505,10 @@ def editAdvanced(self, **kwargs): for settingID, value in kwargs.items(): try: enums = idEnums.get(settingID) - enumValues = [int(x) for x in enums] + try: + enumValues = [int(x) for x in enums] + except ValueError: + enumValues = [x for x in enums] except TypeError: raise NotFound('%s not found in %s' % (value, list(idEnums.keys()))) if value in enumValues: From a999778f52fa620166baaedfe39603f1d0b75f42 Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Tue, 6 Apr 2021 23:43:42 -0400 Subject: [PATCH 103/356] removed redundant value --- plexapi/library.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 3d12a81ff..e5dc88045 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -504,14 +504,10 @@ def editAdvanced(self, **kwargs): for settingID, value in kwargs.items(): try: - enums = idEnums.get(settingID) - try: - enumValues = [int(x) for x in enums] - except ValueError: - enumValues = [x for x in enums] - except TypeError: + enums = idEnums[settingID] + except KeyError: raise NotFound('%s not found in %s' % (value, list(idEnums.keys()))) - if value in enumValues: + if value in enums: data[key % settingID] = value else: raise NotFound('%s not found in %s' % (value, enums)) From b9bf8eeabc346d4259547cec9512dfa7d78d28ef Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Tue, 6 Apr 2021 23:44:28 -0400 Subject: [PATCH 104/356] updated AdvancedSettingsMixin --- plexapi/mixins.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/plexapi/mixins.py b/plexapi/mixins.py index 25795c4ac..05d1f40fa 100644 --- a/plexapi/mixins.py +++ b/plexapi/mixins.py @@ -41,11 +41,14 @@ def editAdvanced(self, **kwargs): key = '%s/prefs?' % self.key preferences = {pref.id: list(pref.enumValues.keys()) for pref in self.preferences()} for settingID, value in kwargs.items(): - enumValues = preferences.get(settingID) - if value in enumValues: + try: + enums = preferences[settingID] + except KeyError: + raise NotFound('%s not found in %s' % (value, list(preferences.keys()))) + if value in enums: data[settingID] = value else: - raise NotFound('%s not found in %s' % (value, enumValues)) + raise NotFound('%s not found in %s' % (value, enums)) url = key + urlencode(data) self._server.query(url, method=self._server._session.put) From 227bb5171784eec282b8df06b058223e435b125e Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 12 Apr 2021 13:07:10 -0400 Subject: [PATCH 105/356] remove Release Release class was unintendedly added by a merge before it was properly located. --- plexapi/base.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/plexapi/base.py b/plexapi/base.py index 37c2ddfd9..8bb525551 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -659,20 +659,6 @@ def updateTimeline(self, time, state='stopped', duration=None): self.reload() -@utils.registerPlexObject -class Release(PlexObject): - TAG = 'Release' - key = '/updater/status' - - def _loadData(self, data): - self.download_key = data.attrib.get('key') - self.version = data.attrib.get('version') - self.added = data.attrib.get('added') - self.fixed = data.attrib.get('fixed') - self.downloadURL = data.attrib.get('downloadURL') - self.state = data.attrib.get('state') - - class MediaContainer(PlexObject): """ Represents a single MediaContainer. From 790d12504a17cae562891d29c3f790c30282be98 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 12 Apr 2021 13:10:41 -0400 Subject: [PATCH 106/356] flake fix remove trailing comma --- plexapi/video.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/video.py b/plexapi/video.py index ae7039222..b1a5a34c8 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -7,7 +7,7 @@ from plexapi.exceptions import BadRequest from plexapi.mixins import AdvancedSettingsMixin, ArtUrlMixin, ArtMixin, BannerMixin, PosterUrlMixin, PosterMixin from plexapi.mixins import SplitMergeMixin, UnmatchMatchMixin -from plexapi.mixins import CollectionMixin, CountryMixin, DirectorMixin, GenreMixin, LabelMixin, ProducerMixin, +from plexapi.mixins import CollectionMixin, CountryMixin, DirectorMixin, GenreMixin, LabelMixin, ProducerMixin class Video(PlexPartialObject): From 5d670364d6fabb14492f6a2440fe042043af87d9 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 12 Apr 2021 13:12:46 -0400 Subject: [PATCH 107/356] fixing import missed last import in copy/paste from master. --- plexapi/video.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/video.py b/plexapi/video.py index b1a5a34c8..93fdd7efb 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -7,7 +7,7 @@ from plexapi.exceptions import BadRequest from plexapi.mixins import AdvancedSettingsMixin, ArtUrlMixin, ArtMixin, BannerMixin, PosterUrlMixin, PosterMixin from plexapi.mixins import SplitMergeMixin, UnmatchMatchMixin -from plexapi.mixins import CollectionMixin, CountryMixin, DirectorMixin, GenreMixin, LabelMixin, ProducerMixin +from plexapi.mixins import CollectionMixin, CountryMixin, DirectorMixin, GenreMixin, LabelMixin, ProducerMixin, WriterMixin class Video(PlexPartialObject): From 0bacdbeabf0b16e1fb04c373e647053ad923b9a1 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 12 Apr 2021 13:16:33 -0400 Subject: [PATCH 108/356] readding MediaContainer import --- plexapi/video.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/video.py b/plexapi/video.py index 93fdd7efb..c343bb165 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -3,7 +3,7 @@ from urllib.parse import quote_plus, urlencode from plexapi import library, media, utils -from plexapi.base import Playable, PlexPartialObject +from plexapi.base import Playable, PlexPartialObject, MediaContainer from plexapi.exceptions import BadRequest from plexapi.mixins import AdvancedSettingsMixin, ArtUrlMixin, ArtMixin, BannerMixin, PosterUrlMixin, PosterMixin from plexapi.mixins import SplitMergeMixin, UnmatchMatchMixin From 8aaa0c09a70c39f7b80ea3187a478c5ac01efa3e Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 14 Apr 2021 08:02:04 -0400 Subject: [PATCH 109/356] spelling & indent correction --- plexapi/video.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plexapi/video.py b/plexapi/video.py index c343bb165..7b88687f8 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -353,7 +353,7 @@ def locations(self): """ This does not exist in plex xml response but is added to have a common interface to get the locations of the movie. - Retruns: + Returns: List of file paths where the movie is found on disk. """ return [part.file for part in self.iterParts() if part] @@ -858,7 +858,7 @@ def locations(self): """ This does not exist in plex xml response but is added to have a common interface to get the locations of the episode. - Retruns: + Returns: List of file paths where the episode is found on disk. """ return [part.file for part in self.iterParts() if part] @@ -938,7 +938,8 @@ def _loadData(self, data): def locations(self): """ This does not exist in plex xml response but is added to have a common interface to get the locations of the clip. - Retruns: + + Returns: List of file paths where the clip is found on disk. """ return [part.file for part in self.iterParts() if part] From c957c4fc9888cc0883519ee4d87d7f75c2b52a20 Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Wed, 14 Apr 2021 11:43:21 -0400 Subject: [PATCH 110/356] exclude leaves from show seasons --- plexapi/video.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/video.py b/plexapi/video.py index b984f4316..8a3b326dc 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -518,7 +518,7 @@ def season(self, title=None, season=None): Raises: :exc:`~plexapi.exceptions.BadRequest`: If title or season parameter is missing. """ - key = '/library/metadata/%s/children' % self.ratingKey + key = '/library/metadata/%s/children?excludeAllLeaves=1' % self.ratingKey if title is not None and not isinstance(title, int): return self.fetchItem(key, Season, title__iexact=title) elif season is not None or isinstance(title, int): From 81249d6b28c6a7f639176a0ccf73e52d80df5b8d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sun, 18 Apr 2021 22:04:34 -0500 Subject: [PATCH 111/356] Bump sphinx from 3.5.3 to 3.5.4 (#724) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.5.3 to 3.5.4. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/4.x/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/commits/v3.5.4) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index d48e62751..9fc5ec21a 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -12,7 +12,7 @@ pytest-mock<3.5.2 recommonmark==0.7.1 requests==2.25.1 requests-mock==1.8.0 -sphinx==3.5.3 +sphinx==3.5.4 sphinx-rtd-theme==0.5.1 tqdm==4.59.0 websocket-client==0.58.0 From 8f272d0c4e3a783400059bf62ef6e5c0750cb20a Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sun, 18 Apr 2021 22:04:47 -0500 Subject: [PATCH 112/356] Bump flake8 from 3.9.0 to 3.9.1 (#726) Bumps [flake8](https://gitlab.com/pycqa/flake8) from 3.9.0 to 3.9.1. - [Release notes](https://gitlab.com/pycqa/flake8/tags) - [Commits](https://gitlab.com/pycqa/flake8/compare/3.9.0...3.9.1) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 9fc5ec21a..695eabf14 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -3,7 +3,7 @@ # pip install -r requirements_dev.txt #--------------------------------------------------------- coveralls==3.0.1 -flake8==3.9.0 +flake8==3.9.1 pillow==8.1.2 pytest==6.2.2 pytest-cache==1.0 From aa8838ce7d1f14a98fcefd3fa5c3c8a962c529ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Mon, 19 Apr 2021 06:05:19 +0300 Subject: [PATCH 113/356] Fix spelling error for container_start value check (#727) --- plexapi/library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 99323b403..b06dde039 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1158,7 +1158,7 @@ def _search(self, key, maxresults, container_start, container_size, **kwargs): container_size=container_size, **kwargs) if not len(subresults): if offset > self._totalViewSize: - log.info("container_start is higher then the number of items in the library") + log.info("container_start is higher than the number of items in the library") results.extend(subresults) From 43557906b8183517ece2fa83a440eb02103ee1e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Mon, 19 Apr 2021 06:06:35 +0300 Subject: [PATCH 114/356] Fix SERVER_TRANSCODE_SESSIONS typo (#723) --- tests/payloads.py | 2 +- tests/test_server.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/payloads.py b/tests/payloads.py index da0514043..0828be4e9 100644 --- a/tests/payloads.py +++ b/tests/payloads.py @@ -30,7 +30,7 @@ """ -SEVER_TRANSCODE_SESSIONS = """ +SERVER_TRANSCODE_SESSIONS = """ """ diff --git a/tests/test_server.py b/tests/test_server.py index 3089d583f..2e0c1dcaa 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -11,7 +11,7 @@ from requests import Session from . import conftest as utils -from .payloads import SERVER_RESOURCES, SEVER_TRANSCODE_SESSIONS +from .payloads import SERVER_RESOURCES, SERVER_TRANSCODE_SESSIONS def test_server_attr(plex, account): @@ -465,7 +465,7 @@ def test_server_dashboard_resources(plex, requests_mock): def test_server_transcode_sessions(plex, requests_mock): url = plex.url("/transcode/sessions") - requests_mock.get(url, text=SEVER_TRANSCODE_SESSIONS) + requests_mock.get(url, text=SERVER_TRANSCODE_SESSIONS) transcode_sessions = plex.transcodeSessions() assert len(transcode_sessions) session = transcode_sessions[0] From 276a4f3b59f1da31030c4fa77aa64860b404514f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 23 Apr 2021 13:45:24 -0700 Subject: [PATCH 115/356] Add new collection attributes --- plexapi/collection.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plexapi/collection.py b/plexapi/collection.py index b342e73e8..86ca7ee5a 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -20,7 +20,9 @@ class Collections(PlexPartialObject, ArtMixin, PosterMixin, LabelMixin): artBlurHash (str): BlurHash string for artwork image. childCount (int): Number of items in the collection. collectionMode (str): How the items in the collection are displayed. + collectionPublished (bool): True if the collection is published to the Plex homepage. collectionSort (str): How to sort the items in the collection. + content (str): The filter URI string for smart collections. contentRating (str) Content rating (PG-13; NR; TV-G). fields (List<:class:`~plexapi.media.Field`>): List of field objects. guid (str): Plex GUID for the collection (collection://XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX). @@ -32,7 +34,9 @@ class Collections(PlexPartialObject, ArtMixin, PosterMixin, LabelMixin): librarySectionTitle (str): :class:`~plexapi.library.LibrarySection` title. maxYear (int): Maximum year for the items in the collection. minYear (int): Minimum year for the items in the collection. + ratingCount (int): The number of ratings. ratingKey (int): Unique key identifying the collection. + smart (bool): True if the collection is a smart collection. subtype (str): Media type of the items in the collection (movie, show, artist, or album). summary (str): Summary of the collection. thumb (str): URL to thumbnail image (/library/metadata//thumb/). @@ -52,7 +56,9 @@ def _loadData(self, data): self.artBlurHash = data.attrib.get('artBlurHash') self.childCount = utils.cast(int, data.attrib.get('childCount')) self.collectionMode = utils.cast(int, data.attrib.get('collectionMode', '-1')) + self.collectionPublished = utils.cast(bool, data.attrib.get('collectionPublished', '0')) self.collectionSort = utils.cast(int, data.attrib.get('collectionSort', '0')) + self.content = data.attrib.get('content') self.contentRating = data.attrib.get('contentRating') self.fields = self.findItems(data, media.Field) self.guid = data.attrib.get('guid') @@ -64,7 +70,9 @@ def _loadData(self, data): self.librarySectionTitle = data.attrib.get('librarySectionTitle') self.maxYear = utils.cast(int, data.attrib.get('maxYear')) self.minYear = utils.cast(int, data.attrib.get('minYear')) + self.ratingCount = utils.cast(int, data.attrib.get('ratingCount')) self.ratingKey = utils.cast(int, data.attrib.get('ratingKey')) + self.smart = utils.cast(bool, data.attrib.get('smart', '0')) self.subtype = data.attrib.get('subtype') self.summary = data.attrib.get('summary') self.thumb = data.attrib.get('thumb') From 15767e500a4885701b4695956b46a9b2467b3e19 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 23 Apr 2021 13:59:02 -0700 Subject: [PATCH 116/356] Add new collection attributes to tests --- tests/test_collection.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_collection.py b/tests/test_collection.py index dbb0d64fc..77815a6cf 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -12,7 +12,9 @@ def test_Collection_attrs(collection): assert collection.artBlurHash is None assert collection.childCount == 1 assert collection.collectionMode == -1 + assert collection.collectionPublished is False assert collection.collectionSort == 0 + assert collection.content is None assert collection.contentRating assert not collection.fields assert collection.guid.startswith("collection://") @@ -24,7 +26,9 @@ def test_Collection_attrs(collection): assert collection.librarySectionTitle == "Movies" assert utils.is_int(collection.maxYear) assert utils.is_int(collection.minYear) + assert utils.is_int(collection.ratingCount) assert utils.is_int(collection.ratingKey) + assert collection.smart is False assert collection.subtype == "movie" assert collection.summary == "" assert collection.thumb.startswith("/library/collections/%s/composite" % collection.ratingKey) From aac4ffdb232df457a6ee6c7ba3b916cdd58a14f9 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 23 Apr 2021 13:59:16 -0700 Subject: [PATCH 117/356] Fix system devices test --- tests/test_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_server.py b/tests/test_server.py index 2e0c1dcaa..0b68d0dd3 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -395,7 +395,7 @@ def test_server_system_devices(plex): devices = plex.systemDevices() assert len(devices) device = devices[-1] - assert device.clientIdentifier or device.clientIdentifier is None + assert device.clientIdentifier or device.clientIdentifier == "" assert utils.is_datetime(device.createdAt) assert utils.is_int(device.id) assert len(device.key) From 148ea7f35297ae1361d444cecbab72793273ed2f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 24 Apr 2021 11:26:31 -0700 Subject: [PATCH 118/356] Fix episode test watched/unwatched name --- tests/test_video.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/test_video.py b/tests/test_video.py index eeb60030a..d4419d031 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -868,6 +868,25 @@ def test_video_Episode_attrs(episode): assert part.accessible +def test_video_Episode_watched(tvshows): + season = tvshows.get("The 100").season(1) + episode = season.episode(1) + episode.markWatched() + watched = season.watched() + assert len(watched) == 1 and watched[0].title == "Pilot" + episode.markUnwatched() + + +def test_video_Episode_unwatched(tvshows): + season = tvshows.get("The 100").season(1) + episodes = season.episodes() + episode = episodes[0] + episode.markWatched() + unwatched = season.unwatched() + assert len(unwatched) == len(episodes) - 1 + episode.markUnwatched() + + def test_video_Episode_mixins_images(episode): #test_mixins.edit_art(episode) # Uploading episode artwork is broken in Plex test_mixins.edit_poster(episode) @@ -895,25 +914,6 @@ def test_video_Season_history(show): season.markUnwatched() -def test_video_Season_watched(tvshows): - season = tvshows.get("The 100").season(1) - episode = season.episode(1) - episode.markWatched() - watched = season.watched() - assert len(watched) == 1 and watched[0].title == "Pilot" - episode.markUnwatched() - - -def test_video_Season_unwatched(tvshows): - season = tvshows.get("The 100").season(1) - episodes = season.episodes() - episode = episodes[0] - episode.markWatched() - unwatched = season.unwatched() - assert len(unwatched) == len(episodes) - 1 - episode.markUnwatched() - - def test_video_Season_attrs(show): season = show.season("Season 1") assert utils.is_datetime(season.addedAt) From c6c9d83bca16b1fd446be347bf4a38cbb71c61a2 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 24 Apr 2021 11:49:36 -0700 Subject: [PATCH 119/356] Fix getting Season.episode by episode number --- plexapi/video.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plexapi/video.py b/plexapi/video.py index b984f4316..541f4134b 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -661,10 +661,14 @@ def episode(self, title=None, episode=None): :exc:`~plexapi.exceptions.BadRequest`: If title or episode parameter is missing. """ key = '/library/metadata/%s/children' % self.ratingKey - if title is not None: + if title is not None and not isinstance(title, int): return self.fetchItem(key, Episode, title__iexact=title) - elif episode is not None: - return self.fetchItem(key, Episode, parentIndex=self.index, index=episode) + elif episode is not None or isinstance(title, int): + if isinstance(title, int): + index = title + else: + index = episode + return self.fetchItem(key, Episode, parentIndex=self.index, index=index) raise BadRequest('Missing argument: title or episode is required') def get(self, title=None, episode=None): From 94bfa35d12135f20e13bb630a99afb33b836526b Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 29 Apr 2021 11:38:34 -0500 Subject: [PATCH 120/356] Upgrade to GitHub-native Dependabot (#734) Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- .github/dependabot.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..13a08e874 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: +- package-ecosystem: pip + directory: "/" + schedule: + interval: daily + time: "11:00" + open-pull-requests-limit: 10 From 01291fe71830823a023ade31b9fc948aa0b54bbc Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 29 Apr 2021 11:39:53 -0500 Subject: [PATCH 121/356] Bump requests-mock from 1.8.0 to 1.9.1 (#733) Bumps [requests-mock](https://github.com/jamielennox/requests-mock) from 1.8.0 to 1.9.1. - [Release notes](https://github.com/jamielennox/requests-mock/releases) - [Commits](https://github.com/jamielennox/requests-mock/compare/1.8.0...1.9.1) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 695eabf14..aa0bbf4a5 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -11,7 +11,7 @@ pytest-cov==2.11.1 pytest-mock<3.5.2 recommonmark==0.7.1 requests==2.25.1 -requests-mock==1.8.0 +requests-mock==1.9.1 sphinx==3.5.4 sphinx-rtd-theme==0.5.1 tqdm==4.59.0 From 44666f9c04e6c80a70550699759a46d3650dd8a0 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 29 Apr 2021 12:09:35 -0500 Subject: [PATCH 122/356] Update pytest-mock requirement from <3.5.2 to <3.6.1 (#732) Updates the requirements on [pytest-mock](https://github.com/pytest-dev/pytest-mock) to permit the latest version. - [Release notes](https://github.com/pytest-dev/pytest-mock/releases) - [Changelog](https://github.com/pytest-dev/pytest-mock/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-mock/compare/v0.1.0...v3.6.0) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index aa0bbf4a5..c16ad57e6 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -8,7 +8,7 @@ pillow==8.1.2 pytest==6.2.2 pytest-cache==1.0 pytest-cov==2.11.1 -pytest-mock<3.5.2 +pytest-mock<3.6.1 recommonmark==0.7.1 requests==2.25.1 requests-mock==1.9.1 From eddd63bc23234c013bfdb268b17057044c451e00 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Thu, 29 Apr 2021 12:10:16 -0500 Subject: [PATCH 123/356] Bump pytest from 6.2.2 to 6.2.3 (#719) Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.2.2 to 6.2.3. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/6.2.2...6.2.3) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index c16ad57e6..0e4272526 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -5,7 +5,7 @@ coveralls==3.0.1 flake8==3.9.1 pillow==8.1.2 -pytest==6.2.2 +pytest==6.2.3 pytest-cache==1.0 pytest-cov==2.11.1 pytest-mock<3.6.1 From 73deabd97fb011d8aec827fe2dd790985a88a4cd Mon Sep 17 00:00:00 2001 From: Alindil <30829631+Alindil@users.noreply.github.com> Date: Thu, 6 May 2021 15:28:05 +0200 Subject: [PATCH 124/356] Update server.py There can be several videos in an optimization. In the current code we only loop on one --- plexapi/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/server.py b/plexapi/server.py index 4b9c7e886..a0089775d 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -495,7 +495,7 @@ def optimizedItem(self, optimizedID): """ backgroundProcessing = self.fetchItem('/playlists?type=42') - return self.fetchItem('%s/items/%s/items' % (backgroundProcessing.key, optimizedID)) + return self.fetchItems('%s/items/%s/items' % (backgroundProcessing.key, optimizedID)) def conversions(self, pause=None): """ Returns list of all :class:`~plexapi.media.Conversion` objects connected to server. """ From 51c2d4a32657800b253c764bcad80ac78a4b6694 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 May 2021 11:08:48 +0000 Subject: [PATCH 125/356] Update pytest-mock requirement from <3.6.1 to <3.6.2 Updates the requirements on [pytest-mock](https://github.com/pytest-dev/pytest-mock) to permit the latest version. - [Release notes](https://github.com/pytest-dev/pytest-mock/releases) - [Changelog](https://github.com/pytest-dev/pytest-mock/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-mock/compare/v0.1.0...v3.6.1) Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 0e4272526..b847dd01b 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -8,7 +8,7 @@ pillow==8.1.2 pytest==6.2.3 pytest-cache==1.0 pytest-cov==2.11.1 -pytest-mock<3.6.1 +pytest-mock<3.6.2 recommonmark==0.7.1 requests==2.25.1 requests-mock==1.9.1 From 246ad82f86bce116e1a79fbb654e39d1f2055379 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 9 May 2021 12:24:55 -0700 Subject: [PATCH 126/356] Add CollectionMixin to Season, Episode, and Track --- plexapi/audio.py | 4 +++- plexapi/collection.py | 6 +++--- plexapi/video.py | 9 ++++++--- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/plexapi/audio.py b/plexapi/audio.py index f95d71792..0799dcf39 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -328,13 +328,14 @@ def _defaultSyncTitle(self): @utils.registerPlexObject -class Track(Audio, Playable, ArtUrlMixin, PosterUrlMixin, MoodMixin): +class Track(Audio, Playable, ArtUrlMixin, PosterUrlMixin, CollectionMixin, MoodMixin): """ Represents a single Track. Attributes: TAG (str): 'Directory' TYPE (str): 'track' chapterSource (str): Unknown + collections (List<:class:`~plexapi.media.Collection`>): List of collection objects. duration (int): Length of the track in milliseconds. grandparentArt (str): URL to album artist artwork (/library/metadata//art/). grandparentGuid (str): Plex GUID for the album artist (plex://artist/5d07bcb0403c64029053ac4c). @@ -364,6 +365,7 @@ def _loadData(self, data): Audio._loadData(self, data) Playable._loadData(self, data) self.chapterSource = data.attrib.get('chapterSource') + self.collections = self.findItems(data, media.Collection) self.duration = utils.cast(int, data.attrib.get('duration')) self.grandparentArt = data.attrib.get('grandparentArt') self.grandparentGuid = data.attrib.get('grandparentGuid') diff --git a/plexapi/collection.py b/plexapi/collection.py index 86ca7ee5a..de4c165df 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -9,7 +9,7 @@ @utils.registerPlexObject -class Collections(PlexPartialObject, ArtMixin, PosterMixin, LabelMixin): +class Collection(PlexPartialObject, ArtMixin, PosterMixin, LabelMixin): """ Represents a single Collection. Attributes: @@ -127,7 +127,7 @@ def modeUpdate(self, mode=None): showItems (Show this Collection and its Items) Example: - collection = 'plexapi.library.Collections' + collection = 'plexapi.collection.Collection' collection.updateMode(mode="hide") """ mode_dict = {'default': -1, @@ -150,7 +150,7 @@ def sortUpdate(self, sort=None): Example: - colleciton = 'plexapi.library.Collections' + colleciton = 'plexapi.collection.Collection' collection.updateSort(mode="alpha") """ sort_dict = {'release': 0, diff --git a/plexapi/video.py b/plexapi/video.py index b984f4316..6c6b51375 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -585,12 +585,13 @@ def download(self, savepath=None, keep_original_name=False, **kwargs): @utils.registerPlexObject -class Season(Video, ArtMixin, PosterMixin): +class Season(Video, ArtMixin, PosterMixin, CollectionMixin): """ Represents a single Show Season (including all episodes). Attributes: TAG (str): 'Directory' TYPE (str): 'season' + collections (List<:class:`~plexapi.media.Collection`>): List of collection objects. guids (List<:class:`~plexapi.media.Guid`>): List of guid objects. index (int): Season number. key (str): API URL (/library/metadata/). @@ -611,6 +612,7 @@ class Season(Video, ArtMixin, PosterMixin): def _loadData(self, data): """ Load attribute values from Plex XML response. """ Video._loadData(self, data) + self.collections = self.findItems(data, media.Collection) self.guids = self.findItems(data, media.Guid) self.index = utils.cast(int, data.attrib.get('index')) self.key = self.key.replace('/children', '') # FIX_BUG_50 @@ -713,8 +715,7 @@ def _defaultSyncTitle(self): @utils.registerPlexObject -class Episode(Video, Playable, ArtMixin, PosterMixin, - DirectorMixin, WriterMixin): +class Episode(Video, Playable, ArtMixin, PosterMixin, CollectionMixin, DirectorMixin, WriterMixin): """ Represents a single Shows Episode. Attributes: @@ -724,6 +725,7 @@ class Episode(Video, Playable, ArtMixin, PosterMixin, audienceRatingImage (str): Key to audience rating image (tmdb://image.rating). chapters (List<:class:`~plexapi.media.Chapter`>): List of Chapter objects. chapterSource (str): Chapter source (agent; media; mixed). + collections (List<:class:`~plexapi.media.Collection`>): List of collection objects. contentRating (str) Content rating (PG-13; NR; TV-G). directors (List<:class:`~plexapi.media.Director`>): List of director objects. duration (int): Duration of the episode in milliseconds. @@ -765,6 +767,7 @@ def _loadData(self, data): self.audienceRatingImage = data.attrib.get('audienceRatingImage') self.chapters = self.findItems(data, media.Chapter) self.chapterSource = data.attrib.get('chapterSource') + self.collections = self.findItems(data, media.Collection) self.contentRating = data.attrib.get('contentRating') self.directors = self.findItems(data, media.Director) self.duration = utils.cast(int, data.attrib.get('duration')) From e877b0039b489cb939c8450e14c7aca004fadf99 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 9 May 2021 12:27:38 -0700 Subject: [PATCH 127/356] Add tests for Season, Episode, and Track collection tags --- tests/test_audio.py | 1 + tests/test_video.py | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/tests/test_audio.py b/tests/test_audio.py index e06192e95..fcd131409 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -290,6 +290,7 @@ def test_audio_Track_mixins_images(track): def test_audio_Track_mixins_tags(track): + test_mixins.edit_collection(track) test_mixins.edit_mood(track) diff --git a/tests/test_video.py b/tests/test_video.py index eeb60030a..d9171505a 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -876,6 +876,7 @@ def test_video_Episode_mixins_images(episode): def test_video_Episode_mixins_tags(episode): + test_mixins.edit_collection(episode) test_mixins.edit_director(episode) test_mixins.edit_writer(episode) @@ -992,6 +993,11 @@ def test_video_Season_mixins_images(show): test_mixins.attr_posterUrl(season) +def test_video_Season_mixins_tags(show): + season = show.season(season=1) + test_mixins.edit_collection(season) + + def test_that_reload_return_the_same_object(plex): # we want to check this that all the urls are correct movie_library_search = plex.library.section("Movies").search("Elephants Dream")[0] From 75c8b9879bf5b3628140283d4e55b7c4d1d52262 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 9 May 2021 14:59:51 -0700 Subject: [PATCH 128/356] Add ability to return the list of items from any tag filter --- plexapi/library.py | 6 ++ plexapi/media.py | 232 ++++++++++++++++++++++----------------------- 2 files changed, 120 insertions(+), 118 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 89cca0974..700187861 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1698,6 +1698,12 @@ def _loadData(self, data): self.tagValue = utils.cast(int, data.attrib.get('tagValue')) self.thumb = data.attrib.get('thumb') + def items(self, *args, **kwargs): + """ Return the list of items within this tag. """ + if not self.key: + raise BadRequest('Key is not defined for this tag: %s' % self.tag) + return self.fetchItems(self.key) + @utils.registerPlexObject class Tag(HubMediaTag): diff --git a/plexapi/media.py b/plexapi/media.py index 735bbe1bf..2fb439aac 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -641,57 +641,41 @@ class MediaTag(PlexObject): the construct used for things such as Country, Director, Genre, etc. Attributes: - server (:class:`~plexapi.server.PlexServer`): Server this client is connected to. + filter (str): The library filter for the tag. id (id): Tag ID (This seems meaningless except to use it as a unique id). - role (str): Unknown + key (str): API URL (/library/section//all?). + role (str): The name of the character role for :class:`~plexapi.media.Role` only. tag (str): Name of the tag. This will be Animation, SciFi etc for Genres. The name of person for Directors and Roles (ex: Animation, Stephen Graham, etc). - : Attributes only applicable in search results from - PlexServer :func:`~plexapi.server.PlexServer.search`. They provide details of which - library section the tag was found as well as the url to dig deeper into the results. - - * key (str): API URL to dig deeper into this tag (ex: /library/sections/1/all?actor=9081). - * librarySectionID (int): Section ID this tag was generated from. - * librarySectionTitle (str): Library section title this tag was found. - * librarySectionType (str): Media type of the library section this tag was found. - * tagType (int): Tag type ID. - * thumb (str): URL to thumbnail image. + thumb (str): URL to thumbnail image for :class:`~plexapi.media.Role` only. """ def _loadData(self, data): """ Load attribute values from Plex XML response. """ self._data = data + self.filter = data.attrib.get('filter') self.id = cast(int, data.attrib.get('id')) + self.key = data.attrib.get('key') self.role = data.attrib.get('role') self.tag = data.attrib.get('tag') - # additional attributes only from hub search - self.key = data.attrib.get('key') - self.librarySectionID = cast(int, data.attrib.get('librarySectionID')) - self.librarySectionTitle = data.attrib.get('librarySectionTitle') - self.librarySectionType = data.attrib.get('librarySectionType') - self.tagType = cast(int, data.attrib.get('tagType')) self.thumb = data.attrib.get('thumb') - def items(self, *args, **kwargs): - """ Return the list of items within this tag. This function is only applicable - in search results from PlexServer :func:`~plexapi.server.PlexServer.search`. - """ - if not self.key: - raise BadRequest('Key is not defined for this tag: %s' % self.tag) - return self.fetchItems(self.key) - - -class GuidTag(PlexObject): - """ Base class for guid tags used only for Guids, as they contain only a string identifier + parent = self._parent() + self._librarySectionID = utils.cast(int, parent._data.attrib.get('librarySectionID')) + self._librarySectionKey = parent._data.attrib.get('librarySectionKey') + self._librarySectionTitle = parent._data.attrib.get('librarySectionTitle') + self._parentType = parent.TYPE - Attributes: - id (id): The guid for external metadata sources (e.g. IMDB, TMDB, TVDB). - """ + if self._librarySectionKey and self.filter: + self.key = '%s/all?%s&type=%s' % ( + self._librarySectionKey, self.filter, utils.searchType(self._parentType)) - def _loadData(self, data): - """ Load attribute values from Plex XML response. """ - self._data = data - self.id = data.attrib.get('id') + def items(self): + """ Return the list of items within this tag. """ + if not self.key: + raise BadRequest('Key is not defined for this tag: %s. ' + 'Reload the parent object.' % self.tag) + return self.fetchItems(self.key) @utils.registerPlexObject @@ -705,36 +689,11 @@ class Collection(MediaTag): TAG = 'Collection' FILTER = 'collection' - -@utils.registerPlexObject -class Label(MediaTag): - """ Represents a single Label media tag. - - Attributes: - TAG (str): 'Label' - FILTER (str): 'label' - """ - TAG = 'Label' - FILTER = 'label' - - -@utils.registerPlexObject -class Tag(MediaTag): - """ Represents a single Tag media tag. - - Attributes: - TAG (str): 'Tag' - FILTER (str): 'tag' - """ - TAG = 'Tag' - FILTER = 'tag' - - def _loadData(self, data): - self._data = data - self.id = cast(int, data.attrib.get('id', 0)) - self.filter = data.attrib.get('filter') - self.tag = data.attrib.get('tag') - self.title = self.tag + def collection(self): + """ Return the :class:`~plexapi.collection.Collection` object for this collection tag. + """ + key = '%s/collections' % self._librarySectionKey + return self.fetchItem(key, etag='Directory', index=self.id) @utils.registerPlexObject @@ -774,13 +733,15 @@ class Genre(MediaTag): @utils.registerPlexObject -class Guid(GuidTag): - """ Represents a single Guid media tag. +class Label(MediaTag): + """ Represents a single Label media tag. Attributes: - TAG (str): 'Guid' + TAG (str): 'Label' + FILTER (str): 'label' """ - TAG = "Guid" + TAG = 'Label' + FILTER = 'label' @utils.registerPlexObject @@ -795,6 +756,42 @@ class Mood(MediaTag): FILTER = 'mood' +@utils.registerPlexObject +class Producer(MediaTag): + """ Represents a single Producer media tag. + + Attributes: + TAG (str): 'Producer' + FILTER (str): 'producer' + """ + TAG = 'Producer' + FILTER = 'producer' + + +@utils.registerPlexObject +class Role(MediaTag): + """ Represents a single Role (actor/actress) media tag. + + Attributes: + TAG (str): 'Role' + FILTER (str): 'role' + """ + TAG = 'Role' + FILTER = 'role' + + +@utils.registerPlexObject +class Similar(MediaTag): + """ Represents a single Similar media tag. + + Attributes: + TAG (str): 'Similar' + FILTER (str): 'similar' + """ + TAG = 'Similar' + FILTER = 'similar' + + @utils.registerPlexObject class Style(MediaTag): """ Represents a single Style media tag. @@ -807,6 +804,53 @@ class Style(MediaTag): FILTER = 'style' +@utils.registerPlexObject +class Tag(MediaTag): + """ Represents a single Tag media tag. + + Attributes: + TAG (str): 'Tag' + FILTER (str): 'tag' + """ + TAG = 'Tag' + FILTER = 'tag' + + +@utils.registerPlexObject +class Writer(MediaTag): + """ Represents a single Writer media tag. + + Attributes: + TAG (str): 'Writer' + FILTER (str): 'writer' + """ + TAG = 'Writer' + FILTER = 'writer' + + +class GuidTag(PlexObject): + """ Base class for guid tags used only for Guids, as they contain only a string identifier + + Attributes: + id (id): The guid for external metadata sources (e.g. IMDB, TMDB, TVDB). + """ + + def _loadData(self, data): + """ Load attribute values from Plex XML response. """ + self._data = data + self.id = data.attrib.get('id') + + +@utils.registerPlexObject +class Guid(GuidTag): + """ Represents a single Guid media tag. + + Attributes: + TAG (str): 'Guid' + """ + TAG = 'Guid' + + class BaseImage(PlexObject): """ Base class for all Art, Banner, and Poster objects. @@ -849,54 +893,6 @@ class Poster(BaseImage): """ Represents a single Poster object. """ -@utils.registerPlexObject -class Producer(MediaTag): - """ Represents a single Producer media tag. - - Attributes: - TAG (str): 'Producer' - FILTER (str): 'producer' - """ - TAG = 'Producer' - FILTER = 'producer' - - -@utils.registerPlexObject -class Role(MediaTag): - """ Represents a single Role (actor/actress) media tag. - - Attributes: - TAG (str): 'Role' - FILTER (str): 'role' - """ - TAG = 'Role' - FILTER = 'role' - - -@utils.registerPlexObject -class Similar(MediaTag): - """ Represents a single Similar media tag. - - Attributes: - TAG (str): 'Similar' - FILTER (str): 'similar' - """ - TAG = 'Similar' - FILTER = 'similar' - - -@utils.registerPlexObject -class Writer(MediaTag): - """ Represents a single Writer media tag. - - Attributes: - TAG (str): 'Writer' - FILTER (str): 'writer' - """ - TAG = 'Writer' - FILTER = 'writer' - - @utils.registerPlexObject class Chapter(PlexObject): """ Represents a single Writer media tag. From 71e7ee266001c2fcb313bf45dbb6f89f863fb53e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 9 May 2021 15:05:06 -0700 Subject: [PATCH 129/356] Add tests for media tags --- tests/test_audio.py | 27 +++++++++++++++++++- tests/test_collection.py | 2 +- tests/test_media.py | 54 ++++++++++++++++++++++++++++++++++++++++ tests/test_photo.py | 7 +++++- tests/test_video.py | 48 ++++++++++++++++++++++++++++++++++- 5 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 tests/test_media.py diff --git a/tests/test_audio.py b/tests/test_audio.py index fcd131409..3aef2729c 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- from . import conftest as utils -from . import test_mixins +from . import test_media, test_mixins def test_audio_Artist_attr(artist): @@ -87,6 +87,16 @@ def test_audio_Artist_mixins_tags(artist): test_mixins.edit_style(artist) +def test_audio_Artist_media_tags(artist): + artist.reload() + test_media.tag_collection(artist) + test_media.tag_country(artist) + test_media.tag_genre(artist) + test_media.tag_mood(artist) + test_media.tag_similar(artist) + test_media.tag_style(artist) + + def test_audio_Album_attrs(album): assert utils.is_datetime(album.addedAt) if album.art: @@ -165,6 +175,15 @@ def test_audio_Album_mixins_tags(album): test_mixins.edit_style(album) +def test_audio_Album_media_tags(album): + album.reload() + test_media.tag_collection(album) + test_media.tag_genre(album) + test_media.tag_label(album) + test_media.tag_mood(album) + test_media.tag_style(album) + + def test_audio_Track_attrs(album): track = album.get("As Colourful As Ever").reload() assert utils.is_datetime(track.addedAt) @@ -294,6 +313,12 @@ def test_audio_Track_mixins_tags(track): test_mixins.edit_mood(track) +def test_audio_Track_media_tags(track): + track.reload() + test_media.tag_collection(track) + test_media.tag_mood(track) + + def test_audio_Audio_section(artist, album, track): assert artist.section() assert album.section() diff --git a/tests/test_collection.py b/tests/test_collection.py index 77815a6cf..c2663a309 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -33,7 +33,7 @@ def test_Collection_attrs(collection): assert collection.summary == "" assert collection.thumb.startswith("/library/collections/%s/composite" % collection.ratingKey) assert collection.thumbBlurHash is None - assert collection.title == "marvel" + assert collection.title == "Marvel" assert collection.titleSort == collection.title assert collection.type == "collection" assert utils.is_datetime(collection.updatedAt) diff --git a/tests/test_media.py b/tests/test_media.py new file mode 100644 index 000000000..53cf7b1d0 --- /dev/null +++ b/tests/test_media.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- + +def _test_media_tag(obj, attr): + tags = getattr(obj, attr) + if tags: + assert obj in tags[0].items() + + +def tag_collection(obj): + _test_media_tag(obj, "collections") + + +def tag_country(obj): + _test_media_tag(obj, "countries") + + +def tag_director(obj): + _test_media_tag(obj, "directors") + + +def tag_genre(obj): + _test_media_tag(obj, "genres") + + +def tag_label(obj): + _test_media_tag(obj, "labels") + + +def tag_mood(obj): + _test_media_tag(obj, "moods") + + +def tag_producer(obj): + _test_media_tag(obj, "producers") + + +def tag_role(obj): + _test_media_tag(obj, "roles") + + +def tag_similar(obj): + _test_media_tag(obj, "similar") + + +def tag_style(obj): + _test_media_tag(obj, "styles") + + +def tag_tag(obj): + _test_media_tag(obj, "tags") + + +def tag_writer(obj): + _test_media_tag(obj, "writers") diff --git a/tests/test_photo.py b/tests/test_photo.py index ebe85ff7a..85e4c9acc 100644 --- a/tests/test_photo.py +++ b/tests/test_photo.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from . import test_mixins +from . import test_media, test_mixins def test_photo_Photoalbum(photoalbum): @@ -20,3 +20,8 @@ def test_photo_Photoalbum_mixins_images(photoalbum): def test_photo_Photo_mixins_tags(photo): test_mixins.edit_tag(photo) + + +def test_photo_Photo_media_tags(photo): + photo.reload() + test_media.tag_tag(photo) diff --git a/tests/test_video.py b/tests/test_video.py index d52577c3e..f1457971a 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -8,7 +8,7 @@ from plexapi.exceptions import BadRequest, NotFound from . import conftest as utils -from . import test_mixins +from . import test_media, test_mixins def test_video_Movie(movies, movie): @@ -59,6 +59,30 @@ def test_video_Movie_mixins_tags(movie): test_mixins.edit_writer(movie) +def test_video_Movie_media_tags(movie): + movie.reload() + test_media.tag_collection(movie) + test_media.tag_country(movie) + test_media.tag_director(movie) + test_media.tag_genre(movie) + test_media.tag_label(movie) + test_media.tag_producer(movie) + test_media.tag_role(movie) + test_media.tag_similar(movie) + test_media.tag_writer(movie) + + +def test_video_Movie_media_tags_Exception(movie): + with pytest.raises(BadRequest): + movie.genres[0].items() + + +def test_video_Movie_media_tags_collection(movie, collection): + movie.reload() + collection_tag = next(c for c in movie.collections if c.tag == "Marvel") + assert collection == collection_tag.collection() + + def test_video_Movie_getStreamURL(movie, account): key = movie.ratingKey assert movie.getStreamURL() == ( @@ -741,6 +765,15 @@ def test_video_Show_mixins_tags(show): test_mixins.edit_label(show) +def test_video_Show_media_tags(show): + show.reload() + test_media.tag_collection(show) + test_media.tag_genre(show) + test_media.tag_label(show) + test_media.tag_role(show) + test_media.tag_similar(show) + + def test_video_Episode(show): episode = show.episode("Winter Is Coming") assert episode == show.episode(season=1, episode=1) @@ -900,6 +933,13 @@ def test_video_Episode_mixins_tags(episode): test_mixins.edit_writer(episode) +def test_video_Episode_media_tags(episode): + episode.reload() + test_media.tag_collection(episode) + test_media.tag_director(episode) + test_media.tag_writer(episode) + + def test_video_Season(show): seasons = show.seasons() assert len(seasons) == 2 @@ -998,6 +1038,12 @@ def test_video_Season_mixins_tags(show): test_mixins.edit_collection(season) +def test_video_Season_media_tags(show): + season = show.season(season=1) + season.reload() + test_media.tag_collection(season) + + def test_that_reload_return_the_same_object(plex): # we want to check this that all the urls are correct movie_library_search = plex.library.section("Movies").search("Elephants Dream")[0] From 006aee24839853883bd5a7752a1a2d041ad3fc4d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 9 May 2021 21:05:10 -0700 Subject: [PATCH 130/356] Fix typo in library show agent doc string --- plexapi/library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 89cca0974..f6fd8f41a 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -219,7 +219,7 @@ def add(self, name='', type='', agent='', scanner='', location='', language='en' **Show Preferences** * **agent** (str): com.plexapp.agents.none, com.plexapp.agents.thetvdb, com.plexapp.agents.themoviedb, - tv.plex.agent.series + tv.plex.agents.series * **enableBIFGeneration** (bool): Enable video preview thumbnails. Default value true. * **episodeSort** (int): Episode order. Default -1 Possible options: 0:Oldest first, 1:Newest first. * **flattenSeasons** (int): Seasons. Default value 0 Possible options: 0:Show,1:Hide. From 61f49f586b0d2ccd2fe1ea72865cdb0fd8f6df3d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 9 May 2021 21:23:00 -0700 Subject: [PATCH 131/356] Capitalize collection name in tests --- tests/conftest.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 15ce7fdc0..4da4e2fb2 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -234,11 +234,11 @@ def movie(movies): @pytest.fixture() def collection(movies): try: - return movies.collections(title="marvel")[0] + return movies.collections(title="Marvel")[0] except IndexError: movie = movies.get("Elephants Dream") - movie.addCollection("marvel") - return movies.collections(title="marvel")[0] + movie.addCollection("Marvel") + return movies.collections(title="Marvel")[0] @pytest.fixture() From 238ea5c4ba43f8fb464f007bedbca72bd9c9ec21 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 9 May 2021 21:27:52 -0700 Subject: [PATCH 132/356] Change to Plex TV Series agent for test server --- tools/plex-bootstraptest.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/plex-bootstraptest.py b/tools/plex-bootstraptest.py index a2835aff3..46cb00334 100755 --- a/tools/plex-bootstraptest.py +++ b/tools/plex-bootstraptest.py @@ -522,7 +522,7 @@ def alert_callback(data): location="/data/Movies" if opts.no_docker is False else movies_path, agent="tv.plex.agents.movie", scanner="Plex Movie", - language='en-US', + language="en-US", expected_media_count=num_movies, ) ) @@ -537,8 +537,9 @@ def alert_callback(data): name="TV Shows", type="show", location="/data/TV-Shows" if opts.no_docker is False else tvshows_path, - agent="com.plexapp.agents.thetvdb", - scanner="Plex Series Scanner", + agent="tv.plex.agents.series", + scanner="Plex TV Series", + language="en-US", expected_media_count=num_ep, ) ) From 64f647e12bb0c3286e33182f5761f7686a7d1ff7 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 9 May 2021 21:17:37 -0700 Subject: [PATCH 133/356] Add addition season and episode attributes * Season.parentStudio * Season.year * Episode.parentYear --- plexapi/video.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/plexapi/video.py b/plexapi/video.py index 6279334d6..75a3bcdcf 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -600,10 +600,12 @@ class Season(Video, ArtMixin, PosterMixin, CollectionMixin): parentIndex (int): Plex index number for the show. parentKey (str): API URL of the show (/library/metadata/). parentRatingKey (int): Unique key identifying the show. + parentStudio (str): Studio that created show. parentTheme (str): URL to show theme resource (/library/metadata//theme/). parentThumb (str): URL to show thumbnail image (/library/metadata//thumb/). parentTitle (str): Name of the show for the season. viewedLeafCount (int): Number of items marked as played in the season view. + year (int): Year the season was released. """ TAG = 'Directory' TYPE = 'season' @@ -618,13 +620,15 @@ def _loadData(self, data): self.key = self.key.replace('/children', '') # FIX_BUG_50 self.leafCount = utils.cast(int, data.attrib.get('leafCount')) self.parentGuid = data.attrib.get('parentGuid') - self.parentIndex = data.attrib.get('parentIndex') + self.parentIndex = utils.cast(int, data.attrib.get('parentIndex')) self.parentKey = data.attrib.get('parentKey') self.parentRatingKey = utils.cast(int, data.attrib.get('parentRatingKey')) + self.parentStudio = data.attrib.get('parentStudio') self.parentTheme = data.attrib.get('parentTheme') self.parentThumb = data.attrib.get('parentThumb') self.parentTitle = data.attrib.get('parentTitle') self.viewedLeafCount = utils.cast(int, data.attrib.get('viewedLeafCount')) + self.year = utils.cast(int, data.attrib.get('year')) def __iter__(self): for episode in self.episodes(): @@ -751,12 +755,13 @@ class Episode(Video, Playable, ArtMixin, PosterMixin, CollectionMixin, DirectorM parentRatingKey (int): Unique key identifying the season. parentThumb (str): URL to season thumbnail image (/library/metadata//thumb/). parentTitle (str): Name of the season for the episode. + parentYear (int): Year the season was released. rating (float): Episode rating (7.9; 9.8; 8.1). skipParent (bool): True if the show's seasons are set to hidden. userRating (float): User rating (2.0; 8.0). viewOffset (int): View offset in milliseconds. writers (List<:class:`~plexapi.media.Writer`>): List of writers objects. - year (int): Year episode was released. + year (int): Year the episode was released. """ TAG = 'Video' TYPE = 'episode' @@ -793,6 +798,7 @@ def _loadData(self, data): self.parentRatingKey = utils.cast(int, data.attrib.get('parentRatingKey')) self.parentThumb = data.attrib.get('parentThumb') self.parentTitle = data.attrib.get('parentTitle') + self.parentYear = utils.cast(int, data.attrib.get('parentYear')) self.rating = utils.cast(float, data.attrib.get('rating')) self.skipParent = utils.cast(bool, data.attrib.get('skipParent', '0')) self.userRating = utils.cast(float, data.attrib.get('userRating')) From ec60eeea443efee4dfb19e704ca10af266e6e46e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 9 May 2021 21:23:48 -0700 Subject: [PATCH 134/356] Update tests for new Plex TV agent --- tests/test_video.py | 304 ++++++++++++++++++++++---------------------- 1 file changed, 151 insertions(+), 153 deletions(-) diff --git a/tests/test_video.py b/tests/test_video.py index d52577c3e..66ebee345 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -163,9 +163,9 @@ def test_video_Movie_attrs(movies): assert utils.is_datetime(movie.addedAt) if movie.art: assert utils.is_art(movie.art) - assert float(movie.rating) >= 6.4 + assert utils.is_float(movie.rating) assert movie.ratingImage == 'rottentomatoes://image.rating.ripe' - assert movie.audienceRating >= 8.5 + assert utils.is_float(movie.audienceRating) assert movie.audienceRatingImage == 'rottentomatoes://image.rating.upright' movie.reload() # RELOAD assert movie.chapterSource is None @@ -179,6 +179,7 @@ def test_video_Movie_attrs(movies): assert "Nina Paley" in [i.tag for i in movie.directors] if movie.roles: assert "Reena Shah" in [i.tag for i in movie.roles] + assert movie.actors == movie.roles if movie.writers: assert "Nina Paley" in [i.tag for i in movie.writers] assert movie.duration >= 160000 @@ -531,27 +532,6 @@ def test_video_Movie_hubs(movies): assert hub.size == 1 -def test_video_Show(show): - assert show.title == "Game of Thrones" - - -def test_video_Episode_updateProgress(episode, patched_http_call): - episode.updateProgress(10 * 60 * 1000) # 10 minutes. - - -def test_video_Episode_updateTimeline(episode, patched_http_call): - episode.updateTimeline( - 10 * 60 * 1000, state="playing", duration=episode.duration - ) # 10 minutes. - - -def test_video_Episode_stop(episode, mocker, patched_http_call): - mocker.patch.object( - episode, "session", return_value=list(mocker.MagicMock(id="hello")) - ) - episode.stop(reason="It's past bedtime!") - - def test_video_Show_attrs(show): assert utils.is_datetime(show.addedAt) if show.art: @@ -561,18 +541,17 @@ def test_video_Show_attrs(show): assert utils.is_int(show.childCount) assert show.contentRating in utils.CONTENTRATINGS assert utils.is_int(show.duration, gte=1600000) - assert utils.is_section(show._initpath) # Check reloading the show loads the full list of genres - assert not {"Adventure", "Drama"} - {i.tag for i in show.genres} show.reload() - assert show.audienceRating is None # TODO: Change when updating test to the Plex TV agent - assert show.audienceRatingImage is None # TODO: Change when updating test to the Plex TV agent + assert utils.is_float(show.audienceRating) + assert show.audienceRatingImage == "thetvdb://image.rating" assert show.autoDeletionItemPolicyUnwatchedLibrary == 0 assert show.autoDeletionItemPolicyWatchedLibrary == 0 assert show.episodeSort == -1 assert show.flattenSeasons == -1 - assert sorted([i.tag for i in show.genres]) == ["Adventure", "Drama", "Fantasy"] - assert show.guids == [] # TODO: Change when updating test to the Plex TV agent + assert "Drama" in [i.tag for i in show.genres] + assert show.guid == "plex://show/5d9c086c46115600200aa2fe" + assert "tvdb://121361" in [i.id for i in show.guids] # So the initkey should have changed because of the reload assert utils.is_metadata(show._initpath) assert utils.is_int(show.index) @@ -586,25 +565,16 @@ def test_video_Show_attrs(show): assert show.network is None assert utils.is_datetime(show.originallyAvailableAt) assert show.originalTitle is None - assert show.rating >= 8.0 + assert show.rating is None assert utils.is_int(show.ratingKey) - assert sorted([i.tag for i in show.roles])[:4] == [ - "Aidan Gillen", - "Aimee Richardson", - "Alexander Siddig", - "Alfie Allen", - ] # noqa - assert sorted([i.tag for i in show.actors])[:4] == [ - "Aidan Gillen", - "Aimee Richardson", - "Alexander Siddig", - "Alfie Allen", - ] # noqa + if show.roles: + assert "Emilia Clarke" in [i.tag for i in show.roles] + assert show.actors == show.roles assert show._server._baseurl == utils.SERVER_BASEURL assert show.showOrdering in (None, 'aired') - assert show.studio == "HBO" + assert show.studio == "Revolution Sun Studios" assert utils.is_string(show.summary, gte=100) - assert show.tagline is None + assert show.tagline == "Winter is coming." assert utils.is_metadata(show.theme, contains="/theme/") if show.thumb: assert utils.is_thumb(show.thumb) @@ -616,7 +586,7 @@ def test_video_Show_attrs(show): assert utils.is_datetime(show.updatedAt) assert utils.is_int(show.viewCount, gte=0) assert utils.is_int(show.viewedLeafCount, gte=0) - assert show.year in (2011, 2010) + assert show.year == 2011 assert show.url(None) is None @@ -741,6 +711,126 @@ def test_video_Show_mixins_tags(show): test_mixins.edit_label(show) +def test_video_Season(show): + seasons = show.seasons() + assert len(seasons) == 2 + assert ["Season 1", "Season 2"] == [s.title for s in seasons[:2]] + assert show.season("Season 1") == seasons[0] + + +def test_video_Season_history(show): + season = show.season("Season 1") + season.markWatched() + history = season.history() + assert len(history) + season.markUnwatched() + + +def test_video_Season_attrs(show): + season = show.season("Season 1") + assert utils.is_datetime(season.addedAt) + if season.art: + assert utils.is_art(season.art) + assert season.guid == "plex://season/602e67e41d3358002c4120eb" + assert "tvdb://364731" in [i.id for i in season.guids] + assert season.index == 1 + assert utils.is_metadata(season._initpath) + assert utils.is_metadata(season.key) + assert utils.is_datetime(season.lastViewedAt) + assert utils.is_int(season.leafCount, gte=3) + assert season.listType == "video" + assert season.parentGuid == "plex://show/5d9c086c46115600200aa2fe" + assert season.parentIndex == 1 + assert utils.is_metadata(season.parentKey) + assert utils.is_int(season.parentRatingKey) + assert season.parentStudio == "Revolution Sun Studios" + if season.parentThumb: + assert utils.is_thumb(season.parentThumb) + assert season.parentTitle == "Game of Thrones" + assert utils.is_int(season.ratingKey) + assert season._server._baseurl == utils.SERVER_BASEURL + assert season.summary == "" + if season.thumb: + assert utils.is_thumb(season.thumb) + assert season.title == "Season 1" + assert season.titleSort == "Season 1" + assert season.type == "season" + assert utils.is_datetime(season.updatedAt) + assert utils.is_int(season.viewCount, gte=0) + assert utils.is_int(season.viewedLeafCount, gte=0) + assert utils.is_int(season.seasonNumber) + assert season.year == 2011 + + +def test_video_Season_show(show): + season = show.seasons()[0] + season_by_name = show.season("Season 1") + assert show.ratingKey == season.parentRatingKey and season_by_name.parentRatingKey + assert season.ratingKey == season_by_name.ratingKey + + +def test_video_Season_watched(show): + season = show.season("Season 1") + season.markWatched() + assert season.isWatched + + +def test_video_Season_unwatched(show): + season = show.season("Season 1") + season.markUnwatched() + assert not season.isWatched + + +def test_video_Season_get(show): + episode = show.season("Season 1").get("Winter Is Coming") + assert episode.title == "Winter Is Coming" + + +def test_video_Season_episode(show): + episode = show.season("Season 1").get("Winter Is Coming") + assert episode.title == "Winter Is Coming" + + +def test_video_Season_episode_by_index(show): + episode = show.season(season=1).episode(episode=1) + assert episode.index == 1 + + +def test_video_Season_episodes(show): + episodes = show.season("Season 2").episodes() + assert len(episodes) >= 1 + + +def test_video_Season_mixins_images(show): + season = show.season(season=1) + test_mixins.edit_art(season) + test_mixins.edit_poster(season) + test_mixins.attr_artUrl(season) + test_mixins.attr_posterUrl(season) + + +def test_video_Season_mixins_tags(show): + season = show.season(season=1) + test_mixins.edit_collection(season) + + +def test_video_Episode_updateProgress(episode, patched_http_call): + episode.updateProgress(10 * 60 * 1000) # 10 minutes. + + +def test_video_Episode_updateTimeline(episode, patched_http_call): + episode.updateTimeline( + 10 * 60 * 1000, state="playing", duration=episode.duration + ) # 10 minutes. + + +def test_video_Episode_stop(episode, mocker, patched_http_call): + mocker.patch.object( + episode, "session", return_value=list(mocker.MagicMock(id="hello")) + ) + episode.stop(reason="It's past bedtime!") + + def test_video_Episode(show): episode = show.episode("Winter Is Coming") assert episode == show.episode(season=1, episode=1) @@ -793,18 +883,22 @@ def test_video_Episode_attrs(episode): assert utils.is_datetime(episode.addedAt) if episode.art: assert utils.is_art(episode.art) - assert episode.audienceRating is None # TODO: Change when updating test to the Plex TV agent - assert episode.audienceRatingImage is None # TODO: Change when updating test to the Plex TV agent + assert utils.is_float(episode.audienceRating) + assert episode.audienceRatingImage == "thetvdb://image.rating" assert episode.contentRating in utils.CONTENTRATINGS - if len(episode.directors): - assert [i.tag for i in episode.directors] == ["Tim Van Patten"] + if episode.directors: + assert "Timothy Van Patten" in [i.tag for i in episode.directors] assert utils.is_int(episode.duration, gte=120000) if episode.grandparentArt: assert utils.is_art(episode.grandparentArt) + assert episode.grandparentGuid == "plex://show/5d9c086c46115600200aa2fe" + assert utils.is_metadata(episode.grandparentKey) + assert utils.is_int(episode.grandparentRatingKey) + assert utils.is_metadata(episode.grandparentTheme) if episode.grandparentThumb: assert utils.is_thumb(episode.grandparentThumb) assert episode.grandparentTitle == "Game of Thrones" - assert episode.guids == [] # TODO: Change when updating test to the Plex TV agent + assert "tvdb://3254641" in [i.id for i in episode.guids] assert episode.index == 1 assert utils.is_metadata(episode._initpath) assert utils.is_metadata(episode.key) @@ -815,7 +909,9 @@ def test_video_Episode_attrs(episode): assert utils.is_int(episode.parentRatingKey) if episode.parentThumb: assert utils.is_thumb(episode.parentThumb) - assert episode.rating >= 7.7 + assert episode.parentTitle == "Season 1" + assert episode.parentYear == 2011 + assert episode.rating is None assert utils.is_int(episode.ratingKey) assert episode._server._baseurl == utils.SERVER_BASEURL assert episode.skipParent is False @@ -827,12 +923,12 @@ def test_video_Episode_attrs(episode): assert not episode.transcodeSessions assert episode.type == "episode" assert utils.is_datetime(episode.updatedAt) + assert episode.userRating is None assert utils.is_int(episode.viewCount, gte=0) assert episode.viewOffset == 0 - assert sorted([i.tag for i in episode.writers]) == sorted( - ["David Benioff", "D. B. Weiss"] - ) - assert episode.year == 2011 + if episode.writers: + assert "D. B. Weiss" in [i.tag for i in episode.writers] + assert episode.year is None assert episode.isWatched in [True, False] assert len(episode.locations) == 1 assert len(episode.locations[0]) >= 10 @@ -900,104 +996,6 @@ def test_video_Episode_mixins_tags(episode): test_mixins.edit_writer(episode) -def test_video_Season(show): - seasons = show.seasons() - assert len(seasons) == 2 - assert ["Season 1", "Season 2"] == [s.title for s in seasons[:2]] - assert show.season("Season 1") == seasons[0] - - -def test_video_Season_history(show): - season = show.season("Season 1") - season.markWatched() - history = season.history() - assert len(history) - season.markUnwatched() - - -def test_video_Season_attrs(show): - season = show.season("Season 1") - assert utils.is_datetime(season.addedAt) - if season.art: - assert utils.is_art(season.art) - assert season.guids == [] # TODO: Change when updating test to the Plex TV agent - assert season.index == 1 - assert utils.is_metadata(season._initpath) - assert utils.is_metadata(season.key) - assert utils.is_datetime(season.lastViewedAt) - assert utils.is_int(season.leafCount, gte=3) - assert season.listType == "video" - assert utils.is_metadata(season.parentKey) - assert utils.is_int(season.parentRatingKey) - if season.parentThumb: - assert utils.is_thumb(season.parentThumb) - assert season.parentTitle == "Game of Thrones" - assert utils.is_int(season.ratingKey) - assert season._server._baseurl == utils.SERVER_BASEURL - assert season.summary == "" - if season.thumb: - assert utils.is_thumb(season.thumb) - assert season.title == "Season 1" - assert season.titleSort == "Season 1" - assert season.type == "season" - assert utils.is_datetime(season.updatedAt) - assert utils.is_int(season.viewCount, gte=0) - assert utils.is_int(season.viewedLeafCount, gte=0) - assert utils.is_int(season.seasonNumber) - - -def test_video_Season_show(show): - season = show.seasons()[0] - season_by_name = show.season("Season 1") - assert show.ratingKey == season.parentRatingKey and season_by_name.parentRatingKey - assert season.ratingKey == season_by_name.ratingKey - - -def test_video_Season_watched(show): - season = show.season("Season 1") - season.markWatched() - assert season.isWatched - - -def test_video_Season_unwatched(show): - season = show.season("Season 1") - season.markUnwatched() - assert not season.isWatched - - -def test_video_Season_get(show): - episode = show.season("Season 1").get("Winter Is Coming") - assert episode.title == "Winter Is Coming" - - -def test_video_Season_episode(show): - episode = show.season("Season 1").get("Winter Is Coming") - assert episode.title == "Winter Is Coming" - - -def test_video_Season_episode_by_index(show): - episode = show.season(season=1).episode(episode=1) - assert episode.index == 1 - - -def test_video_Season_episodes(show): - episodes = show.season("Season 2").episodes() - assert len(episodes) >= 1 - - -def test_video_Season_mixins_images(show): - season = show.season(season=1) - test_mixins.edit_art(season) - test_mixins.edit_poster(season) - test_mixins.attr_artUrl(season) - test_mixins.attr_posterUrl(season) - - -def test_video_Season_mixins_tags(show): - season = show.season(season=1) - test_mixins.edit_collection(season) - - def test_that_reload_return_the_same_object(plex): # we want to check this that all the urls are correct movie_library_search = plex.library.section("Movies").search("Elephants Dream")[0] From aeadd76f9f1180a09bafe7138ef41cbf879a9fe1 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 9 May 2021 22:05:41 -0700 Subject: [PATCH 135/356] Fix tests for Plex TV Series agent --- tests/test_video.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tests/test_video.py b/tests/test_video.py index 66ebee345..78c05a936 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -544,7 +544,7 @@ def test_video_Show_attrs(show): # Check reloading the show loads the full list of genres show.reload() assert utils.is_float(show.audienceRating) - assert show.audienceRatingImage == "thetvdb://image.rating" + assert show.audienceRatingImage == "themoviedb://image.rating" assert show.autoDeletionItemPolicyUnwatchedLibrary == 0 assert show.autoDeletionItemPolicyWatchedLibrary == 0 assert show.episodeSort == -1 @@ -698,7 +698,7 @@ def test_video_Show_mixins_edit_advanced_settings(show): def test_video_Show_mixins_images(show): test_mixins.edit_art(show) - test_mixins.edit_banner(show) + #test_mixins.edit_banner(show) # Uploading show banner is broken in Plex test_mixins.edit_poster(show) test_mixins.attr_artUrl(show) test_mixins.attr_bannerUrl(show) @@ -731,7 +731,7 @@ def test_video_Season_attrs(show): assert utils.is_datetime(season.addedAt) if season.art: assert utils.is_art(season.art) - assert season.guid == "plex://season/602e67e41d3358002c4120eb" + assert season.guid == "plex://season/602e67d31d3358002c411c39" assert "tvdb://364731" in [i.id for i in season.guids] assert season.index == 1 assert utils.is_metadata(season._initpath) @@ -749,7 +749,7 @@ def test_video_Season_attrs(show): assert season.parentTitle == "Game of Thrones" assert utils.is_int(season.ratingKey) assert season._server._baseurl == utils.SERVER_BASEURL - assert season.summary == "" + assert utils.is_string(season.summary, gte=100) if season.thumb: assert utils.is_thumb(season.thumb) assert season.title == "Season 1" @@ -759,7 +759,7 @@ def test_video_Season_attrs(show): assert utils.is_int(season.viewCount, gte=0) assert utils.is_int(season.viewedLeafCount, gte=0) assert utils.is_int(season.seasonNumber) - assert season.year == 2011 + assert season.year is None def test_video_Season_show(show): @@ -884,7 +884,7 @@ def test_video_Episode_attrs(episode): if episode.art: assert utils.is_art(episode.art) assert utils.is_float(episode.audienceRating) - assert episode.audienceRatingImage == "thetvdb://image.rating" + assert episode.audienceRatingImage == "themoviedb://image.rating" assert episode.contentRating in utils.CONTENTRATINGS if episode.directors: assert "Timothy Van Patten" in [i.tag for i in episode.directors] @@ -898,19 +898,21 @@ def test_video_Episode_attrs(episode): if episode.grandparentThumb: assert utils.is_thumb(episode.grandparentThumb) assert episode.grandparentTitle == "Game of Thrones" + assert episode.guid == "plex://episode/5d9c1275e98e47001eb84029" assert "tvdb://3254641" in [i.id for i in episode.guids] assert episode.index == 1 assert utils.is_metadata(episode._initpath) assert utils.is_metadata(episode.key) assert episode.listType == "video" assert utils.is_datetime(episode.originallyAvailableAt) + assert episode.parentGuid == "plex://season/602e67d31d3358002c411c39" assert utils.is_int(episode.parentIndex) assert utils.is_metadata(episode.parentKey) assert utils.is_int(episode.parentRatingKey) if episode.parentThumb: assert utils.is_thumb(episode.parentThumb) assert episode.parentTitle == "Season 1" - assert episode.parentYear == 2011 + assert episode.parentYear is None assert episode.rating is None assert utils.is_int(episode.ratingKey) assert episode._server._baseurl == utils.SERVER_BASEURL From 80bcae95865cb4ab4d1bd66d5766d910fdbc1113 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 May 2021 11:59:32 +0000 Subject: [PATCH 136/356] Bump flake8 from 3.9.1 to 3.9.2 Bumps [flake8](https://gitlab.com/pycqa/flake8) from 3.9.1 to 3.9.2. - [Release notes](https://gitlab.com/pycqa/flake8/tags) - [Commits](https://gitlab.com/pycqa/flake8/compare/3.9.1...3.9.2) Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 0e4272526..df37b4edb 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -3,7 +3,7 @@ # pip install -r requirements_dev.txt #--------------------------------------------------------- coveralls==3.0.1 -flake8==3.9.1 +flake8==3.9.2 pillow==8.1.2 pytest==6.2.3 pytest-cache==1.0 From 1139f5fb36db28ac3204c7217550bf598b1afc88 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 10 May 2021 09:35:47 -0700 Subject: [PATCH 137/356] Add test for retrieving items from a hub search media tag --- tests/test_server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_server.py b/tests/test_server.py index 0b68d0dd3..b72665967 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -135,6 +135,7 @@ def test_server_search(plex, movie): assert hub_tag.tagType == 1 assert hub_tag.tagValue is None assert hub_tag.thumb is None + assert movie in hub_tag.items() # Test director search director = movie.directors[0] assert plex.search(director.tag, mediatype="director") From 975a9eb3a2779683daf6cc93603222905e90164f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 10 May 2021 16:11:16 -0700 Subject: [PATCH 138/356] Limit toDatetime to 32-bit integer --- plexapi/utils.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plexapi/utils.py b/plexapi/utils.py index be07672ee..5fe31caa6 100644 --- a/plexapi/utils.py +++ b/plexapi/utils.py @@ -200,9 +200,8 @@ def toDatetime(value, format=None): else: # https://bugs.python.org/issue30684 # And platform support for before epoch seems to be flaky. - # TODO check for others errors too. - if int(value) <= 0: - value = 86400 + # Also limit to max 32-bit integer + value = min(max(int(value), 86400), 2**31 - 1) value = datetime.fromtimestamp(int(value)) return value From b27e12c5d9d8ce9f05119716b9d227623e459c36 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 10 May 2021 17:56:06 -0700 Subject: [PATCH 139/356] Add episodeNumber property --- plexapi/video.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plexapi/video.py b/plexapi/video.py index 6279334d6..dd4f63fd8 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -644,7 +644,7 @@ def isWatched(self): @property def seasonNumber(self): - """ Returns season number. """ + """ Returns the season number. """ return self.index def episodes(self, **kwargs): @@ -833,17 +833,22 @@ def locations(self): """ return [part.file for part in self.iterParts() if part] + @property + def episodeNumber(self): + """ Returns the episode number. """ + return self.index + @property def seasonNumber(self): - """ Returns the episodes season number. """ + """ Returns the episode's season number. """ if self._seasonNumber is None: self._seasonNumber = self.parentIndex if self.parentIndex else self.season().seasonNumber return utils.cast(int, self._seasonNumber) @property def seasonEpisode(self): - """ Returns the s00e00 string containing the season and episode. """ - return 's%se%s' % (str(self.seasonNumber).zfill(2), str(self.index).zfill(2)) + """ Returns the s00e00 string containing the season and episode numbers. """ + return 's%se%s' % (str(self.seasonNumber).zfill(2), str(self.episodeNumber).zfill(2)) @property def hasIntroMarker(self): From 12701ab997baf3c1714c99a27ac7d37ccda7ca7e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 10 May 2021 17:56:51 -0700 Subject: [PATCH 140/356] Add trackNumber propery --- plexapi/audio.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plexapi/audio.py b/plexapi/audio.py index 0799dcf39..89e711680 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -408,6 +408,11 @@ def locations(self): """ return [part.file for part in self.iterParts() if part] + @property + def trackNumber(self): + """ Returns the track number. """ + return self.index + def _defaultSyncTitle(self): """ Returns str, default title for a new syncItem. """ return '%s - %s - %s' % (self.grandparentTitle, self.parentTitle, self.title) From 5e7a5e572c3d0d91a5187e94aa0272117a10f80a Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 10 May 2021 18:06:50 -0700 Subject: [PATCH 141/356] Add hasPreviewThumbnails properties --- plexapi/media.py | 7 ++++++- plexapi/video.py | 10 ++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/plexapi/media.py b/plexapi/media.py index 735bbe1bf..a897439ad 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -112,7 +112,7 @@ class MediaPart(PlexObject): has64bitOffsets (bool): True if the file has 64 bit offsets. hasThumbnail (bool): True if the file (track) has an embedded thumbnail. id (int): The unique ID for this media part on the server. - indexes (str, None): sd if the file has generated BIF thumbnails. + indexes (str, None): sd if the file has generated preview (BIF) thumbnails. key (str): API URL (ex: /library/parts/46618/1389985872/file.mkv). optimizedForStreaming (bool): True if the file is optimized for streaming. packetLength (int): The packet length of the file. @@ -157,6 +157,11 @@ def _buildStreams(self, data): streams.extend(items) return streams + @property + def hasPreviewThumbnails(self): + """ Returns True if the media part has generated preview (BIF) thumbnails. """ + return self.indexes == 'sd' + def videoStreams(self): """ Returns a list of :class:`~plexapi.media.VideoStream` objects in this MediaPart. """ return [stream for stream in self.streams if isinstance(stream, VideoStream)] diff --git a/plexapi/video.py b/plexapi/video.py index dd4f63fd8..bb0942fb6 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -340,6 +340,11 @@ def locations(self): """ return [part.file for part in self.iterParts() if part] + @property + def hasPreviewThumbnails(self): + """ Returns True if any of the media parts has generated preview (BIF) thumbnails. """ + return any(part.hasPreviewThumbnails for media in self.media for part in media.parts) + def _prettyfilename(self): # This is just for compat. return self.title @@ -857,6 +862,11 @@ def hasIntroMarker(self): self.reload() return any(marker.type == 'intro' for marker in self.markers) + @property + def hasPreviewThumbnails(self): + """ Returns True if any of the media parts has generated preview (BIF) thumbnails. """ + return any(part.hasPreviewThumbnails for media in self.media for part in media.parts) + def season(self): """" Return the episode's :class:`~plexapi.video.Season`. """ return self.fetchItem(self.parentKey) From ac7becd27f941f0952d43876fda91be51e17faf3 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 10 May 2021 18:13:31 -0700 Subject: [PATCH 142/356] Add tests for episodeNumber and trackNumber properties --- tests/test_audio.py | 3 ++- tests/test_video.py | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/test_audio.py b/tests/test_audio.py index fcd131409..7dd90a2e5 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -180,7 +180,8 @@ def test_audio_Track_attrs(album): assert utils.is_thumb(track.grandparentThumb) assert track.grandparentTitle == "Broke For Free" assert track.guid.startswith("mbid://") or track.guid.startswith("plex://track/") - assert int(track.index) == 1 + assert track.index == 1 + assert track.trackNumber == track.index assert utils.is_metadata(track._initpath) assert utils.is_metadata(track.key) assert utils.is_datetime(track.lastViewedAt) diff --git a/tests/test_video.py b/tests/test_video.py index d52577c3e..f03c9b138 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -806,11 +806,13 @@ def test_video_Episode_attrs(episode): assert episode.grandparentTitle == "Game of Thrones" assert episode.guids == [] # TODO: Change when updating test to the Plex TV agent assert episode.index == 1 + assert episode.episodeNumber == episode.index assert utils.is_metadata(episode._initpath) assert utils.is_metadata(episode.key) assert episode.listType == "video" assert utils.is_datetime(episode.originallyAvailableAt) - assert utils.is_int(episode.parentIndex) + assert episode.parentIndex == 1 + assert episode.seasonNumber == episode.parentIndex assert utils.is_metadata(episode.parentKey) assert utils.is_int(episode.parentRatingKey) if episode.parentThumb: @@ -836,6 +838,7 @@ def test_video_Episode_attrs(episode): assert episode.isWatched in [True, False] assert len(episode.locations) == 1 assert len(episode.locations[0]) >= 10 + assert episode.seasonEpisode == "s01e01" # Media media = episode.media[0] assert media.aspectRatio == 1.78 From fe42061ce117f96126b34f57225af005ad596e6d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 10 May 2021 18:13:47 -0700 Subject: [PATCH 143/356] Add tests for hasPreviewThumbnails properties --- tests/test_video.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_video.py b/tests/test_video.py index f03c9b138..8feeb723c 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -187,6 +187,7 @@ def test_video_Movie_attrs(movies): assert "Animation" in [i.tag for i in movie.genres] assert "imdb://tt1172203" in [i.id for i in movie.guids] assert movie.guid == "plex://movie/5d776846880197001ec967c6" + assert movie.hasPreviewThumbnails is False assert utils.is_metadata(movie._initpath) assert utils.is_metadata(movie.key) assert movie.languageOverride is None @@ -337,6 +338,7 @@ def test_video_Movie_attrs(movies): assert part.exists assert len(part.file) >= 10 assert part.has64bitOffsets is False + assert part.hasPreviewThumbnails is False assert part.hasThumbnail is None assert utils.is_int(part.id) assert part.indexes is None @@ -805,6 +807,7 @@ def test_video_Episode_attrs(episode): assert utils.is_thumb(episode.grandparentThumb) assert episode.grandparentTitle == "Game of Thrones" assert episode.guids == [] # TODO: Change when updating test to the Plex TV agent + assert episode.hasPreviewThumbnails is False assert episode.index == 1 assert episode.episodeNumber == episode.index assert utils.is_metadata(episode._initpath) @@ -862,6 +865,7 @@ def test_video_Episode_attrs(episode): assert part.container in utils.CONTAINERS assert utils.is_int(part.duration, gte=150000) assert len(part.file) >= 10 + assert part.hasPreviewThumbnails is False assert utils.is_int(part.id) assert utils.is_metadata(part._initpath) assert len(part.key) >= 10 From 0f861391b66ad10122bdfe8d303bbe97ee19d385 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Tue, 11 May 2021 15:44:36 -0700 Subject: [PATCH 144/356] Remove banners from tests * Banners are not supported anymore. https://forums.plex.tv/t/bug-cannot-upload-background-artwork-for-episodes/692999/8 --- tests/test_video.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/test_video.py b/tests/test_video.py index 78c05a936..f64639ae2 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -536,8 +536,6 @@ def test_video_Show_attrs(show): assert utils.is_datetime(show.addedAt) if show.art: assert utils.is_art(show.art) - if show.banner: - assert utils.is_banner(show.banner) assert utils.is_int(show.childCount) assert show.contentRating in utils.CONTENTRATINGS assert utils.is_int(show.duration, gte=1600000) @@ -698,10 +696,8 @@ def test_video_Show_mixins_edit_advanced_settings(show): def test_video_Show_mixins_images(show): test_mixins.edit_art(show) - #test_mixins.edit_banner(show) # Uploading show banner is broken in Plex test_mixins.edit_poster(show) test_mixins.attr_artUrl(show) - test_mixins.attr_bannerUrl(show) test_mixins.attr_posterUrl(show) From a40063630dd2524d04f5af1cc2b1988898cd7a4f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Tue, 11 May 2021 16:38:50 -0700 Subject: [PATCH 145/356] Add method to switch users for a PlexServer --- plexapi/myplex.py | 1 + plexapi/server.py | 27 +++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 5e320e147..ffce9a1fb 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -470,6 +470,7 @@ def user(self, username): Parameters: username (str): Username, email or id of the user to return. """ + username = str(username) for user in self.users(): # Home users don't have email, username etc. if username.lower() == user.title.lower(): diff --git a/plexapi/server.py b/plexapi/server.py index 4b9c7e886..900620eda 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -105,12 +105,13 @@ def __init__(self, baseurl=None, token=None, session=None, timeout=None): self._token = logfilter.add_secret(token or CONFIG.get('auth.server_token')) self._showSecrets = CONFIG.get('log.show_secrets', '').lower() == 'true' self._session = session or requests.Session() + self._timeout = timeout self._library = None # cached library self._settings = None # cached settings self._myPlexAccount = None # cached myPlexAccount self._systemAccounts = None # cached list of SystemAccount self._systemDevices = None # cached list of SystemDevice - data = self.query(self.key, timeout=timeout) + data = self.query(self.key, timeout=self._timeout) super(PlexServer, self).__init__(self, data, self.key) def _loadData(self, data): @@ -209,13 +210,35 @@ def agents(self, mediaType=None): return self.fetchItems(key) def createToken(self, type='delegation', scope='all'): - """Create a temp access token for the server.""" + """ Create a temp access token for the server. """ if not self._token: # Handle unclaimed servers return None q = self.query('/security/token?type=%s&scope=%s' % (type, scope)) return q.attrib.get('token') + def switchUser(self, username): + """ Returns a new :class:`~plexapi.server.PlexServer` object logged in as the given username. + Note: Only the admin account can switch to other users. + + Parameters: + username (str): Username, email or user id of the user to log in to the server. + + Example: + + .. code-block:: python + + from plexapi.server import PlexServer + # Login to the Plex server using the admin token + plex = PlexServer('http://plexserver:32400', token='2ffLuB84dqLswk9skLos') + # Login to the same Plex server using a different account + userPlex = plex.switchUser("Username") + + """ + user = self.myPlexAccount().user(username) + userToken = user.get_token(self.machineIdentifier) + return PlexServer(self._baseurl, userToken, self._timeout) + def systemAccounts(self): """ Returns a list of :class:`~plexapi.server.SystemAccount` objects this server contains. """ if self._systemAccounts is None: From b0a9fb7ebe5971b05e2a06493767de965ca9bc83 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Tue, 11 May 2021 16:50:30 -0700 Subject: [PATCH 146/356] Fix switchUser keyword arguments --- plexapi/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/server.py b/plexapi/server.py index 900620eda..5b4e3bda8 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -237,7 +237,7 @@ def switchUser(self, username): """ user = self.myPlexAccount().user(username) userToken = user.get_token(self.machineIdentifier) - return PlexServer(self._baseurl, userToken, self._timeout) + return PlexServer(self._baseurl, token=userToken, timeout=self._timeout) def systemAccounts(self): """ Returns a list of :class:`~plexapi.server.SystemAccount` objects this server contains. """ From 35729a3a0a77800fc26d26fd2fbac482ca78da9f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Tue, 11 May 2021 17:03:16 -0700 Subject: [PATCH 147/356] Add optional session and timeout to switchUser --- plexapi/server.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/plexapi/server.py b/plexapi/server.py index 5b4e3bda8..c89277aa3 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -38,8 +38,9 @@ class PlexServer(PlexObject): baseurl (str): Base url for to access the Plex Media Server (default: 'http://localhost:32400'). token (str): Required Plex authentication token to access the server. session (requests.Session, optional): Use your own session object if you want to - cache the http responses from PMS - timeout (int): timeout in seconds on initial connect to server (default config.TIMEOUT). + cache the http responses from the server. + timeout (int, optional): Timeout in seconds on initial connection to the server + (default config.TIMEOUT). Attributes: allowCameraUpload (bool): True if server allows camera upload. @@ -217,12 +218,18 @@ def createToken(self, type='delegation', scope='all'): q = self.query('/security/token?type=%s&scope=%s' % (type, scope)) return q.attrib.get('token') - def switchUser(self, username): + def switchUser(self, username, session=None, timeout=None): """ Returns a new :class:`~plexapi.server.PlexServer` object logged in as the given username. Note: Only the admin account can switch to other users. Parameters: username (str): Username, email or user id of the user to log in to the server. + session (requests.Session, optional): Use your own session object if you want to + cache the http responses from the server. This will default to the same + session as the admin account if no new session is provided. + timeout (int, optional): Timeout in seconds on initial connection to the server. + This will default to the same timeout as the admin account if no new timeout + is provided. Example: @@ -237,7 +244,11 @@ def switchUser(self, username): """ user = self.myPlexAccount().user(username) userToken = user.get_token(self.machineIdentifier) - return PlexServer(self._baseurl, token=userToken, timeout=self._timeout) + if session is None: + session = self._session + if timeout is None: + timeout = self._timeout + return PlexServer(self._baseurl, token=userToken, session=session, timeout=timeout) def systemAccounts(self): """ Returns a list of :class:`~plexapi.server.SystemAccount` objects this server contains. """ From 1fcd7aa31a71003f61f1f9af9a843bff265661cd Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Tue, 11 May 2021 17:10:39 -0700 Subject: [PATCH 148/356] Update Playlist.copyToUser with switchUser --- plexapi/playlist.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 531de39cf..7e6f10b1f 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -253,15 +253,13 @@ def _createSmart(cls, server, title, section, limit=None, **kwargs): return cls(server, data, initpath=key) def copyToUser(self, user): - """ Copy playlist to another user account. """ - from plexapi.server import PlexServer - myplex = self._server.myPlexAccount() - user = myplex.user(user) - # Get the token for your machine. - token = user.get_token(self._server.machineIdentifier) - # Login to your server using your friends credentials. - user_server = PlexServer(self._server._baseurl, token) - return self.create(user_server, self.title, self.items()) + """ Copy playlist to another user account. + + Parameters: + user (str): Username, email or user id of the user to copy the playlist to. + """ + userServer = self._server.switchUser(user) + return self.create(userServer, self.title, self.items()) def sync(self, videoQuality=None, photoResolution=None, audioBitrate=None, client=None, clientId=None, limit=None, unwatched=False, title=None): From 43822fd42c6fddbdc5ea2267c59d5a0be093e766 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 14 May 2021 16:28:59 -0700 Subject: [PATCH 149/356] Deprecate PlexServer.optimizedItem --- plexapi/server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plexapi/server.py b/plexapi/server.py index a0089775d..9da06447c 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -489,6 +489,7 @@ def optimizedItems(self, removeAll=None): backgroundProcessing = self.fetchItem('/playlists?type=42') return self.fetchItems('%s/items' % backgroundProcessing.key, cls=Optimized) + @deprecated('use "plexapi.media.Optimized.items()" instead') def optimizedItem(self, optimizedID): """ Returns single queued optimized item :class:`~plexapi.media.Video` object. Allows for using optimized item ID to connect back to source item. From 3af971d1ae4dcd4377f372a8e0ecf6ac0694b401 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 14 May 2021 16:29:12 -0700 Subject: [PATCH 150/356] Add Optimized.items() method --- plexapi/media.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plexapi/media.py b/plexapi/media.py index 735bbe1bf..c9c005d3f 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -558,6 +558,13 @@ def _loadData(self, data): self.target = data.attrib.get('target') self.targetTagID = data.attrib.get('targetTagID') + def items(self): + """ Returns a list of all :class:`~plexapi.media.Video` objects + in this optimized item. + """ + key = '%s/%s/items' % (self._initpath, self.id) + return self.fetchItems(key) + def remove(self): """ Remove an Optimized item""" key = '%s/%s' % (self._initpath, self.id) From a8e8679fb529bc94905b967d7797dd7ded7d1c33 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 14 May 2021 16:29:44 -0700 Subject: [PATCH 151/356] Update tests for optimized items --- tests/test_video.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_video.py b/tests/test_video.py index eeb60030a..71831d9c5 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -1102,7 +1102,7 @@ def test_video_optimize(movie, plex): assert len(plex.conversions()) == 0 assert len(plex.optimizedItems()) == 1 optimized = plex.optimizedItems()[0] - video = plex.optimizedItem(optimizedID=optimized.id) - assert movie.key == video.key + videos = optimized.items() + assert movie in videos plex.optimizedItems(removeAll=True) assert len(plex.optimizedItems()) == 0 From 17daa1be724720d54cf7604155d86a9ca54c90ce Mon Sep 17 00:00:00 2001 From: Alindil <30829631+Alindil@users.noreply.github.com> Date: Thu, 6 May 2021 15:28:05 +0200 Subject: [PATCH 152/356] Revert "Update server.py" This reverts commit 73deabd97fb011d8aec827fe2dd790985a88a4cd. --- plexapi/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/server.py b/plexapi/server.py index 9da06447c..b2aa8d1d9 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -496,7 +496,7 @@ def optimizedItem(self, optimizedID): """ backgroundProcessing = self.fetchItem('/playlists?type=42') - return self.fetchItems('%s/items/%s/items' % (backgroundProcessing.key, optimizedID)) + return self.fetchItem('%s/items/%s/items' % (backgroundProcessing.key, optimizedID)) def conversions(self, pause=None): """ Returns list of all :class:`~plexapi.media.Conversion` objects connected to server. """ From 15968d5e8958001b4374ac7c3cad3860b7f8d11f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 May 2021 23:41:48 +0000 Subject: [PATCH 153/356] Bump pytest from 6.2.3 to 6.2.4 Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.2.3 to 6.2.4. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/6.2.3...6.2.4) Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 0e4272526..92fdec3f3 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -5,7 +5,7 @@ coveralls==3.0.1 flake8==3.9.1 pillow==8.1.2 -pytest==6.2.3 +pytest==6.2.4 pytest-cache==1.0 pytest-cov==2.11.1 pytest-mock<3.6.1 From 2af4f6d3ebe6151f5de7721f5fe57a513be4be36 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 11:09:32 -0700 Subject: [PATCH 154/356] Allow for multi-sort in library search --- plexapi/library.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 89cca0974..686687ee7 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -595,7 +595,8 @@ def _loadFilters(self): """ Retrieves and caches the list of :class:`~plexapi.library.FilteringType` and list of :class:`~plexapi.library.FilteringFieldType` for this library section. """ - key = '/library/sections/%s/all?includeMeta=1&X-Plex-Container-Start=0&X-Plex-Container-Size=0' % self.key + key = ('/library/sections/%s/all?includeMeta=1&includeAdvanced=1' + '&X-Plex-Container-Start=0&X-Plex-Container-Size=0') % self.key data = self._server.query(key) meta = data.find('Meta') if meta: @@ -879,6 +880,19 @@ def _validateFieldValueDate(self, value): else: return int(utils.toDatetime(value, '%Y-%m-%d').timestamp()) + def _validateSortFields(self, sort, libtype=None): + """ Validates a list of filter sort fields is available for the library. + Returns the validated comma separated sort fields string. + """ + if isinstance(sort, str): + sort = sort.split(',') + + validatedSorts = [] + for _sort in sort: + validatedSorts.append(self._validateSortField(_sort.strip(), libtype)) + + return ','.join(validatedSorts) + def _validateSortField(self, sort, libtype=None): """ Validates a filter sort field is available for the library. Returns the validated sort field string. @@ -924,7 +938,8 @@ def search(self, title=None, sort=None, maxresults=None, Parameters: title (str, optional): General string query to search for. Partial string matches are allowed. - sort (str, optional): The sort field in the format ``column:dir``. + sort (str or list, optional): A string of comma separated sort fields or a list of sort fields + in the format ``column:dir``. See :func:`~plexapi.library.LibrarySection.listSorts` to get a list of available sort fields. maxresults (int, optional): Only return the specified number of results. libtype (str, optional): Return results of a specific type (movie, show, season, episode, @@ -1132,7 +1147,7 @@ def search(self, title=None, sort=None, maxresults=None, else: args['title'] = title if sort is not None: - args['sort'] = self._validateSortField(sort, libtype) + args['sort'] = self._validateSortFields(sort, libtype) if libtype is not None: args['type'] = utils.searchType(libtype) @@ -1243,7 +1258,7 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so for field, values in kwargs.items(): filter_args.append(self._validateFilterField(field, values, libtype)) if sort is not None: - args['sort'] = self._validateSortField(sort, libtype) + args['sort'] = self._validateSortFields(sort, libtype) if libtype is not None: args['type'] = utils.searchType(libtype) From 6d4e7bed95f6ce8d0eb2eeaee8541fde6307e9b1 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 11:25:26 -0700 Subject: [PATCH 155/356] Add random sorting option --- plexapi/base.py | 14 ++++++++++++++ plexapi/library.py | 11 +++++++++++ 2 files changed, 25 insertions(+) diff --git a/plexapi/base.py b/plexapi/base.py index c917cf28d..060c7d906 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -2,6 +2,7 @@ import re import weakref from urllib.parse import quote_plus, urlencode +from xml.etree import ElementTree from plexapi import log, utils from plexapi.exceptions import BadRequest, NotFound, UnknownType, Unsupported @@ -130,6 +131,19 @@ def _isChildOf(self, **kwargs): return True return False + def _manuallyLoadXML(self, xml, cls=None): + """ Manually load an XML string as a :class:`~plexapi.base.PlexObject`. + + Parameters: + xml (str): The XML string to load. + 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 + with the best guess PlexObjects based on tag and type attrs. + """ + elem = ElementTree.fromstring(xml) + return self._buildItemOrNone(elem, cls) + def fetchItem(self, ekey, cls=None, **kwargs): """ Load the specified key to find and build the first item with the specified tag and attrs. If no tag or attrs are specified then diff --git a/plexapi/library.py b/plexapi/library.py index 686687ee7..e166f38e9 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1836,6 +1836,11 @@ def _loadData(self, data): self.title = data.attrib.get('title') self.type = data.attrib.get('type') + # Random is a valid sorting that is not exposed on the Plex server. + # Manually add the random sort XML. + _randomSortXML = '' + self.sorts.append(self._manuallyLoadXML(_randomSortXML, FilteringSort)) + class FilteringFilter(PlexObject): """ Represents a single Filter object for a :class:`~plexapi.library.FilteringType`. @@ -1864,6 +1869,9 @@ class FilteringSort(PlexObject): Attributes: TAG (str): 'Sort' + active (bool): True if the sort is currently active. + activeDirection (str): The currently active sorting direction. + default (str): The currently active default sorting direction. defaultDirection (str): The default sorting direction. descKey (str): The URL key for sorting with desc. firstCharacterKey (str): API URL path for first character endpoint. @@ -1875,6 +1883,9 @@ class FilteringSort(PlexObject): def _loadData(self, data): """ Load attribute values from Plex XML response. """ self._data = data + self.active = utils.cast(bool, data.attrib.get('active', '0')) + self.activeDirection = data.attrib.get('activeDirection') + self.default = data.attrib.get('default') self.defaultDirection = data.attrib.get('defaultDirection') self.descKey = data.attrib.get('descKey') self.firstCharacterKey = data.attrib.get('firstCharacterKey') From 5d29504cbf11697f667d8a1dffe1915c67dc7d0a Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 11:20:55 -0700 Subject: [PATCH 156/356] Add library search tests for random and multi-sort --- tests/test_library.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/test_library.py b/tests/test_library.py index 0b44c1a9e..32fec7c79 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -401,6 +401,14 @@ def test_library_MovieSection_search_sort(movies): results_desc = movies.search(sort="titleSort:desc") titleSort_desc = [r.titleSort for r in results_desc] assert titleSort_desc == sorted(titleSort_desc, reverse=True) + results_random = movies.search(sort="random") + assert len(results_random) == len(results) + results_multi_str = movies.search(sort="year:asc,titleSort:asc") + titleSort_multi_str = [(r.year, r.titleSort) for r in results_multi_str] + assert titleSort_multi_str == sorted(titleSort_multi_str) + results_multi_list = movies.search(sort=["year:desc", "titleSort:desc"]) + titleSort_multi_list = [(r.year, r.titleSort) for r in results_multi_list] + assert titleSort_multi_list == sorted(titleSort_multi_str, reverse=True) def test_library_search_exceptions(movies): From 4f29eca3110a0778433400cc7543cf7b40d971bb Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 11:34:33 -0700 Subject: [PATCH 157/356] Fix default random sort direction --- plexapi/library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index e166f38e9..19d2257cf 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1838,7 +1838,7 @@ def _loadData(self, data): # Random is a valid sorting that is not exposed on the Plex server. # Manually add the random sort XML. - _randomSortXML = '' + _randomSortXML = '' self.sorts.append(self._manuallyLoadXML(_randomSortXML, FilteringSort)) From 0b45e88d41c04b625ef2cb4259e9c98fcc8742f4 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 16:04:05 -0700 Subject: [PATCH 158/356] Allow predefined Plex multi-sorts --- plexapi/library.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 19d2257cf..1af8a5d58 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -885,6 +885,10 @@ def _validateSortFields(self, sort, libtype=None): Returns the validated comma separated sort fields string. """ if isinstance(sort, str): + # Plex has some predefined multi-sorts. Allow these if it is an exact match. + availableMultisorts = [x for f in self.listSorts(libtype) for x in (f.key, f.descKey) if ',' in x] + if sort in availableMultisorts: + return sort sort = sort.split(',') validatedSorts = [] @@ -916,7 +920,7 @@ def _validateSortField(self, sort, libtype=None): if not sortDir: sortDir = filterSort.defaultDirection - availableDirections = ['asc', 'desc'] + availableDirections = ['asc', 'desc', 'nullsLast'] if sortDir not in availableDirections: raise NotFound('Unknown sort direction "%s". ' 'Available sort directions: %s' From ce0e6f9a955e4ff816c6ac4fb23f36d4126a2f2f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 16:04:35 -0700 Subject: [PATCH 159/356] Add test for predefined Plex episode multi-sort --- tests/test_library.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/test_library.py b/tests/test_library.py index 32fec7c79..18452d9b3 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -411,6 +411,31 @@ def test_library_MovieSection_search_sort(movies): assert titleSort_multi_list == sorted(titleSort_multi_str, reverse=True) +def test_library_ShowSection_search_sort(tvshows): + sortAsc = ('show.titleSort,season.index:nullsLast,episode.index:nullsLast,' + 'episode.originallyAvailableAt:nullsLast,episode.titleSort,episode.id') + results = tvshows.search(sort=sortAsc, libtype='episode') + sortedResults = sorted( + results, + key=lambda e: ( + e.show().titleSort, e.season().index, e.index, e.originallyAvailableAt, e.titleSort) + ) + assert results == sortedResults + sortDesc = ('show.titleSort:desc,season.index:nullsLast,episode.index:nullsLast,' + 'episode.originallyAvailableAt:nullsLast,episode.titleSort,episode.id') + results = tvshows.search(sort=sortDesc, libtype='episode') + sortedResults = sorted( + sorted( + results, + key=lambda e: ( + e.season().index, e.index, e.originallyAvailableAt, e.titleSort) + ), + key=lambda e: e.show().titleSort, + reverse=True + ) + assert results == sortedResults + + def test_library_search_exceptions(movies): with pytest.raises(BadRequest): movies.listFilterChoices(field="123abc.title") From 3d20f307f43ded36632bae3f3aaca2d167b532ed Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 18:09:52 -0700 Subject: [PATCH 160/356] Add additional manual sorts and fields --- plexapi/library.py | 69 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 10 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 1af8a5d58..2d993d5ef 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -885,10 +885,6 @@ def _validateSortFields(self, sort, libtype=None): Returns the validated comma separated sort fields string. """ if isinstance(sort, str): - # Plex has some predefined multi-sorts. Allow these if it is an exact match. - availableMultisorts = [x for f in self.listSorts(libtype) for x in (f.key, f.descKey) if ',' in x] - if sort in availableMultisorts: - return sort sort = sort.split(',') validatedSorts = [] @@ -908,14 +904,15 @@ def _validateSortField(self, sort, libtype=None): libtype = _libtype or libtype or self.TYPE try: - filterSort = next(f for f in self.listSorts(libtype) if f.key.endswith(sortField)) + filterSort = next(f for f in self.listSorts(libtype) + if ',' not in f.key and f.key.split('.')[-1] == sortField) except StopIteration: availableSorts = [f.key for f in self.listSorts(libtype)] raise NotFound('Unknown sort field "%s" for libtype "%s". ' 'Available sort fields: %s' % (sortField, libtype, availableSorts)) from None - sortField = filterSort.key + sortField = libtype + '.' + filterSort.key if not sortDir: sortDir = filterSort.defaultDirection @@ -1840,10 +1837,62 @@ def _loadData(self, data): self.title = data.attrib.get('title') self.type = data.attrib.get('type') - # Random is a valid sorting that is not exposed on the Plex server. - # Manually add the random sort XML. - _randomSortXML = '' - self.sorts.append(self._manuallyLoadXML(_randomSortXML, FilteringSort)) + # Add additional manual sorts and fields which are available + # but not exposed on the Plex server + self.sorts += self._manualSorts() + self.fields += self._manualFields() + + def _manualSorts(self): + """ Manually add additional sorts which are available + but not exposed on the Plex server. + """ + # Sorts: key, dir, title + additionalSorts = [ + ('guid', 'asc', 'Guid'), + ('id', 'asc', 'Rating Key'), + ('index', 'asc', '%s Number' % self.type.capitalize()), + ('random', 'asc', 'Random'), + ('summary', 'asc', 'Summary'), + ('tagline', 'asc', 'Tagline'), + ('updatedAt', 'asc', 'Date Updated') + ] + if self.type == 'season': + additionalSorts.append(('titleSort', 'asc', 'Title')) + if self.type == 'track': + # Don't know what this is but it is valid + additionalSorts.append(('absoluteIndex', 'asc', 'Absolute Index')) + + prefix = '' if self.type == 'movie' else self.type + '.' + + manualSorts = [] + for sortField, sortDir, sortTitle in additionalSorts: + sortXML = ('' + % (sortDir, prefix, sortField, sortField, sortTitle)) + manualSorts.append(self._manuallyLoadXML(sortXML, FilteringSort)) + + return manualSorts + + def _manualFields(self): + """ Manually add additional fields which are available + but not exposed on the Plex server. + """ + # Fields: key, type, title + additionalFields = [ + ('guid', 'string', 'Guid'), + ('id', 'integer', 'Rating Key'), + ('index', 'integer', '%s Number' % self.type.capitalize()), + ('updatedAt', 'date', 'Date Updated') + ] + + prefix = '' if self.type == 'movie' else self.type + '.' + + manualFields = [] + for field, fieldType, fieldTitle in additionalFields: + fieldXML = ('' + % (prefix, field, fieldTitle, fieldType)) + manualFields.append(self._manuallyLoadXML(fieldXML, FilteringField)) + + return manualFields class FilteringFilter(PlexObject): From 41997d115278d37667ba60f0673f7af4f9066292 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 18:11:49 -0700 Subject: [PATCH 161/356] Update tests for addition library search sorting --- tests/test_library.py | 93 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 83 insertions(+), 10 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index 18452d9b3..aa35b7b43 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -395,46 +395,119 @@ def test_library_MovieSection_search_sort(movies): results = movies.search(sort="titleSort") titleSort = [r.titleSort for r in results] assert titleSort == sorted(titleSort) + results_asc = movies.search(sort="titleSort:asc") titleSort_asc = [r.titleSort for r in results_asc] assert titleSort == titleSort_asc + results_desc = movies.search(sort="titleSort:desc") titleSort_desc = [r.titleSort for r in results_desc] assert titleSort_desc == sorted(titleSort_desc, reverse=True) + + # Test manually added sorts + results_guid = movies.search(sort="guid") + guid_asc = [r.guid for r in results_guid] + assert guid_asc == sorted(guid_asc) + results_random = movies.search(sort="random") assert len(results_random) == len(results) + + results_summary = movies.search(sort="summary") + summary_asc = [r.summary for r in results_summary] + assert summary_asc == sorted(summary_asc) + + results_tagline = movies.search(sort="tagline") + tagline_asc = [r.tagline for r in results_tagline if r.tagline] + assert tagline_asc == sorted(tagline_asc) + + results_updatedAt = movies.search(sort="updatedAt") + updatedAt_asc = [r.updatedAt for r in results_updatedAt] + assert updatedAt_asc == sorted(updatedAt_asc) + + # Test multi-sort results_multi_str = movies.search(sort="year:asc,titleSort:asc") titleSort_multi_str = [(r.year, r.titleSort) for r in results_multi_str] assert titleSort_multi_str == sorted(titleSort_multi_str) + results_multi_list = movies.search(sort=["year:desc", "titleSort:desc"]) titleSort_multi_list = [(r.year, r.titleSort) for r in results_multi_list] assert titleSort_multi_list == sorted(titleSort_multi_str, reverse=True) def test_library_ShowSection_search_sort(tvshows): - sortAsc = ('show.titleSort,season.index:nullsLast,episode.index:nullsLast,' - 'episode.originallyAvailableAt:nullsLast,episode.titleSort,episode.id') - results = tvshows.search(sort=sortAsc, libtype='episode') + # Test predefined Plex mult-sort + seasonAsc = 'season.index,season.titleSort' + results = tvshows.search(sort=seasonAsc, libtype='season') + sortedResults = sorted(results, key=lambda s: (s.index, s.titleSort)) + assert results == sortedResults + + seasonShowAsc = 'show.titleSort,index' + results = tvshows.search(sort=seasonShowAsc, libtype='season') + sortedResults = sorted(results, key=lambda s: (s.show().titleSort, s.index)) + assert results == sortedResults + + episodeShowAsc = ( + 'show.titleSort,season.index:nullsLast,episode.index:nullsLast,' + 'episode.originallyAvailableAt:nullsLast,episode.titleSort,episode.id' + ) + results = tvshows.search(sort=episodeShowAsc, libtype='episode') sortedResults = sorted( results, key=lambda e: ( - e.show().titleSort, e.season().index, e.index, e.originallyAvailableAt, e.titleSort) + e.show().titleSort, e.season().index, e.index, + e.originallyAvailableAt, e.titleSort, e.ratingKey) ) assert results == sortedResults - sortDesc = ('show.titleSort:desc,season.index:nullsLast,episode.index:nullsLast,' - 'episode.originallyAvailableAt:nullsLast,episode.titleSort,episode.id') - results = tvshows.search(sort=sortDesc, libtype='episode') + + episodeShowDesc = ( + 'show.titleSort:desc,season.index:nullsLast,episode.index:nullsLast,' + 'episode.originallyAvailableAt:nullsLast,episode.titleSort,episode.id' + ) + results = tvshows.search(sort=episodeShowDesc, libtype='episode') sortedResults = sorted( sorted( results, key=lambda e: ( - e.season().index, e.index, e.originallyAvailableAt, e.titleSort) + e.season().index, e.index, + e.originallyAvailableAt, e.titleSort, e.ratingKey) ), key=lambda e: e.show().titleSort, reverse=True ) assert results == sortedResults + # Test manually added sorts + results_index = tvshows.search(sort="show.index,season.index,episode.index", libtype='episode') + index_asc = [(r.show().index, r.season().index, r.index) for r in results_index] + assert index_asc == sorted(index_asc) + + +def test_library_MusicSection_search_sort(music): + # Test predefined Plex mult-sort + albumArtistAsc = 'artist.titleSort,album.titleSort,album.index,album.id,album.originallyAvailableAt' + results = music.search(sort=albumArtistAsc, libtype='album') + sortedResults = sorted( + results, + key=lambda a: ( + a.artist().titleSort, a.titleSort, a.index, a.ratingKey, a.originallyAvailableAt + ) + ) + assert results == sortedResults + + trackAlbumArtistAsc = ( + 'artist.titleSort,album.titleSort,album.year,' + 'track.absoluteIndex,track.index,track.titleSort,track.id' + ) + results = music.search(sort=trackAlbumArtistAsc, libtype='track') + sortedResults = sorted( + results, + key=lambda t: ( + t.artist().titleSort, t.album().titleSort, t.album().year, + t.index, t.titleSort, t.ratingKey # Skip unknown absoluteIndex + ) + ) + assert results == sortedResults + def test_library_search_exceptions(movies): with pytest.raises(BadRequest): @@ -495,7 +568,7 @@ def _test_library_search(library, obj): elif operator.title == "is less than": searchValue = value + 1 elif operator.title == "is greater than": - searchValue = max(value - 1, 0) + searchValue = max(value - 1, 1) elif operator.title == "is before": searchValue = value + timedelta(days=1) elif operator.title == "is after": @@ -523,7 +596,7 @@ def _do_test_library_search(library, obj, field, operator, searchValue): searchFilter = {field.key + operator.key[:-1]: searchValue} results = library.search(libtype=obj.type, **searchFilter) - if operator.key.startswith("!") or operator.key.startswith(">>") and (searchValue == 0 or searchValue == '1s'): + if operator.key.startswith("!") or operator.key.startswith(">>") and (searchValue == 1 or searchValue == '1s'): assert obj not in results else: assert obj in results From d6cd71c971937b3f70de308f29687647cddd8d35 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 22:38:35 -0700 Subject: [PATCH 162/356] Add lastRatedAt to Audio and Video --- plexapi/audio.py | 1 + plexapi/video.py | 1 + 2 files changed, 2 insertions(+) diff --git a/plexapi/audio.py b/plexapi/audio.py index 0799dcf39..93a408eb4 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -51,6 +51,7 @@ def _loadData(self, data): self.guid = data.attrib.get('guid') self.index = utils.cast(int, data.attrib.get('index')) self.key = data.attrib.get('key', '') + self.lastRatedAt = utils.toDatetime(data.attrib.get('lastRatedAt')) self.lastViewedAt = utils.toDatetime(data.attrib.get('lastViewedAt')) self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) self.librarySectionKey = data.attrib.get('librarySectionKey') diff --git a/plexapi/video.py b/plexapi/video.py index 6279334d6..b29254e41 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -47,6 +47,7 @@ def _loadData(self, data): self.fields = self.findItems(data, media.Field) self.guid = data.attrib.get('guid') self.key = data.attrib.get('key', '') + self.lastRatedAt = utils.toDatetime(data.attrib.get('lastRatedAt')) self.lastViewedAt = utils.toDatetime(data.attrib.get('lastViewedAt')) self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) self.librarySectionKey = data.attrib.get('librarySectionKey') From 85e58feb33ab604db9a7285201378a7fede755ae Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 22:38:54 -0700 Subject: [PATCH 163/356] Update tests for lastRatedAt --- tests/test_audio.py | 5 +++++ tests/test_video.py | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/tests/test_audio.py b/tests/test_audio.py index fcd131409..32c95b04a 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -18,6 +18,8 @@ def test_audio_Artist_attr(artist): assert utils.is_metadata(artist.key) assert utils.is_int(artist.librarySectionID) assert artist.listType == "audio" + assert utils.is_datetime(artist.lastRatedAt) + assert utils.is_datetime(artist.lastViewedAt) assert len(artist.locations) == 1 assert len(artist.locations[0]) >= 10 assert artist.ratingKey >= 1 @@ -95,6 +97,8 @@ def test_audio_Album_attrs(album): assert album.index == 1 assert utils.is_metadata(album._initpath) assert utils.is_metadata(album.key) + assert utils.is_datetime(album.lastRatedAt) + assert utils.is_datetime(album.lastViewedAt) assert utils.is_int(album.librarySectionID) assert album.listType == "audio" assert utils.is_datetime(album.originallyAvailableAt) @@ -183,6 +187,7 @@ def test_audio_Track_attrs(album): assert int(track.index) == 1 assert utils.is_metadata(track._initpath) assert utils.is_metadata(track.key) + assert utils.is_datetime(track.lastRatedAt) assert utils.is_datetime(track.lastViewedAt) assert utils.is_int(track.librarySectionID) assert track.listType == "audio" diff --git a/tests/test_video.py b/tests/test_video.py index d52577c3e..da6833e56 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -190,6 +190,7 @@ def test_video_Movie_attrs(movies): assert utils.is_metadata(movie._initpath) assert utils.is_metadata(movie.key) assert movie.languageOverride is None + assert utils.is_datetime(movie.lastRatedAt) assert utils.is_datetime(movie.lastViewedAt) assert int(movie.librarySectionID) >= 1 assert movie.listType == "video" @@ -578,6 +579,7 @@ def test_video_Show_attrs(show): assert utils.is_int(show.index) assert utils.is_metadata(show.key) assert show.languageOverride is None + assert utils.is_datetime(show.lastRatedAt) assert utils.is_datetime(show.lastViewedAt) assert utils.is_int(show.leafCount) assert show.listType == "video" @@ -808,6 +810,8 @@ def test_video_Episode_attrs(episode): assert episode.index == 1 assert utils.is_metadata(episode._initpath) assert utils.is_metadata(episode.key) + assert utils.is_datetime(episode.lastRatedAt) + assert utils.is_datetime(episode.lastViewedAt) assert episode.listType == "video" assert utils.is_datetime(episode.originallyAvailableAt) assert utils.is_int(episode.parentIndex) @@ -924,6 +928,7 @@ def test_video_Season_attrs(show): assert season.index == 1 assert utils.is_metadata(season._initpath) assert utils.is_metadata(season.key) + assert utils.is_datetime(season.lastRatedAt) assert utils.is_datetime(season.lastViewedAt) assert utils.is_int(season.leafCount, gte=3) assert season.listType == "video" From 28f0585a971fa9df6aa21460070b3883e3e368c7 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 22:39:26 -0700 Subject: [PATCH 164/356] Update doc string for track originalTitle --- plexapi/audio.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/audio.py b/plexapi/audio.py index 93a408eb4..6df1945bc 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -346,7 +346,7 @@ class Track(Audio, Playable, ArtUrlMixin, PosterUrlMixin, CollectionMixin, MoodM (/library/metadata//thumb/). grandparentTitle (str): Name of the album artist for the track. media (List<:class:`~plexapi.media.Media`>): List of media objects. - originalTitle (str): The original title of the track (eg. a different language). + originalTitle (str): The artist for the track. parentGuid (str): Plex GUID for the album (plex://album/5d07cd8e403c640290f180f9). parentIndex (int): Album index. parentKey (str): API URL of the album (/library/metadata/). From 7146587b0d6b573bad00239e09c7d18626e9a8d6 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 22:40:29 -0700 Subject: [PATCH 165/356] Add additional filter fields per media type --- plexapi/library.py | 56 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 2d993d5ef..e2fdfc4a7 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -854,7 +854,7 @@ def _validateFieldValue(self, filterField, values, libtype=None): elif fieldType.type == 'date': value = self._validateFieldValueDate(value) elif fieldType.type == 'integer': - value = int(value) + value = float(value) if '.' in str(value) else int(value) elif fieldType.type == 'string': value = str(value) elif fieldType.type in choiceTypes: @@ -1856,18 +1856,21 @@ def _manualSorts(self): ('tagline', 'asc', 'Tagline'), ('updatedAt', 'asc', 'Date Updated') ] + if self.type == 'season': - additionalSorts.append(('titleSort', 'asc', 'Title')) - if self.type == 'track': + additionalSorts.extend([ + ('titleSort', 'asc', 'Title') + ]) + elif self.type == 'track': # Don't know what this is but it is valid - additionalSorts.append(('absoluteIndex', 'asc', 'Absolute Index')) - - prefix = '' if self.type == 'movie' else self.type + '.' + additionalSorts.extend([ + ('absoluteIndex', 'asc', 'Absolute Index') + ]) manualSorts = [] for sortField, sortDir, sortTitle in additionalSorts: - sortXML = ('' - % (sortDir, prefix, sortField, sortField, sortTitle)) + sortXML = ('' + % (sortDir, sortField, sortField, sortTitle)) manualSorts.append(self._manuallyLoadXML(sortXML, FilteringSort)) return manualSorts @@ -1881,9 +1884,46 @@ def _manualFields(self): ('guid', 'string', 'Guid'), ('id', 'integer', 'Rating Key'), ('index', 'integer', '%s Number' % self.type.capitalize()), + ('lastRatedAt', 'date', '%s Last Rated' % self.type.capitalize()), ('updatedAt', 'date', 'Date Updated') ] + if self.type == 'movie': + additionalFields.extend([ + ('audienceRating', 'integer', 'Audience Rating'), + ('rating', 'integer', 'Critic Rating'), + ('viewOffset', 'integer', 'View Offset') + ]) + elif self.type == 'show': + additionalFields.extend([ + ('audienceRating', 'integer', 'Audience Rating'), + ('originallyAvailableAt', 'date', 'Show Release Date'), + ('rating', 'integer', 'Critic Rating'), + ('unviewedLeafCount', 'integer', 'Episode Unplayed Count') + ]) + elif self.type == 'season': + additionalFields.extend([ + ('addedAt', 'date', 'Date Season Added'), + ('unviewedLeafCount', 'integer', 'Episode Unplayed Count'), + ('year', 'integer', 'Season Year') + ]) + elif self.type == 'episode': + additionalFields.extend([ + ('audienceRating', 'integer', 'Audience Rating'), + ('duration', 'integer', 'Duration'), + ('rating', 'integer', 'Critic Rating'), + ('viewOffset', 'integer', 'View Offset') + ]) + elif self.type == 'artist': + additionalFields.extend([ + ('lastViewedAt', 'date', 'Artist Last Played') + ]) + elif self.type == 'track': + additionalFields.extend([ + ('duration', 'integer', 'Duration'), + ('viewOffset', 'integer', 'View Offset') + ]) + prefix = '' if self.type == 'movie' else self.type + '.' manualFields = [] From 814efb1defe0f53c367aed000a2f857619414fe9 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 23:12:19 -0700 Subject: [PATCH 166/356] Fix matching field when validating filter field --- plexapi/library.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index e2fdfc4a7..d722abe3e 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -783,11 +783,11 @@ def _validateFilterField(self, field, values, libtype=None): libtype = _libtype or libtype or self.TYPE try: - filterField = next(f for f in self.listFields(libtype) if f.key.endswith(field)) + filterField = next(f for f in self.listFields(libtype) if f.key.split('.')[-1] == field) except StopIteration: for filterType in reversed(self.filterTypes()): if filterType.type != libtype: - filterField = next((f for f in filterType.fields if f.key.endswith(field)), None) + filterField = next((f for f in filterType.fields if f.key.split('.')[-1] == field), None) if filterField: break else: From 1b8e476e96f31ea042de6a5e652ef3c7b646e1d2 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 15 May 2021 23:12:39 -0700 Subject: [PATCH 167/356] Replace single quotes in library tests --- tests/test_library.py | 46 +++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index aa35b7b43..e45ca336d 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -436,21 +436,21 @@ def test_library_MovieSection_search_sort(movies): def test_library_ShowSection_search_sort(tvshows): # Test predefined Plex mult-sort - seasonAsc = 'season.index,season.titleSort' - results = tvshows.search(sort=seasonAsc, libtype='season') + seasonAsc = "season.index,season.titleSort" + results = tvshows.search(sort=seasonAsc, libtype="season") sortedResults = sorted(results, key=lambda s: (s.index, s.titleSort)) assert results == sortedResults - seasonShowAsc = 'show.titleSort,index' - results = tvshows.search(sort=seasonShowAsc, libtype='season') + seasonShowAsc = "show.titleSort,index" + results = tvshows.search(sort=seasonShowAsc, libtype="season") sortedResults = sorted(results, key=lambda s: (s.show().titleSort, s.index)) assert results == sortedResults episodeShowAsc = ( - 'show.titleSort,season.index:nullsLast,episode.index:nullsLast,' - 'episode.originallyAvailableAt:nullsLast,episode.titleSort,episode.id' + "show.titleSort,season.index:nullsLast,episode.index:nullsLast," + "episode.originallyAvailableAt:nullsLast,episode.titleSort,episode.id" ) - results = tvshows.search(sort=episodeShowAsc, libtype='episode') + results = tvshows.search(sort=episodeShowAsc, libtype="episode") sortedResults = sorted( results, key=lambda e: ( @@ -460,10 +460,10 @@ def test_library_ShowSection_search_sort(tvshows): assert results == sortedResults episodeShowDesc = ( - 'show.titleSort:desc,season.index:nullsLast,episode.index:nullsLast,' - 'episode.originallyAvailableAt:nullsLast,episode.titleSort,episode.id' + "show.titleSort:desc,season.index:nullsLast,episode.index:nullsLast," + "episode.originallyAvailableAt:nullsLast,episode.titleSort,episode.id" ) - results = tvshows.search(sort=episodeShowDesc, libtype='episode') + results = tvshows.search(sort=episodeShowDesc, libtype="episode") sortedResults = sorted( sorted( results, @@ -477,15 +477,15 @@ def test_library_ShowSection_search_sort(tvshows): assert results == sortedResults # Test manually added sorts - results_index = tvshows.search(sort="show.index,season.index,episode.index", libtype='episode') + results_index = tvshows.search(sort="show.index,season.index,episode.index", libtype="episode") index_asc = [(r.show().index, r.season().index, r.index) for r in results_index] assert index_asc == sorted(index_asc) def test_library_MusicSection_search_sort(music): # Test predefined Plex mult-sort - albumArtistAsc = 'artist.titleSort,album.titleSort,album.index,album.id,album.originallyAvailableAt' - results = music.search(sort=albumArtistAsc, libtype='album') + albumArtistAsc = "artist.titleSort,album.titleSort,album.index,album.id,album.originallyAvailableAt" + results = music.search(sort=albumArtistAsc, libtype="album") sortedResults = sorted( results, key=lambda a: ( @@ -495,10 +495,10 @@ def test_library_MusicSection_search_sort(music): assert results == sortedResults trackAlbumArtistAsc = ( - 'artist.titleSort,album.titleSort,album.year,' - 'track.absoluteIndex,track.index,track.titleSort,track.id' + "artist.titleSort,album.titleSort,album.year," + "track.absoluteIndex,track.index,track.titleSort,track.id" ) - results = music.search(sort=trackAlbumArtistAsc, libtype='track') + results = music.search(sort=trackAlbumArtistAsc, libtype="track") sortedResults = sorted( results, key=lambda t: ( @@ -519,7 +519,7 @@ def test_library_search_exceptions(movies): with pytest.raises(BadRequest): movies.search(sort="123abc") with pytest.raises(NotFound): - movies.getFilterType(libtype='show') + movies.getFilterType(libtype="show") with pytest.raises(NotFound): movies.getFieldType(fieldType="unknown") with pytest.raises(NotFound): @@ -536,25 +536,25 @@ def test_library_search_exceptions(movies): def _test_library_search(library, obj): # Create & operator - AndOperator = namedtuple('AndOperator', ['key', 'title']) - andOp = AndOperator('&=', 'and') + AndOperator = namedtuple("AndOperator", ["key", "title"]) + andOp = AndOperator("&=", "and") fields = library.listFields(obj.type) for field in fields: fieldAttr = field.key.split(".")[-1] operators = library.listOperators(field.type) - if field.type in {'tag', 'string'}: + if field.type in {"tag", "string"}: operators += [andOp] for operator in operators: - if fieldAttr == "unmatched" and operator.key == "!=" or fieldAttr == 'userRating': + if fieldAttr == "unmatched" and operator.key == "!=" or fieldAttr == "userRating": continue value = getattr(obj, fieldAttr, None) if field.type == "boolean" and value is None: value = fieldAttr.startswith("unwatched") - if field.type == "tag" and isinstance(value, list) and value and operator.title != 'and': + if field.type == "tag" and isinstance(value, list) and value and operator.title != "and": value = value[0] elif value is None: continue @@ -596,7 +596,7 @@ def _do_test_library_search(library, obj, field, operator, searchValue): searchFilter = {field.key + operator.key[:-1]: searchValue} results = library.search(libtype=obj.type, **searchFilter) - if operator.key.startswith("!") or operator.key.startswith(">>") and (searchValue == 1 or searchValue == '1s'): + if operator.key.startswith("!") or operator.key.startswith(">>") and (searchValue == 1 or searchValue == "1s"): assert obj not in results else: assert obj in results From 89e6d2d6f36f80e93324dbcebc6aed442e9fe5d9 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 16 May 2021 11:30:03 -0700 Subject: [PATCH 168/356] Fix matching sort key --- plexapi/library.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index d722abe3e..12767196d 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -904,8 +904,7 @@ def _validateSortField(self, sort, libtype=None): libtype = _libtype or libtype or self.TYPE try: - filterSort = next(f for f in self.listSorts(libtype) - if ',' not in f.key and f.key.split('.')[-1] == sortField) + filterSort = next(f for f in self.listSorts(libtype) if f.key == sortField) except StopIteration: availableSorts = [f.key for f in self.listSorts(libtype)] raise NotFound('Unknown sort field "%s" for libtype "%s". ' From 900dd3e7b91f3b6daccc3f26c6966b23c0a52105 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 16 May 2021 13:26:21 -0700 Subject: [PATCH 169/356] Add support for advanced search filters --- plexapi/library.py | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 12767196d..c341a651f 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -924,14 +924,44 @@ def _validateSortField(self, sort, libtype=None): return '%s:%s' % (sortField, sortDir) + def _validateAdvancedSearch(self, filters, libtype): + """ Validates an advanced search filter dictionary. + Returns the list of validated URL encoded parameter strings for the advanced search. + """ + if not isinstance(filters, dict): + raise BadRequest('Filters must be a dictionary.') + + validatedFilters = [] + + for field, values in filters.items(): + if field.lower() in {'and', 'or'}: + if len(filters.items()) > 1: + raise BadRequest('Multiple keys in the same dictionary with and/or is not allowed.') + if not isinstance(values, list): + raise BadRequest('Value for and/or keys must be a list of dictionaries.') + + validatedFilters.append('push=1') + + for value in values: + validatedFilters.extend(self._validateAdvancedSearch(value, libtype)) + validatedFilters.append('%s=1' % field.lower()) + + del validatedFilters[-1] + validatedFilters.append('pop=1') + + else: + validatedFilters.append(self._validateFilterField(field, values, libtype)) + + return validatedFilters + def hubSearch(self, query, mediatype=None, limit=None): """ Returns the hub search results for this library. See :func:`plexapi.server.PlexServer.search` for details and parameters. """ return self._server.search(query, mediatype, limit, sectionId=self.key) - def search(self, title=None, sort=None, maxresults=None, - libtype=None, container_start=0, container_size=X_PLEX_CONTAINER_SIZE, **kwargs): + def search(self, title=None, sort=None, maxresults=None, libtype=None, + container_start=0, container_size=X_PLEX_CONTAINER_SIZE, filters=None, **kwargs): """ Search the library. The http requests will be batched in container_size. If you are only looking for the first results, it would be wise to set the maxresults option to that amount so the search doesn't iterate over all results on the server. @@ -1146,6 +1176,8 @@ def search(self, title=None, sort=None, maxresults=None, filter_args.append(self._validateFilterField('title', title, libtype)) else: args['title'] = title + if filters is not None: + filter_args.extend(self._validateAdvancedSearch(filters, libtype)) if sort is not None: args['sort'] = self._validateSortFields(sort, libtype) if libtype is not None: From 7b8757419b7be341f176230703578a01718d1286 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 16 May 2021 13:26:41 -0700 Subject: [PATCH 170/356] Update search doc strings fro advanced filters --- .../images/LibrarySection.search_filters.png | Bin 0 -> 683313 bytes plexapi/library.py | 53 ++++++++++++++---- 2 files changed, 41 insertions(+), 12 deletions(-) create mode 100644 docs/_static/images/LibrarySection.search_filters.png diff --git a/docs/_static/images/LibrarySection.search_filters.png b/docs/_static/images/LibrarySection.search_filters.png new file mode 100644 index 0000000000000000000000000000000000000000..4cbb48d824a25a09999d0a9f6b6623a16b0cafdc GIT binary patch literal 683313 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

2B(W{=ew!=Z}CFlE^%_2N;0_FC~ZSA`m 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ÿ+Era=pJn*1pj%e1+bd4oXxp)3Nc|3&ffPJ-gIB;gG(~-Cx#jUxr|R zAf&3{rF4TMpL&YwbC=3GVxD?@e6O-SHm(m?y;Kg4j|$e)k@d};Vdq(SPp^q{NEy4N zcNusDZl~MOX)b8|@QcdCeOejh2BcZmIdp1?#J zoA&I82NBwm>SprS)YpQ20oLOrOSROhzyWUa#LNu-ZVhdT7q_{WGxSCe7CvIUaJ;~n z^MZ1ypTqb7*|iTqgvhsygA}+KTLZptJq7cDl7aVw`AnK-5pjO9tbSzCve|j%)^(Br zykN)wnp-3}$kjbcj$G-m1!W=pMbrIo+u1eo)JLmwc_UHv){N%qFe>I>%c# zc!ZYbf@7SRqQ3%v|M}#BkP1BQZ?h=5IOUsv8Z-6dcI*f5=r}uH&)0RNuB;1ZAttWa#u~@zq7GS#mcMWenQcCRQl>eBi-IXF3 z%_)lcK3PL|Z>UihsKuO(Yv}8*=7CLeA4hHKycu*UZhBSGp&SYou=Yr?o}G@u}ow0y)xz68&3=ijLBl|DC759qU`a=!%E0 zO|!bxSI0`{EOBx|ap+3u$zodW#Bsj&q^` z(zfdFp2p)^wtzfhKPRaOIJwuc{r-13WVox38F$+L-hR*9DR*rz)fypzkRCgZr}pun z8^^7#OvkMKqEBss7p4(D{hQ{ZYCn-gfPF;7%xx$dq!E_~-g-t~(J5;G!4Z1Q)|h;w z)HjhB**S?=d*P6)U$F@T4*3*pCMH|%GWKtKt78foblA6Wis z&;}$U?;{dX#5Uk=BWG6mFXUo!gHw+L5o#M+Rkl1G7d@6Q?}65ata65U#i%27Cf?3n zX0^=h%V8uMp)4oJ9s1A`GFXcbFs5{jnqBrNCO@>5U}n0Dvghn9GF<%TvhkTznuaHD z9a&4PK#~ncw~}4MA1Vw#IK-r5Vw}xYReLPk{r|3!jhChRn97KL;yvq1y|Q~^zuWX; zKlaqHR*m5=f+M5Q=c9EBN9q2Zg$@RJS1`Plr(<*a_KjCGcxHR{?6v7uI3~YgCPc>g z^wx66QvXyNa2zwBTMe|8F@%KOnnx1>Mz-zsp_t+AfIg(~o#!r{-nE31Gb>Y`kk7`~ zB0GQdECz3W(!tw4=iN2UQwZHbHBG$Fw}nmE@LSz9sB4q>&A#1*W|{YC5fp&=9F0*A ziTw;JD%wTU9hb`nkjhG1TgMDwZ`A=7ly!Csx=*VLqOLH>)Ch&bJtJuZHJvQ|59+1P z&qdAyy3=|~@+xG3fLqz;WG<^5jmeWGv_8=L7qf5V@U2;pK#jghkK<3fg)sr7zG`CaW z>U=3d2_va>HfGm;NK*%CYPS;_uU&n1T`j5e6LFIV40{OQCVHP1hfy_39RWP+W?CWP*qCJK zpX}T1o{1-T?(3qLSKYEe69Mf_pGvzEE((SiJ29Wu8p;~&Q6Ui`&+M0UvZSQutKU;M zfKEt1r`mFDP8e!x6Oc$$u;ed-G<9S`;bs0t`S2kXC7Xe@>ddaLVi%9`{*ms=QwGK1 za-lFeNU6)LhV=ITdjY&WTM5&CN9|Ckfzpm6ZU{i#>|7V9=yIQzXLI-A=*Ul183sG3 zm;jkp%RhFNO|a46`kF5N4#8A@_ru4#F^YQu+EjYeyX~nn5rY{y^Qt{mu8;> z(1wGSHx8ENUh4iwc4k2W1t z`JlmVoS@N%(}fE>U-+oOie{!~;P_@`m(%!=}_HDzXA0WEW1%Sxfzo0@xdR$wvH zGv-Iak;XF3r1|IN(-ps4vsm5WHiGBVC?}K{+udNP=Khn{3ExquYJS|sq4O;19!1J5NK1Ywtp*4@`yB&k}u8EPD>ptSbyDa_oUiD z>!kBc*BBzbKl--qa^88@t*a^-!|}C#nDr{d+xiT)?SkcrqQKD9*G?&_>g}rk>rQCY zJ*DH~9A0zy?*8S9-tQYmhhBbm8}b(K9lGW30m!+lAr#ZIgse7x!Ve$bJqK~SPKFZZa?6)0daBQ} zyA?+)*njA-4x~*I8ks=w^R_1)G}<-m?tw{&bM}PP4}+?)POot$a2M@fZqpIAt=HVQ z;)F}UdLTuPB(c>Eq8{Xc_#InW1a01$jP!Ll0hUp=;eU+!{BQ$QYeRc12Q2<%4z`e` z4bBk|I`?wK&y(3G4Th0`b1VC(x?2l{_Oo-g8n9@=o-p||xOky>is}#V?kWZ6X8uRn zkosBYOx5$Byr{Xn7~0;HPreG6>Drx*FFuW{xP&%qo8s5@Z5+sOHTD0hIX25^Ojj$u zjG3sB)6PZPfy@FbkC$P#`;U?&#x|i zuUO>UVi2CgT}(xlIxPBfT_$hJ=D;i?XxQI&C+s#b-XwJ|B!U)ie4$BpQ^{@TQ*Y8& zD@x2gUa|3-SnX^}=gsg9eKlk!M?qrS`}uYhrY0Zz9*?xK6Y-@b>LD7y7unD8s_HZz z@9(Yo(09&fhWYg{8WFk`N=)ho&u<4x7W>n*`VVZx6dwCQMl7C6zs2R(#E~n{>f6 zXf%C(sYG1jO*(gqZl&u+p`13__q|zGOmklGa!atOsa*7VLj>tP&(w{&?DSPno^3u< z+=eA2E7Q=~~9Q+@ONy}&gF z3y;z8Vf;K+Hj^o=@+jyt7JXa)Zel>C_zWiQ7!`-4wZ*R2wfczYh(*J!#bLc&+BXbD zYt|Qx{xavcyms+$l@)BR!`(JLPWqUc%ITow@OM=4<{`2I$Alo=1C4bqZv^D*~ZaTv7X&pYGZ zXo7puU)mt!SlcAeo_1hdn5VrYX6AtGClLqq2x8W<(Nj&^Rceq zqr45DI%T<NIe zyPWE%{saQixO8r#X?vV=%wpE>!t>Y!2ZxU94GQ-olbR3pi##`V#R;CT&b%7x)mp}g z*7pU4h2H0$A}0e>-RR5l8o_jK8f?|~c%u)-vM2yPAO0C_h7$?L`nZWxhfzfDK);t? z;UsFW=0YGxtT5@gpi`)vM5cbU+r!OtKA9)=Huq8usDN}8Ov zESL%IL$|U$k`2m5wdZX_Wh&JD*PmW>gaEG?lU0Ce3lF@bC$mP^j3dlkgVy>_dF;#$ z-zdiZH~h%!sXhBUF6MrtIx>^p^66324sDNK$iIBy4F_w1DCbp^wvO3Vd zq1UvSzmvNAap2<*|8qZCbM|)ZVD}j(%JJVoqS+5?D z+s#fTg-p`>Xs-a8c{>xcs21$CNx>RYhDy%4&h)B%%f4m27U$NcTmG5YtMBiY`9K^a z*ZpNZ(pq{G=^IRR&e3~h+(jC7FYtQXPar?tvWbN6<|`a72ZXVNByyGiExTj3`8h7T zu3m%Od;7C@rTZ*SVHp>w;?d@f3&sQHJHv>6-=U1d85i4>NBsS;Yj!IYlY4vDkE!jP zi+r>6Sg62fs3%D-pyQ=Q2+X?#sB|XP?1&=>dJ%M}H)v~dvvFtD{aU5nLh2#!jok3M ziO{yy+>xh-UO6aPZc+E$NlRA8?U8OaX9eos}*q}=Z^<~b` z_zOl=PdX)<3r-^x=rdD}n)HJ#G*|ak`jDyqp5>wi+29dFoH&6Ri8P+QpO(vRWFuEk zLsYLyhfq8G=p81YXo6H3G1Px4N3bU|O`|M-OKuC4337DZ{oeiZGIWVoB;0cfClYjV zD%-*ic)Ft>*>?3w-O|(0OI(702ee$vyd6W-i6~!023LzqPR(E5LNy@`^>w=x^RQ+K z84CllVNF=$@xxe_=pi`Yuceu+lTnj}Yq!dO5J2jLKc1|IMkDF7KwHhNP;;ehkZ8rq zM`NM1)c;1m#R~9UAU{Nju<^af=b2*$l*0Oapik2~)MG4op|D7)y}8DxD-~z!HYEMx zfpD7(D%BmIsac zr$=@6! zMKy^Rd7UQuA$_L;@kTsVCI55(bbmBrN+O1jM=#>UFTQ@y2P&m0QjL_0I0g#rD|up)PN(u}(mNZ9QhV9e=tV2*Rac0O(dfe%q+5`Xkrr7S==@r46Y3;pyjzcH#w}!T3iLqJ^h_XEnghu`RyS1J!}KJ?BJjm$Z5AW2bRd2W9=^%Qjcj2(I&)MMl^3 zn=@nH+qF&%!c372^L9jNlrmM>eW%wAGR@Y!NCNE_l8;~C%3(4>6^8-Wro zCqAaHb!K7vQQ*Y=TyedbKhOdPZ|wZcX(8(cdG~w%idmL_ildzX&ZDA6*gVbt=bpok zY?48jPsn0|haC8l6K2=Y8rz@I)w(%4M%ZNjY8yu!?ZlI(kgBGvK~ZVV3Gk_k{fdH0 zyDjctK!6_+pn7$BN~X0_xw`q#5PGEKvJsEP%0>VBvXTB_HWEX?W`_wVCh#UEK~^_1iomS5@yN<8L``B}#r)jY zVHf)Doj?26D&}axq~cTLQiYgE-;c-%7Xa?~m^Fk&3*Id0xYn4SU0&0$xsqlH?UyMh z+2l{W8|#})QRLWwc38t9I}IP3*QPkmz+xYJ=S$F-$rwyeBaT=##Yf5d5jpu!T%)G8 ze*YrclU2^g%*GpwKEnletKy!blEqVj?D32JlU@4AgakDhG}m*+&6JfDS6#6vyAMa3 z3Mxy6D{Az##U^xwmmz;a5N&CTfpO;sS5#ufghL6yoavGEEf5cUs@S7B;YOpW zl^cSci(yDh$}rE_BckF_NWv73p8u}jv2JDGrM%TQvW-{R;+?ab4=i2MH+CBl_dHvbz>MzTlGylfl%ph)7gS_TdFHK#>U?hicuBPTG zo-x{7f4a-Env{IFi$LIbYbO9>TfQoVGZ`VB&GJRILa(&oc0i2@jJGb2u#3^BWZt>) zyjkC*`B?|~JJi&G6{@1Zh)8yEBJ4@?6|lA?dUUFPjYnZUPY|3DFQuj-?z{WD(8gckSS++veryV%g*;%}H~Q(ktj zKb#R!r&16YB$2WD+Ky?uNu`x&fwx)anCZcCSQ|Cen_sh5p%O;g&DbH^ctJpQF>kyV zDt`!YTV(dI@B3%e2hOFaD`^$xGSiFa?;ZT+yfbgPLsm1g6LlW3#Qxup)U(vGm{-gy zkDFdD3WgONXaChEhdyvxLiU4J^00SxIW{v4E}akr8zj=eY}^ z1CYmR7F(2E8T#r~p2E(qlKzTeR!*fa&%!r(JBHsIe$0I5><{@{uQSv4(67h6_ej)7 zOPq{V&ob`2|1J4&&Ii!HO~~y6G-la02csDO>fzl5spQ-lQu7y!p1YeIxDimgdgX0JV_%P>lXmn!Nh29VNWhGIGxA zQ(gK_R%%k^YxB@8kR}j*)L}kiqb@2Sx)z0T#-pO!7BIuZI=htsHERr`wEg@Mi-t0P z|1eT0)TOJmF{vo6IY_B^n>D{uPaf4Q}tK+Lfe2~pYj^S2W7Zg;|_7ZhzH2ItKA zQ;|Rlt4>nB;2Zy@v^WjYwn=OzEDeGOUwVaJo7(3VD~Bq&1Mn&-b7Y0E$8Ntxp!yvp zOeUR~7GrS2Mkg*sh2si6H1oC9pzYUhJbT^tI7HebU$IO6)ix$Gz|BH+H6x51EA{fbYIkww zQ23#fV|lttA9k%K4YJn;{r=R$%ra(pGslig^P+s278w-7B)_OhJbG(R`-+_h?(=DZFr^1xIVaqf4a zO&baR6Qk|x8m@Fh^cSZkk3h{%Y7x&jK zYa`HiKijn#TB7(SCH)0hj9~eo(^g~rrda?Zd;gbiq3w^VnwjH9z##8s{Whm<-AreY zrWHnpj+S&hu`%5oD}D9!<^G20_n zA;3$TBb9)v=Le`0$?eX?&Chc$t)^T`Opsps^d;2~flJ$X0RVe}*5=NKylDSLYF&fuL5k$(k+Z{E(r5TZvhDIB8ltE2(4-!pF2B8?4Sf>pORV?@5v@ZNx9sDY>5|GXVKP zkc*SE^7?3G+U2OcXuov9mEOXPz8E9H7c=(A!yyVSk4XN`86(Z!hK`rh)Y=d1p8IG50rGOPvNAXk9Z zL2op%4^fNiX(v4+HAcXgtHlU2wG1QOpd!FVA7N{gBb(*q^jfDucmN=}yarKK2H%l( zx5VS73Hy)miyYCWm}y>-#`|nn+<0Pr7*ZmbC>1AzWsJ^~WnZtd%kd%0-xcxeWpAfa zax?z~+yL0_p*!Cbe!f4i%m|6&(;~OMZ5acqWnAyux?3Z9jVcN8Z?wAF$WaXgf0+7W zL0etXw4>hH#!mXT94@4AZV6_9SHzqRPSEkxnO()awU>d|?Y6A{qO0GhZtJJvRPpwEyLP$1gI!zWcB+{K;tZlL4s&slC#b7d zqvQ>L5Exw!Cqv8(KGqjOxV5V_Pr*Hn(gJ)S-@*gGoGkvXb*d(LZ^-A_pS71NLa3P7 z-kzTfWxC29P%bX@?m@TB+Wlu0`kQNZSjpf*hFa^EX$C#pe|5EHt(!UPyEEW+-EIGJ z`OR5Xn5u8L-5y$v`z(&N-L}!4o=l1sNl))`*dvRHXz|=Rrt0Y_Rqb|Rq+92__Sl+* z6pDT;faE`pOkZ9Kn-i7W3j7SZ!Xtgz-|4HIszw;M2_K=MiIbO;2Oq!khDnFekuv@s z5aP!Ih30DyQ%g=c|J`sd=N;=oazwIZvoB-f`cQHb0FQWj0e3-hz|O_Qm{I(;jIWWk zpVDD{s$>U;2lSF_Nl1G8$h?E9T-s03^hYa*0CR}CV@ zMwSdfWv42>~%fB^V zzOwOWk+$s~ut7|D#PCRP-nH3lxk78h9xWjAHd;L*j3hyayh}dCnNvcf?tlY!P>X>I zqg@p+WuPXuG?~U}7AJ^(mveJXv?I^`v)e#`UG)82EC{g?03oR3J8F=#T}$=x)#dLK ze2~+c`Ej;eATz3|mbwIb5Wp8dXh8McrdDeXo}$Dk8e0rO*J zsXNA^QgVpO=-RITK}W-+Kn~H)i&1Z)T{D8s6YFP85q2k{>SRLA)mOc=-7WmQcYab8 z)M~Y><;>6R6=f1%S4>!Hd={UW6s%4d-gNVZL<$u4@`~6gXVckF_^(L1{-ti z&WY!Uu>8+HerGoXA)L!rwv`68+h@o2lBM$Q8V@3j@F`FCn!l6-c{OGa0dpsI*B*y* zu+z@5RXXmY)s9`I9q9rP$SaQ76s?$@Zs@;+A!np{l!F7*A+(zSfXm0fpDG+}=rq_N zy$1i=u@TY4m|x#L=)_W0$#f4mlIv5uK>P`{7ntRx)hfLAqtkDONni3B@0Cn;1eIrR zeXxwWmW$O-s8wTJQt zN}O3%oEFsU1Ht-Su9r|f3 z|A)Q8nAga6GFH)dZpj_&c7?Ss9_=*oC?e*~hTc88Fdo2jb$>n_1en(bnoS zLL%IR@B!ut8l!VH0jC0TSmR&iIr-OBiy!0K))3FEr5zU2se4HbyL%fBJ7TzuwP&^H zop)anCOT3A`>s%DJ?uWjh3mZz)Z1bzji^P~_hc=cDf5nsW#?N_Xs24a{@6!;w|5&} zrNu)jk*SB`143jIiQfL9Mw{d#uqdwIQd{_)F2N&Z%<5~)Vlld14BtMFk)|D2v(8=T zexavi2GYL9zZuT)TEPe%q4#+nE*DFMM1eKt3e&yi^T&x7qwt+Cv5>A40K{LN?~9o+ z7nve#HN3z`Uhfyv4FD`63l2H0>4|{p>%NqO(~8GxTHDE&oTvvknqg^R(Pxs93EOh{ z*l_798sO-XJ3hHVL7w0E_6c!B-_$L0VjuX#kL$`QybzOGf&WLNXh5$*o*+J|szdlp?%koV zkpJ%msJ399S~ePRgD>Ncg4i9+(p=bwl>G163kl7GBUeL~6K-VMs>;_;rE-AbSPp3{^ zy&MC9t@*7ynzU&*v4ZRcRFj2YIjtP>y^BMsAh%8OqzuRt*Is>F-6HJJ$;&wP2>E5G zbXyxcEprcA*q|-ee~h4k3QJpsXGB=$e5FJ1gj?e2%LMfyJV~I-*s1IT{;q z1(Cb9-eKYzzCi$1Hb)Y%nzklGX##W8>54LS!7@|RnY5TvYn)De{nI?BlDx1tP_kDvYN3F?adYV$R#4WKvao<3g z#*|51GN)Wn$*i1tawj!6NDY+~k(>~6!5tk@SrkDK|NLJ3U-FLYbKh{C*L5D}_izOo zE=<0P#1dZ6KNGtpry&d%^*WV|Rzm^B|2pOjluOKkn=Fr%s@Y=-=I$~UkzXs9lp%tQ8UKrM%^9&et0j7V*4#4u$=>T zvh*=?|IG2tLNmka8;88x+ac-Fti7?Di-apby~d{XV5uDwTO`|EX^Sdi@w53OgI@Ny z!G&bKCA7a-z}1Z~D>TG+rec*?SLaJVS=FNi7WMtT9$2Jj(%v)ir_$M4H(hZBxejlP z92GOiS&>D`&+n_}8E99kPGw081S$$Rcjc1Xv{i_c;|VgP8M7N9aT0UgvJe~^`xW*s z&D}%!PJDJsaIPAHjq2F4ABh__C=>U!4n9O%&+P@3Eq(S#r|)jZQ{yUukXCJfu`>=_era-cruwi5n3jn8P+J|ek!5Vqj= zy4s?kVQ~_ZOzT=Wh4MIQd~VeM;#mCst~+Y=Aq5Q>wHCa1RkHD>bc-YLDZ;jk4?d+p zN7^l~WIhx99P{$hVRiKr@jo8=&g}26fB!DHyp#B*o^)0}y3GHBcEShBZ`SXOtKf3M zA8DhkH&3#g|KP8P&PC*NvJ^?QHb9f1RgcA)=;-VK4fNupV+9v(fu7IHh@GezLQp6{ zdY9mbf+c&EdDPPlFnqS{0i&tzkDuexnJP$}gKY$DS0XK)1~vPLuLkz;h|AgW>1(FD zo8hbx(aPptFROGA>R9r<6~WxDr`OP~!xYimSyiTeTcy{dwvRHEuA*DCze1aMRfi81 zsUmpK^<(7us!16p1F1pM2c`0l1)~8HS8%ZIkz1g+F;l1T#)jg9wc#!kYbDIceKs$> z*IGQi&UtfPQ}|6$7P3n$kHB3pxX_u37-eVD53Af+Y>Pb^OPB1G5z^WIh>bf_;X>0Y z+J>YU(PV6hyMm6`tA`$xnE5Z`6?C+03dkR>>HAn%R#_rfB&SP8@E%<$CcvtMTxN*(IN<`rAFTX$|JR}{^Z$d;B7`|nt6PZJY=vD{zb_)!$k z{P0p0iOXFkxIcv@XZnP;pw#T&@gBoaGU@XHM=+}yl9e-mQXb4XH_J0Jn29vxuns4| zE7*Wzje-*C6<*7H(nm0-BZ9onp1AQo#(jz0)9kkiC8ul^_GB2gP(aXUO+27W3xA&l z0#)xQYO|zWHcy}f&#g>Nt+=A}X6neAM=eA9NQER+E}y#n!|S-DRsSkv3hH{4J{yDv z8mcu~%&Hg?W>zd-TY1c&VBV0PbrV+u2pwh3p!6Ly3y)YypW;1?T@=rkOy{>IjDeK2*w+$X*uHmFg<83x@nokHtH{s~D!57rXj_FYajY@wdc zkW;G4HkPr|E8z=sqM9lP8Rcpd{nwUqidIJPt7^T4~ zC~5t3r^fFKh8&)$l&Mm_T~CZ`{3?&+wfFP^u{E2VBbQtT1(%7@A7f{CBq{@*XMiEt zHc){tsaV9Hy#!y`cR13nO6*BbXA>VpzaFp}xEnE4QJA>q&7CAEwYxY#Rw9|-Jt2*du?&J!Z({fd}|Nwv5)T@gQPtq(3gw~mo-E~y%We1*d7cBq3rvClu9c@-EEoiNu@?5ii? zGia;KRrn__x1;}9_+y#uIG#zzQRD8&i7(R?n=nJ*Ik}pX?OJeM7Ea6j>pb57Eml_l3)+ zeC_m;#B*+Lc3lpkAd6XE6=(1ivrk92d+AdGw0?JU+Tj9geX1Sm(2T?XvrH3Hb8k?OaPxa;EAxt$B*Qm8(v&o^!rs-bkopLk()tG0} zYxQy^rK8}{LFv*qfTYDI_rg>&WchtJE(VG(DdeHIJm?oicOx5RfTI_pn2r^00awU*K z%we@%#HvFkI;;+=%0+G&N#{UURS~$0;zo-!>3JRAS4c5QZS}c;bJhorT7QBGp)VNl<8zQc}@}J^jo(n z;)s{Ty|It`Rdz4Ajj~xb@uUG>8ZS&Dm5ilPgE6p08rjKX^9ZWUVL7_<)7O2R=&`D@ zK23Fn5x!}((-VJS9)MXS%dCYV?h+rLB+J)}vb}gISB5Ks6l}nJD!IO>t@qcmM^DbM zxjdBBxq(5&<1k)JQQS&t3cC8-=G@a`0-~S7-h3BSV6hEv)5Ou__E0C}T5-UTd~e(2 zXqQ#i(KaVtW(;B=9C8sy_8LKz|N634nt1J(A6iTLe2AQ#<=*wDb#CrQ9MO*LVZA*& zpG#TptLoUxmUlA4t+L>FY6TTHPwr>}Q-f;_yU8$6|7C>8<84$ZxS?aXY=sLYSDjH5Y0E*s4r!{}Qg_B7RV^G( zT1Kz7{W4FYWo7DZZFqTF@viK#+x`I$ud zWvuV+S$X<=t&g2kDB3oC9S9!u$u3A9-DdIp`P@2@*ZvHl*aIdbn2*kl!g($MiY4r( z4oT?hc|0v1-3>!3%e^7Ty_Fc0N#OKaJp@HcRj&1I;8u3Z;#oxVBi-4R=vAP)i~gwm zvd%$KZrohClbHIT`;eiIi|lEqqwe~O>&Xm&Ph+*2wVSY^v87}V zGPjtlkve%lHav9p#2e@NLCmD|Us7`<9SR#Th+Z%CSH0$_# z#QD)sch}X#Yt@u0AeAIuJ_OuY8sP5Ot8@0tlSC&I)J`PBK=22SM;k8vV~~|0?gr(U zO`jmpi7&32WJIAsdt&%=Wtc&a;wA=)PVx74ep4`HUscM1~i6okS zjK2oAZ>$eYTG9oEb2}VDCGZb+P9M_Xe(I&9GABe#lq1=b2oO!BIF1$sK0|Gz?vAWp zSe&@3OKT!L!icOh0_BEcgM#=^^9ZP}PWk2)VKd|;l2pE&OizKo!{sf|g9|rA&!G4J zrs7VMie`dEezl)EQv&zkJbmgnGwVZr&bvQvG$o17;)mVled`<) z%;l1-81wLpZu`PC_^TajyDhz28pW3~m$~!LZBFg71Nve&cKfwC%qaUqd5Of8i#B40 zzJm1V-P`TmG+H-cNA?fn@eCe@d`Jxn=y&F05oh zv(RCRaA{@J$tSzlrBlh{`^vsO>5-HyYV?^^M<%83czlqp3EWEFbgo?l1fnHq^0SbG+(!n52PjCTUJJmxx>TBH@dE=T^okLaB zY5^{-zQMnUjW;Ty69*Cg>Kpxo1i@1zEthVZ!oJHupN z?Nf7>ioT8I?1w93t{0M8O4{gvOh!LVQ$KUQd521&{1iFz+{YBMP+m}gSVFt369n|% z>?472Y2r^}A$zY{9=n-mL`7FjZg zFT>EPLOPPxStnY5YI1c5bStxY5q4Ahf$J1FpU3Iir#5WqiVK_Oqp^2#oXAwY#7-N{ z>fF^*JWizVim>EMg*o_5T$`Rr_DwkN6;`oHox3r5tAzTx{Ekb8&3GQ5_w>y@wrTdw z(fQX?>P2H8M|NjNvSr80HaAU8hd6=Qecm5`JM>U`K=7nio2qWFLQ8UGlgO=$6ba~M zX_3Gu!Qst*To3Njs=j!$piebHFaG0^kSNg+2v4{(vosGIJqes0bZ?(nOlp_3XH=K> z%00n0El&?jvDA@Xhm*vMLyGaSlXpk%SOv(WKwn!~bPN;jY)&NpXKTmPXjK|H=GeVG z{z-YXlly9N!X{njUQPHOP<~d`C`?GqfY*?bDA%fvwn{>U|DC^s-MBIz5!=JXjnf7e zde!T*qQh6R@HQgHpC)2{x%vEa^7&bhUq@HB8w_J|3D1?-;BL8U66g2ZMihrxo!UTd zwhiE{dyWSw1<*cg|2!wWSD0Ksbkk;hLht>p@^X)N)IM*B+hVrWuR;}g;tFs3mvcU3 zm#&@*8|C5O>lV51?b(xRcCE3nDy8^v1Hw*bl1-!Ep)Xm0_GmcdE)#C17%sy->e<)H zCB_vIF!Gr9XCf^_yOzC-wI^br)xXCZP^f^S}==1x^`uE~spHrmX#Uz+{o}e-ecwXUr1eUqkWF%d^HX`=zF@ zm;FQnQ75thGMX)u|GK~A24T-F77AV^HCx4z+Pt?$KW+@#J4Yu`Gau%~gl$n)G!HItSd+SA`t_ zsd={e`=QAbBTb4Y^&SL(F-Nq!w4wD-t36Mb#J6Nhg;6JTR?}RycP=UT-V}N4xSyCa7Bss3|gDh{r5Z zB0!$k9Xkyn9m6ErICY{F%r_WX>03}mm4yszH1?*X;wT^jv1kyo*VH6PtG=z>k)^j3 zQcLV?kBcMXjYxus3yRfE_ucma6B=HxfM+W^z7p~D49fYC?ucQPOeFDI;jkX%yR5BY z)|6X1cPC*i3R7m&KCgf;{Hqy^qjVPAAR>85wt8;jB!}I5Q3bK1jTra_G%d;jJV;7N zAm^GY3Np5P=AWHYuS!AJ}oyA2N(b(JmdbE-v6KsbrUtxbA(b?kO!l)z9NUYre)Q~n^#>>!hQ zlVkP7B5y3oNMbqut>dsu8t0H?75wi(BLCa#)`8CZ^YtDd_O3U|-rO#IUHra|s4-km zW!&j8`=LX>+#?uZu>F)wOxeS68wTzDsTam5*L|N4{Qal}LYNz4-?GaE%vjSe>cKJ(?5Q9Nc7w_FJEyY^0KQdgGU`K}g*7{B(u-xj?;iRo=w z6qIJ6h|b{5(!yuz#=-W)7Dw-P$%gdXgDN)B^y)cx;xs(lR!*RQix5gFMPmbZo(IM? za0K{Ac2nEK6f5JP7;4U4f^Q4|H0D#ENnqhPWA1%(-2@2S3bXQ0WU_Bbhaf_g3yD%$ zIl^+mv}Aw3XU5Jm`za>x8sPr!U;42_EECznE7hUj{Jb?k4h%IhIxL%_ZDT0-v4}ev zFfR*&J*e)z2h?gXa#wOU_I>CcWjFwEi_kFfqttzDmya6zB%?ugUHJO@xUCHU2cTWJ zDb25n;7?*wnulKiIrTHI?6^opVEhky!|)oLE(x?!PK0h5NvK@Frj{<-_gsc}ctMo4 zLDz466&8LVq3znCMU$$AAP>jzhuMu~rxCFapB73#EXV_n|M5(7Hsq(;+P*9P{$EP# z@-|nu`K_;hO9f**(1sPKN&RP3WvY>hswQY#M*F+PgPp8n|S-ole<;mVc)MV%9r%8nIINAz(7NQpDg_6C(m5|H;4@v|e@N*d$plPRYCl zlNbkXkDrig(`z@D_C&IL^*C)sbwI>4Jx-z@}2Ob;fnh&)fw=A^#-d3)6{>F}cmu`>B(r7f57eaE)c z_%UE$-+A}nu*cHARZWN?<*N?a$m^|V{99YlyW93oQ62gf-5qJ@C5pw+YCOIniz{i| zD^?{y-u&+#_rsB+p+^crdnkG!m-Q@9JG%@q z!+m@%#4xX=N*V#S3kHy%8e*jH{OF(AJL7`M$zrF0=o7hu5=Mx=*vEMD(>S!b3It@Y z)!^a+hTvxh3U{VPo3Yh!_jJY&vmP;}Ajj3|S8NC<&Fr<%8 z!e%7$KVF0-=!g8`>mE%i(@0cNUo7|rSOA*B*pttcY(xvyv?4_g$kx1nUeV+Y7Gi#@ z6*T;Lj=qZf5i7_iE63Kg8o{fD`}8Qda&EF*8aCzx7R;_dD^7u>;u8LnC^ojJTEA(b zJ|%S+3M^_sU3uo4@jUSOEISG}yOqb)73J{P&ECtSUJi1*sq`=9Z0WlIPQh)@6HCXQ z_0sl-Te?Ah3N4loG(I{OF=$Hfh;@wKr!Lkr7W%FZmb1x@b8!FY6|4i=<(R5>5Y@|M zAizeaJKAEJSCW14U}u-I9(Q+S)Q5Oz;(6rz{M;fHlLKPx?75A-ADI~?n4|zpcfA7m z)P!siqoAinB?%e{{PysZU}@<=yr}eK`vf)R;DR5Ro#@{E1ZLl zj9Pj68z#S4hS)nc42)mUbNG=-U9ngMFEl+>326tc*Zb=s7ZHq zi-{k1EEII81T{8Ldu;YwkX~^~8~#QiQ2`e{xakS)((*PHua=NSlLHy-zj?|ENzxp- zwA|!$9^Qn>KAwdO^twy6815|=t|Tkyv1tpsY`|{sKt-T?iyGY)dy6|kuN;#NCoa3CKNp*J2Vi6 zx6EWMJlwMTM?Y(QV1dr={|yu20xla?$ydopmN^y0SnF&lzy0Sd=K=u(tf-!T13?Me%XXT%Sx^T+S#KVS}`Gdb+{G*#*fIYK@i93Hw z5ZyG_6f{GaE77k|{q1#4=a~^>u<^-M`!g{sh`aV*tNoIC6Ty_92_!aCQpCAfdWXDj z$Pzh^_u!9@Hve!o5N*vnh>_b#!XD44&hVG!cTC)a@I~{uBFxgTA#8ntH4s8>v|3_( zfIkDfMyUf3$;6A6{2bt;pemE#>vaV@WAkpF)%^r4k@vZmb0(Hs=arU1j

v!z-+ilZ3;64wuQ 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 OpcZ}ssX|mpd;Op^e=r# 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 z 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

Q9{Qv2jeibm8*iJ-<;hjM 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 z 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%0AvP4 zR|QISD9=i}9p5tV{GtOj(`_XvGIj@0-kJPT^GiC(0Nug{(8zq8ch|QZ2LivsOze^% zgQJ2;>_CC*HT?sHCh6(lva((C4JrmE1E7LNd;%o^0AxB2A8GSVCW)UveV5ET<~}_7 z-$&zYEb*?N4SP_tezDM5-^L;{zS#5uhg&w5n3M2=nleIwja-VZsUTZ*TiLT^Tf-doNT#_u&U1Gijp3fh@@xfQ^Bj-;t%znxF zjU~SPCqm@LUBXPCp6fNfF1f!%e!894GuD!I<6N@*fvR`>wRz&YMEeah2PpH;Zt*Xc z-jBzAV{Td5u8koMachHs-oyCpR?iaDyc6&HG~Z+gdLMWj1RVt2eHGig9VncQc-O~f zvAtuVv%d9j?qZ`W=J%MJ)5Uo2!sdFuKEOPmyN?B(yqkdJ0449%bM4r1o_o$_v6{y{ z)BKE!Iq$Uuf6LGYAp7=ad&_R24pHag){TW&#@(KUFPQBxjYxZ zqyeF;0_7gY4uqLkD?ynry8|fDl<$RX01;sN4}QeOS6%W*cK`qY07*qoM6N<$g4ZAV A8UO$Q literal 0 HcmV?d00001 diff --git a/plexapi/library.py b/plexapi/library.py index c341a651f..56305c92b 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -977,6 +977,7 @@ def search(self, title=None, sort=None, maxresults=None, libtype=None, :class:`~plexapi.video.Episode` objects) container_start (int, optional): Default 0. container_size (int, optional): Default X_PLEX_CONTAINER_SIZE in your config file. + filters (dict): A dictionary of advanced filters. See the details below for more info. **kwargs (dict): Additional custom filters to apply to the search results. See the details below for more info. @@ -1060,22 +1061,22 @@ def search(self, title=None, sort=None, maxresults=None, libtype=None, In addition, if the filter does not exist for the default library type it will fallback to the most specific ``libtype`` available. For example, ``show.unwatched`` does not exists so it will fallback to ``episode.unwatched``. The ``libtype`` prefix cannot be included directly in the function parameters so - the ``**kwargs`` must be provided as a dictionary. + the filters must be provided as a filters dictionary. Examples: .. code-block:: python - library.search(**{"show.collection": "Documentary", "episode.inProgress": True}) - library.search(**{"artist.genre": "pop", "album.decade": 2000}) + library.search(filters={"show.collection": "Documentary", "episode.inProgress": True}) + library.search(filters={"artist.genre": "pop", "album.decade": 2000}) # The following three options are identical and will return Episode objects showLibrary.search(title="Winter is Coming", libtype='episode') - showLibrary.search(libtype='episode', **{"episode.title": "Winter is Coming"}) + showLibrary.search(libtype='episode', filters={"episode.title": "Winter is Coming"}) showLibrary.searchEpisodes(title="Winter is Coming") # The following will search for the episode title but return Show objects - showLibrary.search(**{"episode.title": "Winter is Coming"}) + showLibrary.search(filters={"episode.title": "Winter is Coming"}) # The following will fallback to episode.unwatched showLibrary.search(unwatched=True) @@ -1122,27 +1123,55 @@ def search(self, title=None, sort=None, maxresults=None, libtype=None, * ``=``: ``is`` - Operators cannot be included directly in the function parameters so the ``**kwargs`` - must be provided as a dictionary. The trailing ``=`` on the operator may be excluded. + Operators cannot be included directly in the function parameters so the filters + must be provided as a filters dictionary. The trailing ``=`` on the operator may be excluded. Examples: .. code-block:: python # Genre is horror AND thriller - library.search(**{"genre&": ["horror", "thriller"]}) + library.search(filters={"genre&": ["horror", "thriller"]}) # Director is not Steven Spielberg - library.search(**{"director!": "Steven Spielberg"}) + library.search(filters={"director!": "Steven Spielberg"}) # Title starts with Marvel and added before 2021-01-01 - library.search(**{"title<": "Marvel", "addedAt<<": "2021-01-01"}) + library.search(filters={"title<": "Marvel", "addedAt<<": "2021-01-01"}) # Added in the last 30 days using relative dates - library.search(**{"addedAt>>": "30d"}) + library.search(filters={"addedAt>>": "30d"}) # Collection is James Bond and user rating is greater than 8 - library.search(**{"collection": "James Bond", "userRating>>": 8}) + library.search(filters={"collection": "James Bond", "userRating>>": 8}) + + **Using Advanced Filters** + + Any of the Plex filters described above can be combined into a single ``filters`` dictionary that mimics + the advanced filters used in Plex Web with a tree of ``and``/``or`` branches. Each level of the tree must + start with ``and`` (Match all of the following) or ``or`` (Match any of the following) as the dictionary + key, and a list of dictionaries with the desired filters as the dictionary value. + + The following example matches `this <../_static/images/LibrarySection.search_filters.png>`__ advanced filter + in Plex Web. + + Examples: + + .. code-block:: python + + advancedFilters = { + 'and': [ # Match all of the following in this list + { + 'or': [ # Match any of the following in this list + {'title': 'elephant'}, + {'title': 'bunny'} + ] + }, + {'year>>': 1990}, + {'unwatched': True} + ] + } + library.search(filters=advancedFilters) **Using PlexAPI Operators** From 4c9aa37cea564062ffb1e5ea5069fc2bba18cc8a Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 16 May 2021 13:28:14 -0700 Subject: [PATCH 171/356] Update tests for advanced search filters --- tests/test_library.py | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index e45ca336d..2089b6819 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -206,7 +206,7 @@ def test_library_ShowSection_searchShows(tvshows): assert tvshows.searchShows(title="The 100") -def test_library_ShowSection_searchSseasons(tvshows): +def test_library_ShowSection_searchSeasons(tvshows): assert tvshows.searchSeasons(**{"show.title": "The 100"}) @@ -337,6 +337,23 @@ def test_library_MovieSection_search(movies, movie): movie.removeCollection("test_search", locked=False) +def test_library_MovieSection_advancedSearch(movies, movie): + advancedFilters = { + 'and': [ + { + 'or': [ + {'title': 'elephant'}, + {'title': 'bunny'} + ] + }, + {'year>>': 1990}, + {'unwatched': True} + ] + } + results = movies.search(filters=advancedFilters) + assert movie in results + + def test_library_ShowSection_search(tvshows, show): show.addLabel("test_search") show.addCollection("test_search") @@ -518,6 +535,12 @@ def test_library_search_exceptions(movies): movies.search(year="123abc") with pytest.raises(BadRequest): movies.search(sort="123abc") + with pytest.raises(BadRequest): + movies.search(filters=[]) + with pytest.raises(BadRequest): + movies.search(filters={'and': {'title': 'test'}}) + with pytest.raises(BadRequest): + movies.search(filters={'and': [], 'title': 'test'}) with pytest.raises(NotFound): movies.getFilterType(libtype="show") with pytest.raises(NotFound): @@ -594,7 +617,7 @@ def _test_library_search(library, obj): def _do_test_library_search(library, obj, field, operator, searchValue): searchFilter = {field.key + operator.key[:-1]: searchValue} - results = library.search(libtype=obj.type, **searchFilter) + results = library.search(libtype=obj.type, filters=searchFilter) if operator.key.startswith("!") or operator.key.startswith(">>") and (searchValue == 1 or searchValue == "1s"): assert obj not in results From f061307518707e1e27c23b3152862511f5a12d0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 May 2021 11:06:36 +0000 Subject: [PATCH 172/356] Bump sphinx-rtd-theme from 0.5.1 to 0.5.2 Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 0.5.1 to 0.5.2. - [Release notes](https://github.com/readthedocs/sphinx_rtd_theme/releases) - [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst) - [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/0.5.1...0.5.2) Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 0e4272526..86699b2b1 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -13,6 +13,6 @@ recommonmark==0.7.1 requests==2.25.1 requests-mock==1.9.1 sphinx==3.5.4 -sphinx-rtd-theme==0.5.1 +sphinx-rtd-theme==0.5.2 tqdm==4.59.0 websocket-client==0.58.0 From b9a9abb1292347c14386375e1d7f7768067d6b67 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 20 May 2021 20:12:57 -0700 Subject: [PATCH 173/356] Add manual collection sorts and fields --- plexapi/library.py | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 56305c92b..9d30e8c70 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -595,14 +595,23 @@ def _loadFilters(self): """ Retrieves and caches the list of :class:`~plexapi.library.FilteringType` and list of :class:`~plexapi.library.FilteringFieldType` for this library section. """ - key = ('/library/sections/%s/all?includeMeta=1&includeAdvanced=1' - '&X-Plex-Container-Start=0&X-Plex-Container-Size=0') % self.key + _key = ('/library/sections/%s/%s?includeMeta=1&includeAdvanced=1' + '&X-Plex-Container-Start=0&X-Plex-Container-Size=0') + + key = _key % (self.key, 'all') data = self._server.query(key) meta = data.find('Meta') if meta: self._filterTypes = self.findItems(meta, FilteringType) self._fieldTypes = self.findItems(meta, FilteringFieldType) + if self.TYPE != 'photo': # No collections for photo library + key = _key % (self.key, 'collections') + data = self._server.query(key) + meta = data.find('Meta') + if meta: + self._filterTypes.extend(self.findItems(meta, FilteringType)) + def filterTypes(self): """ Returns a list of available :class:`~plexapi.library.FilteringType` for this library section. """ if self._filterTypes is None: @@ -614,7 +623,7 @@ def getFilterType(self, libtype=None): Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, - artist, album, track, photoalbum, photo). + artist, album, track, photoalbum, photo, collection). Raises: :exc:`~plexapi.exceptions.NotFound`: Unknown libtype for this library. @@ -659,7 +668,7 @@ def listFilters(self, libtype=None): Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, - artist, album, track, photoalbum, photo). + artist, album, track, photoalbum, photo, collection). Example: @@ -678,7 +687,7 @@ def listSorts(self, libtype=None): Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, - artist, album, track, photoalbum, photo). + artist, album, track, photoalbum, photo, collection). Example: @@ -697,7 +706,7 @@ def listFields(self, libtype=None): Parameters: libtype (str, optional): The library type to filter (movie, show, season, episode, - artist, album, track, photoalbum, photo). + artist, album, track, photoalbum, photo, collection). Example: @@ -740,7 +749,7 @@ def listFilterChoices(self, field, libtype=None): field (str): :class:`~plexapi.library.FilteringFilter` object, or the name of the field (genre, year, contentRating, etc.). libtype (str, optional): The library type to filter (movie, show, season, episode, - artist, album, track, photoalbum, photo). + artist, album, track, photoalbum, photo, collection). Raises: :exc:`~plexapi.exceptions.BadRequest`: Invalid filter field. @@ -973,8 +982,8 @@ def search(self, title=None, sort=None, maxresults=None, libtype=None, See :func:`~plexapi.library.LibrarySection.listSorts` to get a list of available sort fields. maxresults (int, optional): Only return the specified number of results. libtype (str, optional): Return results of a specific type (movie, show, season, episode, - artist, album, track, photoalbum, photo) (e.g. ``libtype='episode'`` will only return - :class:`~plexapi.video.Episode` objects) + artist, album, track, photoalbum, photo, collection) (e.g. ``libtype='episode'`` will only + return :class:`~plexapi.video.Episode` objects) container_start (int, optional): Default 0. container_size (int, optional): Default X_PLEX_CONTAINER_SIZE in your config file. filters (dict): A dictionary of advanced filters. See the details below for more info. @@ -1926,6 +1935,10 @@ def _manualSorts(self): additionalSorts.extend([ ('absoluteIndex', 'asc', 'Absolute Index') ]) + if self.type == 'collection': + additionalSorts.extend([ + ('addedAt', 'asc', 'Date Added') + ]) manualSorts = [] for sortField, sortDir, sortTitle in additionalSorts: @@ -1983,6 +1996,10 @@ def _manualFields(self): ('duration', 'integer', 'Duration'), ('viewOffset', 'integer', 'View Offset') ]) + elif self.type == 'collection': + additionalFields.extend([ + ('addedAt', 'date', 'Date Added') + ]) prefix = '' if self.type == 'movie' else self.type + '.' From 4c75e096409f0de801faf809f82d51d563a32db5 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 20 May 2021 20:16:20 -0700 Subject: [PATCH 174/356] Add test for collection search --- tests/test_library.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/test_library.py b/tests/test_library.py index 2089b6819..0de08db92 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -329,13 +329,15 @@ def test_library_MovieSection_hubSearch(movies): assert movies.hubSearch("Elephants Dream") -def test_library_MovieSection_search(movies, movie): +def test_library_MovieSection_search(movies, movie, collection): movie.addLabel("test_search") movie.addCollection("test_search") _test_library_search(movies, movie) movie.removeLabel("test_search", locked=False) movie.removeCollection("test_search", locked=False) + _test_library_search(movies, collection) + def test_library_MovieSection_advancedSearch(movies, movie): advancedFilters = { From 95877dd1eea70c5613375ef23a77c2054db91329 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 22 May 2021 14:44:16 -0700 Subject: [PATCH 175/356] Add methods to claim and unclaim a server --- plexapi/server.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/plexapi/server.py b/plexapi/server.py index 4b9c7e886..cd94405a1 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -193,6 +193,26 @@ def account(self): data = self.query(Account.key) return Account(self, data) + def claim(self, account): + """ Claim the Plex server using a :class:`~plexapi.myplex.MyPlexAccount`. + This will only work with an unclaimed server on localhost or the same subnet. + + Parameters: + account (:class:`~plexapi.myplex.MyPlexAccount`): The account used to + claim the server. + """ + key = '/myplex/claim' + params = {'token': account.claimToken()} + data = self.query(key, method=self._session.post, params=params) + return Account(self, data) + + def unclaim(self): + """ Unclaim the Plex server. This will remove the server from your + :class:`~plexapi.myplex.MyPlexAccount`. + """ + data = self.query(Account.key, method=self._session.delete) + return Account(self, data) + @property def activities(self): """Returns all current PMS activities.""" @@ -209,7 +229,7 @@ def agents(self, mediaType=None): return self.fetchItems(key) def createToken(self, type='delegation', scope='all'): - """Create a temp access token for the server.""" + """ Create a temp access token for the server. """ if not self._token: # Handle unclaimed servers return None From 2ef3f595f0e0f1580a425d8cb682f1b5028094a3 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 22 May 2021 14:36:47 -0700 Subject: [PATCH 176/356] Add test for claiming and unclaiming server --- tests/test_server.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_server.py b/tests/test_server.py index 0b68d0dd3..f252bfda3 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -308,6 +308,16 @@ def test_server_account(plex): assert re.match(utils.REGEX_EMAIL, account.username) +@pytest.mark.authenticated +def test_server_claim_unclaim(plex, account): + server_account = plex.account() + assert server_account.signInState == 'ok' + result = plex.unclaim() + assert result.signInState == 'none' + result = plex.claim(account) + assert result.signInState == 'ok' + + def test_server_downloadLogs(tmpdir, plex): plex.downloadLogs(savepath=str(tmpdir), unpack=True) assert len(tmpdir.listdir()) > 1 From 44d0a132542fa715baffb64021f937edb7f5c8ae Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 23 May 2021 20:39:59 -0700 Subject: [PATCH 177/356] Typo in bootstrap test server --- tools/plex-bootstraptest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/plex-bootstraptest.py b/tools/plex-bootstraptest.py index 46cb00334..1da454ef3 100755 --- a/tools/plex-bootstraptest.py +++ b/tools/plex-bootstraptest.py @@ -113,7 +113,7 @@ def clean_pms(server, path): def setup_music(music_path): - print("Setup files for music section..") + print("Setup files for the Music section..") makedirs(music_path, exist_ok=True) all_music = { From 598a6654bab5e99b49ff8f75d0f5b80b866ea8c5 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 23 May 2021 21:08:09 -0700 Subject: [PATCH 178/356] Fix rating search test --- tests/test_library.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/test_library.py b/tests/test_library.py index 0de08db92..d5bf57cd0 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -572,7 +572,11 @@ def _test_library_search(library, obj): operators += [andOp] for operator in operators: - if fieldAttr == "unmatched" and operator.key == "!=" or fieldAttr == "userRating": + if ( + fieldAttr == "unmatched" and operator.key == "!=" + or fieldAttr in {"audienceRating", "rating"} and operator.key in {"=", "!="} + or fieldAttr == "userRating" + ): continue value = getattr(obj, fieldAttr, None) From ada326bca1e645c8f8e57e8a0d4b6147f9248029 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 16 May 2021 11:57:25 -0700 Subject: [PATCH 179/356] Add recently added methods for each libtype --- plexapi/library.py | 70 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 65 insertions(+), 5 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index bb294f0ba..b262c2856 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -537,13 +537,16 @@ def onDeck(self): key = '/library/sections/%s/onDeck' % self.key return self.fetchItems(key) - def recentlyAdded(self, maxresults=50): + def recentlyAdded(self, maxresults=50, libtype=None): """ Returns a list of media items recently added from this library section. Parameters: maxresults (int): Max number of items to return (default 50). + libtype (str, optional): The library type to filter (movie, show, season, episode, + artist, album, track, photoalbum, photo). Default is the main library type. """ - return self.search(sort='addedAt:desc', maxresults=maxresults) + libtype = libtype or self.TYPE + return self.search(sort='addedAt:desc', maxresults=maxresults, libtype=libtype) def firstCharacter(self): key = '/library/sections/%s/firstCharacter' % self.key @@ -1399,6 +1402,14 @@ def searchMovies(self, **kwargs): """ Search for a movie. See :func:`~plexapi.library.LibrarySection.search` for usage. """ return self.search(libtype='movie', **kwargs) + def recentlyAddedMovies(self, maxresults=50): + """ Returns a list of recently added movies from this library section. + + Parameters: + maxresults (int): Max number of items to return (default 50). + """ + return self.recentlyAdded(maxresults=maxresults, libtype='movie') + def sync(self, videoQuality, limit=None, unwatched=False, **kwargs): """ Add current Movie library section as sync item for specified device. See description of :func:`~plexapi.library.LibrarySection.search` for details about filtering / sorting and @@ -1460,13 +1471,29 @@ def searchEpisodes(self, **kwargs): """ Search for an episode. See :func:`~plexapi.library.LibrarySection.search` for usage. """ return self.search(libtype='episode', **kwargs) - def recentlyAdded(self, maxresults=50): + def recentlyAddedShows(self, maxresults=50): + """ Returns a list of recently added shows from this library section. + + Parameters: + maxresults (int): Max number of items to return (default 50). + """ + return self.recentlyAdded(maxresults=maxresults, libtype='show') + + def recentlyAddedSeasons(self, maxresults=50): + """ Returns a list of recently added seasons from this library section. + + Parameters: + maxresults (int): Max number of items to return (default 50). + """ + return self.recentlyAdded(maxresults=maxresults, libtype='season') + + def recentlyAddedEpisodes(self, maxresults=50): """ Returns a list of recently added episodes from this library section. Parameters: maxresults (int): Max number of items to return (default 50). """ - return self.search(sort='episode.addedAt:desc', maxresults=maxresults) + return self.recentlyAdded(maxresults=maxresults, libtype='episode') def sync(self, videoQuality, limit=None, unwatched=False, **kwargs): """ Add current Show library section as sync item for specified device. @@ -1539,6 +1566,30 @@ def searchTracks(self, **kwargs): """ Search for a track. See :func:`~plexapi.library.LibrarySection.search` for usage. """ return self.search(libtype='track', **kwargs) + def recentlyAddedArtists(self, maxresults=50): + """ Returns a list of recently added artists from this library section. + + Parameters: + maxresults (int): Max number of items to return (default 50). + """ + return self.recentlyAdded(maxresults=maxresults, libtype='artist') + + def recentlyAddedAlbums(self, maxresults=50): + """ Returns a list of recently added albums from this library section. + + Parameters: + maxresults (int): Max number of items to return (default 50). + """ + return self.recentlyAdded(maxresults=maxresults, libtype='album') + + def recentlyAddedTracks(self, maxresults=50): + """ Returns a list of recently added tracks from this library section. + + Parameters: + maxresults (int): Max number of items to return (default 50). + """ + return self.recentlyAdded(maxresults=maxresults, libtype='track') + def sync(self, bitrate, limit=None, **kwargs): """ Add current Music library section as sync item for specified device. See description of :func:`~plexapi.library.LibrarySection.search` for details about filtering / sorting and @@ -1597,13 +1648,22 @@ def collections(self, **kwargs): raise NotImplementedError('Collections are not available for a Photo library.') def searchAlbums(self, title, **kwargs): - """ Search for an album. See :func:`~plexapi.library.LibrarySection.search` for usage. """ + """ Search for a photo album. See :func:`~plexapi.library.LibrarySection.search` for usage. """ return self.search(libtype='photoalbum', title=title, **kwargs) def searchPhotos(self, title, **kwargs): """ Search for a photo. See :func:`~plexapi.library.LibrarySection.search` for usage. """ return self.search(libtype='photo', title=title, **kwargs) + def recentlyAddedAlbums(self, maxresults=50): + """ Returns a list of recently added photo albums from this library section. + + Parameters: + maxresults (int): Max number of items to return (default 50). + """ + # Use search() instead of recentlyAdded() because libtype=None + return self.search(sort='addedAt:desc', maxresults=maxresults) + def sync(self, resolution, limit=None, **kwargs): """ Add current Music library section as sync item for specified device. See description of :func:`~plexapi.library.LibrarySection.search` for details about filtering / sorting and From caafd14435ff8a2cce492845c53ef49312ff1e81 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 16 May 2021 11:58:10 -0700 Subject: [PATCH 180/356] Update tests for library section recently added --- tests/test_library.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index d5bf57cd0..98d016bf1 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -186,8 +186,9 @@ def test_library_MovieSection_searchMovies(movies): assert movies.searchMovies(title="Elephants Dream") -def test_library_MovieSection_recentlyAdded(movies): - assert len(movies.recentlyAdded()) +def test_library_MovieSection_recentlyAdded(movies, movie): + assert movie in movies.recentlyAdded() + assert movie in movies.recentlyAddedMovies() def test_library_MovieSection_analyze(movies): @@ -214,8 +215,13 @@ def test_library_ShowSection_searchEpisodes(tvshows): assert tvshows.searchEpisodes(title="Winter Is Coming") -def test_library_ShowSection_recentlyAdded(tvshows): - assert len(tvshows.recentlyAdded()) +def test_library_ShowSection_recentlyAdded(tvshows, show): + season = show.season(1) + episode = season.episode(1) + assert show in tvshows.recentlyAdded() + assert show in tvshows.recentlyAddedShows() + assert season in tvshows.recentlyAddedSeasons() + assert episode in tvshows.recentlyAddedEpisodes() def test_library_ShowSection_playlists(plex, tvshows, show): @@ -239,6 +245,15 @@ def test_library_MusicSection_searchAlbums(music): assert len(music.searchAlbums(title="Layers")) +def test_library_MusicSection_recentlyAdded(music, artist): + album = artist.albums()[0] + track = album.tracks()[0] + assert artist in music.recentlyAdded() + assert artist in music.recentlyAddedArtists() + assert album in music.recentlyAddedAlbums() + assert track in music.recentlyAddedTracks() + + def test_library_PhotoSection_searchAlbums(photos, photoalbum): title = photoalbum.title albums = photos.searchAlbums(title) @@ -250,6 +265,10 @@ def test_library_PhotoSection_searchPhotos(photos, photoalbum): assert len(photos.searchPhotos(title)) +def test_library_PhotoSection_recentlyAdded(photos, photoalbum): + assert photoalbum in photos.recentlyAddedAlbums() + + def test_library_and_section_search_for_movie(plex, movies): find = "Elephants Dream" l_search = plex.library.search(find) From 3fc69a370960ddee2e6e5e550bee4fd6b07b9e49 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 24 May 2021 17:28:11 -0700 Subject: [PATCH 181/356] Refactor usage of findItems --- plexapi/audio.py | 6 +----- plexapi/base.py | 5 ++++- plexapi/collection.py | 6 +----- plexapi/library.py | 10 +++------- plexapi/mixins.py | 9 +-------- plexapi/myplex.py | 8 +------- plexapi/settings.py | 2 +- plexapi/video.py | 22 ++++------------------ 8 files changed, 16 insertions(+), 52 deletions(-) diff --git a/plexapi/audio.py b/plexapi/audio.py index 25ac659b1..0013e632a 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -154,11 +154,7 @@ def __iter__(self): def hubs(self): """ Returns a list of :class:`~plexapi.library.Hub` objects. """ data = self._server.query(self._details_key) - directory = data.find('Directory') - if directory: - related = directory.find('Related') - if related: - return self.findItems(related, library.Hub) + return self.findItems(data, library.Hub, rtag='Related') def album(self, title): """ Returns the :class:`~plexapi.audio.Album` that matches the specified title. diff --git a/plexapi/base.py b/plexapi/base.py index 060c7d906..990226acc 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -263,7 +263,7 @@ def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, item.librarySectionID = librarySectionID return items - def findItems(self, data, cls=None, initpath=None, **kwargs): + def findItems(self, data, cls=None, initpath=None, rtag=None, **kwargs): """ Load the specified data to find and build all items with the specified tag and attrs. See :func:`~plexapi.base.PlexObject.fetchItem` for more details on how this is used. @@ -273,6 +273,9 @@ def findItems(self, data, cls=None, initpath=None, **kwargs): kwargs['etag'] = cls.TAG if cls and cls.TYPE and 'type' not in kwargs: kwargs['type'] = cls.TYPE + # rtag to iter on a specific root tag + if rtag: + data = next(data.iter(rtag), []) # loop through all data elements to find matches items = [] for elem in data: diff --git a/plexapi/collection.py b/plexapi/collection.py index de4c165df..470cd6241 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -110,12 +110,8 @@ def __len__(self): def _preferences(self): """ Returns a list of :class:`~plexapi.settings.Preferences` objects. """ - items = [] data = self._server.query(self._details_key) - for item in data.iter('Setting'): - items.append(Setting(data=item, server=self._server)) - - return items + return self.findItems(data, Setting, rtag='Preferences') def modeUpdate(self, mode=None): """ Update Collection Mode diff --git a/plexapi/library.py b/plexapi/library.py index b262c2856..bc99a9db2 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -603,17 +603,13 @@ def _loadFilters(self): key = _key % (self.key, 'all') data = self._server.query(key) - meta = data.find('Meta') - if meta: - self._filterTypes = self.findItems(meta, FilteringType) - self._fieldTypes = self.findItems(meta, FilteringFieldType) + self._filterTypes = self.findItems(data, FilteringType, rtag='Meta') + self._fieldTypes = self.findItems(data, FilteringFieldType, rtag='Meta') if self.TYPE != 'photo': # No collections for photo library key = _key % (self.key, 'collections') data = self._server.query(key) - meta = data.find('Meta') - if meta: - self._filterTypes.extend(self.findItems(meta, FilteringType)) + self._filterTypes.extend(self.findItems(data, FilteringType, rtag='Meta')) def filterTypes(self): """ Returns a list of available :class:`~plexapi.library.FilteringType` for this library section. """ diff --git a/plexapi/mixins.py b/plexapi/mixins.py index 05d1f40fa..9ca01cf63 100644 --- a/plexapi/mixins.py +++ b/plexapi/mixins.py @@ -10,15 +10,8 @@ class AdvancedSettingsMixin(object): def preferences(self): """ Returns a list of :class:`~plexapi.settings.Preferences` objects. """ - items = [] data = self._server.query(self._details_key) - for item in data.iter('Preferences'): - for elem in item: - setting = settings.Preferences(data=elem, server=self._server) - setting._initpath = self.key - items.append(setting) - - return items + return self.findItems(data, settings.Preferences, rtag='Preferences') def preference(self, pref): """ Returns a :class:`~plexapi.settings.Preferences` object for the specified pref. diff --git a/plexapi/myplex.py b/plexapi/myplex.py index ffce9a1fb..42f597791 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -885,13 +885,7 @@ def sections(self): """ url = MyPlexAccount.FRIENDSERVERS.format(machineId=self.machineIdentifier, serverId=self.id) data = self._server.query(url) - sections = [] - - for section in data.iter('Section'): - if ElementTree.iselement(section): - sections.append(Section(self, section, url)) - - return sections + return self.findItems(data, Section, rtag='SharedServer') def history(self, maxresults=9999999, mindate=None): """ Get all Play History for a user in this shared server. diff --git a/plexapi/settings.py b/plexapi/settings.py index 734cc1198..0b14d2074 100644 --- a/plexapi/settings.py +++ b/plexapi/settings.py @@ -167,7 +167,7 @@ class Preferences(Setting): TAG (str): 'Preferences' FILTER (str): 'preferences' """ - TAG = 'Preferences' + TAG = 'Setting' FILTER = 'preferences' def _default(self): diff --git a/plexapi/video.py b/plexapi/video.py index 141e29150..51ac94fa3 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -353,11 +353,7 @@ def _prettyfilename(self): def hubs(self): """ Returns a list of :class:`~plexapi.library.Hub` objects. """ data = self._server.query(self._details_key) - video = data.find('Video') - if video: - related = video.find('Related') - if related: - return self.findItems(related, library.Hub) + return self.findItems(data, library.Hub, rtag='Related') def download(self, savepath=None, keep_original_name=False, **kwargs): """ Download video files to specified directory. @@ -498,21 +494,14 @@ def isWatched(self): def hubs(self): """ Returns a list of :class:`~plexapi.library.Hub` objects. """ data = self._server.query(self._details_key) - directory = data.find('Directory') - if directory: - related = directory.find('Related') - if related: - return self.findItems(related, library.Hub) + return self.findItems(data, library.Hub, rtag='Related') def onDeck(self): """ Returns show's On Deck :class:`~plexapi.video.Video` object or `None`. If show is unwatched, return will likely be the first episode. """ data = self._server.query(self._details_key) - episode = next(data.iter('OnDeck'), None) - if episode: - return self.findItems(episode)[0] - return None + return next(iter(self.findItems(data, rtag='OnDeck')), None) def season(self, title=None, season=None): """ Returns the season with the specified title or number. @@ -692,10 +681,7 @@ def onDeck(self): Will only return a match if the show's On Deck episode is in this season. """ data = self._server.query(self._details_key) - episode = next(data.iter('OnDeck'), None) - if episode: - return self.findItems(episode)[0] - return None + return next(iter(self.findItems(data, rtag='OnDeck')), None) def show(self): """ Return the season's :class:`~plexapi.video.Show`. """ From f81456d3b638d60f1f58bc3168fcfa63f1190e54 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 24 May 2021 17:37:37 -0700 Subject: [PATCH 182/356] Refactor usage of listAttrs --- plexapi/myplex.py | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 42f597791..d1944b513 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -128,26 +128,18 @@ def _loadData(self, data): self.title = data.attrib.get('title') self.username = data.attrib.get('username') self.uuid = data.attrib.get('uuid') - subscription = data.find('subscription') + subscription = data.find('subscription') self.subscriptionActive = utils.cast(bool, subscription.attrib.get('active')) self.subscriptionStatus = subscription.attrib.get('status') self.subscriptionPlan = subscription.attrib.get('plan') - - self.subscriptionFeatures = [] - for feature in subscription.iter('feature'): - self.subscriptionFeatures.append(feature.attrib.get('id')) + self.subscriptionFeatures = self.listAttrs(subscription, 'id', etag='feature') roles = data.find('roles') - self.roles = [] - if roles is not None: - for role in roles.iter('role'): - self.roles.append(role.attrib.get('id')) + self.roles = self.listAttrs(roles, 'id', etag='role') entitlements = data.find('entitlements') - self.entitlements = [] - for entitlement in entitlements.iter('entitlement'): - self.entitlements.append(entitlement.attrib.get('id')) + self.entitlements = self.listAttrs(entitlements, 'id', etag='entitlement') # TODO: Fetch missing MyPlexAccount attributes self.profile_settings = None @@ -1070,7 +1062,7 @@ def _loadData(self, data): self.screenDensity = data.attrib.get('screenDensity') self.createdAt = utils.toDatetime(data.attrib.get('createdAt')) self.lastSeenAt = utils.toDatetime(data.attrib.get('lastSeenAt')) - self.connections = [connection.attrib.get('uri') for connection in data.iter('Connection')] + self.connections = self.listAttrs(data, 'uri', etag='Connection') def connect(self, timeout=None): """ Returns a new :class:`~plexapi.client.PlexClient` or :class:`~plexapi.server.PlexServer` From 6726a64e6406439a71755075c6654494a18c143b Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 24 May 2021 19:36:26 -0700 Subject: [PATCH 183/356] Fix settings.Preferences doc string TAG --- plexapi/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/settings.py b/plexapi/settings.py index 0b14d2074..30c1c583c 100644 --- a/plexapi/settings.py +++ b/plexapi/settings.py @@ -164,7 +164,7 @@ class Preferences(Setting): """ Represents a single Preferences. Attributes: - TAG (str): 'Preferences' + TAG (str): 'Setting' FILTER (str): 'preferences' """ TAG = 'Setting' From 0095e83f75659ff3fba6326bbba9f2dbd08e3440 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 26 May 2021 19:45:12 -0700 Subject: [PATCH 184/356] Cleanup utils imports --- plexapi/base.py | 5 +- plexapi/media.py | 181 ++++++++++++++++++++++---------------------- plexapi/myplex.py | 3 +- plexapi/playlist.py | 17 ++--- plexapi/server.py | 90 +++++++++++----------- 5 files changed, 146 insertions(+), 150 deletions(-) diff --git a/plexapi/base.py b/plexapi/base.py index 990226acc..7cb5acbf3 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -6,7 +6,6 @@ from plexapi import log, utils from plexapi.exceptions import BadRequest, NotFound, UnknownType, Unsupported -from plexapi.utils import tag_plural, tag_helper DONT_RELOAD_FOR_KEYS = {'key', 'session'} DONT_OVERWRITE_SESSION_KEYS = {'usernames', 'players', 'transcodeSessions', 'session'} @@ -524,9 +523,9 @@ def _edit_tags(self, tag, items, locked=True, remove=False): """ if not isinstance(items, list): items = [items] - value = getattr(self, tag_plural(tag)) + value = getattr(self, utils.tag_plural(tag)) existing_tags = [t.tag for t in value if t and remove is False] - tag_edits = tag_helper(tag, existing_tags + items, locked, remove) + tag_edits = utils.tag_helper(tag, existing_tags + items, locked, remove) self.edit(**tag_edits) def refresh(self): diff --git a/plexapi/media.py b/plexapi/media.py index 88313e47a..37c1cb7a3 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -6,7 +6,6 @@ from plexapi import log, settings, utils from plexapi.base import PlexObject from plexapi.exceptions import BadRequest -from plexapi.utils import cast @utils.registerPlexObject @@ -51,31 +50,31 @@ class Media(PlexObject): def _loadData(self, data): """ Load attribute values from Plex XML response. """ self._data = data - self.aspectRatio = cast(float, data.attrib.get('aspectRatio')) - self.audioChannels = cast(int, data.attrib.get('audioChannels')) + self.aspectRatio = utils.cast(float, data.attrib.get('aspectRatio')) + self.audioChannels = utils.cast(int, data.attrib.get('audioChannels')) self.audioCodec = data.attrib.get('audioCodec') self.audioProfile = data.attrib.get('audioProfile') - self.bitrate = cast(int, data.attrib.get('bitrate')) + self.bitrate = utils.cast(int, data.attrib.get('bitrate')) self.container = data.attrib.get('container') - self.duration = cast(int, data.attrib.get('duration')) - self.height = cast(int, data.attrib.get('height')) - self.id = cast(int, data.attrib.get('id')) - self.has64bitOffsets = cast(bool, data.attrib.get('has64bitOffsets')) - self.optimizedForStreaming = cast(bool, data.attrib.get('optimizedForStreaming')) + self.duration = utils.cast(int, data.attrib.get('duration')) + self.height = utils.cast(int, data.attrib.get('height')) + self.id = utils.cast(int, data.attrib.get('id')) + self.has64bitOffsets = utils.cast(bool, data.attrib.get('has64bitOffsets')) + self.optimizedForStreaming = utils.cast(bool, data.attrib.get('optimizedForStreaming')) self.parts = self.findItems(data, MediaPart) - self.proxyType = cast(int, data.attrib.get('proxyType')) + self.proxyType = utils.cast(int, data.attrib.get('proxyType')) self.target = data.attrib.get('target') self.title = data.attrib.get('title') self.videoCodec = data.attrib.get('videoCodec') self.videoFrameRate = data.attrib.get('videoFrameRate') self.videoProfile = data.attrib.get('videoProfile') self.videoResolution = data.attrib.get('videoResolution') - self.width = cast(int, data.attrib.get('width')) + self.width = utils.cast(int, data.attrib.get('width')) if self._isChildOf(etag='Photo'): self.aperture = data.attrib.get('aperture') self.exposure = data.attrib.get('exposure') - self.iso = cast(int, data.attrib.get('iso')) + self.iso = utils.cast(int, data.attrib.get('iso')) self.lens = data.attrib.get('lens') self.make = data.attrib.get('make') self.model = data.attrib.get('model') @@ -128,25 +127,25 @@ class MediaPart(PlexObject): def _loadData(self, data): """ Load attribute values from Plex XML response. """ self._data = data - self.accessible = cast(bool, data.attrib.get('accessible')) + self.accessible = utils.cast(bool, data.attrib.get('accessible')) self.audioProfile = data.attrib.get('audioProfile') self.container = data.attrib.get('container') self.decision = data.attrib.get('decision') - self.deepAnalysisVersion = cast(int, data.attrib.get('deepAnalysisVersion')) - self.duration = cast(int, data.attrib.get('duration')) - self.exists = cast(bool, data.attrib.get('exists')) + self.deepAnalysisVersion = utils.cast(int, data.attrib.get('deepAnalysisVersion')) + self.duration = utils.cast(int, data.attrib.get('duration')) + self.exists = utils.cast(bool, data.attrib.get('exists')) self.file = data.attrib.get('file') - self.has64bitOffsets = cast(bool, data.attrib.get('has64bitOffsets')) - self.hasThumbnail = cast(bool, data.attrib.get('hasThumbnail')) - self.id = cast(int, data.attrib.get('id')) + self.has64bitOffsets = utils.cast(bool, data.attrib.get('has64bitOffsets')) + self.hasThumbnail = utils.cast(bool, data.attrib.get('hasThumbnail')) + self.id = utils.cast(int, data.attrib.get('id')) self.indexes = data.attrib.get('indexes') self.key = data.attrib.get('key') - self.optimizedForStreaming = cast(bool, data.attrib.get('optimizedForStreaming')) - self.packetLength = cast(int, data.attrib.get('packetLength')) + self.optimizedForStreaming = utils.cast(bool, data.attrib.get('optimizedForStreaming')) + self.packetLength = utils.cast(int, data.attrib.get('packetLength')) self.requiredBandwidths = data.attrib.get('requiredBandwidths') - self.size = cast(int, data.attrib.get('size')) + self.size = utils.cast(int, data.attrib.get('size')) self.streams = self._buildStreams(data) - self.syncItemId = cast(int, data.attrib.get('syncItemId')) + self.syncItemId = utils.cast(int, data.attrib.get('syncItemId')) self.syncState = data.attrib.get('syncState') self.videoProfile = data.attrib.get('videoProfile') @@ -233,21 +232,21 @@ class MediaPartStream(PlexObject): def _loadData(self, data): """ Load attribute values from Plex XML response. """ self._data = data - self.bitrate = cast(int, data.attrib.get('bitrate')) + self.bitrate = utils.cast(int, data.attrib.get('bitrate')) self.codec = data.attrib.get('codec') - self.default = cast(bool, data.attrib.get('default')) + self.default = utils.cast(bool, data.attrib.get('default')) self.displayTitle = data.attrib.get('displayTitle') self.extendedDisplayTitle = data.attrib.get('extendedDisplayTitle') self.key = data.attrib.get('key') - self.id = cast(int, data.attrib.get('id')) - self.index = cast(int, data.attrib.get('index', '-1')) + self.id = utils.cast(int, data.attrib.get('id')) + self.index = utils.cast(int, data.attrib.get('index', '-1')) self.language = data.attrib.get('language') self.languageCode = data.attrib.get('languageCode') self.requiredBandwidths = data.attrib.get('requiredBandwidths') - self.selected = cast(bool, data.attrib.get('selected', '0')) - self.streamType = cast(int, data.attrib.get('streamType')) + self.selected = utils.cast(bool, data.attrib.get('selected', '0')) + self.streamType = utils.cast(int, data.attrib.get('streamType')) self.title = data.attrib.get('title') - self.type = cast(int, data.attrib.get('streamType')) + self.type = utils.cast(int, data.attrib.get('streamType')) @utils.registerPlexObject @@ -298,38 +297,38 @@ def _loadData(self, data): """ Load attribute values from Plex XML response. """ super(VideoStream, self)._loadData(data) self.anamorphic = data.attrib.get('anamorphic') - self.bitDepth = cast(int, data.attrib.get('bitDepth')) - self.cabac = cast(int, data.attrib.get('cabac')) + self.bitDepth = utils.cast(int, data.attrib.get('bitDepth')) + self.cabac = utils.cast(int, data.attrib.get('cabac')) self.chromaLocation = data.attrib.get('chromaLocation') self.chromaSubsampling = data.attrib.get('chromaSubsampling') self.codecID = data.attrib.get('codecID') - self.codedHeight = cast(int, data.attrib.get('codedHeight')) - self.codedWidth = cast(int, data.attrib.get('codedWidth')) + self.codedHeight = utils.cast(int, data.attrib.get('codedHeight')) + self.codedWidth = utils.cast(int, data.attrib.get('codedWidth')) self.colorPrimaries = data.attrib.get('colorPrimaries') self.colorRange = data.attrib.get('colorRange') self.colorSpace = data.attrib.get('colorSpace') self.colorTrc = data.attrib.get('colorTrc') - self.DOVIBLCompatID = cast(int, data.attrib.get('DOVIBLCompatID')) - self.DOVIBLPresent = cast(bool, data.attrib.get('DOVIBLPresent')) - self.DOVIELPresent = cast(bool, data.attrib.get('DOVIELPresent')) - self.DOVILevel = cast(int, data.attrib.get('DOVILevel')) - self.DOVIPresent = cast(bool, data.attrib.get('DOVIPresent')) - self.DOVIProfile = cast(int, data.attrib.get('DOVIProfile')) - self.DOVIRPUPresent = cast(bool, data.attrib.get('DOVIRPUPresent')) - self.DOVIVersion = cast(float, data.attrib.get('DOVIVersion')) - self.duration = cast(int, data.attrib.get('duration')) - self.frameRate = cast(float, data.attrib.get('frameRate')) + self.DOVIBLCompatID = utils.cast(int, data.attrib.get('DOVIBLCompatID')) + self.DOVIBLPresent = utils.cast(bool, data.attrib.get('DOVIBLPresent')) + self.DOVIELPresent = utils.cast(bool, data.attrib.get('DOVIELPresent')) + self.DOVILevel = utils.cast(int, data.attrib.get('DOVILevel')) + self.DOVIPresent = utils.cast(bool, data.attrib.get('DOVIPresent')) + self.DOVIProfile = utils.cast(int, data.attrib.get('DOVIProfile')) + self.DOVIRPUPresent = utils.cast(bool, data.attrib.get('DOVIRPUPresent')) + self.DOVIVersion = utils.cast(float, data.attrib.get('DOVIVersion')) + self.duration = utils.cast(int, data.attrib.get('duration')) + self.frameRate = utils.cast(float, data.attrib.get('frameRate')) self.frameRateMode = data.attrib.get('frameRateMode') - self.hasScallingMatrix = cast(bool, data.attrib.get('hasScallingMatrix')) - self.height = cast(int, data.attrib.get('height')) - self.level = cast(int, data.attrib.get('level')) + self.hasScallingMatrix = utils.cast(bool, data.attrib.get('hasScallingMatrix')) + self.height = utils.cast(int, data.attrib.get('height')) + self.level = utils.cast(int, data.attrib.get('level')) self.profile = data.attrib.get('profile') self.pixelAspectRatio = data.attrib.get('pixelAspectRatio') self.pixelFormat = data.attrib.get('pixelFormat') - self.refFrames = cast(int, data.attrib.get('refFrames')) + self.refFrames = utils.cast(int, data.attrib.get('refFrames')) self.scanType = data.attrib.get('scanType') - self.streamIdentifier = cast(int, data.attrib.get('streamIdentifier')) - self.width = cast(int, data.attrib.get('width')) + self.streamIdentifier = utils.cast(int, data.attrib.get('streamIdentifier')) + self.width = utils.cast(int, data.attrib.get('width')) @utils.registerPlexObject @@ -367,23 +366,23 @@ def _loadData(self, data): """ Load attribute values from Plex XML response. """ super(AudioStream, self)._loadData(data) self.audioChannelLayout = data.attrib.get('audioChannelLayout') - self.bitDepth = cast(int, data.attrib.get('bitDepth')) + self.bitDepth = utils.cast(int, data.attrib.get('bitDepth')) self.bitrateMode = data.attrib.get('bitrateMode') - self.channels = cast(int, data.attrib.get('channels')) - self.duration = cast(int, data.attrib.get('duration')) + self.channels = utils.cast(int, data.attrib.get('channels')) + self.duration = utils.cast(int, data.attrib.get('duration')) self.profile = data.attrib.get('profile') - self.samplingRate = cast(int, data.attrib.get('samplingRate')) - self.streamIdentifier = cast(int, data.attrib.get('streamIdentifier')) + self.samplingRate = utils.cast(int, data.attrib.get('samplingRate')) + self.streamIdentifier = utils.cast(int, data.attrib.get('streamIdentifier')) if self._isChildOf(etag='Track'): - self.albumGain = cast(float, data.attrib.get('albumGain')) - self.albumPeak = cast(float, data.attrib.get('albumPeak')) - self.albumRange = cast(float, data.attrib.get('albumRange')) + self.albumGain = utils.cast(float, data.attrib.get('albumGain')) + self.albumPeak = utils.cast(float, data.attrib.get('albumPeak')) + self.albumRange = utils.cast(float, data.attrib.get('albumRange')) self.endRamp = data.attrib.get('endRamp') - self.gain = cast(float, data.attrib.get('gain')) - self.loudness = cast(float, data.attrib.get('loudness')) - self.lra = cast(float, data.attrib.get('lra')) - self.peak = cast(float, data.attrib.get('peak')) + self.gain = utils.cast(float, data.attrib.get('gain')) + self.loudness = utils.cast(float, data.attrib.get('loudness')) + self.lra = utils.cast(float, data.attrib.get('lra')) + self.peak = utils.cast(float, data.attrib.get('peak')) self.startRamp = data.attrib.get('startRamp') @@ -407,7 +406,7 @@ def _loadData(self, data): """ Load attribute values from Plex XML response. """ super(SubtitleStream, self)._loadData(data) self.container = data.attrib.get('container') - self.forced = cast(bool, data.attrib.get('forced', '0')) + self.forced = utils.cast(bool, data.attrib.get('forced', '0')) self.format = data.attrib.get('format') self.headerCompression = data.attrib.get('headerCompression') self.transient = data.attrib.get('transient') @@ -431,9 +430,9 @@ def _loadData(self, data): """ Load attribute values from Plex XML response. """ super(LyricStream, self)._loadData(data) self.format = data.attrib.get('format') - self.minLines = cast(int, data.attrib.get('minLines')) + self.minLines = utils.cast(int, data.attrib.get('minLines')) self.provider = data.attrib.get('provider') - self.timed = cast(bool, data.attrib.get('timed', '0')) + self.timed = utils.cast(bool, data.attrib.get('timed', '0')) @utils.registerPlexObject @@ -496,36 +495,36 @@ class TranscodeSession(PlexObject): def _loadData(self, data): """ Load attribute values from Plex XML response. """ self._data = data - self.audioChannels = cast(int, data.attrib.get('audioChannels')) + self.audioChannels = utils.cast(int, data.attrib.get('audioChannels')) self.audioCodec = data.attrib.get('audioCodec') self.audioDecision = data.attrib.get('audioDecision') - self.complete = cast(bool, data.attrib.get('complete', '0')) + self.complete = utils.cast(bool, data.attrib.get('complete', '0')) self.container = data.attrib.get('container') self.context = data.attrib.get('context') - self.duration = cast(int, data.attrib.get('duration')) - self.height = cast(int, data.attrib.get('height')) + self.duration = utils.cast(int, data.attrib.get('duration')) + self.height = utils.cast(int, data.attrib.get('height')) self.key = data.attrib.get('key') - self.maxOffsetAvailable = cast(float, data.attrib.get('maxOffsetAvailable')) - self.minOffsetAvailable = cast(float, data.attrib.get('minOffsetAvailable')) - self.progress = cast(float, data.attrib.get('progress')) + self.maxOffsetAvailable = utils.cast(float, data.attrib.get('maxOffsetAvailable')) + self.minOffsetAvailable = utils.cast(float, data.attrib.get('minOffsetAvailable')) + self.progress = utils.cast(float, data.attrib.get('progress')) self.protocol = data.attrib.get('protocol') - self.remaining = cast(int, data.attrib.get('remaining')) - self.size = cast(int, data.attrib.get('size')) + self.remaining = utils.cast(int, data.attrib.get('remaining')) + self.size = utils.cast(int, data.attrib.get('size')) self.sourceAudioCodec = data.attrib.get('sourceAudioCodec') self.sourceVideoCodec = data.attrib.get('sourceVideoCodec') - self.speed = cast(float, data.attrib.get('speed')) + self.speed = utils.cast(float, data.attrib.get('speed')) self.subtitleDecision = data.attrib.get('subtitleDecision') - self.throttled = cast(bool, data.attrib.get('throttled', '0')) - self.timestamp = cast(float, data.attrib.get('timeStamp')) + self.throttled = utils.cast(bool, data.attrib.get('throttled', '0')) + self.timestamp = utils.cast(float, data.attrib.get('timeStamp')) self.transcodeHwDecoding = data.attrib.get('transcodeHwDecoding') self.transcodeHwDecodingTitle = data.attrib.get('transcodeHwDecodingTitle') self.transcodeHwEncoding = data.attrib.get('transcodeHwEncoding') self.transcodeHwEncodingTitle = data.attrib.get('transcodeHwEncodingTitle') - self.transcodeHwFullPipeline = cast(bool, data.attrib.get('transcodeHwFullPipeline', '0')) - self.transcodeHwRequested = cast(bool, data.attrib.get('transcodeHwRequested', '0')) + self.transcodeHwFullPipeline = utils.cast(bool, data.attrib.get('transcodeHwFullPipeline', '0')) + self.transcodeHwRequested = utils.cast(bool, data.attrib.get('transcodeHwRequested', '0')) self.videoCodec = data.attrib.get('videoCodec') self.videoDecision = data.attrib.get('videoDecision') - self.width = cast(int, data.attrib.get('width')) + self.width = utils.cast(int, data.attrib.get('width')) @utils.registerPlexObject @@ -666,7 +665,7 @@ def _loadData(self, data): """ Load attribute values from Plex XML response. """ self._data = data self.filter = data.attrib.get('filter') - self.id = cast(int, data.attrib.get('id')) + self.id = utils.cast(int, data.attrib.get('id')) self.key = data.attrib.get('key') self.role = data.attrib.get('role') self.tag = data.attrib.get('tag') @@ -881,7 +880,7 @@ def _loadData(self, data): self.key = data.attrib.get('key') self.provider = data.attrib.get('provider') self.ratingKey = data.attrib.get('ratingKey') - self.selected = cast(bool, data.attrib.get('selected')) + self.selected = utils.cast(bool, data.attrib.get('selected')) self.thumb = data.attrib.get('thumb') def select(self): @@ -916,13 +915,13 @@ class Chapter(PlexObject): def _loadData(self, data): self._data = data - self.id = cast(int, data.attrib.get('id', 0)) + self.id = utils.cast(int, data.attrib.get('id', 0)) self.filter = data.attrib.get('filter') # I couldn't filter on it anyways self.tag = data.attrib.get('tag') self.title = self.tag - self.index = cast(int, data.attrib.get('index')) - self.start = cast(int, data.attrib.get('startTimeOffset')) - self.end = cast(int, data.attrib.get('endTimeOffset')) + self.index = utils.cast(int, data.attrib.get('index')) + self.start = utils.cast(int, data.attrib.get('startTimeOffset')) + self.end = utils.cast(int, data.attrib.get('endTimeOffset')) @utils.registerPlexObject @@ -943,8 +942,8 @@ def __repr__(self): def _loadData(self, data): self._data = data self.type = data.attrib.get('type') - self.start = cast(int, data.attrib.get('startTimeOffset')) - self.end = cast(int, data.attrib.get('endTimeOffset')) + self.start = utils.cast(int, data.attrib.get('startTimeOffset')) + self.end = utils.cast(int, data.attrib.get('endTimeOffset')) @utils.registerPlexObject @@ -959,7 +958,7 @@ class Field(PlexObject): def _loadData(self, data): self._data = data self.name = data.attrib.get('name') - self.locked = cast(bool, data.attrib.get('locked')) + self.locked = utils.cast(bool, data.attrib.get('locked')) @utils.registerPlexObject @@ -981,7 +980,7 @@ def _loadData(self, data): self.guid = data.attrib.get('guid') self.lifespanEnded = data.attrib.get('lifespanEnded') self.name = data.attrib.get('name') - self.score = cast(int, data.attrib.get('score')) + self.score = utils.cast(int, data.attrib.get('score')) self.year = data.attrib.get('year') @@ -1026,7 +1025,7 @@ def __repr__(self): return '<%s>' % ':'.join([p for p in [self.__class__.__name__, uid] if p]) def _loadData(self, data): - self.mediaType = cast(int, data.attrib.get('mediaType')) + self.mediaType = utils.cast(int, data.attrib.get('mediaType')) self.name = data.attrib.get('name') self.languageCode = [] for code in data: diff --git a/plexapi/myplex.py b/plexapi/myplex.py index d1944b513..d2d4ec37d 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -14,7 +14,6 @@ from plexapi.server import PlexServer from plexapi.sonos import PlexSonosClient from plexapi.sync import SyncItem, SyncList -from plexapi.utils import joinArgs from requests.status_codes import _codes as codes @@ -452,7 +451,7 @@ def updateFriend(self, user, server, sections=None, removeSections=False, allowS if isinstance(allowChannels, dict): params['filterMusic'] = self._filterDictToStr(filterMusic or {}) if params: - url += joinArgs(params) + url += utils.joinArgs(params) response_filters = self.query(url, self._session.put) return response_servers, response_filters diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 7e6f10b1f..16bec0b18 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -7,7 +7,6 @@ from plexapi.library import LibrarySection from plexapi.mixins import ArtMixin, PosterMixin from plexapi.playqueue import PlayQueue -from plexapi.utils import cast, toDatetime @utils.registerPlexObject @@ -39,21 +38,21 @@ class Playlist(PlexPartialObject, Playable, ArtMixin, PosterMixin): def _loadData(self, data): """ Load attribute values from Plex XML response. """ Playable._loadData(self, data) - self.addedAt = toDatetime(data.attrib.get('addedAt')) - self.allowSync = cast(bool, data.attrib.get('allowSync')) + self.addedAt = utils.toDatetime(data.attrib.get('addedAt')) + self.allowSync = utils.cast(bool, data.attrib.get('allowSync')) self.composite = data.attrib.get('composite') # url to thumbnail - self.duration = cast(int, data.attrib.get('duration')) - self.durationInSeconds = cast(int, data.attrib.get('durationInSeconds')) + self.duration = utils.cast(int, data.attrib.get('duration')) + self.durationInSeconds = utils.cast(int, data.attrib.get('durationInSeconds')) self.guid = data.attrib.get('guid') self.key = data.attrib.get('key', '').replace('/items', '') # FIX_BUG_50 - self.leafCount = cast(int, data.attrib.get('leafCount')) + self.leafCount = utils.cast(int, data.attrib.get('leafCount')) self.playlistType = data.attrib.get('playlistType') - self.ratingKey = cast(int, data.attrib.get('ratingKey')) - self.smart = cast(bool, data.attrib.get('smart')) + self.ratingKey = utils.cast(int, data.attrib.get('ratingKey')) + self.smart = utils.cast(bool, data.attrib.get('smart')) self.summary = data.attrib.get('summary') self.title = data.attrib.get('title') self.type = data.attrib.get('type') - self.updatedAt = toDatetime(data.attrib.get('updatedAt')) + self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) self._items = None # cache for self.items def __len__(self): # pragma: no cover diff --git a/plexapi/server.py b/plexapi/server.py index 3c6d63f5a..4923a52d7 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -15,7 +15,7 @@ from plexapi.playlist import Playlist from plexapi.playqueue import PlayQueue from plexapi.settings import Settings -from plexapi.utils import cast, deprecated +from plexapi.utils import deprecated from requests.status_codes import _codes as codes # Need these imports to populate utils.PLEXOBJECTS @@ -118,47 +118,47 @@ def __init__(self, baseurl=None, token=None, session=None, timeout=None): def _loadData(self, data): """ Load attribute values from Plex XML response. """ self._data = data - self.allowCameraUpload = cast(bool, data.attrib.get('allowCameraUpload')) - self.allowChannelAccess = cast(bool, data.attrib.get('allowChannelAccess')) - self.allowMediaDeletion = cast(bool, data.attrib.get('allowMediaDeletion')) - self.allowSharing = cast(bool, data.attrib.get('allowSharing')) - self.allowSync = cast(bool, data.attrib.get('allowSync')) - self.backgroundProcessing = cast(bool, data.attrib.get('backgroundProcessing')) - self.certificate = cast(bool, data.attrib.get('certificate')) - self.companionProxy = cast(bool, data.attrib.get('companionProxy')) + self.allowCameraUpload = utils.cast(bool, data.attrib.get('allowCameraUpload')) + self.allowChannelAccess = utils.cast(bool, data.attrib.get('allowChannelAccess')) + self.allowMediaDeletion = utils.cast(bool, data.attrib.get('allowMediaDeletion')) + self.allowSharing = utils.cast(bool, data.attrib.get('allowSharing')) + self.allowSync = utils.cast(bool, data.attrib.get('allowSync')) + self.backgroundProcessing = utils.cast(bool, data.attrib.get('backgroundProcessing')) + self.certificate = utils.cast(bool, data.attrib.get('certificate')) + self.companionProxy = utils.cast(bool, data.attrib.get('companionProxy')) self.diagnostics = utils.toList(data.attrib.get('diagnostics')) - self.eventStream = cast(bool, data.attrib.get('eventStream')) + self.eventStream = utils.cast(bool, data.attrib.get('eventStream')) self.friendlyName = data.attrib.get('friendlyName') - self.hubSearch = cast(bool, data.attrib.get('hubSearch')) + self.hubSearch = utils.cast(bool, data.attrib.get('hubSearch')) self.machineIdentifier = data.attrib.get('machineIdentifier') - self.multiuser = cast(bool, data.attrib.get('multiuser')) - self.myPlex = cast(bool, data.attrib.get('myPlex')) + self.multiuser = utils.cast(bool, data.attrib.get('multiuser')) + self.myPlex = utils.cast(bool, data.attrib.get('myPlex')) self.myPlexMappingState = data.attrib.get('myPlexMappingState') self.myPlexSigninState = data.attrib.get('myPlexSigninState') - self.myPlexSubscription = cast(bool, data.attrib.get('myPlexSubscription')) + self.myPlexSubscription = utils.cast(bool, data.attrib.get('myPlexSubscription')) self.myPlexUsername = data.attrib.get('myPlexUsername') self.ownerFeatures = utils.toList(data.attrib.get('ownerFeatures')) - self.photoAutoTag = cast(bool, data.attrib.get('photoAutoTag')) + self.photoAutoTag = utils.cast(bool, data.attrib.get('photoAutoTag')) self.platform = data.attrib.get('platform') self.platformVersion = data.attrib.get('platformVersion') - self.pluginHost = cast(bool, data.attrib.get('pluginHost')) - self.readOnlyLibraries = cast(int, data.attrib.get('readOnlyLibraries')) - self.requestParametersInCookie = cast(bool, data.attrib.get('requestParametersInCookie')) + self.pluginHost = utils.cast(bool, data.attrib.get('pluginHost')) + self.readOnlyLibraries = utils.cast(int, data.attrib.get('readOnlyLibraries')) + self.requestParametersInCookie = utils.cast(bool, data.attrib.get('requestParametersInCookie')) self.streamingBrainVersion = data.attrib.get('streamingBrainVersion') - self.sync = cast(bool, data.attrib.get('sync')) + self.sync = utils.cast(bool, data.attrib.get('sync')) self.transcoderActiveVideoSessions = int(data.attrib.get('transcoderActiveVideoSessions', 0)) - self.transcoderAudio = cast(bool, data.attrib.get('transcoderAudio')) - self.transcoderLyrics = cast(bool, data.attrib.get('transcoderLyrics')) - self.transcoderPhoto = cast(bool, data.attrib.get('transcoderPhoto')) - self.transcoderSubtitles = cast(bool, data.attrib.get('transcoderSubtitles')) - self.transcoderVideo = cast(bool, data.attrib.get('transcoderVideo')) + self.transcoderAudio = utils.cast(bool, data.attrib.get('transcoderAudio')) + self.transcoderLyrics = utils.cast(bool, data.attrib.get('transcoderLyrics')) + self.transcoderPhoto = utils.cast(bool, data.attrib.get('transcoderPhoto')) + self.transcoderSubtitles = utils.cast(bool, data.attrib.get('transcoderSubtitles')) + self.transcoderVideo = utils.cast(bool, data.attrib.get('transcoderVideo')) self.transcoderVideoBitrates = utils.toList(data.attrib.get('transcoderVideoBitrates')) self.transcoderVideoQualities = utils.toList(data.attrib.get('transcoderVideoQualities')) self.transcoderVideoResolutions = utils.toList(data.attrib.get('transcoderVideoResolutions')) self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) - self.updater = cast(bool, data.attrib.get('updater')) + self.updater = utils.cast(bool, data.attrib.get('updater')) self.version = data.attrib.get('version') - self.voiceSearch = cast(bool, data.attrib.get('voiceSearch')) + self.voiceSearch = utils.cast(bool, data.attrib.get('voiceSearch')) def _headers(self, **kwargs): """ Returns dict containing base headers for all requests to the server. """ @@ -770,11 +770,11 @@ def bandwidth(self, timespan=None, **kwargs): raise BadRequest('Unknown filter: %s=%s' % (key, value)) if key.startswith('at'): try: - value = cast(int, value.timestamp()) + value = utils.cast(int, value.timestamp()) except AttributeError: raise BadRequest('Time frame filter must be a datetime object: %s=%s' % (key, value)) elif key.startswith('bytes') or key == 'lan': - value = cast(int, value) + value = utils.cast(int, value) elif key == 'accountID': if value == self.myPlexAccount().id: value = 1 # The admin account is accountID=1 @@ -834,7 +834,7 @@ def _loadData(self, data): self.privateAddress = data.attrib.get('privateAddress') self.privatePort = data.attrib.get('privatePort') self.subscriptionFeatures = utils.toList(data.attrib.get('subscriptionFeatures')) - self.subscriptionActive = cast(bool, data.attrib.get('subscriptionActive')) + self.subscriptionActive = utils.cast(bool, data.attrib.get('subscriptionActive')) self.subscriptionState = data.attrib.get('subscriptionState') @@ -844,8 +844,8 @@ class Activity(PlexObject): def _loadData(self, data): self._data = data - self.cancellable = cast(bool, data.attrib.get('cancellable')) - self.progress = cast(int, data.attrib.get('progress')) + self.cancellable = utils.cast(bool, data.attrib.get('cancellable')) + self.progress = utils.cast(int, data.attrib.get('progress')) self.title = data.attrib.get('title') self.subtitle = data.attrib.get('subtitle') self.type = data.attrib.get('type') @@ -884,13 +884,13 @@ class SystemAccount(PlexObject): def _loadData(self, data): self._data = data - self.autoSelectAudio = cast(bool, data.attrib.get('autoSelectAudio')) + self.autoSelectAudio = utils.cast(bool, data.attrib.get('autoSelectAudio')) self.defaultAudioLanguage = data.attrib.get('defaultAudioLanguage') self.defaultSubtitleLanguage = data.attrib.get('defaultSubtitleLanguage') - self.id = cast(int, data.attrib.get('id')) + self.id = utils.cast(int, data.attrib.get('id')) self.key = data.attrib.get('key') self.name = data.attrib.get('name') - self.subtitleMode = cast(int, data.attrib.get('subtitleMode')) + self.subtitleMode = utils.cast(int, data.attrib.get('subtitleMode')) self.thumb = data.attrib.get('thumb') # For backwards compatibility self.accountID = self.id @@ -915,7 +915,7 @@ def _loadData(self, data): self._data = data self.clientIdentifier = data.attrib.get('clientIdentifier') self.createdAt = utils.toDatetime(data.attrib.get('createdAt')) - self.id = cast(int, data.attrib.get('id')) + self.id = utils.cast(int, data.attrib.get('id')) self.key = '/devices/%s' % self.id self.name = data.attrib.get('name') self.platform = data.attrib.get('platform') @@ -939,12 +939,12 @@ class StatisticsBandwidth(PlexObject): def _loadData(self, data): self._data = data - self.accountID = cast(int, data.attrib.get('accountID')) + self.accountID = utils.cast(int, data.attrib.get('accountID')) self.at = utils.toDatetime(data.attrib.get('at')) - self.bytes = cast(int, data.attrib.get('bytes')) - self.deviceID = cast(int, data.attrib.get('deviceID')) - self.lan = cast(bool, data.attrib.get('lan')) - self.timespan = cast(int, data.attrib.get('timespan')) + self.bytes = utils.cast(int, data.attrib.get('bytes')) + self.deviceID = utils.cast(int, data.attrib.get('deviceID')) + self.lan = utils.cast(bool, data.attrib.get('lan')) + self.timespan = utils.cast(int, data.attrib.get('timespan')) def __repr__(self): return '<%s>' % ':'.join([p for p in [ @@ -980,11 +980,11 @@ class StatisticsResources(PlexObject): def _loadData(self, data): self._data = data self.at = utils.toDatetime(data.attrib.get('at')) - self.hostCpuUtilization = cast(float, data.attrib.get('hostCpuUtilization')) - self.hostMemoryUtilization = cast(float, data.attrib.get('hostMemoryUtilization')) - self.processCpuUtilization = cast(float, data.attrib.get('processCpuUtilization')) - self.processMemoryUtilization = cast(float, data.attrib.get('processMemoryUtilization')) - self.timespan = cast(int, data.attrib.get('timespan')) + self.hostCpuUtilization = utils.cast(float, data.attrib.get('hostCpuUtilization')) + self.hostMemoryUtilization = utils.cast(float, data.attrib.get('hostMemoryUtilization')) + self.processCpuUtilization = utils.cast(float, data.attrib.get('processCpuUtilization')) + self.processMemoryUtilization = utils.cast(float, data.attrib.get('processMemoryUtilization')) + self.timespan = utils.cast(int, data.attrib.get('timespan')) def __repr__(self): return '<%s>' % ':'.join([p for p in [ From 0c8e5f9b5ba0a3a7892ebf7c2440f3166c6233c5 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 27 May 2021 09:15:11 -0400 Subject: [PATCH 185/356] Extra atrributes update cast int --- plexapi/video.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plexapi/video.py b/plexapi/video.py index 1bb1405e5..d24d311d2 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -995,7 +995,7 @@ def _loadData(self, data): self.addedAt = utils.toDatetime(data.attrib.get('addedAt')) self.duration = utils.cast(int, data.attrib.get('duration')) self.extraType = data.attrib.get('extraType') - self.index = data.attrib.get('index') + self.index = utils.cast(int, data.attrib.get('index')) self.key = data.attrib.get('key', '') self.media = self.findItems(data, media.Media) self.originallyAvailableAt = utils.toDatetime( @@ -1006,4 +1006,4 @@ def _loadData(self, data): self.thumb = data.attrib.get('thumb') self.title = data.attrib.get('title') self.type = data.attrib.get('type') - self.year = data.attrib.get('year') + self.year = utils.cast(int, data.attrib.get('year')) From aa0596d2a134bf20b98f3e20944e02604ec15645 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 27 May 2021 09:16:44 -0400 Subject: [PATCH 186/356] SETTINGS url string substitution update %s instead of .format() --- plexapi/myplex.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index f97431b86..17e9ae593 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -76,7 +76,7 @@ class MyPlexAccount(PlexObject): REQUESTS = 'https://plex.tv/api/invites/requests' # get SIGNIN = 'https://plex.tv/users/sign_in.xml' # get with auth WEBHOOKS = 'https://plex.tv/api/v2/user/webhooks' # get, post with data - SETTINGS = 'https://plex.tv/api/v2/user/{userUUID}/settings' + SETTINGS = 'https://plex.tv/api/v2/user/%(userUUID)s/settings' # get LINK = 'https://plex.tv/api/v2/pins/link' # put # Hub sections VOD = 'https://vod.provider.plex.tv/' # get @@ -704,7 +704,7 @@ def onlineMediaSources(self): """ Returns an user account Online Media Sourcessettings :class:`~plexapi.myplex.AccountOptOut` """ services = [] - optOuts = self.SETTINGS.format(userUUID=self.uuid) + '/opt_outs' + optOuts = self.SETTINGS % {'userUUID': self.uuid} + '/opt_outs' req = requests.get(optOuts, headers={'X-Plex-Token': self._token, 'X-Plex-Client-Identifier': X_PLEX_IDENTIFIER}) @@ -719,7 +719,7 @@ def onlineMediaSources(self): def settings(self): """ Returns an user account settings :class:`~plexapi.myplex.AccountSettings` """ - req = requests.get(self.SETTINGS.format(userUUID=self.uuid), + req = requests.get(self.SETTINGS % {'userUUID': self.uuid} , headers={'X-Plex-Token': self._token, 'X-Plex-Client-Identifier': X_PLEX_IDENTIFIER}) elem = ElementTree.fromstring(req.text) From 4f6634db38d007a12987a5dafb74ec086514506d Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 27 May 2021 09:22:19 -0400 Subject: [PATCH 187/356] Review attribute ordering --- plexapi/media.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plexapi/media.py b/plexapi/media.py index ad11abb9b..21f2509a6 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -790,13 +790,13 @@ class Review(MediaTag): def _loadData(self, data): self._data = data - self.id = cast(int, data.attrib.get('id', 0)) self.filter = data.attrib.get('filter') - self.tag = data.attrib.get('tag') - self.text = data.attrib.get('text') + self.id = cast(int, data.attrib.get('id', 0)) self.image = data.attrib.get('image') self.link = data.attrib.get('link') self.source = data.attrib.get('source') + self.tag = data.attrib.get('tag') + self.text = data.attrib.get('text') @utils.registerPlexObject From 76719d9c70e33fabf55037c06396f834cca3f7ef Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 27 May 2021 09:38:43 -0400 Subject: [PATCH 188/356] onlineMediaSources clean up --- plexapi/myplex.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 17e9ae593..f2af74666 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -703,18 +703,10 @@ def tidal(self): def onlineMediaSources(self): """ Returns an user account Online Media Sourcessettings :class:`~plexapi.myplex.AccountOptOut` """ - services = [] - optOuts = self.SETTINGS % {'userUUID': self.uuid} + '/opt_outs' - req = requests.get(optOuts, - headers={'X-Plex-Token': self._token, + url = self.SETTINGS % {'userUUID': self.uuid} + '/opt_outs' + elem = self.query(url, headers={'X-Plex-Token': self._token, 'X-Plex-Client-Identifier': X_PLEX_IDENTIFIER}) - elem = ElementTree.fromstring(req.text) - for item in elem.iter('optOut'): - service = AccountOptOut(data=item, server=self._server) - service._initpath = optOuts - services.append(service) - - return services + return self.findItems(elem, cls=AccountOptOut, etag='optOut') def settings(self): """ Returns an user account settings :class:`~plexapi.myplex.AccountSettings` From 277f2ea7172efaa977e1c3e9e312046f743a9cbc Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 27 May 2021 09:40:10 -0400 Subject: [PATCH 189/356] onlineMediaSources further clean up --- plexapi/myplex.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index f2af74666..81ae45c72 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -704,8 +704,7 @@ def onlineMediaSources(self): """ Returns an user account Online Media Sourcessettings :class:`~plexapi.myplex.AccountOptOut` """ url = self.SETTINGS % {'userUUID': self.uuid} + '/opt_outs' - elem = self.query(url, headers={'X-Plex-Token': self._token, - 'X-Plex-Client-Identifier': X_PLEX_IDENTIFIER}) + elem = self.query(url) return self.findItems(elem, cls=AccountOptOut, etag='optOut') def settings(self): From 226b9834f7f5fbb9d5926f2d54d6c37f3d276a59 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 27 May 2021 10:06:09 -0400 Subject: [PATCH 190/356] MyPlex.settings slight clean up and property --- plexapi/myplex.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 81ae45c72..e93ce1bc8 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -707,15 +707,15 @@ def onlineMediaSources(self): elem = self.query(url) return self.findItems(elem, cls=AccountOptOut, etag='optOut') + @property def settings(self): """ Returns an user account settings :class:`~plexapi.myplex.AccountSettings` """ - req = requests.get(self.SETTINGS % {'userUUID': self.uuid} , + req = requests.get(self.SETTINGS % {'userUUID': self.uuid}, headers={'X-Plex-Token': self._token, 'X-Plex-Client-Identifier': X_PLEX_IDENTIFIER}) elem = ElementTree.fromstring(req.text) - for item in elem.iter('setting'): - return AccountSettings(data=item, server=self._server) + return self.findItems(elem, cls=AccountSettings, etag='setting')[0] def link(self, pin): """ Link a device to the account using a pin code. From 49732cf92afa8cd853d06720a5fe6b99ea0268c3 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 27 May 2021 10:12:41 -0400 Subject: [PATCH 191/356] Extra.addedAt docstring update. --- plexapi/video.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plexapi/video.py b/plexapi/video.py index d24d311d2..a6a9936f1 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -986,6 +986,21 @@ class Extra(Clip): Attributes: TAG (str): 'Extras' + TYPE (str): 'clip' + addedAt (datetime): Datetime the item was added to the library. + duration (int): Duration of the clip in milliseconds. + extraType (int): Unknown. + index (int): Plex index number for the clip. + key (str): API URL (/library/metadata/). + media (List<:class:`~plexapi.media.Media`>): List of media objects. + originallyAvailableAt (datetime): Datetime the clip was released. + ratingKey (int): Unique key identifying the item. + subtype (str): Type of clip (trailer, behindTheScenes, sceneOrSample, etc.). + summary (str): Summary of the movie, show, season, episode, or clip. + thumb (str): URL to thumbnail image (/library/metadata//thumb/). + title (str): Name of the movie, show, season, episode, or clip. + type (str): 'movie', 'show', 'season', 'episode', or 'clip'. + year (int): Year clip was released. """ TAG = 'Extras' From 9f5f2b7b124dd32c3fbf14e2c5c02db68da7ea86 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Fri, 28 May 2021 09:30:14 -0400 Subject: [PATCH 192/356] MediaContainer attribute ordering --- plexapi/base.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plexapi/base.py b/plexapi/base.py index 6dba37543..0f327f2f9 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -727,12 +727,11 @@ class MediaContainer(PlexObject): def _loadData(self, data): self._data = data self.allowSync = utils.cast(int, data.attrib.get('allowSync')) - self.librarySectionID = data.attrib.get('librarySectionID') - self.librarySectionTitle = data.attrib.get('librarySectionTitle') - self.librarySectionUUID = data.attrib.get('librarySectionUUID') self.augmentationKey = data.attrib.get('augmentationKey') self.identifier = data.attrib.get('identifier') - self.mediaTagVersion = data.attrib.get('mediaTagVersion') + self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) + self.librarySectionTitle = data.attrib.get('librarySectionTitle') + self.librarySectionUUID = data.attrib.get('librarySectionUUID') self.mediaTagPrefix = data.attrib.get('mediaTagPrefix') self.mediaTagVersion = data.attrib.get('mediaTagVersion') self.size = utils.cast(int, data.attrib.get('size')) From 9982b8e108ba913b3ee0e46602e17f1e909f6032 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Fri, 28 May 2021 09:30:24 -0400 Subject: [PATCH 193/356] MediaContainer docstring --- plexapi/base.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plexapi/base.py b/plexapi/base.py index 0f327f2f9..ae1020f36 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -720,6 +720,15 @@ class MediaContainer(PlexObject): Attributes: TAG (str): 'MediaContainer' + allowSync (int): Sync/Download is allowed/disallowed for feature. + augmentationKey (str): API URL (/library/metadata/augmentations/). + identifier (str): "com.plexapp.plugins.library" + librarySectionID (int): :class:`~plexapi.library.LibrarySection` ID. + librarySectionTitle (str): :class:`~plexapi.library.LibrarySection` title. + librarySectionUUID (str): :class:`~plexapi.library.LibrarySection` UUID. + mediaTagPrefix (str): "/system/bundle/media/flags/" + mediaTagVersion (int): Unknown + size (int): The number of items in the hub. """ TAG = 'MediaContainer' From 70ad8ba10c179f6c0b286c67c47280fabe82189b Mon Sep 17 00:00:00 2001 From: blacktwin Date: Fri, 28 May 2021 10:02:17 -0400 Subject: [PATCH 194/356] updateOptOut docstring --- plexapi/myplex.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index e93ce1bc8..35b313a20 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -1402,6 +1402,14 @@ def _loadData(self, data): self.value = data.attrib.get('value') def updateOptOut(self, option): + """Method for toggling Online Media Sources options. + Parameters: + option (str): see CHOICES + + Raises: + :class:`NotFound`: `option` str not found in CHOICES. + :class:`BadRequest`: option is currently set to `option`. + """ if option not in self.CHOICES: raise NotFound('%s not found in available choices: %s' % (option, self.CHOICES)) if option == self.value: From 44b4066273b92b20dd13dd8b68cbb2540fb8cc1e Mon Sep 17 00:00:00 2001 From: blacktwin Date: Fri, 28 May 2021 10:04:51 -0400 Subject: [PATCH 195/356] Clip.section docstring update --- plexapi/video.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/video.py b/plexapi/video.py index a6a9936f1..ec11efe7f 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -975,7 +975,7 @@ def locations(self): def section(self): """Return the :class:`~plexapi.library.LibrarySection` this item belongs to.""" - # Clip payloads currently do not contain 'librarySectionID'. + # Clip payloads may not contain 'librarySectionID' # Return None to avoid unnecessary attribute lookup attempts. return None From a131482cdcd7f068c01969e2384325761e2effb4 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 19:53:38 -0700 Subject: [PATCH 196/356] Update creating smart playlist using search filters --- plexapi/library.py | 77 +++++++++++++++++------------------ plexapi/playlist.py | 97 ++++++++++++++++++++++++--------------------- plexapi/server.py | 30 ++++++++++++-- 3 files changed, 113 insertions(+), 91 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index b262c2856..a0ab5e764 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -966,6 +966,37 @@ def _validateAdvancedSearch(self, filters, libtype): return validatedFilters + def _buildSearchKey(self, title=None, sort=None, libtype=None, filters=None, returnKwargs=False, **kwargs): + """ Returns the validated and formatted search query API key + (``/library/sections//all?``). + """ + args = {} + filter_args = [] + for field, values in list(kwargs.items()): + if field.split('__')[-1] not in OPERATORS: + filter_args.append(self._validateFilterField(field, values, libtype)) + del kwargs[field] + if title is not None: + if isinstance(title, (list, tuple)): + filter_args.append(self._validateFilterField('title', title, libtype)) + else: + args['title'] = title + if filters is not None: + filter_args.extend(self._validateAdvancedSearch(filters, libtype)) + if sort is not None: + args['sort'] = self._validateSortFields(sort, libtype) + if libtype is not None: + args['type'] = utils.searchType(libtype) + + joined_args = utils.joinArgs(args).lstrip('?') + joined_filter_args = '&'.join(filter_args) if filter_args else '' + params = '&'.join([joined_args, joined_filter_args]).strip('&') + key = '/library/sections/%s/all?%s' % (self.key, params) + + if returnKwargs: + return key, kwargs + return key + def hubSearch(self, query, mediatype=None, limit=None): """ Returns the hub search results for this library. See :func:`plexapi.server.PlexServer.search` for details and parameters. @@ -1205,30 +1236,8 @@ def search(self, title=None, sort=None, maxresults=None, libtype=None, library.search(genre="holiday", viewCount__gte=3) """ - # cleanup the core arguments - args = {} - filter_args = [] - for field, values in list(kwargs.items()): - if field.split('__')[-1] not in OPERATORS: - filter_args.append(self._validateFilterField(field, values, libtype)) - del kwargs[field] - if title is not None: - if isinstance(title, (list, tuple)): - filter_args.append(self._validateFilterField('title', title, libtype)) - else: - args['title'] = title - if filters is not None: - filter_args.extend(self._validateAdvancedSearch(filters, libtype)) - if sort is not None: - args['sort'] = self._validateSortFields(sort, libtype) - if libtype is not None: - args['type'] = utils.searchType(libtype) - - joined_args = utils.joinArgs(args).lstrip('?') - joined_filter_args = '&'.join(filter_args) if filter_args else '' - params = '&'.join([joined_args, joined_filter_args]).strip('&') - key = '/library/sections/%s/all?%s' % (self.key, params) - + key, kwargs = self._buildSearchKey( + title=title, sort=sort, libtype=libtype, filters=filters, returnKwargs=True, **kwargs) return self._search(key, maxresults, container_start, container_size, **kwargs) def _search(self, key, maxresults, container_start, container_size, **kwargs): @@ -1326,15 +1335,6 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so if not self.allowSync: raise BadRequest('The requested library is not allowed to sync') - args = {} - filter_args = [] - for field, values in kwargs.items(): - filter_args.append(self._validateFilterField(field, values, libtype)) - if sort is not None: - args['sort'] = self._validateSortFields(sort, libtype) - if libtype is not None: - args['type'] = utils.searchType(libtype) - myplex = self._server.myPlexAccount() sync_item = SyncItem(self._server, None) sync_item.title = title if title else self.title @@ -1343,10 +1343,7 @@ def sync(self, policy, mediaSettings, client=None, clientId=None, title=None, so sync_item.metadataType = self.METADATA_TYPE sync_item.machineIdentifier = self._server.machineIdentifier - joined_args = utils.joinArgs(args).lstrip('?') - joined_filter_args = '&'.join(filter_args) if filter_args else '' - params = '&'.join([joined_args, joined_filter_args]).strip('&') - key = '/library/sections/%s/all?%s' % (self.key, params) + key = self._buildSearchKey(title=title, sort=sort, libtype=libtype, **kwargs) sync_item.location = 'library://%s/directory/%s' % (self.uuid, quote_plus(key)) sync_item.policy = policy @@ -1453,7 +1450,6 @@ class ShowSection(LibrarySection): TAG (str): 'Directory' TYPE (str): 'show' """ - TAG = 'Directory' TYPE = 'show' METADATA_TYPE = 'episode' @@ -1540,9 +1536,8 @@ class MusicSection(LibrarySection): """ TAG = 'Directory' TYPE = 'artist' - - CONTENT_TYPE = 'audio' METADATA_TYPE = 'track' + CONTENT_TYPE = 'audio' def albums(self): """ Returns a list of :class:`~plexapi.audio.Album` objects in this section. """ @@ -1634,8 +1629,8 @@ class PhotoSection(LibrarySection): """ TAG = 'Directory' TYPE = 'photo' - CONTENT_TYPE = 'photo' METADATA_TYPE = 'photo' + CONTENT_TYPE = 'photo' def all(self, libtype=None, **kwargs): """ Returns a list of all items from this library section. diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 7e6f10b1f..8acffed3e 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -172,22 +172,27 @@ def playQueue(self, *args, **kwargs): @classmethod def _create(cls, server, title, items): - """ Create a playlist. """ + """ Create a regular playlist. """ if not items: raise BadRequest('Must include items to add when creating new playlist') if items and not isinstance(items, (list, tuple)): items = [items] + + listType = items[0].listType ratingKeys = [] for item in items: - if item.listType != items[0].listType: # pragma: no cover + if item.listType != listType: # pragma: no cover raise BadRequest('Can not mix media types when building a playlist') ratingKeys.append(str(item.ratingKey)) + ratingKeys = ','.join(ratingKeys) - uuid = items[0].section().uuid + uuid = server.machineIdentifier + uri = 'server://%s/com.plexapp.plugins.library/library/metadata/%s' % (uuid, ratingKeys) + key = '/playlists%s' % utils.joinArgs({ - 'uri': 'library://%s/directory//library/metadata/%s' % (uuid, ratingKeys), - 'type': items[0].listType, + 'uri': uri, + 'type': listType, 'title': title, 'smart': 0 }) @@ -195,54 +200,19 @@ def _create(cls, server, title, items): return cls(server, data, initpath=key) @classmethod - def create(cls, server, title, items=None, section=None, limit=None, smart=False, **kwargs): - """Create a playlist. - - Parameters: - server (:class:`~plexapi.server.PlexServer`): Server your connected to. - title (str): Title of the playlist. - items (Iterable): Iterable of objects that should be in the playlist. - section (:class:`~plexapi.library.LibrarySection`, str): - limit (int): default None. - smart (bool): default False. - - **kwargs (dict): is passed to the filters. For a example see the search method. - - Raises: - :class:`plexapi.exceptions.BadRequest`: when no items are included in create request. - - Returns: - :class:`~plexapi.playlist.Playlist`: an instance of created Playlist. - """ - if smart: - return cls._createSmart(server, title, section, limit, **kwargs) - - else: - return cls._create(server, title, items) - - @classmethod - def _createSmart(cls, server, title, section, limit=None, **kwargs): + def _createSmart(cls, server, title, section, limit=None, sort=None, filters=None, **kwargs): """ Create a Smart playlist. """ - if not isinstance(section, LibrarySection): section = server.library.section(section) - sectionType = utils.searchType(section.type) - sectionId = section.key - uuid = section.uuid - uri = 'library://%s/directory//library/sections/%s/all?type=%s' % (uuid, - sectionId, - sectionType) + searchKey = section._buildSearchKey( + sort=sort, libtype=section.METADATA_TYPE, filters=filters, **kwargs) + uuid = server.machineIdentifier + uri = 'server://%s/com.plexapp.plugins.library%s' % (uuid, searchKey) + if limit: uri = uri + '&limit=%s' % str(limit) - for category, value in kwargs.items(): - sectionChoices = section.listFilterChoices(category) - for choice in sectionChoices: - if str(choice.title).lower() == str(value).lower(): - uri = uri + '&%s=%s' % (category.lower(), str(choice.key)) - - uri = uri + '&sourceType=%s' % sectionType key = '/playlists%s' % utils.joinArgs({ 'uri': uri, 'type': section.CONTENT_TYPE, @@ -252,6 +222,41 @@ def _createSmart(cls, server, title, section, limit=None, **kwargs): data = server.query(key, method=server._session.post)[0] return cls(server, data, initpath=key) + @classmethod + def create(cls, server, title, items=None, section=None, limit=None, smart=False, + sort=None, filters=None, **kwargs): + """Create a playlist. + + Parameters: + server (:class:`~plexapi.server.PlexServer`): Server to create the playlist on. + title (str): Title of the playlist. + items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> + or List<:class:`~plexapi.photo.Photo`>): Regular playlists only, list of audio, + video, or photo objects to be added to the playlist. + smart (bool): True to create a smart playlist. Default False. + section (:class:`~plexapi.library.LibrarySection`, str): Smart playlists only, + library section to create the playlist in. + limit (int): Smart playlists only, limit the number of items in the playlist. + sort (str or list, optional): Smart playlists only, a string of comma separated sort fields + or a list of sort fields in the format ``column:dir``. + See :func:`plexapi.library.LibrarySection.search` for more info. + filters (dict): Smart playlists only, a dictionary of advanced filters. + See :func:`plexapi.library.LibrarySection.search` for more info. + **kwargs (dict): Smart playlists only, additional custom filters to apply to the + search results. See :func:`plexapi.library.LibrarySection.search` for more info. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When no items are included to create the playlist. + :class:`plexapi.exceptions.BadRequest`: When mixing media types in the playlist. + + Returns: + :class:`~plexapi.playlist.Playlist`: An instance of created Playlist. + """ + if smart: + return cls._createSmart(server, title, section, limit, sort, filters, **kwargs) + else: + return cls._create(server, title, items) + def copyToUser(self, user): """ Copy playlist to another user account. diff --git a/plexapi/server.py b/plexapi/server.py index 3c6d63f5a..9219afc89 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -391,14 +391,36 @@ def client(self, name): raise NotFound('Unknown client name: %s' % name) - def createPlaylist(self, title, items=None, section=None, limit=None, smart=None, **kwargs): + def createPlaylist(self, title, items=None, section=None, limit=None, smart=False, + sort=None, filters=None, **kwargs): """ Creates and returns a new :class:`~plexapi.playlist.Playlist`. Parameters: - title (str): Title of the playlist to be created. - items (list): List of media items to include in the playlist. + title (str): Title of the playlist. + items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> + or List<:class:`~plexapi.photo.Photo`>): Regular playlists only, list of audio, + video, or photo objects to be added to the playlist. + smart (bool): True to create a smart playlist. Default False. + section (:class:`~plexapi.library.LibrarySection`, str): Smart playlists only, + library section to create the playlist in. + limit (int): Smart playlists only, limit the number of items in the playlist. + sort (str or list, optional): Smart playlists only, a string of comma separated sort fields + or a list of sort fields in the format ``column:dir``. + See :func:`plexapi.library.LibrarySection.search` for more info. + filters (dict): Smart playlists only, a dictionary of advanced filters. + See :func:`plexapi.library.LibrarySection.search` for more info. + **kwargs (dict): Smart playlists only, additional custom filters to apply to the + search results. See :func:`plexapi.library.LibrarySection.search` for more info. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When no items are included to create the playlist. + :class:`plexapi.exceptions.BadRequest`: When mixing media types in the playlist. + + Returns: + :class:`~plexapi.playlist.Playlist`: A new instance of the created Playlist. """ - return Playlist.create(self, title, items=items, limit=limit, section=section, smart=smart, **kwargs) + return Playlist.create(self, title, items=items, section=section, limit=limit, smart=smart, + sort=sort, filters=filters, **kwargs) def createPlayQueue(self, item, **kwargs): """ Creates and returns a new :class:`~plexapi.playqueue.PlayQueue`. From be2293ad30053848c3c470ddc9d3039c72414c71 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 26 May 2021 22:54:48 -0700 Subject: [PATCH 197/356] Update playlist attributes for smart playlists --- plexapi/playlist.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 8acffed3e..cb3c35849 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -20,9 +20,11 @@ class Playlist(PlexPartialObject, Playable, ArtMixin, PosterMixin): addedAt (datetime): Datetime the playlist was added to the server. allowSync (bool): True if you allow syncing playlists. composite (str): URL to composite image (/playlist//composite/) + content (str): The filter URI string for smart playlists. duration (int): Duration of the playlist in milliseconds. durationInSeconds (int): Duration of the playlist in seconds. guid (str): Plex GUID for the playlist (com.plexapp.agents.none://XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX). + icon (str): Icon URI string for smart playlists. key (str): API URL (/playlist/). leafCount (int): Number of items in the playlist view. playlistType (str): 'audio', 'video', or 'photo' @@ -42,8 +44,10 @@ def _loadData(self, data): self.addedAt = toDatetime(data.attrib.get('addedAt')) self.allowSync = cast(bool, data.attrib.get('allowSync')) self.composite = data.attrib.get('composite') # url to thumbnail + self.content = data.attrib.get('content') self.duration = cast(int, data.attrib.get('duration')) self.durationInSeconds = cast(int, data.attrib.get('durationInSeconds')) + self.icon = data.attrib.get('icon') self.guid = data.attrib.get('guid') self.key = data.attrib.get('key', '').replace('/items', '') # FIX_BUG_50 self.leafCount = cast(int, data.attrib.get('leafCount')) From 3edec52e2eefa087c25a3ee4a94f8a68fe8e02fd Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 26 May 2021 22:56:57 -0700 Subject: [PATCH 198/356] Update playlist add, remove, move, and edit methods --- plexapi/playlist.py | 134 ++++++++++++++++++++++++++++++++------------ 1 file changed, 98 insertions(+), 36 deletions(-) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index cb3c35849..a8b7e5e91 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -7,7 +7,7 @@ from plexapi.library import LibrarySection from plexapi.mixins import ArtMixin, PosterMixin from plexapi.playqueue import PlayQueue -from plexapi.utils import cast, toDatetime +from plexapi.utils import cast, deprecated, toDatetime @utils.registerPlexObject @@ -101,6 +101,13 @@ def __contains__(self, other): # pragma: no cover def __getitem__(self, key): # pragma: no cover return self.items()[key] + def _uriRoot(self, server=None): + if server: + uuid = server.machineIentifier + else: + uuid = self._server.machineIdentifier + return 'server://%s/com.plexapp.plugins.library' % uuid + def item(self, title): """ Returns the item in the playlist that matches the specified title. @@ -125,61 +132,119 @@ def get(self, title): return self.item(title) def addItems(self, items): - """ Add items to a playlist. """ - if not isinstance(items, (list, tuple)): + """ Add items to the playlist. + + Parameters: + items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> + or List<:class:`~plexapi.photo.Photo`>): List of audio, video, or 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] + ratingKeys = [] for item in items: if item.listType != self.playlistType: # pragma: no cover raise BadRequest('Can not mix media types when building a playlist: %s and %s' % (self.playlistType, item.listType)) ratingKeys.append(str(item.ratingKey)) - uuid = items[0].section().uuid + ratingKeys = ','.join(ratingKeys) + uri = '%s/library/metadata/%s' % (self._uriRoot(), ratingKeys) + key = '%s/items%s' % (self.key, utils.joinArgs({ - 'uri': 'library://%s/directory//library/metadata/%s' % (uuid, ratingKeys) + 'uri': uri })) - result = self._server.query(key, method=self._server._session.put) - self.reload() - return result + self._server.query(key, method=self._server._session.put) + @deprecated('use "removeItems" instead', stacklevel=3) def removeItem(self, item): - """ Remove a file from a playlist. """ - key = '%s/items/%s' % (self.key, item.playlistItemID) - result = self._server.query(key, method=self._server._session.delete) - self.reload() - return result + self.removeItems(item) + + def removeItems(self, items): + """ Remove items from the playlist. + + Parameters: + items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> + or List<:class:`~plexapi.photo.Photo`>): List of audio, video, or photo objects + to be removed from the playlist. Items must be retrieved from + :func:`plexapi.playlist.Playlist.items`. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When trying to remove items from a smart playlist. + """ + if self.smart: + raise BadRequest('Cannot remove items from a smart playlist.') + + if items and not isinstance(items, (list, tuple)): + items = [items] + + for item in items: + key = '%s/items/%s' % (self.key, item.playlistItemID) + self._server.query(key, method=self._server._session.delete) def moveItem(self, item, after=None): - """ Move a to a new position in playlist. """ + """ Move an item to a new position in playlist. + + Parameters: + item (:class:`~plexapi.audio.Audio` or :class:`~plexapi.video.Video` + or :class:`~plexapi.photo.Photo`): Audio, video, or photo object + to be moved in the playlist. Item must be retrieved from + :func:`plexapi.playlist.Playlist.items`. + after (:class:`~plexapi.audio.Audio` or :class:`~plexapi.video.Video` + or :class:`~plexapi.photo.Photo`): Audio, video, or photo object + to move the item after in the playlist. Item must be retrieved from + :func:`plexapi.playlist.Playlist.items`. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When trying to move items in a smart playlist. + """ + if self.smart: + raise BadRequest('Cannot move items in a smart playlist.') + key = '%s/items/%s/move' % (self.key, item.playlistItemID) if after: key += '?after=%s' % after.playlistItemID - result = self._server.query(key, method=self._server._session.put) - self.reload() - return result + self._server.query(key, method=self._server._session.put) + + def edit(self, title=None, summary=None): - """ Edit playlist. """ - key = '/library/metadata/%s%s' % (self.ratingKey, utils.joinArgs({'title': title, 'summary': summary})) - result = self._server.query(key, method=self._server._session.put) - self.reload() - return result + """ Edit the playlist. + + Parameters: + title (str, optional): The title of the playlist. + summary (str, optional): The summary of the playlist. + """ + args = {} + if title: + args['title'] = title + if summary: + args['summary'] = summary + + key = '%s%s' % (self.key, utils.joinArgs(args)) + self._server.query(key, method=self._server._session.put) def delete(self): - """ Delete playlist. """ - return self._server.query(self.key, method=self._server._session.delete) + """ Delete the playlist. """ + self._server.query(self.key, method=self._server._session.delete) def playQueue(self, *args, **kwargs): - """ Create a playqueue from this playlist. """ + """ Returns a new :class:`~plexapi.playqueue.PlayQueue` from the playlist. """ return PlayQueue.create(self._server, self, *args, **kwargs) @classmethod def _create(cls, server, title, items): """ Create a regular playlist. """ if not items: - raise BadRequest('Must include items to add when creating new playlist') - + raise BadRequest('Must include items to add when creating new playlist.') + if items and not isinstance(items, (list, tuple)): items = [items] @@ -187,12 +252,11 @@ def _create(cls, server, title, items): ratingKeys = [] for item in items: if item.listType != listType: # pragma: no cover - raise BadRequest('Can not mix media types when building a playlist') + raise BadRequest('Can not mix media types when building a playlist.') ratingKeys.append(str(item.ratingKey)) ratingKeys = ','.join(ratingKeys) - uuid = server.machineIdentifier - uri = 'server://%s/com.plexapp.plugins.library/library/metadata/%s' % (uuid, ratingKeys) + uri = '%s/library/metadata/%s' % (cls._uriRoot(server), ratingKeys) key = '/playlists%s' % utils.joinArgs({ 'uri': uri, @@ -205,14 +269,13 @@ def _create(cls, server, title, items): @classmethod def _createSmart(cls, server, title, section, limit=None, sort=None, filters=None, **kwargs): - """ Create a Smart playlist. """ + """ Create a smart playlist. """ if not isinstance(section, LibrarySection): section = server.library.section(section) searchKey = section._buildSearchKey( sort=sort, libtype=section.METADATA_TYPE, filters=filters, **kwargs) - uuid = server.machineIdentifier - uri = 'server://%s/com.plexapp.plugins.library%s' % (uuid, searchKey) + uri = '%s%s' % (cls._uriRoot(server), searchKey) if limit: uri = uri + '&limit=%s' % str(limit) @@ -229,7 +292,7 @@ def _createSmart(cls, server, title, section, limit=None, sort=None, filters=Non @classmethod def create(cls, server, title, items=None, section=None, limit=None, smart=False, sort=None, filters=None, **kwargs): - """Create a playlist. + """ Create a playlist. Parameters: server (:class:`~plexapi.server.PlexServer`): Server to create the playlist on. @@ -254,7 +317,7 @@ def create(cls, server, title, items=None, section=None, limit=None, smart=False :class:`plexapi.exceptions.BadRequest`: When mixing media types in the playlist. Returns: - :class:`~plexapi.playlist.Playlist`: An instance of created Playlist. + :class:`~plexapi.playlist.Playlist`: A new instance of the created Playlist. """ if smart: return cls._createSmart(server, title, section, limit, sort, filters, **kwargs) @@ -297,7 +360,6 @@ def sync(self, videoQuality=None, photoResolution=None, audioBitrate=None, clien Returns: :class:`~plexapi.sync.SyncItem`: an instance of created syncItem. """ - if not self.allowSync: raise BadRequest('The playlist is not allowed to sync') From 4c9964db1b3644a1bf3be0c259cb133de29b6ced Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 00:28:53 -0700 Subject: [PATCH 199/356] Add method to retrieve playlist section --- plexapi/playlist.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index a8b7e5e91..42b4e77dc 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- -from urllib.parse import quote_plus +import re +from urllib.parse import quote_plus, unquote from plexapi import utils from plexapi.base import Playable, PlexPartialObject @@ -59,6 +60,7 @@ def _loadData(self, data): self.type = data.attrib.get('type') self.updatedAt = toDatetime(data.attrib.get('updatedAt')) self._items = None # cache for self.items + self._section = None # cache for self.section def __len__(self): # pragma: no cover return len(self.items()) @@ -108,6 +110,33 @@ def _uriRoot(self, server=None): uuid = self._server.machineIdentifier return 'server://%s/com.plexapp.plugins.library' % uuid + def section(self): + """ Returns the :class:`~plexapi.library.LibrarySection` this smart playlist belongs to. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When trying to get the section for a regular playlist. + :class:`plexapi.exceptions.Unsupported`: When unable to determine the library section. + """ + if not self.smart: + raise BadRequest('Regular playlists are not associated with a library.') + + if self._section is None: + # Try to parse the library section from the content URI string + match = re.search(r'/library/sections/(\d+)/all', unquote(self.content or '')) + if match: + sectionKey = int(match.group(1)) + self._section = self._server.library.sectionByID(sectionKey) + return self._section + + # Try to get the library section from the first item in the playlist + if self.items(): + self._section = self.items()[0].section() + return self._section + + raise Unsupported('Unable to determine the library section') + + return self._section + def item(self, title): """ Returns the item in the playlist that matches the specified title. From 2af15e2d739a407fddb8d3300242b32d2bc8b6bd Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 00:05:17 -0700 Subject: [PATCH 200/356] Add method to update smart playlist filters --- plexapi/playlist.py | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 42b4e77dc..32c1ce20a 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -151,7 +151,7 @@ def item(self, title): def items(self): """ Returns a list of all items in the playlist. """ if self._items is None: - key = '/playlists/%s/items' % self.ratingKey + key = '%s/items' % self.key items = self.fetchItems(key) self._items = items return self._items @@ -242,7 +242,37 @@ def moveItem(self, item, after=None): key += '?after=%s' % after.playlistItemID self._server.query(key, method=self._server._session.put) + def updateFilters(self, limit=None, sort=None, filters=None, **kwargs): + """ Update the filters for a smart playlist. + Parameters: + limit (int): Limit the number of items in the playlist. + sort (str or list, optional): A string of comma separated sort fields + or a list of sort fields in the format ``column:dir``. + See :func:`plexapi.library.LibrarySection.search` for more info. + filters (dict): A dictionary of advanced filters. + See :func:`plexapi.library.LibrarySection.search` for more info. + **kwargs (dict): Additional custom filters to apply to the search results. + See :func:`plexapi.library.LibrarySection.search` for more info. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When trying update filters for a regular playlist. + """ + if not self.smart: + raise BadRequest('Cannot update filters for a regular playlist.') + + section = self.section() + searchKey = section._buildSearchKey( + sort=sort, libtype=section.METADATA_TYPE, filters=filters, **kwargs) + uri = '%s%s' % (self._uriRoot(), searchKey) + + if limit: + uri = uri + '&limit=%s' % str(limit) + + key = '%s/items%s' % (self.key, utils.joinArgs({ + 'uri': uri + })) + self._server.query(key, method=self._server._session.put) def edit(self, title=None, summary=None): """ Edit the playlist. @@ -331,7 +361,7 @@ def create(cls, server, title, items=None, section=None, limit=None, smart=False video, or photo objects to be added to the playlist. smart (bool): True to create a smart playlist. Default False. section (:class:`~plexapi.library.LibrarySection`, str): Smart playlists only, - library section to create the playlist in. + the library section to create the playlist in. limit (int): Smart playlists only, limit the number of items in the playlist. sort (str or list, optional): Smart playlists only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. @@ -340,7 +370,7 @@ def create(cls, server, title, items=None, section=None, limit=None, smart=False See :func:`plexapi.library.LibrarySection.search` for more info. **kwargs (dict): Smart playlists only, additional custom filters to apply to the search results. See :func:`plexapi.library.LibrarySection.search` for more info. - + Raises: :class:`plexapi.exceptions.BadRequest`: When no items are included to create the playlist. :class:`plexapi.exceptions.BadRequest`: When mixing media types in the playlist. From 82e71793b1385445b2c36afe6eab02398392da70 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 00:16:01 -0700 Subject: [PATCH 201/356] Update playlist tests --- tests/test_playlist.py | 116 +++++++++++++++++++++++++++++++++++------ 1 file changed, 101 insertions(+), 15 deletions(-) diff --git a/tests/test_playlist.py b/tests/test_playlist.py index a08b7dd6a..55b23922b 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -2,13 +2,12 @@ import time import pytest -from plexapi.exceptions import NotFound +from plexapi.exceptions import BadRequest, NotFound, Unsupported def test_create_playlist(plex, show): # create the playlist title = 'test_create_playlist_show' - #print('Creating playlist %s..' % title) episodes = show.episodes() playlist = plex.createPlaylist(title, episodes[:3]) try: @@ -21,32 +20,55 @@ def test_create_playlist(plex, show): assert items[2].ratingKey == episodes[2].ratingKey, 'Items not in proper order [2a].' # Test move items around (b) playlist.moveItem(items[1]) - items = playlist.items() + items = playlist.reload().items() assert items[0].ratingKey == episodes[1].ratingKey, 'Items not in proper order [0b].' assert items[1].ratingKey == episodes[0].ratingKey, 'Items not in proper order [1b].' assert items[2].ratingKey == episodes[2].ratingKey, 'Items not in proper order [2b].' # Test move items around (c) playlist.moveItem(items[0], items[1]) - items = playlist.items() + items = playlist.reload().items() assert items[0].ratingKey == episodes[0].ratingKey, 'Items not in proper order [0c].' assert items[1].ratingKey == episodes[1].ratingKey, 'Items not in proper order [1c].' assert items[2].ratingKey == episodes[2].ratingKey, 'Items not in proper order [2c].' # Test add item playlist.addItems(episodes[3]) - items = playlist.items() + items = playlist.reload().items() assert items[3].ratingKey == episodes[3].ratingKey, 'Missing added item: %s' % episodes[3] # Test add two items playlist.addItems(episodes[4:6]) - items = playlist.items() + items = playlist.reload().items() assert items[4].ratingKey == episodes[4].ratingKey, 'Missing added item: %s' % episodes[4] assert items[5].ratingKey == episodes[5].ratingKey, 'Missing added item: %s' % episodes[5] assert len(items) == 6, 'Playlist should have 6 items, %s found' % len(items) # Test remove item - toremove = items[3] - playlist.removeItem(toremove) - items = playlist.items() - assert toremove not in items, 'Removed item still in playlist: %s' % items[3] + toremove = items[5] + playlist.removeItems(toremove) + items = playlist.reload().items() + assert toremove not in items, 'Removed item still in playlist: %s' % items[5] assert len(items) == 5, 'Playlist should have 5 items, %s found' % len(items) + # Test remove two item + toremove = items[3:5] + playlist.removeItems(toremove) + items = playlist.reload().items() + assert toremove[0] not in items, 'Removed item still in playlist: %s' % items[3] + assert toremove[1] not in items, 'Removed item still in playlist: %s' % items[4] + assert len(items) == 3, 'Playlist should have 5 items, %s found' % len(items) + finally: + playlist.delete() + + +def test_playlist_edit(plex, movie): + title = 'test_playlist_edit' + new_title = 'test_playlist_edit_new_title' + new_summary = 'test_playlist_edit_summary' + try: + playlist = plex.createPlaylist(title, movie) + assert playlist.title == title + assert playlist.summary == '' + playlist.edit(title=new_title, summary=new_summary) + playlist.reload() + assert playlist.title == new_title + assert playlist.summary == new_summary finally: playlist.delete() @@ -111,10 +133,74 @@ def test_copyToUser(plex, show, fresh_plex, shared_username): playlist.delete() -def test_smart_playlist(plex, movies): +def test_smart_playlist(plex, movies, movie): + try: + playlist = plex.createPlaylist( + title='smart_playlist', + smart=True, + limit=2, + section=movies, + sort='titleSort:desc', + **{'year>>': 2007} + ) + items = playlist.items() + assert playlist.smart + assert len(items) == 2 + assert items == sorted(items, key=lambda i: i.titleSort, reverse=True) + playlist.updateFilters(limit=1, year=movie.year) + playlist.reload() + assert len(playlist.items()) == 1 + assert movie in playlist + finally: + playlist.delete() + + +def test_smart_playlist_section(plex, movies, movie): + title = 'test_playlist_section' try: - pl = plex.createPlaylist(title='smart_playlist', smart=True, limit=1, section=movies, year=2008) - assert len(pl.items()) == 1 - assert pl.smart + playlist = plex.createPlaylist(title, movie) + with pytest.raises(BadRequest): + playlist.section() finally: - pl.delete() + playlist.delete() + + try: + playlist = plex.createPlaylist(title, smart=True, section=movies, **{'year>>': 2000}) + assert playlist.section() == movies + playlist.content = '' + assert playlist.section() == movies + playlist.updateFilters(year=1990) + playlist.reload() + playlist.content = '' + with pytest.raises(Unsupported): + playlist.section() + finally: + playlist.delete() + + +def test_playlist_exceptions(plex, movies, movie, artist): + title = 'test_playlist_exceptions' + try: + playlist = plex.createPlaylist(title, movie) + with pytest.raises(BadRequest): + playlist.updateFilters() + with pytest.raises(BadRequest): + playlist.addItems(artist) + finally: + playlist.delete() + + with pytest.raises(BadRequest): + plex.createPlaylist(title, items=[]) + with pytest.raises(BadRequest): + plex.createPlaylist(title, items=[movie, artist]) + + try: + playlist = plex.createPlaylist(title, smart=True, section=movies, **{'year>>': 2000}) + with pytest.raises(BadRequest): + playlist.addItems(movie) + with pytest.raises(BadRequest): + playlist.removeItems(movie) + with pytest.raises(BadRequest): + playlist.moveItem(movie) + finally: + playlist.delete() From 00be05f17b13393a483dee6584f3fd144661df2e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 22:59:14 -0700 Subject: [PATCH 202/356] Add doc strings to playlist properties --- plexapi/playlist.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 32c1ce20a..2cd37480a 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -76,6 +76,7 @@ def thumb(self): @property def metadataType(self): + """ Returns the type of metadata in the playlist (movie, track, or photo). """ if self.isVideo: return 'movie' elif self.isAudio: @@ -87,14 +88,17 @@ def metadataType(self): @property def isVideo(self): + """ Returns True if this is a video playlist. """ return self.playlistType == 'video' @property def isAudio(self): + """ Returns True if this is an audio playlist. """ return self.playlistType == 'audio' @property def isPhoto(self): + """ Returns True if this is a photo playlist. """ return self.playlistType == 'photo' def __contains__(self, other): # pragma: no cover @@ -142,6 +146,9 @@ def item(self, title): Parameters: title (str): Title of the item to return. + + Raises: + :class:`plexapi.exceptions.NotFound`: When the item is not found in the playlist. """ for item in self.items(): if item.title.lower() == title.lower(): From a1861c5595e8c57eb1af37f82ab833f3a6a9400d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 00:26:53 -0700 Subject: [PATCH 203/356] Add retrieving server playlists by type --- plexapi/server.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/plexapi/server.py b/plexapi/server.py index 9219afc89..2ab8b39bb 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -519,11 +519,17 @@ def history(self, maxresults=9999999, mindate=None, ratingKey=None, accountID=No args['X-Plex-Container-Start'] += args['X-Plex-Container-Size'] return results - def playlists(self): - """ Returns a list of all :class:`~plexapi.playlist.Playlist` objects saved on the server. """ - # TODO: Add sort and type options? - # /playlists/all?type=15&sort=titleSort%3Aasc&playlistType=video&smart=0 - return self.fetchItems('/playlists') + def playlists(self, playlistType=None): + """ Returns a list of all :class:`~plexapi.playlist.Playlist` objects on the server. + + Parameters: + playlistType (str, optional): The type of playlists to return (audio, video, photo). + Default returns all playlists. + """ + key = '/playlists' + if playlistType: + key = '%s?playlistType=%s' % (key, playlistType) + return self.fetchItems(key) def playlist(self, title): """ Returns the :class:`~plexapi.client.Playlist` that matches the specified title. From b934228d8a9ba926c243f0c8ff3c3256461d33b2 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 00:27:09 -0700 Subject: [PATCH 204/356] Update tests for retrieving playlists by type --- tests/test_server.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_server.py b/tests/test_server.py index b72665967..44b0a58e3 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -163,6 +163,8 @@ def test_server_playlists(plex, show): try: playlists = plex.playlists() assert len(playlists) == count + 1 + assert playlist in plex.playlists(playlistType='video') + assert playlist not in plex.playlists(playlistType='audio') finally: playlist.delete() From 7d90fd60e86411607963f6804f22ba2ec79bfe6f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 20:06:43 -0700 Subject: [PATCH 205/356] Add library alias to create playlist --- plexapi/library.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plexapi/library.py b/plexapi/library.py index a0ab5e764..62addbc79 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1374,6 +1374,14 @@ def playlists(self, **kwargs): key = '/playlists?type=15&playlistType=%s§ionID=%s' % (self.CONTENT_TYPE, self.key) return self.fetchItems(key, **kwargs) + def createPlaylist(self, title, items=None, limit=None, smart=False, + sort=None, filters=None, **kwargs): + """ Alias for :func:`~plexapi.server.PlexServer.createPlaylist` using this + :class:`~plexapi.library.LibrarySection`. + """ + return self._server.createPlaylist(title, items=items, section=self, limit=limit, smart=smart, + sort=sort, filters=filters, **kwargs) + @deprecated('use "listFields" instead') def filterFields(self, mediaType=None): return self.listFields(libtype=mediaType) From 8397ab214575d62f78670e98ced0bd0930a1073e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 20:06:53 -0700 Subject: [PATCH 206/356] Add test for library create playlist --- tests/test_library.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/test_library.py b/tests/test_library.py index 98d016bf1..787f56977 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -199,6 +199,15 @@ def test_library_MovieSection_collections(movies, collection): assert len(movies.collections()) +def test_library_MovieSection_createPlaylist(movies): + items = movies.all() + try: + playlist = movies.createPlaylist("Library Playlist", items=items) + assert len(playlist) == len(items) + finally: + playlist.delete() + + def test_library_ShowSection_all(tvshows): assert len(tvshows.all(title__iexact="The 100")) From 0ed9240909c0196d0447d236006f909d77c2e456 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 20:09:49 -0700 Subject: [PATCH 207/356] Reorganize playlist dunder methods --- plexapi/playlist.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 2cd37480a..c81b05eb8 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -69,6 +69,12 @@ def __iter__(self): # pragma: no cover for item in self.items(): yield item + def __contains__(self, other): # pragma: no cover + return any(i.key == other.key for i in self.items()) + + def __getitem__(self, key): # pragma: no cover + return self.items()[key] + @property def thumb(self): """ Alias to self.composite. """ @@ -101,12 +107,6 @@ def isPhoto(self): """ Returns True if this is a photo playlist. """ return self.playlistType == 'photo' - def __contains__(self, other): # pragma: no cover - return any(i.key == other.key for i in self.items()) - - def __getitem__(self, key): # pragma: no cover - return self.items()[key] - def _uriRoot(self, server=None): if server: uuid = server.machineIentifier From a435a5a9fa75f987e401e3c994cb5da58cb088b3 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 21:14:46 -0700 Subject: [PATCH 208/356] Add limit to search filter --- plexapi/library.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 62addbc79..1baa4ec30 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -966,7 +966,7 @@ def _validateAdvancedSearch(self, filters, libtype): return validatedFilters - def _buildSearchKey(self, title=None, sort=None, libtype=None, filters=None, returnKwargs=False, **kwargs): + def _buildSearchKey(self, title=None, sort=None, libtype=None, limit=None, filters=None, returnKwargs=False, **kwargs): """ Returns the validated and formatted search query API key (``/library/sections//all?``). """ @@ -987,6 +987,8 @@ def _buildSearchKey(self, title=None, sort=None, libtype=None, filters=None, ret args['sort'] = self._validateSortFields(sort, libtype) if libtype is not None: args['type'] = utils.searchType(libtype) + if limit is not None: + args['limit'] = limit joined_args = utils.joinArgs(args).lstrip('?') joined_filter_args = '&'.join(filter_args) if filter_args else '' @@ -1004,7 +1006,7 @@ def hubSearch(self, query, mediatype=None, limit=None): return self._server.search(query, mediatype, limit, sectionId=self.key) def search(self, title=None, sort=None, maxresults=None, libtype=None, - container_start=0, container_size=X_PLEX_CONTAINER_SIZE, filters=None, **kwargs): + container_start=0, container_size=X_PLEX_CONTAINER_SIZE, limit=None, filters=None, **kwargs): """ Search the library. The http requests will be batched in container_size. If you are only looking for the first results, it would be wise to set the maxresults option to that amount so the search doesn't iterate over all results on the server. @@ -1020,7 +1022,8 @@ def search(self, title=None, sort=None, maxresults=None, libtype=None, return :class:`~plexapi.video.Episode` objects) container_start (int, optional): Default 0. container_size (int, optional): Default X_PLEX_CONTAINER_SIZE in your config file. - filters (dict): A dictionary of advanced filters. See the details below for more info. + limit (int, optional): Limit the number of results from the filter. + filters (dict, optional): A dictionary of advanced filters. See the details below for more info. **kwargs (dict): Additional custom filters to apply to the search results. See the details below for more info. @@ -1237,7 +1240,7 @@ def search(self, title=None, sort=None, maxresults=None, libtype=None, """ key, kwargs = self._buildSearchKey( - title=title, sort=sort, libtype=libtype, filters=filters, returnKwargs=True, **kwargs) + title=title, sort=sort, libtype=libtype, limit=limit, filters=filters, returnKwargs=True, **kwargs) return self._search(key, maxresults, container_start, container_size, **kwargs) def _search(self, key, maxresults, container_start, container_size, **kwargs): From 94fb9783fe109bf308dcf514068e62ae6706ec27 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 21:16:49 -0700 Subject: [PATCH 209/356] Add limit to the playlist uri instead of query param --- plexapi/playlist.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index c81b05eb8..73e0c2223 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -270,12 +270,9 @@ def updateFilters(self, limit=None, sort=None, filters=None, **kwargs): section = self.section() searchKey = section._buildSearchKey( - sort=sort, libtype=section.METADATA_TYPE, filters=filters, **kwargs) + sort=sort, libtype=section.METADATA_TYPE, limit=limit, filters=filters, **kwargs) uri = '%s%s' % (self._uriRoot(), searchKey) - if limit: - uri = uri + '&limit=%s' % str(limit) - key = '%s/items%s' % (self.key, utils.joinArgs({ 'uri': uri })) @@ -340,12 +337,9 @@ def _createSmart(cls, server, title, section, limit=None, sort=None, filters=Non section = server.library.section(section) searchKey = section._buildSearchKey( - sort=sort, libtype=section.METADATA_TYPE, filters=filters, **kwargs) + sort=sort, libtype=section.METADATA_TYPE, limit=limit, filters=filters, **kwargs) uri = '%s%s' % (cls._uriRoot(server), searchKey) - if limit: - uri = uri + '&limit=%s' % str(limit) - key = '/playlists%s' % utils.joinArgs({ 'uri': uri, 'type': section.CONTENT_TYPE, @@ -401,7 +395,7 @@ def copyToUser(self, user): def sync(self, videoQuality=None, photoResolution=None, audioBitrate=None, client=None, clientId=None, limit=None, unwatched=False, title=None): - """ Add current playlist as sync item for specified device. + """ Add the playlist as a sync item for the specified device. See :func:`~plexapi.myplex.MyPlexAccount.sync` for possible exceptions. Parameters: From 65db8c33f65b4b9856511f759aac786d8c5ec3c9 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 21:19:40 -0700 Subject: [PATCH 210/356] Add library search limit test --- tests/test_library.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_library.py b/tests/test_library.py index 787f56977..16e396173 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -382,6 +382,8 @@ def test_library_MovieSection_advancedSearch(movies, movie): } results = movies.search(filters=advancedFilters) assert movie in results + results = movies.search(limit=1) + assert len(results) == 1 def test_library_ShowSection_search(tvshows, show): From ef136a8c9c56f844d78f9bd2f0862bbd9ebaae02 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 21:53:53 -0700 Subject: [PATCH 211/356] Add create Collection class methods --- plexapi/collection.py | 93 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index de4c165df..9b6a4ad49 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- from plexapi import media, utils from plexapi.base import PlexPartialObject -from plexapi.exceptions import BadRequest +from plexapi.exceptions import BadRequest, NotFound, Unsupported +from plexapi.library import LibrarySection from plexapi.mixins import ArtMixin, PosterMixin from plexapi.mixins import LabelMixin from plexapi.settings import Setting @@ -161,3 +162,93 @@ def sortUpdate(self, sort=None): raise BadRequest('Unknown sort dir: %s. Options: %s' % (sort, list(sort_dict))) part = '/library/metadata/%s/prefs?collectionSort=%s' % (self.ratingKey, key) return self._server.query(part, method=self._server._session.put) + + @classmethod + def _create(cls, server, title, section, items): + """ Create a regular collection. """ + if not items: + raise BadRequest('Must include items to add when creating new collection.') + + if not isinstance(section, LibrarySection): + section = server.library.section(section) + + if items and not isinstance(items, (list, tuple)): + items = [items] + + itemType = items[0].type + ratingKeys = [] + for item in items: + if item.type != itemType: # pragma: no cover + raise BadRequest('Can not mix media types when building a collection.') + ratingKeys.append(str(item.ratingKey)) + + ratingKeys = ','.join(ratingKeys) + uri = '%s/library/metadata/%s' % (cls._uriRoot(server), ratingKeys) + + key = '/library/collections%s' % utils.joinArgs({ + 'uri': uri, + 'type': utils.searchType(itemType), + 'title': title, + 'smart': 0, + 'sectionId': section.key + }) + data = server.query(key, method=server._session.post)[0] + return cls(server, data, initpath=key) + + @classmethod + def _createSmart(cls, server, title, section, limit=None, libtype=None, sort=None, filters=None, **kwargs): + """ Create a smart collection. """ + if not isinstance(section, LibrarySection): + section = server.library.section(section) + + libtype = libtype or section.TYPE + + searchKey = section._buildSearchKey( + sort=sort, libtype=libtype, limit=limit, filters=filters, **kwargs) + uri = '%s%s' % (cls._uriRoot(server), searchKey) + + key = '/library/collections%s' % utils.joinArgs({ + 'uri': uri, + 'type': utils.searchType(libtype), + 'title': title, + 'smart': 1, + 'sectionId': section.key + }) + data = server.query(key, method=server._session.post)[0] + return cls(server, data, initpath=key) + + @classmethod + def create(cls, server, title, section, items=None, smart=False, limit=None, + libtype=None, sort=None, filters=None, **kwargs): + """ Create a collection. + + Parameters: + server (:class:`~plexapi.server.PlexServer`): Server to create the collection on. + title (str): Title of the collection. + section (:class:`~plexapi.library.LibrarySection`, str): The library section to create the collection in. + items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> + or List<:class:`~plexapi.photo.Photo`>): Regular collections only, list of audio, + video, or photo objects to be added to the collection. + smart (bool): True to create a smart collection. Default False. + limit (int): Smart collections only, limit the number of items in the collection. + libtype (str): Smart collections only, the specific type of content to filter + (movie, show, season, episode, artist, album, track, photoalbum, photo, collection). + sort (str or list, optional): Smart collections only, a string of comma separated sort fields + or a list of sort fields in the format ``column:dir``. + See :func:`plexapi.library.LibrarySection.search` for more info. + filters (dict): Smart collections only, a dictionary of advanced filters. + See :func:`plexapi.library.LibrarySection.search` for more info. + **kwargs (dict): Smart collections only, additional custom filters to apply to the + search results. See :func:`plexapi.library.LibrarySection.search` for more info. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When no items are included to create the collection. + :class:`plexapi.exceptions.BadRequest`: When mixing media types in the collection. + + Returns: + :class:`~plexapi.collection.Collection`: A new instance of the created Collection. + """ + if smart: + return cls._createSmart(server, title, section, limit, libtype, sort, filters, **kwargs) + else: + return cls._create(server, title, section, items) From 95c1be28bc3771fcec4bcd61a907262b7ead4b9b Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 22:50:30 -0700 Subject: [PATCH 212/356] Add PlexServer.createCollection() method --- plexapi/library.py | 26 ++++++++++++++++++-------- plexapi/playlist.py | 6 +++--- plexapi/server.py | 45 ++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 61 insertions(+), 16 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 1baa4ec30..1431584b2 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1362,6 +1362,15 @@ def history(self, maxresults=9999999, mindate=None): """ return self._server.history(maxresults=maxresults, mindate=mindate, librarySectionID=self.key, accountID=1) + def createCollection(self, title, items=None, smart=False, limit=None, + libtype=None, sort=None, filters=None, **kwargs): + """ Alias for :func:`~plexapi.server.PlexServer.createCollection` using this + :class:`~plexapi.library.LibrarySection`. + """ + return self._server.createCollection( + title, section=self, items=items, smart=smart, limit=limit, + libtype=libtype, sort=sort, filters=filters, **kwargs) + @deprecated('use "collections" (plural) instead') def collection(self, **kwargs): return self.collections() @@ -1372,18 +1381,19 @@ def collections(self, **kwargs): """ return self.search(libtype='collection', **kwargs) - def playlists(self, **kwargs): - """ Returns a list of playlists from this library section. """ - key = '/playlists?type=15&playlistType=%s§ionID=%s' % (self.CONTENT_TYPE, self.key) - return self.fetchItems(key, **kwargs) - - def createPlaylist(self, title, items=None, limit=None, smart=False, + def createPlaylist(self, title, items=None, smart=False, limit=None, sort=None, filters=None, **kwargs): """ Alias for :func:`~plexapi.server.PlexServer.createPlaylist` using this :class:`~plexapi.library.LibrarySection`. """ - return self._server.createPlaylist(title, items=items, section=self, limit=limit, smart=smart, - sort=sort, filters=filters, **kwargs) + return self._server.createPlaylist( + title, section=self, items=items, smart=smart, limit=limit, + sort=sort, filters=filters, **kwargs) + + def playlists(self, **kwargs): + """ Returns a list of playlists from this library section. """ + key = '/playlists?type=15&playlistType=%s§ionID=%s' % (self.CONTENT_TYPE, self.key) + return self.fetchItems(key, **kwargs) @deprecated('use "listFields" instead') def filterFields(self, mediaType=None): diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 73e0c2223..23296ce51 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -350,19 +350,19 @@ def _createSmart(cls, server, title, section, limit=None, sort=None, filters=Non return cls(server, data, initpath=key) @classmethod - def create(cls, server, title, items=None, section=None, limit=None, smart=False, + def create(cls, server, title, section=None, items=None, smart=False, limit=None, sort=None, filters=None, **kwargs): """ Create a playlist. Parameters: server (:class:`~plexapi.server.PlexServer`): Server to create the playlist on. title (str): Title of the playlist. + section (:class:`~plexapi.library.LibrarySection`, str): Smart playlists only, + the library section to create the playlist in. items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> or List<:class:`~plexapi.photo.Photo`>): Regular playlists only, list of audio, video, or photo objects to be added to the playlist. smart (bool): True to create a smart playlist. Default False. - section (:class:`~plexapi.library.LibrarySection`, str): Smart playlists only, - the library section to create the playlist in. limit (int): Smart playlists only, limit the number of items in the playlist. sort (str or list, optional): Smart playlists only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. diff --git a/plexapi/server.py b/plexapi/server.py index 2ab8b39bb..f14219f49 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -9,6 +9,7 @@ from plexapi.alert import AlertListener from plexapi.base import PlexObject from plexapi.client import PlexClient +from plexapi.collection import Collection from plexapi.exceptions import BadRequest, NotFound, Unauthorized from plexapi.library import Hub, Library, Path, File from plexapi.media import Conversion, Optimized @@ -391,18 +392,51 @@ def client(self, name): raise NotFound('Unknown client name: %s' % name) - def createPlaylist(self, title, items=None, section=None, limit=None, smart=False, + def createCollection(self, title, section, items=None, smart=False, limit=None, + libtype=None, sort=None, filters=None, **kwargs): + """ Creates and returns a new :class:`~plexapi.collection.Collection`. + + Parameters: + title (str): Title of the collection. + section (:class:`~plexapi.library.LibrarySection`, str): The library section to create the collection in. + items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> + or List<:class:`~plexapi.photo.Photo`>): Regular collections only, list of audio, + video, or photo objects to be added to the collection. + smart (bool): True to create a smart collection. Default False. + limit (int): Smart collections only, limit the number of items in the collection. + libtype (str): Smart collections only, the specific type of content to filter + (movie, show, season, episode, artist, album, track, photoalbum, photo, collection). + sort (str or list, optional): Smart collections only, a string of comma separated sort fields + or a list of sort fields in the format ``column:dir``. + See :func:`plexapi.library.LibrarySection.search` for more info. + filters (dict): Smart collections only, a dictionary of advanced filters. + See :func:`plexapi.library.LibrarySection.search` for more info. + **kwargs (dict): Smart collections only, additional custom filters to apply to the + search results. See :func:`plexapi.library.LibrarySection.search` for more info. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When no items are included to create the collection. + :class:`plexapi.exceptions.BadRequest`: When mixing media types in the collection. + + Returns: + :class:`~plexapi.collection.Collection`: A new instance of the created Collection. + """ + return Collection.create( + self, title, section, items=items, smart=smart, limit=limit, + libtype=libtype, sort=sort, filters=filters, **kwargs) + + def createPlaylist(self, title, section=None, items=None, smart=False, limit=None, sort=None, filters=None, **kwargs): """ Creates and returns a new :class:`~plexapi.playlist.Playlist`. Parameters: title (str): Title of the playlist. + section (:class:`~plexapi.library.LibrarySection`, str): Smart playlists only, + library section to create the playlist in. items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> or List<:class:`~plexapi.photo.Photo`>): Regular playlists only, list of audio, video, or photo objects to be added to the playlist. smart (bool): True to create a smart playlist. Default False. - section (:class:`~plexapi.library.LibrarySection`, str): Smart playlists only, - library section to create the playlist in. limit (int): Smart playlists only, limit the number of items in the playlist. sort (str or list, optional): Smart playlists only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. @@ -419,8 +453,9 @@ def createPlaylist(self, title, items=None, section=None, limit=None, smart=Fals Returns: :class:`~plexapi.playlist.Playlist`: A new instance of the created Playlist. """ - return Playlist.create(self, title, items=items, section=section, limit=limit, smart=smart, - sort=sort, filters=filters, **kwargs) + return Playlist.create( + self, title, section=section, items=items, smart=smart, limit=limit, + sort=sort, filters=filters, **kwargs) def createPlayQueue(self, item, **kwargs): """ Creates and returns a new :class:`~plexapi.playqueue.PlayQueue`. From 0512e9f38e6746d139a87cf3e509d9d1c63c3e82 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 22:57:56 -0700 Subject: [PATCH 213/356] Add collection modification methods --- plexapi/collection.py | 168 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 161 insertions(+), 7 deletions(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index 9b6a4ad49..bf5449122 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -5,6 +5,7 @@ from plexapi.library import LibrarySection from plexapi.mixins import ArtMixin, PosterMixin from plexapi.mixins import LabelMixin +from plexapi.playqueue import PlayQueue from plexapi.settings import Setting from plexapi.utils import deprecated @@ -82,33 +83,67 @@ def _loadData(self, data): self.titleSort = data.attrib.get('titleSort', self.title) self.type = data.attrib.get('type') self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) + self._items = None # cache for self.items + self._section = None # cache for self.section + + def __len__(self): # pragma: no cover + return self.childCount + + def __iter__(self): # pragma: no cover + for item in self.items(): + yield item + + def __contains__(self, other): # pragma: no cover + return any(i.key == other.key for i in self.items()) + + def __getitem__(self, key): # pragma: no cover + return self.items()[key] + + def _uriRoot(self, server=None): + if server: + uuid = server.machineIentifier + else: + uuid = self._server.machineIdentifier + return 'server://%s/com.plexapp.plugins.library' % uuid @property @deprecated('use "items" instead', stacklevel=3) def children(self): return self.items() + def section(self): + """ Returns the :class:`~plexapi.library.LibrarySection` this collection belongs to. + """ + if self._section is None: + self._section = super(Collection, self).section() + return self._section + def item(self, title): """ Returns the item in the collection that matches the specified title. Parameters: title (str): Title of the item to return. + + Raises: + :class:`plexapi.exceptions.NotFound`: When the item is not found in the collection. """ - key = '/library/metadata/%s/children' % self.ratingKey - return self.fetchItem(key, title__iexact=title) + for item in self.items(): + if item.title.lower() == title.lower(): + return item + raise NotFound('Item with title "%s" not found in the collection' % title) def items(self): """ Returns a list of all items in the collection. """ - key = '/library/metadata/%s/children' % self.ratingKey - return self.fetchItems(key) + if self._items is None: + key = '%s/children' % self.key + items = self.fetchItems(key) + self._items = items + return self._items def get(self, title): """ Alias to :func:`~plexapi.library.Collection.item`. """ return self.item(title) - def __len__(self): - return self.childCount - def _preferences(self): """ Returns a list of :class:`~plexapi.settings.Preferences` objects. """ items = [] @@ -163,6 +198,125 @@ def sortUpdate(self, sort=None): part = '/library/metadata/%s/prefs?collectionSort=%s' % (self.ratingKey, key) return self._server.query(part, method=self._server._session.put) + def addItems(self, items): + """ Add items to the collection. + + Parameters: + items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> + or List<:class:`~plexapi.photo.Photo`>): List of audio, video, or photo objects + to be added to the collection. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When trying to add items to a smart collection. + """ + if self.smart: + raise BadRequest('Cannot add items to a smart collection.') + + if items and not isinstance(items, (list, tuple)): + items = [items] + + ratingKeys = [] + for item in items: + if item.type != self.subtype: # pragma: no cover + raise BadRequest('Can not mix media types when building a collection: %s and %s' % + (self.subtype, item.type)) + ratingKeys.append(str(item.ratingKey)) + + ratingKeys = ','.join(ratingKeys) + uri = '%s/library/metadata/%s' % (self._uriRoot(), ratingKeys) + + key = '%s/items%s' % (self.key, utils.joinArgs({ + 'uri': uri + })) + self._server.query(key, method=self._server._session.put) + + def removeItems(self, items): + """ Remove items from the collection. + + Parameters: + items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> + or List<:class:`~plexapi.photo.Photo`>): List of audio, video, or photo objects + to be removed from the collection. Items must be retrieved from + :func:`plexapi.collection.Collection.items`. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When trying to remove items from a smart collection. + """ + if self.smart: + raise BadRequest('Cannot remove items from a smart collection.') + + if items and not isinstance(items, (list, tuple)): + items = [items] + + for item in items: + key = '%s/items/%s' % (self.key, item.ratingKey) + self._server.query(key, method=self._server._session.delete) + + def updateFilters(self, libtype=None, limit=None, sort=None, filters=None, **kwargs): + """ Update the filters for a smart collection. + + Parameters: + libtype (str): The specific type of content to filter + (movie, show, season, episode, artist, album, track, photoalbum, photo, collection). + limit (int): Limit the number of items in the collection. + sort (str or list, optional): A string of comma separated sort fields + or a list of sort fields in the format ``column:dir``. + See :func:`plexapi.library.LibrarySection.search` for more info. + filters (dict): A dictionary of advanced filters. + See :func:`plexapi.library.LibrarySection.search` for more info. + **kwargs (dict): Additional custom filters to apply to the search results. + See :func:`plexapi.library.LibrarySection.search` for more info. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When trying update filters for a regular collection. + """ + if not self.smart: + raise BadRequest('Cannot update filters for a regular collection.') + + section = self.section() + searchKey = section._buildSearchKey( + sort=sort, libtype=libtype, limit=limit, filters=filters, **kwargs) + uri = '%s%s' % (self._uriRoot(), searchKey) + + key = '%s/items%s' % (self.key, utils.joinArgs({ + 'uri': uri + })) + self._server.query(key, method=self._server._session.put) + + def edit(self, title=None, titleSort=None, contentRating=None, summary=None, **kwargs): + """ Edit the collection. + + Parameters: + title (str, optional): The title of the collection. + titleSort (str, optional): The sort title of the collection. + contentRating (str, optional): The summary of the collection. + summary (str, optional): The summary of the collection. + """ + args = {} + if title: + args['title.value'] = title + args['title.locked'] = 1 + if titleSort: + args['titleSort.value'] = titleSort + args['titleSort.locked'] = 1 + if contentRating: + args['contentRating.value'] = contentRating + args['contentRating.locked'] = 1 + if summary: + args['summary.value'] = summary + args['summary.locked'] = 1 + + args.update(kwargs) + super(Collection, self).edit(**args) + + def delete(self): + """ Delete the collection. """ + super(Collection, self).delete() + + def playQueue(self, *args, **kwargs): + """ Returns a new :class:`~plexapi.playqueue.PlayQueue` from the collection. """ + return PlayQueue.create(self._server, self.items(), *args, **kwargs) + @classmethod def _create(cls, server, title, section, items): """ Create a regular collection. """ From 2cd29f435a052722d9ea41146387988009f745ca Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 22:17:29 -0700 Subject: [PATCH 214/356] Add method to get a collection or playlist by title in a library --- plexapi/library.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 1431584b2..dae166280 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1371,9 +1371,15 @@ def createCollection(self, title, items=None, smart=False, limit=None, title, section=self, items=items, smart=smart, limit=limit, libtype=libtype, sort=sort, filters=filters, **kwargs) - @deprecated('use "collections" (plural) instead') - def collection(self, **kwargs): - return self.collections() + def collection(self, title): + """ Returns the collection with the specified title. + + Parameters: + title (str): Title of the item to return. + """ + results = self.collections(title__iexact=title) + if results: + return results[0] def collections(self, **kwargs): """ Returns a list of collections from this library section. @@ -1390,6 +1396,16 @@ def createPlaylist(self, title, items=None, smart=False, limit=None, title, section=self, items=items, smart=smart, limit=limit, sort=sort, filters=filters, **kwargs) + def playlist(self, title): + """ Returns the playlist with the specified title. + + Parameters: + title (str): Title of the item to return. + """ + results = self.playlists(title__iexact=title) + if results: + return results[0] + def playlists(self, **kwargs): """ Returns a list of playlists from this library section. """ key = '/playlists?type=15&playlistType=%s§ionID=%s' % (self.CONTENT_TYPE, self.key) From 8cb2ea2f984dd38763f812c19b5904e9131eab55 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 22:17:42 -0700 Subject: [PATCH 215/356] Update library collections and playlists tests --- tests/test_library.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index 16e396173..dde3d78ed 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -195,17 +195,16 @@ def test_library_MovieSection_analyze(movies): movies.analyze() -def test_library_MovieSection_collections(movies, collection): - assert len(movies.collections()) - - -def test_library_MovieSection_createPlaylist(movies): - items = movies.all() +def test_library_MovieSection_collections(movies, movie): try: - playlist = movies.createPlaylist("Library Playlist", items=items) - assert len(playlist) == len(items) + collection = movies.createCollection("test_library_MovieSection_collections", movie) + collections = movies.collections() + assert len(collections) + assert collection in collections + c = movies.collection(collection.title) + assert collection == c finally: - playlist.delete() + collection.delete() def test_library_ShowSection_all(tvshows): @@ -233,11 +232,15 @@ def test_library_ShowSection_recentlyAdded(tvshows, show): assert episode in tvshows.recentlyAddedEpisodes() -def test_library_ShowSection_playlists(plex, tvshows, show): +def test_library_ShowSection_playlists(tvshows, show): episodes = show.episodes() - playlist = plex.createPlaylist("test_library_ShowSection_playlists", episodes[:3]) try: - assert len(tvshows.playlists()) + playlist = tvshows.createPlaylist("test_library_ShowSection_playlists", episodes[:3]) + playlists = tvshows.playlists() + assert len(playlists) + assert playlist in playlists + p = tvshows.playlist(playlist.title) + assert playlist == p finally: playlist.delete() From b19b469eb02ee37b14db5a4b9ce730eb55aea1d6 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 27 May 2021 22:39:00 -0700 Subject: [PATCH 216/356] Update pytest fixtures --- tests/conftest.py | 60 ++++++++++++++++++++++++++-------------- tests/test_collection.py | 4 +-- tests/test_video.py | 2 +- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 4da4e2fb2..b93f424b5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -207,13 +207,13 @@ def client(request, plex): @pytest.fixture() -def tvshows(plex): - return plex.library.section("TV Shows") +def movies(plex): + return plex.library.section("Movies") @pytest.fixture() -def movies(plex): - return plex.library.section("Movies") +def tvshows(plex): + return plex.library.section("TV Shows") @pytest.fixture() @@ -232,38 +232,33 @@ def movie(movies): @pytest.fixture() -def collection(movies): - try: - return movies.collections(title="Marvel")[0] - except IndexError: - movie = movies.get("Elephants Dream") - movie.addCollection("Marvel") - return movies.collections(title="Marvel")[0] +def show(tvshows): + return tvshows.get("Game of Thrones") @pytest.fixture() -def artist(music): - return music.get("Broke For Free") +def season(show): + return show.season(1) @pytest.fixture() -def album(artist): - return artist.album("Layers") +def episode(season): + return season.get("Winter Is Coming") @pytest.fixture() -def track(album): - return album.track("As Colourful as Ever") +def artist(music): + return music.get("Broke For Free") @pytest.fixture() -def show(tvshows): - return tvshows.get("Game of Thrones") +def album(artist): + return artist.album("Layers") @pytest.fixture() -def episode(show): - return show.get("Winter Is Coming") +def track(album): + return album.track("As Colourful as Ever") @pytest.fixture() @@ -279,6 +274,29 @@ def photo(photoalbum): return photoalbum.photo("photo1") +@pytest.fixture() +def collection(plex, movies, movie): + c = movies.collection("Test Collection") + if c: return c + else: + return plex.createCollection( + title="Test Collection", + section=movies, + items=movie + ) + + +@pytest.fixture() +def playlist(plex, tvshows, season): + p = tvshows.playlist("Test Playlist") + if p: return p + else: + return plex.createPlaylist( + title="Test Playlist", + items=season.episodes()[:3] + ) + + @pytest.fixture() def subtitle(): mopen = mock_open() diff --git a/tests/test_collection.py b/tests/test_collection.py index c2663a309..4981bda4c 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -15,7 +15,7 @@ def test_Collection_attrs(collection): assert collection.collectionPublished is False assert collection.collectionSort == 0 assert collection.content is None - assert collection.contentRating + assert collection.contentRating is None assert not collection.fields assert collection.guid.startswith("collection://") assert utils.is_int(collection.index) @@ -33,7 +33,7 @@ def test_Collection_attrs(collection): assert collection.summary == "" assert collection.thumb.startswith("/library/collections/%s/composite" % collection.ratingKey) assert collection.thumbBlurHash is None - assert collection.title == "Marvel" + assert collection.title == "Test Collection" assert collection.titleSort == collection.title assert collection.type == "collection" assert utils.is_datetime(collection.updatedAt) diff --git a/tests/test_video.py b/tests/test_video.py index 11fb76341..6df422f0e 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -79,7 +79,7 @@ def test_video_Movie_media_tags_Exception(movie): def test_video_Movie_media_tags_collection(movie, collection): movie.reload() - collection_tag = next(c for c in movie.collections if c.tag == "Marvel") + collection_tag = next(c for c in movie.collections if c.tag == "Test Collection") assert collection == collection_tag.collection() From 04c25953fe9222077dce92fc916b2c39d6711214 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 15:12:10 -0700 Subject: [PATCH 217/356] Fix collection and playlist edit for blank values --- plexapi/collection.py | 9 +++++---- plexapi/playlist.py | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index bf5449122..d7f63ddf2 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -53,6 +53,7 @@ class Collection(PlexPartialObject, ArtMixin, PosterMixin, LabelMixin): TYPE = 'collection' def _loadData(self, data): + self._data = data self.addedAt = utils.toDatetime(data.attrib.get('addedAt')) self.art = data.attrib.get('art') self.artBlurHash = data.attrib.get('artBlurHash') @@ -293,16 +294,16 @@ def edit(self, title=None, titleSort=None, contentRating=None, summary=None, **k summary (str, optional): The summary of the collection. """ args = {} - if title: + if title is not None: args['title.value'] = title args['title.locked'] = 1 - if titleSort: + if titleSort is not None: args['titleSort.value'] = titleSort args['titleSort.locked'] = 1 - if contentRating: + if contentRating is not None: args['contentRating.value'] = contentRating args['contentRating.locked'] = 1 - if summary: + if summary is not None: args['summary.value'] = summary args['summary.locked'] = 1 diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 23296ce51..a008ddde0 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -286,9 +286,9 @@ def edit(self, title=None, summary=None): summary (str, optional): The summary of the playlist. """ args = {} - if title: + if title is not None: args['title'] = title - if summary: + if summary is not None: args['summary'] = summary key = '%s%s' % (self.key, utils.joinArgs(args)) From ccc6091bb430b9928ba80cc089866d3915bbcea6 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 14:59:33 -0700 Subject: [PATCH 218/356] Fix collection length --- plexapi/collection.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index d7f63ddf2..23886957a 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -88,7 +88,7 @@ def _loadData(self, data): self._section = None # cache for self.section def __len__(self): # pragma: no cover - return self.childCount + return len(self.items()) def __iter__(self): # pragma: no cover for item in self.items(): From 40e4413dded60550393f13693034fa5ff8db567a Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 15:17:47 -0700 Subject: [PATCH 219/356] Update collection tests --- tests/test_collection.py | 172 +++++++++++++++++++++++++++++++-------- tests/test_playqueue.py | 13 +++ 2 files changed, 153 insertions(+), 32 deletions(-) diff --git a/tests/test_collection.py b/tests/test_collection.py index 4981bda4c..858d92ce2 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -39,6 +39,23 @@ def test_Collection_attrs(collection): assert utils.is_datetime(collection.updatedAt) +def test_Collection_section(collection, movies): + assert collection.section() == movies + + +def test_Collection_item(collection): + item1 = collection.item("Elephants Dream") + assert item1.title == "Elephants Dream" + item2 = collection.get("Elephants Dream") + assert item2.title == "Elephants Dream" + assert item1 == item2 + + +def test_Collection_items(collection): + items = collection.items() + assert len(items) == 1 + + def test_Collection_modeUpdate(collection): mode_dict = {"default": -1, "hide": 0, "hideItems": 1, "showItems": 2} for key, value in mode_dict.items(): @@ -61,40 +78,131 @@ def test_Collection_sortUpdate(collection): collection.sortUpdate("release") -def test_Collection_edit(collection): - edits = {"titleSort.value": "New Title Sort", "titleSort.locked": 1} - collectionTitleSort = collection.titleSort - collection.edit(**edits) +def test_Collection_add_remove(collection, movies, show): + movie = movies.get("Big Buck Bunny") + assert movie not in collection + collection.addItems(movie) collection.reload() - for field in collection.fields: - if field.name == "titleSort": - assert collection.titleSort == "New Title Sort" - assert field.locked is True - collection.edit(**{"titleSort.value": collectionTitleSort, "titleSort.locked": 0}) - - -def test_Collection_delete(movies): - delete_collection = "delete_collection" - movie = movies.get("Sintel") - movie.addCollection(delete_collection) - collections = movies.collections(title=delete_collection) - assert len(collections) == 1 - collections[0].delete() - collections = movies.collections(title=delete_collection) - assert len(collections) == 0 - - -def test_Collection_item(collection): - item1 = collection.item("Elephants Dream") - assert item1.title == "Elephants Dream" - item2 = collection.get("Elephants Dream") - assert item2.title == "Elephants Dream" - assert item1 == item2 + assert movie in collection + collection.removeItems(movie) + collection.reload() + assert movie not in collection + with pytest.raises(BadRequest): + collection.addItems(show) + + +def test_Collection_edit(collection, movies): + fields = {"title", "titleSort", "contentRating", "summary"} + title = collection.title + titleSort = collection.titleSort + contentRating = collection.contentRating + summary = collection.summary + + newTitle = "New Title" + newTitleSort = "New Title Sort" + newContentRating = "New Content Rating" + newSummary = "New Summary" + collection.edit( + title=newTitle, + titleSort=newTitleSort, + contentRating=newContentRating, + summary=newSummary + ) + collection.reload() + assert collection.title == newTitle + assert collection.titleSort == newTitleSort + assert collection.contentRating == newContentRating + assert collection.summary == newSummary + lockedFields = [f.locked for f in collection.fields if f.name in fields] + assert all(lockedFields) + + collection.edit( + title=title, + titleSort=titleSort, + contentRating=contentRating or "", + summary=summary, + **{ + "title.locked": 0, + "titleSort.locked": 0, + "contentRating.locked": 0, + "summary.locked": 0 + } + ) + # Cannot use collection.reload() since PlexObject.__setattr__() + # will not overwrite contentRating with None + collection = movies.collection("Test Collection") + assert collection.title == title + assert collection.titleSort == titleSort + assert collection.contentRating is None + assert collection.summary == summary + lockedFields = [f.locked for f in collection.fields if f.name in fields] + assert not any(lockedFields) + + +def test_Collection_create(plex, tvshows): + title = "test_Collection_create" + try: + collection = plex.createCollection( + title=title, + section=tvshows, + items=tvshows.all() + ) + assert collection in tvshows.collections() + assert collection.smart is False + finally: + collection.delete() + + +def test_Collection_createSmart(plex, tvshows): + title = "test_Collection_createSmart" + try: + collection = plex.createCollection( + title=title, + section=tvshows, + smart=True, + limit=3, + libtype="episode", + sort="episode.index:desc", + filters={"show.title": "Game of Thrones"} + ) + assert collection in tvshows.collections() + assert collection.smart is True + assert len(collection.items()) == 3 + assert all([e.type == "episode" for e in collection.items()]) + assert all([e.grandparentTitle == "Game of Thrones" for e in collection.items()]) + assert collection.items() == sorted(collection.items(), key=lambda e: e.index, reverse=True) + collection.updateFilters(limit=5, libtype="episode", filters={"show.title": "The 100"}) + collection.reload() + assert len(collection.items()) == 5 + assert all([e.grandparentTitle == "The 100" for e in collection.items()]) + finally: + collection.delete() + + +def test_Collection_exceptions(plex, movies, movie, artist): + title = 'test_Collection_exceptions' + try: + collection = plex.createCollection(title, movies, movie) + with pytest.raises(BadRequest): + collection.updateFilters() + with pytest.raises(BadRequest): + collection.addItems(artist) + finally: + collection.delete() + with pytest.raises(BadRequest): + plex.createCollection(title, movies, items=[]) + with pytest.raises(BadRequest): + plex.createCollection(title, movies, items=[movie, artist]) -def test_Collection_items(collection): - items = collection.items() - assert len(items) == 1 + try: + collection = plex.createCollection(title, smart=True, section=movies, **{'year>>': 2000}) + with pytest.raises(BadRequest): + collection.addItems(movie) + with pytest.raises(BadRequest): + collection.removeItems(movie) + finally: + collection.delete() def test_Collection_posters(collection): @@ -104,7 +212,7 @@ def test_Collection_posters(collection): def test_Collection_art(collection): arts = collection.arts() - assert not arts # Collection has no default art + assert arts def test_Collection_mixins_images(collection): diff --git a/tests/test_playqueue.py b/tests/test_playqueue.py index 6cc7deffa..fd3525d04 100644 --- a/tests/test_playqueue.py +++ b/tests/test_playqueue.py @@ -141,6 +141,19 @@ def test_create_playqueue_from_playlist(plex, album): playlist.delete() +def test_create_playqueue_from_collection(plex, music, album): + try: + collection = plex.createCollection("test_collection", music, album) + pq = collection.playQueue(shuffle=1) + assert pq.playQueueShuffled is True + assert len(collection) == len(album.tracks()) + assert len(pq) == len(collection) + pq.addItem(collection.items()[0]) + assert len(pq) == len(collection) + 1 + finally: + collection.delete() + + def test_lookup_playqueue(plex, movie): pq = PlayQueue.create(plex, movie) pq_id = pq.playQueueID From 99ca6a5647d2e63e7e0f215329e4e6074deb5b1d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 16:52:02 -0700 Subject: [PATCH 220/356] Add collection sync --- plexapi/collection.py | 90 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/plexapi/collection.py b/plexapi/collection.py index 23886957a..9d4519267 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +from urllib.parse import quote_plus + from plexapi import media, utils from plexapi.base import PlexPartialObject from plexapi.exceptions import BadRequest, NotFound, Unsupported @@ -100,6 +102,38 @@ def __contains__(self, other): # pragma: no cover def __getitem__(self, key): # pragma: no cover return self.items()[key] + @property + def listType(self): + """ Returns the listType for the collection. """ + if self.isVideo: + return 'video' + elif self.isAudio: + return 'audio' + elif self.isPhoto: + return 'photo' + else: + raise Unsupported('Unexpected collection type') + + @property + def metadataType(self): + """ Returns the type of metadata in the collection. """ + return self.subtype + + @property + def isVideo(self): + """ Returns True if this is a video collection. """ + return self.subtype in {'movie', 'show', 'season', 'episode'} + + @property + def isAudio(self): + """ Returns True if this is an audio collection. """ + return self.subtype in {'artist', 'album', 'track'} + + @property + def isPhoto(self): + """ Returns True if this is a photo collection. """ + return self.subtype in {'photoalbum', 'photo'} + def _uriRoot(self, server=None): if server: uuid = server.machineIentifier @@ -407,3 +441,59 @@ def create(cls, server, title, section, items=None, smart=False, limit=None, return cls._createSmart(server, title, section, limit, libtype, sort, filters, **kwargs) else: return cls._create(server, title, section, items) + + def sync(self, videoQuality=None, photoResolution=None, audioBitrate=None, client=None, clientId=None, limit=None, + unwatched=False, title=None): + """ Add the collection as sync item for the specified device. + See :func:`~plexapi.myplex.MyPlexAccount.sync` for possible exceptions. + + Parameters: + videoQuality (int): idx of quality of the video, one of VIDEO_QUALITY_* values defined in + :mod:`~plexapi.sync` module. Used only when collection contains video. + photoResolution (str): maximum allowed resolution for synchronized photos, see PHOTO_QUALITY_* values in + the module :mod:`~plexapi.sync`. Used only when collection contains photos. + audioBitrate (int): maximum bitrate for synchronized music, better use one of MUSIC_BITRATE_* values + from the module :mod:`~plexapi.sync`. Used only when collection contains audio. + client (:class:`~plexapi.myplex.MyPlexDevice`): sync destination, see + :func:`~plexapi.myplex.MyPlexAccount.sync`. + clientId (str): sync destination, see :func:`~plexapi.myplex.MyPlexAccount.sync`. + limit (int): maximum count of items to sync, unlimited if `None`. + unwatched (bool): if `True` watched videos wouldn't be synced. + title (str): descriptive title for the new :class:`~plexapi.sync.SyncItem`, if empty the value would be + generated from metadata of current photo. + + Raises: + :exc:`~plexapi.exceptions.BadRequest`: When collection is not allowed to sync. + :exc:`~plexapi.exceptions.Unsupported`: When collection content is unsupported. + + Returns: + :class:`~plexapi.sync.SyncItem`: an instance of created syncItem. + """ + if not self.section().allowSync: + raise BadRequest('The collection is not allowed to sync') + + from plexapi.sync import SyncItem, Policy, MediaSettings + + myplex = self._server.myPlexAccount() + sync_item = SyncItem(self._server, None) + sync_item.title = title if title else self.title + sync_item.rootTitle = self.title + sync_item.contentType = self.listType + sync_item.metadataType = self.metadataType + sync_item.machineIdentifier = self._server.machineIdentifier + + sync_item.location = 'library:///directory/%s' % quote_plus( + '%s/children?excludeAllLeaves=1' % (self.key) + ) + sync_item.policy = Policy.create(limit, unwatched) + + if self.isVideo: + sync_item.mediaSettings = MediaSettings.createVideo(videoQuality) + elif self.isAudio: + sync_item.mediaSettings = MediaSettings.createMusic(audioBitrate) + elif self.isPhoto: + sync_item.mediaSettings = MediaSettings.createPhoto(photoResolution) + else: + raise Unsupported('Unsupported collection content') + + return myplex.sync(sync_item, client=client, clientId=clientId) From 56abe38ef8aa6220ec9059e37aee05b397f04682 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 16:52:11 -0700 Subject: [PATCH 221/356] Add collection sync test --- tests/test_sync.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/test_sync.py b/tests/test_sync.py index 60f2593c0..6c2aab5b9 100644 --- a/tests/test_sync.py +++ b/tests/test_sync.py @@ -491,3 +491,25 @@ def test_playlist_photos_sync(plex, clear_sync_device, photoalbum): assert len(items) == len(media_list) assert [e.ratingKey for e in items] == [m.ratingKey for m in media_list] playlist.delete() + + +def test_collection_sync(plex, clear_sync_device, movies, movie): + items = [movie] + collection = plex.createCollection("Sync: Collection", movies, items) + new_item = collection.sync( + videoQuality=VIDEO_QUALITY_3_MBPS_720p, client=clear_sync_device + ) + collection._server.refreshSync() + item = utils.wait_until( + get_sync_item_from_server, + delay=0.5, + timeout=3, + sync_device=clear_sync_device, + sync_item=new_item, + ) + media_list = utils.wait_until( + get_media, delay=0.25, timeout=3, item=item, server=collection._server + ) + assert len(items) == len(media_list) + assert [e.ratingKey for e in items] == [m.ratingKey for m in media_list] + collection.delete() From 06da110203005b6a7151032b8d145ec7fc6e1d94 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 17:58:55 -0700 Subject: [PATCH 222/356] Clean up doc strings --- plexapi/collection.py | 62 ++++++++++++++++++++++--------------------- plexapi/playlist.py | 49 +++++++++++++++------------------- plexapi/server.py | 22 +++++++-------- 3 files changed, 64 insertions(+), 69 deletions(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index 9d4519267..94067acda 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -189,17 +189,20 @@ def _preferences(self): return items def modeUpdate(self, mode=None): - """ Update Collection Mode + """ Update the collection mode advanced setting. Parameters: - mode: default (Library default) - hide (Hide Collection) - hideItems (Hide Items in this Collection) - showItems (Show this Collection and its Items) + mode (str): One of the following values: + "default" (Library default), + "hide" (Hide Collection), + "hideItems" (Hide Items in this Collection), + "showItems" (Show this Collection and its Items) + Example: - collection = 'plexapi.collection.Collection' - collection.updateMode(mode="hide") + .. code-block:: python + + collection.updateMode(mode="hide") """ mode_dict = {'default': -1, 'hide': 0, @@ -212,17 +215,19 @@ def modeUpdate(self, mode=None): return self._server.query(part, method=self._server._session.put) def sortUpdate(self, sort=None): - """ Update Collection Sorting + """ Update the collection order advanced setting. Parameters: - sort: realease (Order Collection by realease dates) - alpha (Order Collection alphabetically) - custom (Custom collection order) + sort (str): One of the following values: + "realease" (Order Collection by realease dates), + "alpha" (Order Collection alphabetically), + "custom" (Custom collection order) Example: - colleciton = 'plexapi.collection.Collection' - collection.updateSort(mode="alpha") + .. code-block:: python + + collection.updateSort(mode="alpha") """ sort_dict = {'release': 0, 'alpha': 1, @@ -237,9 +242,8 @@ def addItems(self, items): """ Add items to the collection. Parameters: - items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> - or List<:class:`~plexapi.photo.Photo`>): List of audio, video, or photo objects - to be added to the collection. + items (List): List of :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, + or :class:`~plexapi.photo.Photo` objects to be added to the collection. Raises: :class:`plexapi.exceptions.BadRequest`: When trying to add items to a smart collection. @@ -269,10 +273,9 @@ def removeItems(self, items): """ Remove items from the collection. Parameters: - items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> - or List<:class:`~plexapi.photo.Photo`>): List of audio, video, or photo objects - to be removed from the collection. Items must be retrieved from - :func:`plexapi.collection.Collection.items`. + items (List): List of :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, + or :class:`~plexapi.photo.Photo` objects to be removed from the collection. + Items must be retrieved from :func:`~plexapi.collection.Collection.items`. Raises: :class:`plexapi.exceptions.BadRequest`: When trying to remove items from a smart collection. @@ -296,11 +299,11 @@ def updateFilters(self, libtype=None, limit=None, sort=None, filters=None, **kwa limit (int): Limit the number of items in the collection. sort (str or list, optional): A string of comma separated sort fields or a list of sort fields in the format ``column:dir``. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. filters (dict): A dictionary of advanced filters. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. **kwargs (dict): Additional custom filters to apply to the search results. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. Raises: :class:`plexapi.exceptions.BadRequest`: When trying update filters for a regular collection. @@ -415,20 +418,19 @@ def create(cls, server, title, section, items=None, smart=False, limit=None, server (:class:`~plexapi.server.PlexServer`): Server to create the collection on. title (str): Title of the collection. section (:class:`~plexapi.library.LibrarySection`, str): The library section to create the collection in. - items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> - or List<:class:`~plexapi.photo.Photo`>): Regular collections only, list of audio, - video, or photo objects to be added to the collection. + items (List): Regular collections only, list of :class:`~plexapi.audio.Audio`, + :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to be added to the collection. smart (bool): True to create a smart collection. Default False. limit (int): Smart collections only, limit the number of items in the collection. libtype (str): Smart collections only, the specific type of content to filter (movie, show, season, episode, artist, album, track, photoalbum, photo, collection). sort (str or list, optional): Smart collections only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. filters (dict): Smart collections only, a dictionary of advanced filters. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. **kwargs (dict): Smart collections only, additional custom filters to apply to the - search results. See :func:`plexapi.library.LibrarySection.search` for more info. + search results. See :func:`~plexapi.library.LibrarySection.search` for more info. Raises: :class:`plexapi.exceptions.BadRequest`: When no items are included to create the collection. @@ -467,7 +469,7 @@ def sync(self, videoQuality=None, photoResolution=None, audioBitrate=None, clien :exc:`~plexapi.exceptions.Unsupported`: When collection content is unsupported. Returns: - :class:`~plexapi.sync.SyncItem`: an instance of created syncItem. + :class:`~plexapi.sync.SyncItem`: A new instance of the created sync item. """ if not self.section().allowSync: raise BadRequest('The collection is not allowed to sync') diff --git a/plexapi/playlist.py b/plexapi/playlist.py index a008ddde0..8b77ef916 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -171,9 +171,8 @@ def addItems(self, items): """ Add items to the playlist. Parameters: - items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> - or List<:class:`~plexapi.photo.Photo`>): List of audio, video, or photo objects - to be added to the playlist. + 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. @@ -207,10 +206,9 @@ def removeItems(self, items): """ Remove items from the playlist. Parameters: - items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> - or List<:class:`~plexapi.photo.Photo`>): List of audio, video, or photo objects - to be removed from the playlist. Items must be retrieved from - :func:`plexapi.playlist.Playlist.items`. + items (List): List of :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, + or :class:`~plexapi.photo.Photo` objects to be removed from the playlist. + Items must be retrieved from :func:`~plexapi.playlist.Playlist.items`. Raises: :class:`plexapi.exceptions.BadRequest`: When trying to remove items from a smart playlist. @@ -229,14 +227,12 @@ def moveItem(self, item, after=None): """ Move an item to a new position in playlist. Parameters: - item (:class:`~plexapi.audio.Audio` or :class:`~plexapi.video.Video` - or :class:`~plexapi.photo.Photo`): Audio, video, or photo object - to be moved in the playlist. Item must be retrieved from - :func:`plexapi.playlist.Playlist.items`. - after (:class:`~plexapi.audio.Audio` or :class:`~plexapi.video.Video` - or :class:`~plexapi.photo.Photo`): Audio, video, or photo object - to move the item after in the playlist. Item must be retrieved from - :func:`plexapi.playlist.Playlist.items`. + items (obj): :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, + or :class:`~plexapi.photo.Photo` objects to be moved in the playlist. + Item must be retrieved from :func:`~plexapi.playlist.Playlist.items`. + after (obj): :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, + or :class:`~plexapi.photo.Photo` objects to move the item after in the playlist. + Item must be retrieved from :func:`~plexapi.playlist.Playlist.items`. Raises: :class:`plexapi.exceptions.BadRequest`: When trying to move items in a smart playlist. @@ -256,11 +252,11 @@ def updateFilters(self, limit=None, sort=None, filters=None, **kwargs): limit (int): Limit the number of items in the playlist. sort (str or list, optional): A string of comma separated sort fields or a list of sort fields in the format ``column:dir``. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. filters (dict): A dictionary of advanced filters. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. **kwargs (dict): Additional custom filters to apply to the search results. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. Raises: :class:`plexapi.exceptions.BadRequest`: When trying update filters for a regular playlist. @@ -286,9 +282,9 @@ def edit(self, title=None, summary=None): summary (str, optional): The summary of the playlist. """ args = {} - if title is not None: + if title: args['title'] = title - if summary is not None: + if summary: args['summary'] = summary key = '%s%s' % (self.key, utils.joinArgs(args)) @@ -359,18 +355,17 @@ def create(cls, server, title, section=None, items=None, smart=False, limit=None title (str): Title of the playlist. section (:class:`~plexapi.library.LibrarySection`, str): Smart playlists only, the library section to create the playlist in. - items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> - or List<:class:`~plexapi.photo.Photo`>): Regular playlists only, list of audio, - video, or photo objects to be added to the playlist. + items (List): Regular playlists only, list of :class:`~plexapi.audio.Audio`, + :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to be added to the playlist. smart (bool): True to create a smart playlist. Default False. limit (int): Smart playlists only, limit the number of items in the playlist. sort (str or list, optional): Smart playlists only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. filters (dict): Smart playlists only, a dictionary of advanced filters. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. **kwargs (dict): Smart playlists only, additional custom filters to apply to the - search results. See :func:`plexapi.library.LibrarySection.search` for more info. + search results. See :func:`~plexapi.library.LibrarySection.search` for more info. Raises: :class:`plexapi.exceptions.BadRequest`: When no items are included to create the playlist. @@ -418,7 +413,7 @@ def sync(self, videoQuality=None, photoResolution=None, audioBitrate=None, clien :exc:`~plexapi.exceptions.Unsupported`: When playlist content is unsupported. Returns: - :class:`~plexapi.sync.SyncItem`: an instance of created syncItem. + :class:`~plexapi.sync.SyncItem`: A new instance of the created sync item. """ if not self.allowSync: raise BadRequest('The playlist is not allowed to sync') diff --git a/plexapi/server.py b/plexapi/server.py index f14219f49..7959fa460 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -399,20 +399,19 @@ def createCollection(self, title, section, items=None, smart=False, limit=None, Parameters: title (str): Title of the collection. section (:class:`~plexapi.library.LibrarySection`, str): The library section to create the collection in. - items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> - or List<:class:`~plexapi.photo.Photo`>): Regular collections only, list of audio, - video, or photo objects to be added to the collection. + items (List): Regular collections only, list of :class:`~plexapi.audio.Audio`, + :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to be added to the collection. smart (bool): True to create a smart collection. Default False. limit (int): Smart collections only, limit the number of items in the collection. libtype (str): Smart collections only, the specific type of content to filter (movie, show, season, episode, artist, album, track, photoalbum, photo, collection). sort (str or list, optional): Smart collections only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. filters (dict): Smart collections only, a dictionary of advanced filters. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. **kwargs (dict): Smart collections only, additional custom filters to apply to the - search results. See :func:`plexapi.library.LibrarySection.search` for more info. + search results. See :func:`~plexapi.library.LibrarySection.search` for more info. Raises: :class:`plexapi.exceptions.BadRequest`: When no items are included to create the collection. @@ -433,18 +432,17 @@ def createPlaylist(self, title, section=None, items=None, smart=False, limit=Non title (str): Title of the playlist. section (:class:`~plexapi.library.LibrarySection`, str): Smart playlists only, library section to create the playlist in. - items (List<:class:`~plexapi.audio.Audio`> or List<:class:`~plexapi.video.Video`> - or List<:class:`~plexapi.photo.Photo`>): Regular playlists only, list of audio, - video, or photo objects to be added to the playlist. + items (List): Regular playlists only, list of :class:`~plexapi.audio.Audio`, + :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to be added to the playlist. smart (bool): True to create a smart playlist. Default False. limit (int): Smart playlists only, limit the number of items in the playlist. sort (str or list, optional): Smart playlists only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. filters (dict): Smart playlists only, a dictionary of advanced filters. - See :func:`plexapi.library.LibrarySection.search` for more info. + See :func:`~plexapi.library.LibrarySection.search` for more info. **kwargs (dict): Smart playlists only, additional custom filters to apply to the - search results. See :func:`plexapi.library.LibrarySection.search` for more info. + search results. See :func:`~plexapi.library.LibrarySection.search` for more info. Raises: :class:`plexapi.exceptions.BadRequest`: When no items are included to create the playlist. From 6f2ef5c5199c3756681d54dd78029c9324676e05 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 18:05:42 -0700 Subject: [PATCH 223/356] Fix collections and playlists tests --- tests/test_collection.py | 8 ++++---- tests/test_playlist.py | 16 ++++++++-------- tests/test_playqueue.py | 2 +- tests/test_server.py | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/test_collection.py b/tests/test_collection.py index 858d92ce2..67272f8ae 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -182,7 +182,7 @@ def test_Collection_createSmart(plex, tvshows): def test_Collection_exceptions(plex, movies, movie, artist): title = 'test_Collection_exceptions' try: - collection = plex.createCollection(title, movies, movie) + collection = plex.createCollection(title, section=movies, items=movie) with pytest.raises(BadRequest): collection.updateFilters() with pytest.raises(BadRequest): @@ -191,9 +191,9 @@ def test_Collection_exceptions(plex, movies, movie, artist): collection.delete() with pytest.raises(BadRequest): - plex.createCollection(title, movies, items=[]) + plex.createCollection(title, section=movies, items=[]) with pytest.raises(BadRequest): - plex.createCollection(title, movies, items=[movie, artist]) + plex.createCollection(title, section=movies, items=[movie, artist]) try: collection = plex.createCollection(title, smart=True, section=movies, **{'year>>': 2000}) @@ -212,7 +212,7 @@ def test_Collection_posters(collection): def test_Collection_art(collection): arts = collection.arts() - assert arts + assert not arts # Collection has no default art def test_Collection_mixins_images(collection): diff --git a/tests/test_playlist.py b/tests/test_playlist.py index 55b23922b..ce94b1f1b 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -9,7 +9,7 @@ def test_create_playlist(plex, show): # create the playlist title = 'test_create_playlist_show' episodes = show.episodes() - playlist = plex.createPlaylist(title, episodes[:3]) + playlist = plex.createPlaylist(title, items=episodes[:3]) try: items = playlist.items() # Test create playlist @@ -62,7 +62,7 @@ def test_playlist_edit(plex, movie): new_title = 'test_playlist_edit_new_title' new_summary = 'test_playlist_edit_summary' try: - playlist = plex.createPlaylist(title, movie) + playlist = plex.createPlaylist(title, items=movie) assert playlist.title == title assert playlist.summary == '' playlist.edit(title=new_title, summary=new_summary) @@ -77,7 +77,7 @@ def test_playlist_item(plex, show): title = 'test_playlist_item' episodes = show.episodes() try: - playlist = plex.createPlaylist(title, episodes[:3]) + playlist = plex.createPlaylist(title, items=episodes[:3]) item1 = playlist.item("Winter Is Coming") assert item1 in playlist.items() item2 = playlist.get("Winter Is Coming") @@ -93,7 +93,7 @@ def test_playlist_item(plex, show): def test_playlist_play(plex, client, artist, album): try: playlist_name = 'test_play_playlist' - playlist = plex.createPlaylist(playlist_name, album) + playlist = plex.createPlaylist(playlist_name, items=album) client.playMedia(playlist); time.sleep(5) client.stop('music'); time.sleep(1) finally: @@ -106,7 +106,7 @@ def test_playlist_photos(plex, photoalbum): photos = album.photos() try: playlist_name = 'test_playlist_photos' - playlist = plex.createPlaylist(playlist_name, photos) + playlist = plex.createPlaylist(playlist_name, items=photos) assert len(playlist.items()) >= 1 finally: playlist.delete() @@ -123,7 +123,7 @@ def test_play_photos(plex, client, photoalbum): def test_copyToUser(plex, show, fresh_plex, shared_username): episodes = show.episodes() - playlist = plex.createPlaylist('shared_from_test_plexapi', episodes) + playlist = plex.createPlaylist('shared_from_test_plexapi', items=episodes) try: playlist.copyToUser(shared_username) user = plex.myPlexAccount().user(shared_username) @@ -158,7 +158,7 @@ def test_smart_playlist(plex, movies, movie): def test_smart_playlist_section(plex, movies, movie): title = 'test_playlist_section' try: - playlist = plex.createPlaylist(title, movie) + playlist = plex.createPlaylist(title, items=movie) with pytest.raises(BadRequest): playlist.section() finally: @@ -181,7 +181,7 @@ def test_smart_playlist_section(plex, movies, movie): def test_playlist_exceptions(plex, movies, movie, artist): title = 'test_playlist_exceptions' try: - playlist = plex.createPlaylist(title, movie) + playlist = plex.createPlaylist(title, items=movie) with pytest.raises(BadRequest): playlist.updateFilters() with pytest.raises(BadRequest): diff --git a/tests/test_playqueue.py b/tests/test_playqueue.py index fd3525d04..6ac539125 100644 --- a/tests/test_playqueue.py +++ b/tests/test_playqueue.py @@ -130,7 +130,7 @@ def test_modify_playqueue_with_library_media(plex, show): def test_create_playqueue_from_playlist(plex, album): try: - playlist = plex.createPlaylist("test_playlist", album) + playlist = plex.createPlaylist("test_playlist", items=album) pq = playlist.playQueue(shuffle=1) assert pq.playQueueShuffled is True assert len(playlist) == len(album.tracks()) diff --git a/tests/test_server.py b/tests/test_server.py index 44b0a58e3..bfa8eb5ab 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -146,7 +146,7 @@ def test_server_search(plex, movie): def test_server_playlist(plex, show): episodes = show.episodes() - playlist = plex.createPlaylist("test_playlist", episodes[:3]) + playlist = plex.createPlaylist("test_playlist", items=episodes[:3]) try: assert playlist.title == "test_playlist" with pytest.raises(NotFound): @@ -159,7 +159,7 @@ def test_server_playlists(plex, show): playlists = plex.playlists() count = len(playlists) episodes = show.episodes() - playlist = plex.createPlaylist("test_playlist", episodes[:3]) + playlist = plex.createPlaylist("test_playlist", items=episodes[:3]) try: playlists = plex.playlists() assert len(playlists) == count + 1 From c84215df7a1b3df37a870ed5ba47b16d794648c1 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 18:22:27 -0700 Subject: [PATCH 224/356] Move _uriRoot() to PlexServer --- plexapi/collection.py | 15 ++++----------- plexapi/playlist.py | 15 ++++----------- plexapi/server.py | 3 +++ 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index 94067acda..9fbdc169e 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -134,13 +134,6 @@ def isPhoto(self): """ Returns True if this is a photo collection. """ return self.subtype in {'photoalbum', 'photo'} - def _uriRoot(self, server=None): - if server: - uuid = server.machineIentifier - else: - uuid = self._server.machineIdentifier - return 'server://%s/com.plexapp.plugins.library' % uuid - @property @deprecated('use "items" instead', stacklevel=3) def children(self): @@ -262,7 +255,7 @@ def addItems(self, items): ratingKeys.append(str(item.ratingKey)) ratingKeys = ','.join(ratingKeys) - uri = '%s/library/metadata/%s' % (self._uriRoot(), ratingKeys) + uri = '%s/library/metadata/%s' % (self._server._uriRoot(), ratingKeys) key = '%s/items%s' % (self.key, utils.joinArgs({ 'uri': uri @@ -314,7 +307,7 @@ def updateFilters(self, libtype=None, limit=None, sort=None, filters=None, **kwa section = self.section() searchKey = section._buildSearchKey( sort=sort, libtype=libtype, limit=limit, filters=filters, **kwargs) - uri = '%s%s' % (self._uriRoot(), searchKey) + uri = '%s%s' % (self._server._uriRoot(), searchKey) key = '%s/items%s' % (self.key, utils.joinArgs({ 'uri': uri @@ -375,7 +368,7 @@ def _create(cls, server, title, section, items): ratingKeys.append(str(item.ratingKey)) ratingKeys = ','.join(ratingKeys) - uri = '%s/library/metadata/%s' % (cls._uriRoot(server), ratingKeys) + uri = '%s/library/metadata/%s' % (server._uriRoot(), ratingKeys) key = '/library/collections%s' % utils.joinArgs({ 'uri': uri, @@ -397,7 +390,7 @@ def _createSmart(cls, server, title, section, limit=None, libtype=None, sort=Non searchKey = section._buildSearchKey( sort=sort, libtype=libtype, limit=limit, filters=filters, **kwargs) - uri = '%s%s' % (cls._uriRoot(server), searchKey) + uri = '%s%s' % (server._uriRoot(), searchKey) key = '/library/collections%s' % utils.joinArgs({ 'uri': uri, diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 8b77ef916..97fac3191 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -107,13 +107,6 @@ def isPhoto(self): """ Returns True if this is a photo playlist. """ return self.playlistType == 'photo' - def _uriRoot(self, server=None): - if server: - uuid = server.machineIentifier - else: - uuid = self._server.machineIdentifier - return 'server://%s/com.plexapp.plugins.library' % uuid - def section(self): """ Returns the :class:`~plexapi.library.LibrarySection` this smart playlist belongs to. @@ -191,7 +184,7 @@ def addItems(self, items): ratingKeys.append(str(item.ratingKey)) ratingKeys = ','.join(ratingKeys) - uri = '%s/library/metadata/%s' % (self._uriRoot(), ratingKeys) + uri = '%s/library/metadata/%s' % (self._server._uriRoot(), ratingKeys) key = '%s/items%s' % (self.key, utils.joinArgs({ 'uri': uri @@ -267,7 +260,7 @@ def updateFilters(self, limit=None, sort=None, filters=None, **kwargs): section = self.section() searchKey = section._buildSearchKey( sort=sort, libtype=section.METADATA_TYPE, limit=limit, filters=filters, **kwargs) - uri = '%s%s' % (self._uriRoot(), searchKey) + uri = '%s%s' % (self._server._uriRoot(), searchKey) key = '%s/items%s' % (self.key, utils.joinArgs({ 'uri': uri @@ -315,7 +308,7 @@ def _create(cls, server, title, items): ratingKeys.append(str(item.ratingKey)) ratingKeys = ','.join(ratingKeys) - uri = '%s/library/metadata/%s' % (cls._uriRoot(server), ratingKeys) + uri = '%s/library/metadata/%s' % (server._uriRoot(), ratingKeys) key = '/playlists%s' % utils.joinArgs({ 'uri': uri, @@ -334,7 +327,7 @@ def _createSmart(cls, server, title, section, limit=None, sort=None, filters=Non searchKey = section._buildSearchKey( sort=sort, libtype=section.METADATA_TYPE, limit=limit, filters=filters, **kwargs) - uri = '%s%s' % (cls._uriRoot(server), searchKey) + uri = '%s%s' % (server._uriRoot(), searchKey) key = '/playlists%s' % utils.joinArgs({ 'uri': uri, diff --git a/plexapi/server.py b/plexapi/server.py index 7959fa460..e851e4143 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -169,6 +169,9 @@ def _headers(self, **kwargs): headers.update(kwargs) return headers + def _uriRoot(self): + return 'server://%s/com.plexapp.plugins.library' % self.machineIdentifier + @property def library(self): """ Library to browse or search your media. """ From b2ecd2b7f914d959a862b1b63e5307e9156eedbc Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 18:48:31 -0700 Subject: [PATCH 225/356] Add AdvancedSettingsMixin to Collection --- plexapi/collection.py | 20 ++++---------------- plexapi/mixins.py | 10 ++++++---- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index 9fbdc169e..0f15ad706 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -5,15 +5,14 @@ from plexapi.base import PlexPartialObject from plexapi.exceptions import BadRequest, NotFound, Unsupported from plexapi.library import LibrarySection -from plexapi.mixins import ArtMixin, PosterMixin +from plexapi.mixins import AdvancedSettingsMixin, ArtMixin, PosterMixin from plexapi.mixins import LabelMixin from plexapi.playqueue import PlayQueue -from plexapi.settings import Setting from plexapi.utils import deprecated @utils.registerPlexObject -class Collection(PlexPartialObject, ArtMixin, PosterMixin, LabelMixin): +class Collection(PlexPartialObject, AdvancedSettingsMixin, ArtMixin, PosterMixin, LabelMixin): """ Represents a single Collection. Attributes: @@ -172,15 +171,6 @@ def get(self, title): """ Alias to :func:`~plexapi.library.Collection.item`. """ return self.item(title) - def _preferences(self): - """ Returns a list of :class:`~plexapi.settings.Preferences` objects. """ - items = [] - data = self._server.query(self._details_key) - for item in data.iter('Setting'): - items.append(Setting(data=item, server=self._server)) - - return items - def modeUpdate(self, mode=None): """ Update the collection mode advanced setting. @@ -204,8 +194,7 @@ def modeUpdate(self, mode=None): key = mode_dict.get(mode) if key is None: raise BadRequest('Unknown collection mode : %s. Options %s' % (mode, list(mode_dict))) - part = '/library/metadata/%s/prefs?collectionMode=%s' % (self.ratingKey, key) - return self._server.query(part, method=self._server._session.put) + self.editAdvanced(collectionMode=key) def sortUpdate(self, sort=None): """ Update the collection order advanced setting. @@ -228,8 +217,7 @@ def sortUpdate(self, sort=None): key = sort_dict.get(sort) if key is None: raise BadRequest('Unknown sort dir: %s. Options: %s' % (sort, list(sort_dict))) - part = '/library/metadata/%s/prefs?collectionSort=%s' % (self.ratingKey, key) - return self._server.query(part, method=self._server._session.put) + self.editAdvanced(collectionSort=key) def addItems(self, items): """ Add items to the collection. diff --git a/plexapi/mixins.py b/plexapi/mixins.py index 05d1f40fa..49d8332a1 100644 --- a/plexapi/mixins.py +++ b/plexapi/mixins.py @@ -39,16 +39,18 @@ def editAdvanced(self, **kwargs): """ Edit a Plex object's advanced settings. """ data = {} key = '%s/prefs?' % self.key - preferences = {pref.id: list(pref.enumValues.keys()) for pref in self.preferences()} + preferences = {pref.id: pref for pref in self.preferences() if pref.enumValues} for settingID, value in kwargs.items(): try: - enums = preferences[settingID] + pref = preferences[settingID] except KeyError: raise NotFound('%s not found in %s' % (value, list(preferences.keys()))) - if value in enums: + + enumValues = pref.enumValues + if enumValues.get(value, enumValues.get(str(value))): data[settingID] = value else: - raise NotFound('%s not found in %s' % (value, enums)) + raise NotFound('%s not found in %s' % (value, list(enumValues))) url = key + urlencode(data) self._server.query(url, method=self._server._session.put) From 7800e892ae8911c7d1899d493eb95b2f99095a36 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 19:00:59 -0700 Subject: [PATCH 226/356] Add Playlist attrs test --- tests/conftest.py | 4 ++++ tests/test_playlist.py | 49 ++++++++++++++++++++++++++++++++---------- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index b93f424b5..de3cbaec6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -410,6 +410,10 @@ def is_thumb(key): return is_metadata(key, contains="/thumb/") +def is_composite(key, prefix="/library/metadata/"): + return is_metadata(key, prefix=prefix, contains="/composite/") + + def wait_until(condition_function, delay=0.25, timeout=1, *args, **kwargs): start = time.time() ready = condition_function(*args, **kwargs) diff --git a/tests/test_playlist.py b/tests/test_playlist.py index ce94b1f1b..2b785a023 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -4,8 +4,35 @@ import pytest from plexapi.exceptions import BadRequest, NotFound, Unsupported - -def test_create_playlist(plex, show): +from . import conftest as utils + + +def test_Playlist_attrs(playlist): + assert utils.is_datetime(playlist.addedAt) + assert playlist.allowSync is True + assert utils.is_composite(playlist.composite, prefix="/playlists") + assert playlist.content is None + assert utils.is_int(playlist.duration) + assert playlist.durationInSeconds is None + assert playlist.icon is None + assert playlist.guid.startswith("com.plexapp.agents.none://") + assert playlist.key.startswith("/playlists/") + assert playlist.leafCount == 3 + assert playlist.playlistType == "video" + assert utils.is_int(playlist.ratingKey) + assert playlist.smart is False + assert playlist.summary == "" + assert playlist.title == "Test Playlist" + assert playlist.type == "playlist" + assert utils.is_datetime(playlist.updatedAt) + assert playlist.thumb == playlist.composite + assert playlist.metadataType == "movie" + assert playlist.isVideo is True + assert playlist.isAudio is False + assert playlist.isPhoto is False + + +def test_Playlist_create(plex, show): # create the playlist title = 'test_create_playlist_show' episodes = show.episodes() @@ -57,7 +84,7 @@ def test_create_playlist(plex, show): playlist.delete() -def test_playlist_edit(plex, movie): +def test_Playlist_edit(plex, movie): title = 'test_playlist_edit' new_title = 'test_playlist_edit_new_title' new_summary = 'test_playlist_edit_summary' @@ -73,7 +100,7 @@ def test_playlist_edit(plex, movie): playlist.delete() -def test_playlist_item(plex, show): +def test_Playlist_item(plex, show): title = 'test_playlist_item' episodes = show.episodes() try: @@ -90,7 +117,7 @@ def test_playlist_item(plex, show): @pytest.mark.client -def test_playlist_play(plex, client, artist, album): +def test_Playlist_play(plex, client, artist, album): try: playlist_name = 'test_play_playlist' playlist = plex.createPlaylist(playlist_name, items=album) @@ -101,7 +128,7 @@ def test_playlist_play(plex, client, artist, album): assert playlist_name not in [i.title for i in plex.playlists()] -def test_playlist_photos(plex, photoalbum): +def test_Playlist_photos(plex, photoalbum): album = photoalbum photos = album.photos() try: @@ -114,14 +141,14 @@ def test_playlist_photos(plex, photoalbum): @pytest.mark.client -def test_play_photos(plex, client, photoalbum): +def test_Play_photos(plex, client, photoalbum): photos = photoalbum.photos() for photo in photos[:4]: client.playMedia(photo) time.sleep(2) -def test_copyToUser(plex, show, fresh_plex, shared_username): +def test_Playlist_copyToUser(plex, show, fresh_plex, shared_username): episodes = show.episodes() playlist = plex.createPlaylist('shared_from_test_plexapi', items=episodes) try: @@ -133,7 +160,7 @@ def test_copyToUser(plex, show, fresh_plex, shared_username): playlist.delete() -def test_smart_playlist(plex, movies, movie): +def test_Playlist_createSmart(plex, movies, movie): try: playlist = plex.createPlaylist( title='smart_playlist', @@ -155,7 +182,7 @@ def test_smart_playlist(plex, movies, movie): playlist.delete() -def test_smart_playlist_section(plex, movies, movie): +def test_Playlist_section(plex, movies, movie): title = 'test_playlist_section' try: playlist = plex.createPlaylist(title, items=movie) @@ -178,7 +205,7 @@ def test_smart_playlist_section(plex, movies, movie): playlist.delete() -def test_playlist_exceptions(plex, movies, movie, artist): +def test_Playlist_exceptions(plex, movies, movie, artist): title = 'test_playlist_exceptions' try: playlist = plex.createPlaylist(title, items=movie) From 445897798831955ced99d3de1f7a806e5ee33549 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 29 May 2021 19:26:12 -0700 Subject: [PATCH 227/356] Improve test coverage --- plexapi/collection.py | 18 +++++++++++------- tests/test_collection.py | 15 +++++++++++---- tests/test_playlist.py | 2 +- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index 0f15ad706..34c74d794 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -187,10 +187,12 @@ def modeUpdate(self, mode=None): collection.updateMode(mode="hide") """ - mode_dict = {'default': -1, - 'hide': 0, - 'hideItems': 1, - 'showItems': 2} + mode_dict = { + 'default': -1, + 'hide': 0, + 'hideItems': 1, + 'showItems': 2 + } key = mode_dict.get(mode) if key is None: raise BadRequest('Unknown collection mode : %s. Options %s' % (mode, list(mode_dict))) @@ -211,9 +213,11 @@ def sortUpdate(self, sort=None): collection.updateSort(mode="alpha") """ - sort_dict = {'release': 0, - 'alpha': 1, - 'custom': 2} + sort_dict = { + 'release': 0, + 'alpha': 1, + 'custom': 2 + } key = sort_dict.get(sort) if key is None: raise BadRequest('Unknown sort dir: %s. Options: %s' % (sort, list(sort_dict))) diff --git a/tests/test_collection.py b/tests/test_collection.py index 67272f8ae..202060a09 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- import pytest -from plexapi.exceptions import BadRequest +from plexapi.exceptions import BadRequest, NotFound from . import conftest as utils from . import test_mixins @@ -37,6 +37,11 @@ def test_Collection_attrs(collection): assert collection.titleSort == collection.title assert collection.type == "collection" assert utils.is_datetime(collection.updatedAt) + assert collection.listType == "video" + assert collection.metadataType == collection.subtype + assert collection.isVideo is True + assert collection.isAudio is False + assert collection.isPhoto is False def test_Collection_section(collection, movies): @@ -49,6 +54,8 @@ def test_Collection_item(collection): item2 = collection.get("Elephants Dream") assert item2.title == "Elephants Dream" assert item1 == item2 + with pytest.raises(NotFound): + collection.item("Does not exist") def test_Collection_items(collection): @@ -68,7 +75,7 @@ def test_Collection_modeUpdate(collection): def test_Collection_sortUpdate(collection): - sort_dict = {"release": 0, "alpha": 1, "custom": 2} + sort_dict = {"release": 0, "alpha": 1} for key, value in sort_dict.items(): collection.sortUpdate(sort=key) collection.reload() @@ -182,7 +189,7 @@ def test_Collection_createSmart(plex, tvshows): def test_Collection_exceptions(plex, movies, movie, artist): title = 'test_Collection_exceptions' try: - collection = plex.createCollection(title, section=movies, items=movie) + collection = plex.createCollection(title, section=movies.title, items=movie) with pytest.raises(BadRequest): collection.updateFilters() with pytest.raises(BadRequest): @@ -196,7 +203,7 @@ def test_Collection_exceptions(plex, movies, movie, artist): plex.createCollection(title, section=movies, items=[movie, artist]) try: - collection = plex.createCollection(title, smart=True, section=movies, **{'year>>': 2000}) + collection = plex.createCollection(title, smart=True, section=movies.title, **{'year>>': 2000}) with pytest.raises(BadRequest): collection.addItems(movie) with pytest.raises(BadRequest): diff --git a/tests/test_playlist.py b/tests/test_playlist.py index 2b785a023..62f8a5000 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -222,7 +222,7 @@ def test_Playlist_exceptions(plex, movies, movie, artist): plex.createPlaylist(title, items=[movie, artist]) try: - playlist = plex.createPlaylist(title, smart=True, section=movies, **{'year>>': 2000}) + playlist = plex.createPlaylist(title, smart=True, section=movies.title, **{'year>>': 2000}) with pytest.raises(BadRequest): playlist.addItems(movie) with pytest.raises(BadRequest): From 06ff7410a6d0d1e16a61826c4b55848914f2e723 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 30 May 2021 15:37:44 -0700 Subject: [PATCH 228/356] Add rating mixin --- plexapi/audio.py | 9 +++++---- plexapi/collection.py | 4 ++-- plexapi/mixins.py | 22 +++++++++++++++++++++- plexapi/photo.py | 6 +++--- plexapi/video.py | 26 ++++++++------------------ 5 files changed, 39 insertions(+), 28 deletions(-) diff --git a/plexapi/audio.py b/plexapi/audio.py index 25ac659b1..9a78632ce 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -5,7 +5,7 @@ from plexapi.base import Playable, PlexPartialObject from plexapi.exceptions import BadRequest from plexapi.mixins import AdvancedSettingsMixin, ArtUrlMixin, ArtMixin, PosterUrlMixin, PosterMixin -from plexapi.mixins import SplitMergeMixin, UnmatchMatchMixin +from plexapi.mixins import RatingMixin, SplitMergeMixin, UnmatchMatchMixin from plexapi.mixins import CollectionMixin, CountryMixin, GenreMixin, LabelMixin, MoodMixin, SimilarArtistMixin, StyleMixin @@ -115,7 +115,7 @@ def sync(self, bitrate, client=None, clientId=None, limit=None, title=None): @utils.registerPlexObject -class Artist(Audio, AdvancedSettingsMixin, ArtMixin, PosterMixin, SplitMergeMixin, UnmatchMatchMixin, +class Artist(Audio, AdvancedSettingsMixin, ArtMixin, PosterMixin, RatingMixin, SplitMergeMixin, UnmatchMatchMixin, CollectionMixin, CountryMixin, GenreMixin, MoodMixin, SimilarArtistMixin, StyleMixin): """ Represents a single Artist. @@ -222,7 +222,7 @@ def download(self, savepath=None, keep_original_name=False, **kwargs): @utils.registerPlexObject -class Album(Audio, ArtMixin, PosterMixin, UnmatchMatchMixin, +class Album(Audio, ArtMixin, PosterMixin, RatingMixin, UnmatchMatchMixin, CollectionMixin, GenreMixin, LabelMixin, MoodMixin, StyleMixin): """ Represents a single Album. @@ -329,7 +329,8 @@ def _defaultSyncTitle(self): @utils.registerPlexObject -class Track(Audio, Playable, ArtUrlMixin, PosterUrlMixin, CollectionMixin, MoodMixin): +class Track(Audio, Playable, ArtUrlMixin, PosterUrlMixin, RatingMixin, + CollectionMixin, MoodMixin): """ Represents a single Track. Attributes: diff --git a/plexapi/collection.py b/plexapi/collection.py index de4c165df..c35d0f51e 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -2,14 +2,14 @@ from plexapi import media, utils from plexapi.base import PlexPartialObject from plexapi.exceptions import BadRequest -from plexapi.mixins import ArtMixin, PosterMixin +from plexapi.mixins import ArtMixin, PosterMixin, RatingMixin from plexapi.mixins import LabelMixin from plexapi.settings import Setting from plexapi.utils import deprecated @utils.registerPlexObject -class Collection(PlexPartialObject, ArtMixin, PosterMixin, LabelMixin): +class Collection(PlexPartialObject, ArtMixin, PosterMixin, RatingMixin, LabelMixin): """ Represents a single Collection. Attributes: diff --git a/plexapi/mixins.py b/plexapi/mixins.py index 05d1f40fa..d6775829b 100644 --- a/plexapi/mixins.py +++ b/plexapi/mixins.py @@ -2,7 +2,7 @@ from urllib.parse import quote_plus, urlencode from plexapi import media, settings, utils -from plexapi.exceptions import NotFound +from plexapi.exceptions import BadRequest, NotFound class AdvancedSettingsMixin(object): @@ -190,6 +190,26 @@ def setPoster(self, poster): poster.select() +class RatingMixin(object): + """ Mixin for Plex objects that can have user star ratings. """ + + def rate(self, rating=None): + """ Rate the Plex object. Note: Plex ratings are displayed out of 5 stars (e.g. rating 7.0 = 3.5 stars). + + Parameters: + rating (float, optional): Rating from 0 to 10. Exclude to reset the rating. + + Raises: + :exc:`~plexapi.exceptions.BadRequest`: If the rating is invalid. + """ + if rating is None: + rating = -1 + elif not isinstance(rating, (int, float)) or rating < 0 or rating > 10: + raise BadRequest('Rating must be between 0 to 10.') + key = '/:/rate?key=%s&identifier=com.plexapp.plugins.library&rating=%s' % (self.ratingKey, rating) + self._server.query(key, method=self._server._session.put) + + class SplitMergeMixin(object): """ Mixin for Plex objects that can be split and merged. """ diff --git a/plexapi/photo.py b/plexapi/photo.py index a83073339..061b3f60e 100644 --- a/plexapi/photo.py +++ b/plexapi/photo.py @@ -4,11 +4,11 @@ from plexapi import media, utils, video from plexapi.base import Playable, PlexPartialObject from plexapi.exceptions import BadRequest -from plexapi.mixins import ArtUrlMixin, ArtMixin, PosterUrlMixin, PosterMixin, TagMixin +from plexapi.mixins import ArtUrlMixin, ArtMixin, PosterUrlMixin, PosterMixin, RatingMixin, TagMixin @utils.registerPlexObject -class Photoalbum(PlexPartialObject, ArtMixin, PosterMixin): +class Photoalbum(PlexPartialObject, ArtMixin, PosterMixin, RatingMixin): """ Represents a single Photoalbum (collection of photos). Attributes: @@ -137,7 +137,7 @@ def download(self, savepath=None, keep_original_name=False, showstatus=False): @utils.registerPlexObject -class Photo(PlexPartialObject, Playable, ArtUrlMixin, PosterUrlMixin, TagMixin): +class Photo(PlexPartialObject, Playable, ArtUrlMixin, PosterUrlMixin, RatingMixin, TagMixin): """ Represents a single Photo. Attributes: diff --git a/plexapi/video.py b/plexapi/video.py index 141e29150..f3bd84cc5 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -6,7 +6,7 @@ from plexapi.base import Playable, PlexPartialObject from plexapi.exceptions import BadRequest from plexapi.mixins import AdvancedSettingsMixin, ArtUrlMixin, ArtMixin, BannerMixin, PosterUrlMixin, PosterMixin -from plexapi.mixins import SplitMergeMixin, UnmatchMatchMixin +from plexapi.mixins import RatingMixin, SplitMergeMixin, UnmatchMatchMixin from plexapi.mixins import CollectionMixin, CountryMixin, DirectorMixin, GenreMixin, LabelMixin, ProducerMixin, WriterMixin @@ -73,23 +73,14 @@ def url(self, part): return self._server.url(part, includeToken=True) if part else None def markWatched(self): - """ Mark video as watched. """ + """ Mark the video as palyed. """ key = '/:/scrobble?key=%s&identifier=com.plexapp.plugins.library' % self.ratingKey self._server.query(key) - self.reload() def markUnwatched(self): - """ Mark video unwatched. """ + """ Mark the video as unplayed. """ key = '/:/unscrobble?key=%s&identifier=com.plexapp.plugins.library' % self.ratingKey self._server.query(key) - self.reload() - - def rate(self, rate): - """ Rate video. """ - key = '/:/rate?key=%s&identifier=com.plexapp.plugins.library&rating=%s' % (self.ratingKey, rate) - - self._server.query(key) - self.reload() def _defaultSyncTitle(self): """ Returns str, default title for a new syncItem. """ @@ -249,7 +240,7 @@ def sync(self, videoQuality, client=None, clientId=None, limit=None, unwatched=F @utils.registerPlexObject -class Movie(Video, Playable, AdvancedSettingsMixin, ArtMixin, PosterMixin, SplitMergeMixin, UnmatchMatchMixin, +class Movie(Video, Playable, AdvancedSettingsMixin, ArtMixin, PosterMixin, RatingMixin, SplitMergeMixin, UnmatchMatchMixin, CollectionMixin, CountryMixin, DirectorMixin, GenreMixin, LabelMixin, ProducerMixin, WriterMixin): """ Represents a single Movie. @@ -387,7 +378,7 @@ def download(self, savepath=None, keep_original_name=False, **kwargs): @utils.registerPlexObject -class Show(Video, AdvancedSettingsMixin, ArtMixin, BannerMixin, PosterMixin, SplitMergeMixin, UnmatchMatchMixin, +class Show(Video, AdvancedSettingsMixin, ArtMixin, BannerMixin, PosterMixin, RatingMixin, SplitMergeMixin, UnmatchMatchMixin, CollectionMixin, GenreMixin, LabelMixin): """ Represents a single Show (including all seasons and episodes). @@ -591,7 +582,7 @@ def download(self, savepath=None, keep_original_name=False, **kwargs): @utils.registerPlexObject -class Season(Video, ArtMixin, PosterMixin, CollectionMixin): +class Season(Video, ArtMixin, PosterMixin, RatingMixin, CollectionMixin): """ Represents a single Show Season (including all episodes). Attributes: @@ -729,7 +720,8 @@ def _defaultSyncTitle(self): @utils.registerPlexObject -class Episode(Video, Playable, ArtMixin, PosterMixin, CollectionMixin, DirectorMixin, WriterMixin): +class Episode(Video, Playable, ArtMixin, PosterMixin, RatingMixin, + CollectionMixin, DirectorMixin, WriterMixin): """ Represents a single Shows Episode. Attributes: @@ -865,8 +857,6 @@ def seasonEpisode(self): @property def hasIntroMarker(self): """ Returns True if the episode has an intro marker in the xml. """ - if not self.isFullObject(): - self.reload() return any(marker.type == 'intro' for marker in self.markers) @property From 6e58f7f70efbe829abbc8e7fb38747ade2845e0d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 30 May 2021 15:47:53 -0700 Subject: [PATCH 229/356] Refactor lastRatedAt userRating attributes --- plexapi/audio.py | 5 +++-- plexapi/collection.py | 4 ++++ plexapi/photo.py | 10 ++++++++-- plexapi/video.py | 9 +++------ 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/plexapi/audio.py b/plexapi/audio.py index 9a78632ce..8f81d9066 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -21,6 +21,7 @@ class Audio(PlexPartialObject): guid (str): Plex GUID for the artist, album, or track (plex://artist/5d07bcb0403c64029053ac4c). index (int): Plex index number (often the track number). key (str): API URL (/library/metadata/). + lastRatedAt (datetime): Datetime the item was last rated. lastViewedAt (datetime): Datetime the item was last played. librarySectionID (int): :class:`~plexapi.library.LibrarySection` ID. librarySectionKey (str): :class:`~plexapi.library.LibrarySection` key. @@ -35,7 +36,7 @@ class Audio(PlexPartialObject): titleSort (str): Title to use when sorting (defaults to title). type (str): 'artist', 'album', or 'track'. updatedAt (datatime): Datetime the item was updated. - userRating (float): Rating of the track (0.0 - 10.0) equaling (0 stars - 5 stars). + userRating (float): Rating of the item (0.0 - 10.0) equaling (0 stars - 5 stars). viewCount (int): Count of times the item was played. """ @@ -66,7 +67,7 @@ def _loadData(self, data): self.titleSort = data.attrib.get('titleSort', self.title) self.type = data.attrib.get('type') self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) - self.userRating = utils.cast(float, data.attrib.get('userRating', 0)) + self.userRating = utils.cast(float, data.attrib.get('userRating')) self.viewCount = utils.cast(int, data.attrib.get('viewCount', 0)) def url(self, part): diff --git a/plexapi/collection.py b/plexapi/collection.py index c35d0f51e..45c5f8f8b 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -29,6 +29,7 @@ class Collection(PlexPartialObject, ArtMixin, PosterMixin, RatingMixin, LabelMix index (int): Plex index number for the collection. key (str): API URL (/library/metadata/). labels (List<:class:`~plexapi.media.Label`>): List of label objects. + lastRatedAt (datetime): Datetime the collection was last rated. librarySectionID (int): :class:`~plexapi.library.LibrarySection` ID. librarySectionKey (str): :class:`~plexapi.library.LibrarySection` key. librarySectionTitle (str): :class:`~plexapi.library.LibrarySection` title. @@ -45,6 +46,7 @@ class Collection(PlexPartialObject, ArtMixin, PosterMixin, RatingMixin, LabelMix titleSort (str): Title to use when sorting (defaults to title). type (str): 'collection' updatedAt (datatime): Datetime the collection was updated. + userRating (float): Rating of the collection (0.0 - 10.0) equaling (0 stars - 5 stars). """ TAG = 'Directory' @@ -65,6 +67,7 @@ def _loadData(self, data): self.index = utils.cast(int, data.attrib.get('index')) self.key = data.attrib.get('key', '').replace('/children', '') # FIX_BUG_50 self.labels = self.findItems(data, media.Label) + self.lastRatedAt = utils.toDatetime(data.attrib.get('lastRatedAt')) self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) self.librarySectionKey = data.attrib.get('librarySectionKey') self.librarySectionTitle = data.attrib.get('librarySectionTitle') @@ -81,6 +84,7 @@ def _loadData(self, data): self.titleSort = data.attrib.get('titleSort', self.title) self.type = data.attrib.get('type') self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) + self.userRating = utils.cast(float, data.attrib.get('userRating')) @property @deprecated('use "items" instead', stacklevel=3) diff --git a/plexapi/photo.py b/plexapi/photo.py index 061b3f60e..ad8e0706b 100644 --- a/plexapi/photo.py +++ b/plexapi/photo.py @@ -21,6 +21,7 @@ class Photoalbum(PlexPartialObject, ArtMixin, PosterMixin, RatingMixin): guid (str): Plex GUID for the photo album (local://229674). index (sting): Plex index number for the photo album. key (str): API URL (/library/metadata/). + lastRatedAt (datetime): Datetime the photo album was last rated. librarySectionID (int): :class:`~plexapi.library.LibrarySection` ID. librarySectionKey (str): :class:`~plexapi.library.LibrarySection` key. librarySectionTitle (str): :class:`~plexapi.library.LibrarySection` title. @@ -32,7 +33,7 @@ class Photoalbum(PlexPartialObject, ArtMixin, PosterMixin, RatingMixin): titleSort (str): Title to use when sorting (defaults to title). type (str): 'photo' updatedAt (datatime): Datetime the photo album was updated. - userRating (float): Rating of the photoalbum (0.0 - 10.0) equaling (0 stars - 5 stars). + userRating (float): Rating of the photo album (0.0 - 10.0) equaling (0 stars - 5 stars). """ TAG = 'Directory' TYPE = 'photo' @@ -46,6 +47,7 @@ def _loadData(self, data): self.guid = data.attrib.get('guid') self.index = utils.cast(int, data.attrib.get('index')) self.key = data.attrib.get('key', '').replace('/children', '') # FIX_BUG_50 + self.lastRatedAt = utils.toDatetime(data.attrib.get('lastRatedAt')) self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) self.librarySectionKey = data.attrib.get('librarySectionKey') self.librarySectionTitle = data.attrib.get('librarySectionTitle') @@ -57,7 +59,7 @@ def _loadData(self, data): self.titleSort = data.attrib.get('titleSort', self.title) self.type = data.attrib.get('type') self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) - self.userRating = utils.cast(float, data.attrib.get('userRating', 0)) + self.userRating = utils.cast(float, data.attrib.get('userRating')) def album(self, title): """ Returns the :class:`~plexapi.photo.Photoalbum` that matches the specified title. @@ -150,6 +152,7 @@ class Photo(PlexPartialObject, Playable, ArtUrlMixin, PosterUrlMixin, RatingMixi guid (str): Plex GUID for the photo (com.plexapp.agents.none://231714?lang=xn). index (sting): Plex index number for the photo. key (str): API URL (/library/metadata/). + lastRatedAt (datetime): Datetime the photo was last rated. librarySectionID (int): :class:`~plexapi.library.LibrarySection` ID. librarySectionKey (str): :class:`~plexapi.library.LibrarySection` key. librarySectionTitle (str): :class:`~plexapi.library.LibrarySection` title. @@ -170,6 +173,7 @@ class Photo(PlexPartialObject, Playable, ArtUrlMixin, PosterUrlMixin, RatingMixi titleSort (str): Title to use when sorting (defaults to title). type (str): 'photo' updatedAt (datatime): Datetime the photo was updated. + userRating (float): Rating of the photo (0.0 - 10.0) equaling (0 stars - 5 stars). year (int): Year the photo was taken. """ TAG = 'Photo' @@ -186,6 +190,7 @@ def _loadData(self, data): self.guid = data.attrib.get('guid') self.index = utils.cast(int, data.attrib.get('index')) self.key = data.attrib.get('key', '') + self.lastRatedAt = utils.toDatetime(data.attrib.get('lastRatedAt')) self.librarySectionID = utils.cast(int, data.attrib.get('librarySectionID')) self.librarySectionKey = data.attrib.get('librarySectionKey') self.librarySectionTitle = data.attrib.get('librarySectionTitle') @@ -206,6 +211,7 @@ def _loadData(self, data): self.titleSort = data.attrib.get('titleSort', self.title) self.type = data.attrib.get('type') self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) + self.userRating = utils.cast(float, data.attrib.get('userRating')) self.year = utils.cast(int, data.attrib.get('year')) def photoalbum(self): diff --git a/plexapi/video.py b/plexapi/video.py index f3bd84cc5..999e5adfe 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -22,6 +22,7 @@ class Video(PlexPartialObject): fields (List<:class:`~plexapi.media.Field`>): List of field objects. guid (str): Plex GUID for the movie, show, season, episode, or clip (plex://movie/5d776b59ad5437001f79c6f8). key (str): API URL (/library/metadata/). + lastRatedAt (datetime): Datetime the item was last rated. lastViewedAt (datetime): Datetime the item was last played. librarySectionID (int): :class:`~plexapi.library.LibrarySection` ID. librarySectionKey (str): :class:`~plexapi.library.LibrarySection` key. @@ -35,6 +36,7 @@ class Video(PlexPartialObject): titleSort (str): Title to use when sorting (defaults to title). type (str): 'movie', 'show', 'season', 'episode', or 'clip'. updatedAt (datatime): Datetime the item was updated. + userRating (float): Rating of the item (0.0 - 10.0) equaling (0 stars - 5 stars). viewCount (int): Count of times the item was played. """ @@ -61,6 +63,7 @@ def _loadData(self, data): self.titleSort = data.attrib.get('titleSort', self.title) self.type = data.attrib.get('type') self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) + self.userRating = utils.cast(float, data.attrib.get('userRating')) self.viewCount = utils.cast(int, data.attrib.get('viewCount', 0)) @property @@ -274,7 +277,6 @@ class Movie(Video, Playable, AdvancedSettingsMixin, ArtMixin, PosterMixin, Ratin tagline (str): Movie tag line (Back 2 Work; Who says men can't change?). useOriginalTitle (int): Setting that indicates if the original title is used for the movie (-1 = Library default, 0 = No, 1 = Yes). - userRating (float): User rating (2.0; 8.0). viewOffset (int): View offset in milliseconds. writers (List<:class:`~plexapi.media.Writer`>): List of writers objects. year (int): Year movie was released. @@ -312,7 +314,6 @@ def _loadData(self, data): self.studio = data.attrib.get('studio') self.tagline = data.attrib.get('tagline') self.useOriginalTitle = utils.cast(int, data.attrib.get('useOriginalTitle', '-1')) - self.userRating = utils.cast(float, data.attrib.get('userRating')) self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0)) self.writers = self.findItems(data, media.Writer) self.year = utils.cast(int, data.attrib.get('year')) @@ -425,7 +426,6 @@ class Show(Video, AdvancedSettingsMixin, ArtMixin, BannerMixin, PosterMixin, Rat theme (str): URL to theme resource (/library/metadata//theme/). useOriginalTitle (int): Setting that indicates if the original title is used for the show (-1 = Library default, 0 = No, 1 = Yes). - userRating (float): User rating (2.0; 8.0). viewedLeafCount (int): Number of items marked as played in the show view. year (int): Year the show was released. """ @@ -468,7 +468,6 @@ def _loadData(self, data): self.tagline = data.attrib.get('tagline') self.theme = data.attrib.get('theme') self.useOriginalTitle = utils.cast(int, data.attrib.get('useOriginalTitle', '-1')) - self.userRating = utils.cast(float, data.attrib.get('userRating')) self.viewedLeafCount = utils.cast(int, data.attrib.get('viewedLeafCount')) self.year = utils.cast(int, data.attrib.get('year')) @@ -756,7 +755,6 @@ class Episode(Video, Playable, ArtMixin, PosterMixin, RatingMixin, parentYear (int): Year the season was released. rating (float): Episode rating (7.9; 9.8; 8.1). skipParent (bool): True if the show's seasons are set to hidden. - userRating (float): User rating (2.0; 8.0). viewOffset (int): View offset in milliseconds. writers (List<:class:`~plexapi.media.Writer`>): List of writers objects. year (int): Year the episode was released. @@ -799,7 +797,6 @@ def _loadData(self, data): self.parentYear = utils.cast(int, data.attrib.get('parentYear')) self.rating = utils.cast(float, data.attrib.get('rating')) self.skipParent = utils.cast(bool, data.attrib.get('skipParent', '0')) - self.userRating = utils.cast(float, data.attrib.get('userRating')) self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0)) self.writers = self.findItems(data, media.Writer) self.year = utils.cast(int, data.attrib.get('year')) From bd8cdb10b7cfd51210279105f220ea791d1a3c42 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 30 May 2021 15:49:28 -0700 Subject: [PATCH 230/356] Update tests for ratings mixin --- tests/test_actions.py | 9 --------- tests/test_audio.py | 12 ++++++++++++ tests/test_collection.py | 4 ++++ tests/test_mixins.py | 19 ++++++++++++++++++- tests/test_photo.py | 8 ++++++++ tests/test_video.py | 17 +++++++++++++++++ 6 files changed, 59 insertions(+), 10 deletions(-) diff --git a/tests/test_actions.py b/tests/test_actions.py index 994068d8d..614bbbd45 100644 --- a/tests/test_actions.py +++ b/tests/test_actions.py @@ -19,12 +19,3 @@ def test_refresh_section(tvshows): def test_refresh_video(movie): movie.refresh() - - -def test_rate_movie(movie): - oldrate = movie.userRating - if oldrate is None: - oldrate = 1 - movie.rate(10.0) - assert movie.userRating == 10.0, 'User rating 10.0 after rating five stars.' - movie.rate(oldrate) diff --git a/tests/test_audio.py b/tests/test_audio.py index 288c3162b..33325a4c5 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -80,6 +80,10 @@ def test_audio_Artist_mixins_images(artist): test_mixins.attr_posterUrl(artist) +def test_audio_Artist_mixins_rating(artist): + test_mixins.edit_rating(artist) + + def test_audio_Artist_mixins_tags(artist): test_mixins.edit_collection(artist) test_mixins.edit_country(artist) @@ -171,6 +175,10 @@ def test_audio_Album_mixins_images(album): test_mixins.attr_posterUrl(album) +def test_audio_Album_mixins_rating(album): + test_mixins.edit_rating(album) + + def test_audio_Album_mixins_tags(album): test_mixins.edit_collection(album) test_mixins.edit_genre(album) @@ -314,6 +322,10 @@ def test_audio_Track_mixins_images(track): test_mixins.attr_posterUrl(track) +def test_audio_Track_mixins_rating(track): + test_mixins.edit_rating(track) + + def test_audio_Track_mixins_tags(track): test_mixins.edit_collection(track) test_mixins.edit_mood(track) diff --git a/tests/test_collection.py b/tests/test_collection.py index c2663a309..c43a129bc 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -114,5 +114,9 @@ def test_Collection_mixins_images(collection): test_mixins.attr_posterUrl(collection) +def test_Collection_mixins_rating(collection): + test_mixins.edit_rating(collection) + + def test_Collection_mixins_tags(collection): test_mixins.edit_label(collection) diff --git a/tests/test_mixins.py b/tests/test_mixins.py index e5c86c080..d3c04f85d 100644 --- a/tests/test_mixins.py +++ b/tests/test_mixins.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from plexapi.exceptions import NotFound +from plexapi.exceptions import BadRequest, NotFound from plexapi.utils import tag_singular import pytest @@ -177,3 +177,20 @@ def edit_advanced_settings(obj): _test_mixins_editAdvanced(obj) _test_mixins_editAdvanced_bad_pref(obj) _test_mixins_defaultAdvanced(obj) + + +def edit_rating(obj): + obj.rate(10.0) + obj.reload() + assert utils.is_datetime(obj.lastRatedAt) + assert obj.userRating == 10.0 + obj.rate() + obj.reload() + assert obj.lastRatedAt is None + assert obj.userRating is None + with pytest.raises(BadRequest): + assert obj.rate('bad-rating') + with pytest.raises(BadRequest): + assert obj.rate(-1) + with pytest.raises(BadRequest): + assert obj.rate(100) diff --git a/tests/test_photo.py b/tests/test_photo.py index 85e4c9acc..8d282f81d 100644 --- a/tests/test_photo.py +++ b/tests/test_photo.py @@ -18,6 +18,14 @@ def test_photo_Photoalbum_mixins_images(photoalbum): test_mixins.attr_posterUrl(photoalbum) +def test_photo_Photoalbum_mixins_rating(photoalbum): + test_mixins.edit_rating(photoalbum) + + +def test_photo_Photo_mixins_rating(photo): + test_mixins.edit_rating(photo) + + def test_photo_Photo_mixins_tags(photo): test_mixins.edit_tag(photo) diff --git a/tests/test_video.py b/tests/test_video.py index 11fb76341..f769be197 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -49,6 +49,10 @@ def test_video_Movie_mixins_images(movie): test_mixins.edit_poster(movie) +def test_video_Movie_mixins_rating(movie): + test_mixins.edit_rating(movie) + + def test_video_Movie_mixins_tags(movie): test_mixins.edit_collection(movie) test_mixins.edit_country(movie) @@ -729,6 +733,10 @@ def test_video_Show_mixins_images(show): test_mixins.attr_posterUrl(show) +def test_video_Show_mixins_rating(show): + test_mixins.edit_rating(show) + + def test_video_Show_mixins_tags(show): test_mixins.edit_collection(show) test_mixins.edit_genre(show) @@ -843,6 +851,11 @@ def test_video_Season_mixins_images(show): test_mixins.attr_posterUrl(season) +def test_video_Season_mixins_rating(show): + season = show.season(season=1) + test_mixins.edit_rating(season) + + def test_video_Season_mixins_tags(show): season = show.season(season=1) test_mixins.edit_collection(season) @@ -1033,6 +1046,10 @@ def test_video_Episode_mixins_images(episode): test_mixins.attr_posterUrl(episode) +def test_video_Episode_mixins_rating(episode): + test_mixins.edit_rating(episode) + + def test_video_Episode_mixins_tags(episode): test_mixins.edit_collection(episode) test_mixins.edit_director(episode) From b269140943013460fc25023c2e249ea3716e35c1 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 30 May 2021 16:07:59 -0700 Subject: [PATCH 231/356] Fix rating mixin tests --- tests/test_actions.py | 2 ++ tests/test_mixins.py | 5 +++-- tests/test_video.py | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/tests/test_actions.py b/tests/test_actions.py index 614bbbd45..39afbcde1 100644 --- a/tests/test_actions.py +++ b/tests/test_actions.py @@ -6,9 +6,11 @@ def test_mark_movie_watched(movie): print('Marking movie watched: %s' % movie) print('View count: %s' % movie.viewCount) movie.markWatched() + movie.reload() print('View count: %s' % movie.viewCount) assert movie.viewCount == 1, 'View count 0 after watched.' movie.markUnwatched() + movie.reload() print('View count: %s' % movie.viewCount) assert movie.viewCount == 0, 'View count 1 after unwatched.' diff --git a/tests/test_mixins.py b/tests/test_mixins.py index d3c04f85d..94d494a22 100644 --- a/tests/test_mixins.py +++ b/tests/test_mixins.py @@ -185,8 +185,9 @@ def edit_rating(obj): assert utils.is_datetime(obj.lastRatedAt) assert obj.userRating == 10.0 obj.rate() - obj.reload() - assert obj.lastRatedAt is None + # Cannot use obj.reload() since PlexObject.__setattr__() + # will not overwrite userRating with None + obj = obj.fetchItem(obj._details_key) assert obj.userRating is None with pytest.raises(BadRequest): assert obj.rate('bad-rating') diff --git a/tests/test_video.py b/tests/test_video.py index f769be197..9b44c99aa 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -697,11 +697,13 @@ def test_video_Show_analyze(show): def test_video_Show_markWatched(show): show.markWatched() + show.reload() assert show.isWatched def test_video_Show_markUnwatched(show): show.markUnwatched() + show.reload() assert not show.isWatched @@ -814,12 +816,14 @@ def test_video_Season_show(show): def test_video_Season_watched(show): season = show.season("Season 1") season.markWatched() + season.reload() assert season.isWatched def test_video_Season_unwatched(show): season = show.season("Season 1") season.markUnwatched() + season.reload() assert not season.isWatched From 70bbfa3c84689664debfaf1cecfa08d1e1f38fb0 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 30 May 2021 16:25:25 -0700 Subject: [PATCH 232/356] Allow overwriting attributes with None when manually reloading --- plexapi/base.py | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/plexapi/base.py b/plexapi/base.py index 060c7d906..3aa6d17fc 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -8,8 +8,9 @@ from plexapi.exceptions import BadRequest, NotFound, UnknownType, Unsupported from plexapi.utils import tag_plural, tag_helper -DONT_RELOAD_FOR_KEYS = {'key', 'session'} -DONT_OVERWRITE_SESSION_KEYS = {'usernames', 'players', 'transcodeSessions', 'session'} +USER_DONT_RELOAD_FOR_KEYS = set() +_DONT_RELOAD_FOR_KEYS = {'key', 'session'} +_DONT_OVERWRITE_SESSION_KEYS = {'usernames', 'players', 'transcodeSessions', 'session'} OPERATORS = { 'exact': lambda v, q: v == q, 'iexact': lambda v, q: v.lower() == q.lower(), @@ -53,6 +54,7 @@ def __init__(self, server, data, initpath=None, parent=None): if data is not None: self._loadData(data) self._details_key = self._buildDetailsKey() + self._autoReload = False def __repr__(self): uid = self._clean(self.firstAttr('_baseurl', 'key', 'id', 'playQueueID', 'uri')) @@ -61,10 +63,12 @@ def __repr__(self): def __setattr__(self, attr, value): # Don't overwrite session specific attr with [] - if attr in DONT_OVERWRITE_SESSION_KEYS and value == []: + if attr in _DONT_OVERWRITE_SESSION_KEYS and value == []: value = getattr(self, attr, []) - # Don't overwrite an attr with None unless it's a private variable - if value is not None or attr.startswith('_') or attr not in self.__dict__: + + autoReload = self.__dict__.get('_autoReload') + # Don't overwrite an attr with None unless it's a private variable or not auto reload + if value is not None or attr.startswith('_') or attr not in self.__dict__ or not autoReload: self.__dict__[attr] = value def _clean(self, value): @@ -298,7 +302,7 @@ def listAttrs(self, data, attr, **kwargs): results.append(elem.attrib.get(attr)) return results - def reload(self, key=None, **kwargs): + def reload(self, key=None, _autoReload=False, **kwargs): """ Reload the data for this object from self.key. Parameters: @@ -335,7 +339,9 @@ def reload(self, key=None, **kwargs): raise Unsupported('Cannot reload an object not built from a URL.') self._initpath = key data = self._server.query(key) + self._autoReload = _autoReload self._loadData(data[0]) + self._autoReload = False return self def _checkAttrs(self, elem, **kwargs): @@ -441,8 +447,9 @@ def __getattribute__(self, attr): # Dragons inside.. :-/ value = super(PlexPartialObject, self).__getattribute__(attr) # Check a few cases where we dont want to reload - if attr in DONT_RELOAD_FOR_KEYS: return value - if attr in DONT_OVERWRITE_SESSION_KEYS: return value + if attr in _DONT_RELOAD_FOR_KEYS: return value + if attr in _DONT_OVERWRITE_SESSION_KEYS: return value + if attr in USER_DONT_RELOAD_FOR_KEYS: return if attr.startswith('_'): return value if value not in (None, []): return value if self.isFullObject(): return value @@ -452,7 +459,7 @@ def __getattribute__(self, attr): objname = "%s '%s'" % (clsname, title) if title else clsname log.debug("Reloading %s for attr '%s'", objname, attr) # Reload and return the value - self.reload() + self.reload(_autoReload=True) return super(PlexPartialObject, self).__getattribute__(attr) def analyze(self): @@ -694,7 +701,7 @@ def updateProgress(self, time, state='stopped'): key = '/:/progress?key=%s&identifier=com.plexapp.plugins.library&time=%d&state=%s' % (self.ratingKey, time, state) self._server.query(key) - self.reload() + self.reload(_autoReload=True) def updateTimeline(self, time, state='stopped', duration=None): """ Set the timeline progress for this video. @@ -712,4 +719,4 @@ def updateTimeline(self, time, state='stopped', duration=None): key = '/:/timeline?ratingKey=%s&key=%s&identifier=com.plexapp.plugins.library&time=%d&state=%s%s' key %= (self.ratingKey, self.key, time, state, durationStr) self._server.query(key) - self.reload() + self.reload(_autoReload=True) From d48e1fe875b25dbf80513a57c7fde1847731526e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 30 May 2021 18:02:29 -0700 Subject: [PATCH 233/356] Fix bootstrap server show section progress --- tools/plex-bootstraptest.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/plex-bootstraptest.py b/tools/plex-bootstraptest.py index 1da454ef3..7c059b871 100755 --- a/tools/plex-bootstraptest.py +++ b/tools/plex-bootstraptest.py @@ -272,6 +272,8 @@ def create_section(server, section, opts): processed_media = 0 expected_media_count = section.pop("expected_media_count", 0) expected_media_type = (section["type"],) + if section["type"] == "show": + expected_media_type = ("show", "season", "episode") if section["type"] == "artist": expected_media_type = ("artist", "album", "track") expected_media_type = tuple(SEARCHTYPES[t] for t in expected_media_type) From dbd39abb65dcc714c0acc7815aba21bdc07b0423 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 30 May 2021 18:28:32 -0700 Subject: [PATCH 234/356] pytest mark xfail show mixins image test --- tests/test_video.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_video.py b/tests/test_video.py index 11fb76341..49e73a6af 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -722,6 +722,7 @@ def test_video_Show_mixins_edit_advanced_settings(show): test_mixins.edit_advanced_settings(show) +@pytest.mark.xfail(reason="Changing show art fails randomly") def test_video_Show_mixins_images(show): test_mixins.edit_art(show) test_mixins.edit_poster(show) From ca97c60dcb52e6fa50f002cca992546483a0f5e7 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 31 May 2021 09:20:19 -0400 Subject: [PATCH 235/356] replace eval with json.loads --- plexapi/myplex.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 35b313a20..0c4fa0e3e 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import copy import threading +import json import time from xml.etree import ElementTree @@ -1378,12 +1379,13 @@ class AccountSettings(PlexObject): def _loadData(self, data): self.id = data.attrib.get('id') self.type = data.attrib.get('type') - self.value = eval(self.values(data.attrib.get('value'))) + self.value = self.values(data.attrib.get('value')) self.hidden = data.attrib.get('hidden') self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) def values(self, value): - return value.replace(':false', ':False').replace(':true', ':True').replace(':null', ':None') + value.replace(':false', ':False').replace(':true', ':True').replace(':null', ':None') + return json.loads(value) class AccountOptOut(PlexObject): From 5013028344aaca7ecdfdf202bfd0942b9c3f0c88 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 31 May 2021 09:46:46 -0400 Subject: [PATCH 236/356] SETTINGS url change and OPTOUT url creation --- plexapi/myplex.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 0c4fa0e3e..c20727e40 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -77,7 +77,8 @@ class MyPlexAccount(PlexObject): REQUESTS = 'https://plex.tv/api/invites/requests' # get SIGNIN = 'https://plex.tv/users/sign_in.xml' # get with auth WEBHOOKS = 'https://plex.tv/api/v2/user/webhooks' # get, post with data - SETTINGS = 'https://plex.tv/api/v2/user/%(userUUID)s/settings' # get + SETTINGS = 'https://plex.tv/api/v2/user/settings' # get + OPTOUTS = 'https://plex.tv/api/v2/user/%(userUUID)s/settings/opt_outs' # get LINK = 'https://plex.tv/api/v2/pins/link' # put # Hub sections VOD = 'https://vod.provider.plex.tv/' # get @@ -704,7 +705,7 @@ def tidal(self): def onlineMediaSources(self): """ Returns an user account Online Media Sourcessettings :class:`~plexapi.myplex.AccountOptOut` """ - url = self.SETTINGS % {'userUUID': self.uuid} + '/opt_outs' + url = self.OPTOUTS % {'userUUID': self.uuid} elem = self.query(url) return self.findItems(elem, cls=AccountOptOut, etag='optOut') @@ -712,8 +713,7 @@ def onlineMediaSources(self): def settings(self): """ Returns an user account settings :class:`~plexapi.myplex.AccountSettings` """ - req = requests.get(self.SETTINGS % {'userUUID': self.uuid}, - headers={'X-Plex-Token': self._token, + req = requests.get(self.SETTINGS, headers={'X-Plex-Token': self._token, 'X-Plex-Client-Identifier': X_PLEX_IDENTIFIER}) elem = ElementTree.fromstring(req.text) return self.findItems(elem, cls=AccountSettings, etag='setting')[0] From 4a4a945653b61192820b398d6d5c0333aec69109 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 31 May 2021 09:50:21 -0400 Subject: [PATCH 237/356] Move section method from Clip to Extra --- plexapi/video.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plexapi/video.py b/plexapi/video.py index ec11efe7f..18b0a2a16 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -973,12 +973,6 @@ def locations(self): """ return [part.file for part in self.iterParts() if part] - def section(self): - """Return the :class:`~plexapi.library.LibrarySection` this item belongs to.""" - # Clip payloads may not contain 'librarySectionID' - # Return None to avoid unnecessary attribute lookup attempts. - return None - @utils.registerPlexObject class Extra(Clip): @@ -1022,3 +1016,9 @@ def _loadData(self, data): self.title = data.attrib.get('title') self.type = data.attrib.get('type') self.year = utils.cast(int, data.attrib.get('year')) + + def section(self): + """Return the :class:`~plexapi.library.LibrarySection` this item belongs to.""" + # Clip payloads may not contain 'librarySectionID' + # Return None to avoid unnecessary attribute lookup attempts. + return None From 056b5cf342cc07f29db5a7077fdf41fbefab5e05 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 31 May 2021 09:56:37 -0400 Subject: [PATCH 238/356] flag onlineMediaSources required to be authenticated --- tests/test_myplex.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_myplex.py b/tests/test_myplex.py index 59dff2f0d..6e31ca997 100644 --- a/tests/test_myplex.py +++ b/tests/test_myplex.py @@ -123,8 +123,7 @@ def enabled(): utils.wait_until(lambda: enabled() == (False, False)) -@pytest.mark.skip(reason="account.onlineMediaSources() is empty " - "in the CI test run against an unclaimed server.") +@pytest.mark.authenticated def test_myplex_onlineMediaSources_optOut(account): mediaOptOut = account.onlineMediaSources()[0] optOutValue = mediaOptOut.value From 4d12cc9a49adf13d6cd1250faf3dac3eb97a41f2 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 2 Jun 2021 08:59:52 -0700 Subject: [PATCH 239/356] Move reload to private method to hide the autoReload parameter --- plexapi/base.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/plexapi/base.py b/plexapi/base.py index 3aa6d17fc..24454e1a9 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -302,7 +302,7 @@ def listAttrs(self, data, attr, **kwargs): results.append(elem.attrib.get(attr)) return results - def reload(self, key=None, _autoReload=False, **kwargs): + def reload(self, key=None, **kwargs): """ Reload the data for this object from self.key. Parameters: @@ -333,6 +333,10 @@ def reload(self, key=None, _autoReload=False, **kwargs): movie.isFullObject() # Returns True """ + return self._reload(key=key, **kwargs) + + def _reload(self, key=None, _autoReload=False, **kwargs): + """ Perform the actual reload. """ details_key = self._buildDetailsKey(**kwargs) if kwargs else self._details_key key = key or details_key or self.key if not key: @@ -459,7 +463,7 @@ def __getattribute__(self, attr): objname = "%s '%s'" % (clsname, title) if title else clsname log.debug("Reloading %s for attr '%s'", objname, attr) # Reload and return the value - self.reload(_autoReload=True) + self._reload(_autoReload=True) return super(PlexPartialObject, self).__getattribute__(attr) def analyze(self): @@ -701,7 +705,7 @@ def updateProgress(self, time, state='stopped'): key = '/:/progress?key=%s&identifier=com.plexapp.plugins.library&time=%d&state=%s' % (self.ratingKey, time, state) self._server.query(key) - self.reload(_autoReload=True) + self._reload(_autoReload=True) def updateTimeline(self, time, state='stopped', duration=None): """ Set the timeline progress for this video. @@ -719,4 +723,4 @@ def updateTimeline(self, time, state='stopped', duration=None): key = '/:/timeline?ratingKey=%s&key=%s&identifier=com.plexapp.plugins.library&time=%d&state=%s%s' key %= (self.ratingKey, self.key, time, state, durationStr) self._server.query(key) - self.reload(_autoReload=True) + self._reload(_autoReload=True) From 38114b62ba8bc488a18673173248bb32b9cb7dc2 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 2 Jun 2021 09:23:39 -0700 Subject: [PATCH 240/356] Check item exists in playlist before removing or moving --- plexapi/collection.py | 1 - plexapi/playlist.py | 23 +++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index 34c74d794..b157e2e3a 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -260,7 +260,6 @@ def removeItems(self, items): Parameters: items (List): List of :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to be removed from the collection. - Items must be retrieved from :func:`~plexapi.collection.Collection.items`. Raises: :class:`plexapi.exceptions.BadRequest`: When trying to remove items from a smart collection. diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 97fac3191..44041311b 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -160,6 +160,13 @@ def get(self, title): """ Alias to :func:`~plexapi.playlist.Playlist.item`. """ return self.item(title) + def _getPlaylistItemID(self, item): + """ Match an item to a playlist item and return the item playlistItemID. """ + for _item in self.items(): + if _item.ratingKey == item.ratingKey: + return _item.playlistItemID + raise NotFound('Item with title "%s" not found in the playlist' % item.title) + def addItems(self, items): """ Add items to the playlist. @@ -201,10 +208,10 @@ def removeItems(self, items): Parameters: items (List): List of :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to be removed from the playlist. - Items must be retrieved from :func:`~plexapi.playlist.Playlist.items`. Raises: :class:`plexapi.exceptions.BadRequest`: When trying to remove items from a smart playlist. + :class:`plexapi.exceptions.NotFound`: When the item does not exist in the playlist. """ if self.smart: raise BadRequest('Cannot remove items from a smart playlist.') @@ -213,7 +220,8 @@ def removeItems(self, items): items = [items] for item in items: - key = '%s/items/%s' % (self.key, item.playlistItemID) + playlistItemID = self._getPlaylistItemID(item) + key = '%s/items/%s' % (self.key, playlistItemID) self._server.query(key, method=self._server._session.delete) def moveItem(self, item, after=None): @@ -222,20 +230,23 @@ def moveItem(self, item, after=None): Parameters: items (obj): :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to be moved in the playlist. - Item must be retrieved from :func:`~plexapi.playlist.Playlist.items`. after (obj): :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to move the item after in the playlist. - Item must be retrieved from :func:`~plexapi.playlist.Playlist.items`. Raises: :class:`plexapi.exceptions.BadRequest`: When trying to move items in a smart playlist. + :class:`plexapi.exceptions.NotFound`: When the item or item after does not exist in the playlist. """ if self.smart: raise BadRequest('Cannot move items in a smart playlist.') - key = '%s/items/%s/move' % (self.key, item.playlistItemID) + playlistItemID = self._getPlaylistItemID(item) + key = '%s/items/%s/move' % (self.key, playlistItemID) + if after: - key += '?after=%s' % after.playlistItemID + afterPlaylistItemID = self._getPlaylistItemID(after) + key += '?after=%s' % afterPlaylistItemID + self._server.query(key, method=self._server._session.put) def updateFilters(self, limit=None, sort=None, filters=None, **kwargs): From c31c5317b3aaf57e316ccb7340922ea1d6be17ea Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 2 Jun 2021 09:27:35 -0700 Subject: [PATCH 241/356] Update playlist tests for NotFound when removing or moving items --- tests/test_playlist.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_playlist.py b/tests/test_playlist.py index 62f8a5000..f5faff861 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -213,6 +213,12 @@ def test_Playlist_exceptions(plex, movies, movie, artist): playlist.updateFilters() with pytest.raises(BadRequest): playlist.addItems(artist) + with pytest.raises(NotFound): + playlist.removeItems(artist) + with pytest.raises(NotFound): + playlist.moveItem(artist) + with pytest.raises(NotFound): + playlist.moveItem(item=movie, after=artist) finally: playlist.delete() From 13215152c903b24b5d6f70498e90efbeff3e2acf Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 13:51:59 -0700 Subject: [PATCH 242/356] Explicit check for parent is not None * Checking if parent is truthy calls the __len__ method which does not work for some Plex objects until after it is initialized with _loadData. --- plexapi/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/base.py b/plexapi/base.py index 060c7d906..fc445e32f 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -48,7 +48,7 @@ def __init__(self, server, data, initpath=None, parent=None): self._server = server self._data = data self._initpath = initpath or self.key - self._parent = weakref.ref(parent) if parent else None + self._parent = weakref.ref(parent) if parent is not None else None self._details_key = None if data is not None: self._loadData(data) From 79fc578406a6c112e6dca71c99e5a3ed3b005400 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 14:19:57 -0700 Subject: [PATCH 243/356] Fix createPlaylist and createCollection in sync tests --- tests/test_sync.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_sync.py b/tests/test_sync.py index 6c2aab5b9..8164c2931 100644 --- a/tests/test_sync.py +++ b/tests/test_sync.py @@ -385,7 +385,7 @@ def test_sync_entire_library_photos(clear_sync_device, photos): def test_playlist_movie_sync(plex, clear_sync_device, movies): items = movies.all() - playlist = plex.createPlaylist("Sync: Movies", items) + playlist = plex.createPlaylist("Sync: Movies", items=items) new_item = playlist.sync( videoQuality=VIDEO_QUALITY_3_MBPS_720p, client=clear_sync_device ) @@ -407,7 +407,7 @@ def test_playlist_movie_sync(plex, clear_sync_device, movies): def test_playlist_tvshow_sync(plex, clear_sync_device, show): items = show.episodes() - playlist = plex.createPlaylist("Sync: TV Show", items) + playlist = plex.createPlaylist("Sync: TV Show", items=items) new_item = playlist.sync( videoQuality=VIDEO_QUALITY_3_MBPS_720p, client=clear_sync_device ) @@ -429,7 +429,7 @@ def test_playlist_tvshow_sync(plex, clear_sync_device, show): def test_playlist_mixed_sync(plex, clear_sync_device, movie, episode): items = [movie, episode] - playlist = plex.createPlaylist("Sync: Mixed", items) + playlist = plex.createPlaylist("Sync: Mixed", items=items) new_item = playlist.sync( videoQuality=VIDEO_QUALITY_3_MBPS_720p, client=clear_sync_device ) @@ -451,7 +451,7 @@ def test_playlist_mixed_sync(plex, clear_sync_device, movie, episode): def test_playlist_music_sync(plex, clear_sync_device, artist): items = artist.tracks() - playlist = plex.createPlaylist("Sync: Music", items) + playlist = plex.createPlaylist("Sync: Music", items=items) new_item = playlist.sync( audioBitrate=AUDIO_BITRATE_192_KBPS, client=clear_sync_device ) @@ -473,7 +473,7 @@ def test_playlist_music_sync(plex, clear_sync_device, artist): def test_playlist_photos_sync(plex, clear_sync_device, photoalbum): items = photoalbum.photos() - playlist = plex.createPlaylist("Sync: Photos", items) + playlist = plex.createPlaylist("Sync: Photos", items=items) new_item = playlist.sync( photoResolution=PHOTO_QUALITY_MEDIUM, client=clear_sync_device ) @@ -495,7 +495,7 @@ def test_playlist_photos_sync(plex, clear_sync_device, photoalbum): def test_collection_sync(plex, clear_sync_device, movies, movie): items = [movie] - collection = plex.createCollection("Sync: Collection", movies, items) + collection = plex.createCollection("Sync: Collection", section=movies, items=items) new_item = collection.sync( videoQuality=VIDEO_QUALITY_3_MBPS_720p, client=clear_sync_device ) From 2a514378d8d007b45376157789a5e16b2a920672 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 14:38:36 -0700 Subject: [PATCH 244/356] Update tests to use reload --- tests/test_collection.py | 4 +--- tests/test_mixins.py | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/tests/test_collection.py b/tests/test_collection.py index 48128c64d..67aeff0e9 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -135,9 +135,7 @@ def test_Collection_edit(collection, movies): "summary.locked": 0 } ) - # Cannot use collection.reload() since PlexObject.__setattr__() - # will not overwrite contentRating with None - collection = movies.collection("Test Collection") + collection.reload() assert collection.title == title assert collection.titleSort == titleSort assert collection.contentRating is None diff --git a/tests/test_mixins.py b/tests/test_mixins.py index 94d494a22..3f6109e9e 100644 --- a/tests/test_mixins.py +++ b/tests/test_mixins.py @@ -185,9 +185,7 @@ def edit_rating(obj): assert utils.is_datetime(obj.lastRatedAt) assert obj.userRating == 10.0 obj.rate() - # Cannot use obj.reload() since PlexObject.__setattr__() - # will not overwrite userRating with None - obj = obj.fetchItem(obj._details_key) + obj.reload() assert obj.userRating is None with pytest.raises(BadRequest): assert obj.rate('bad-rating') From 64488371129a32efd9fe55434dc4a7818ebbebc4 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 14:54:15 -0700 Subject: [PATCH 245/356] Fix return typo in doc strings --- plexapi/audio.py | 2 +- plexapi/base.py | 2 +- plexapi/photo.py | 2 +- plexapi/video.py | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plexapi/audio.py b/plexapi/audio.py index a92b85596..bb1dee225 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -402,7 +402,7 @@ def locations(self): """ This does not exist in plex xml response but is added to have a common interface to get the locations of the track. - Retruns: + Returns: List of file paths where the track is found on disk. """ return [part.file for part in self.iterParts() if part] diff --git a/plexapi/base.py b/plexapi/base.py index d3e8b515a..fa823fa7b 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -480,7 +480,7 @@ def analyze(self): self._server.query(key, method=self._server._session.put) def isFullObject(self): - """ Retruns True if this is already a full object. A full object means all attributes + """ Returns True if this is already a full object. A full object means all attributes were populated from the api path representing only this item. For example, the search result for a movie often only contain a portion of the attributes a full object (main url) for that movie would contain. diff --git a/plexapi/photo.py b/plexapi/photo.py index ad8e0706b..f3196663b 100644 --- a/plexapi/photo.py +++ b/plexapi/photo.py @@ -232,7 +232,7 @@ def locations(self): """ This does not exist in plex xml response but is added to have a common interface to get the locations of the photo. - Retruns: + Returns: List of file paths where the photo is found on disk. """ return [part.file for item in self.media for part in item.parts if part] diff --git a/plexapi/video.py b/plexapi/video.py index 0955b4749..8c2ee8eb4 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -328,7 +328,7 @@ def locations(self): """ This does not exist in plex xml response but is added to have a common interface to get the locations of the movie. - Retruns: + Returns: List of file paths where the movie is found on disk. """ return [part.file for part in self.iterParts() if part] @@ -815,7 +815,7 @@ def locations(self): """ This does not exist in plex xml response but is added to have a common interface to get the locations of the episode. - Retruns: + Returns: List of file paths where the episode is found on disk. """ return [part.file for part in self.iterParts() if part] @@ -904,7 +904,7 @@ def locations(self): """ This does not exist in plex xml response but is added to have a common interface to get the locations of the clip. - Retruns: + Returns: List of file paths where the clip is found on disk. """ return [part.file for part in self.iterParts() if part] From 6f44933f5b21bb7cc54a3ac551d0fd5729f3adac Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 16:40:25 -0700 Subject: [PATCH 246/356] Clean up Extra object --- plexapi/video.py | 57 +++++++++--------------------------------------- 1 file changed, 10 insertions(+), 47 deletions(-) diff --git a/plexapi/video.py b/plexapi/video.py index 20feb4735..f2092469d 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -915,7 +915,6 @@ class Clip(Video, Playable, ArtUrlMixin, PosterUrlMixin): viewOffset (int): View offset in milliseconds. year (int): Year clip was released. """ - TAG = 'Video' TYPE = 'clip' METADATA_TYPE = 'clip' @@ -925,17 +924,19 @@ def _loadData(self, data): Video._loadData(self, data) Playable._loadData(self, data) self._data = data + self.addedAt = utils.toDatetime(data.attrib.get('addedAt')) self.duration = utils.cast(int, data.attrib.get('duration')) self.extraType = utils.cast(int, data.attrib.get('extraType')) self.index = utils.cast(int, data.attrib.get('index')) self.media = self.findItems(data, media.Media) - self.originallyAvailableAt = data.attrib.get('originallyAvailableAt') + self.originallyAvailableAt = utils.toDatetime( + data.attrib.get('originallyAvailableAt'), '%Y-%m-%d') self.skipDetails = utils.cast(int, data.attrib.get('skipDetails')) self.subtype = data.attrib.get('subtype') self.thumbAspectRatio = data.attrib.get('thumbAspectRatio') self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0)) self.year = utils.cast(int, data.attrib.get('year')) - + @property def locations(self): """ This does not exist in plex xml response but is added to have a common @@ -947,51 +948,13 @@ def locations(self): return [part.file for part in self.iterParts() if part] -@utils.registerPlexObject class Extra(Clip): - """ Represents a single Extra (trailer, behindTheScenes, etc). - - Attributes: - TAG (str): 'Extras' - TYPE (str): 'clip' - addedAt (datetime): Datetime the item was added to the library. - duration (int): Duration of the clip in milliseconds. - extraType (int): Unknown. - index (int): Plex index number for the clip. - key (str): API URL (/library/metadata/). - media (List<:class:`~plexapi.media.Media`>): List of media objects. - originallyAvailableAt (datetime): Datetime the clip was released. - ratingKey (int): Unique key identifying the item. - subtype (str): Type of clip (trailer, behindTheScenes, sceneOrSample, etc.). - summary (str): Summary of the movie, show, season, episode, or clip. - thumb (str): URL to thumbnail image (/library/metadata//thumb/). - title (str): Name of the movie, show, season, episode, or clip. - type (str): 'movie', 'show', 'season', 'episode', or 'clip'. - year (int): Year clip was released. - """ - TAG = 'Extras' + """ Represents a single Extra (trailer, behindTheScenes, etc). """ def _loadData(self, data): """ Load attribute values from Plex XML response. """ - self._data = data - self.addedAt = utils.toDatetime(data.attrib.get('addedAt')) - self.duration = utils.cast(int, data.attrib.get('duration')) - self.extraType = data.attrib.get('extraType') - self.index = utils.cast(int, data.attrib.get('index')) - self.key = data.attrib.get('key', '') - self.media = self.findItems(data, media.Media) - self.originallyAvailableAt = utils.toDatetime( - data.attrib.get('originallyAvailableAt'), '%Y-%m-%d') - self.ratingKey = utils.cast(int, data.attrib.get('ratingKey')) - self.subtype = data.attrib.get('subtype') - self.summary = data.attrib.get('summary') - self.thumb = data.attrib.get('thumb') - self.title = data.attrib.get('title') - self.type = data.attrib.get('type') - self.year = utils.cast(int, data.attrib.get('year')) - - def section(self): - """Return the :class:`~plexapi.library.LibrarySection` this item belongs to.""" - # Clip payloads may not contain 'librarySectionID' - # Return None to avoid unnecessary attribute lookup attempts. - return None + super(Extra, self)._loadData(data) + parent = self._parent() + self.librarySectionID = parent.librarySectionID + self.librarySectionKey = parent.librarySectionKey + self.librarySectionTitle = parent.librarySectionTitle From 1d031166fcf7ac6298a58b248b052d3afaf2813d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 16:40:57 -0700 Subject: [PATCH 247/356] Cleanup movie reviews and extras --- plexapi/collection.py | 1 - plexapi/media.py | 39 ++++++++++++++++++++------------------- plexapi/video.py | 35 +++++++++++++---------------------- 3 files changed, 33 insertions(+), 42 deletions(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index 97e1d3daa..0eb20924d 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -51,7 +51,6 @@ class Collection(PlexPartialObject, AdvancedSettingsMixin, ArtMixin, PosterMixin updatedAt (datatime): Datetime the collection was updated. userRating (float): Rating of the collection (0.0 - 10.0) equaling (0 stars - 5 stars). """ - TAG = 'Directory' TYPE = 'collection' diff --git a/plexapi/media.py b/plexapi/media.py index 24259eff2..30883b84c 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -779,25 +779,6 @@ class Producer(MediaTag): FILTER = 'producer' -@utils.registerPlexObject -class Review(MediaTag): - """ Represents a single Review for a Movie. - Attributes: - TAG (str): 'Review' - """ - TAG = 'Review' - - def _loadData(self, data): - self._data = data - self.filter = data.attrib.get('filter') - self.id = cast(int, data.attrib.get('id', 0)) - self.image = data.attrib.get('image') - self.link = data.attrib.get('link') - self.source = data.attrib.get('source') - self.tag = data.attrib.get('tag') - self.text = data.attrib.get('text') - - @utils.registerPlexObject class Role(MediaTag): """ Represents a single Role (actor/actress) media tag. @@ -881,6 +862,26 @@ class Guid(GuidTag): TAG = 'Guid' +@utils.registerPlexObject +class Review(MediaTag): + """ Represents a single Review for a Movie. + + Attributes: + TAG (str): 'Review' + """ + TAG = 'Review' + + def _loadData(self, data): + self._data = data + self.filter = data.attrib.get('filter') + self.id = utils.cast(int, data.attrib.get('id', 0)) + self.image = data.attrib.get('image') + self.link = data.attrib.get('link') + self.source = data.attrib.get('source') + self.tag = data.attrib.get('tag') + self.text = data.attrib.get('text') + + class BaseImage(PlexObject): """ Base class for all Art, Banner, and Poster objects. diff --git a/plexapi/video.py b/plexapi/video.py index f2092469d..9a42a0ce1 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -3,7 +3,7 @@ from urllib.parse import quote_plus, urlencode from plexapi import library, media, utils -from plexapi.base import Playable, PlexPartialObject, MediaContainer +from plexapi.base import Playable, PlexPartialObject from plexapi.exceptions import BadRequest from plexapi.mixins import AdvancedSettingsMixin, ArtUrlMixin, ArtMixin, BannerMixin, PosterUrlMixin, PosterMixin from plexapi.mixins import RatingMixin, SplitMergeMixin, UnmatchMatchMixin @@ -87,20 +87,20 @@ def markUnwatched(self): def augmentation(self): """ Returns a list of :class:`~plexapi.library.Hub` objects. - - augmentation returns hub items relating to online media sources - such as Tidal Music "Track From {item}" or "Soundtrack of {item}" - Plex Pass and linked Tidal account are required - + Augmentation returns hub items relating to online media sources + such as Tidal Music "Track from {item}" or "Soundtrack of {item}". + Plex Pass and linked Tidal account are required. """ account = self._server.myPlexAccount() - tidalOptOut = [service.value for service in account.onlineMediaSources() - if service.key.endswith('music')][0] + tidalOptOut = next( + (service.value for service in account.onlineMediaSources() + if service.key == 'tv.plex.provider.music'), + None + ) if account.subscriptionStatus != 'Active' or tidalOptOut == 'opt_out': raise BadRequest('Requires Plex Pass and Tidal Music enabled.') data = self._server.query(self.key + '?asyncAugmentMetadata=1') - mediaContainer = MediaContainer(data=data, server=self._server) - augmentationKey = mediaContainer.augmentationKey + augmentationKey = data.attrib.get('augmentationKey') return self.fetchItems(augmentationKey) def _defaultSyncTitle(self): @@ -362,22 +362,13 @@ def _prettyfilename(self): def reviews(self): """ Returns a list of :class:`~plexapi.media.Review` objects. """ - items = [] - data = self._server.query(self.key + '?includeReviews=1') - for item in data.iter('Review'): - items.append(media.Review(data=item, server=self._server)) - - return items + data = self._server.query(self._details_key) + return self.findItems(data, media.Review, rtag='Video') def extras(self): """ Returns a list of :class:`~plexapi.video.Extra` objects. """ - items = [] data = self._server.query(self._details_key) - for extra in data.iter('Extras'): - for video in extra.iter('Video'): - items.append(Extra(data=video, server=self._server)) - - return items + return self.findItems(data, Extra, rtag='Extras') def hubs(self): """ Returns a list of :class:`~plexapi.library.Hub` objects. """ From f8c7fefd2f531eb8be1612b822d2e85bd5f519bc Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 16:42:43 -0700 Subject: [PATCH 248/356] Cleanup Account onlineMediaSources OptOut methods --- plexapi/myplex.py | 52 ++++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 07875e8dd..5a3c25afd 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -694,21 +694,12 @@ def tidal(self): return self.findItems(elem) def onlineMediaSources(self): - """ Returns an user account Online Media Sourcessettings :class:`~plexapi.myplex.AccountOptOut` + """ Returns a list of user account Online Media Sources settings :class:`~plexapi.myplex.AccountOptOut` """ url = self.OPTOUTS % {'userUUID': self.uuid} elem = self.query(url) return self.findItems(elem, cls=AccountOptOut, etag='optOut') - @property - def settings(self): - """ Returns an user account settings :class:`~plexapi.myplex.AccountSettings` - """ - req = requests.get(self.SETTINGS, headers={'X-Plex-Token': self._token, - 'X-Plex-Client-Identifier': X_PLEX_IDENTIFIER}) - elem = ElementTree.fromstring(req.text) - return self.findItems(elem, cls=AccountSettings, etag='setting')[0] - def link(self, pin): """ Link a device to the account using a pin code. @@ -1378,28 +1369,47 @@ class AccountOptOut(PlexObject): 'https://plex.tv/api/v2/user/{userUUID}/settings/opt_outs' Attributes: + TAG (str): optOut key (str): Online Media Source key - value (str): Online Media Source opt_in or opt_out + value (str): Online Media Source opt_in, opt_out, or opt_out_managed """ - - CHOICES = ['opt_in', 'opt_out', 'opt_out_managed'] + TAG = 'optOut' + CHOICES = {'opt_in', 'opt_out', 'opt_out_managed'} def _loadData(self, data): self.key = data.attrib.get('key') self.value = data.attrib.get('value') - def updateOptOut(self, option): - """Method for toggling Online Media Sources options. + def _updateOptOut(self, option): + """ Sets the Online Media Sources option. + Parameters: option (str): see CHOICES Raises: - :class:`NotFound`: `option` str not found in CHOICES. - :class:`BadRequest`: option is currently set to `option`. + :exc:`~plexapi.exceptions.NotFound`: ``option`` str not found in CHOICES. """ if option not in self.CHOICES: raise NotFound('%s not found in available choices: %s' % (option, self.CHOICES)) - if option == self.value: - raise BadRequest('OptOut option is already set to %s' % option) - url = self._initpath + '?key=%s&value=%s&' % (self.key, option) - self._server.query(url, method=self._server._session.post) + url = self._server.OPTOUTS % {'userUUID': self._server.uuid} + params = {'key': self.key, 'value': option} + self._server.query(url, method=self._server._session.post, params=params) + self.value = option # assume query successful and set the value to option + + def optIn(self): + """ Sets the Online Media Source to "Enabled". """ + self._updateOptOut('opt_in') + + def optOut(self): + """ Sets the Online Media Source to "Disabled". """ + self._updateOptOut('opt_out') + + def optOutManaged(self): + """ Sets the Online Media Source to "Disabled for Managed Users". + + Raises: + :exc:`~plexapi.exceptions.BadRequest`: When trying to opt out music. + """ + if self.key == 'tv.plex.provider.music': + raise BadRequest('%s does not have the option to opt out managed users.' % self.key) + self._updateOptOut('opt_out_managed') From 4d60101ab7e3ff36649bf367104f24af49f0cae8 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 16:43:31 -0700 Subject: [PATCH 249/356] Remove Account settings * Settings are only for Plex Web specific settings like remembering selected tab, poster size, etc. --- plexapi/myplex.py | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 5a3c25afd..55227948d 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import copy import threading -import json import time from xml.etree import ElementTree @@ -76,7 +75,6 @@ class MyPlexAccount(PlexObject): REQUESTS = 'https://plex.tv/api/invites/requests' # get SIGNIN = 'https://plex.tv/users/sign_in.xml' # get with auth WEBHOOKS = 'https://plex.tv/api/v2/user/webhooks' # get, post with data - SETTINGS = 'https://plex.tv/api/v2/user/settings' # get OPTOUTS = 'https://plex.tv/api/v2/user/%(userUUID)s/settings/opt_outs' # get LINK = 'https://plex.tv/api/v2/pins/link' # put # Hub sections @@ -1339,31 +1337,6 @@ def _chooseConnection(ctype, name, results): raise NotFound('Unable to connect to %s: %s' % (ctype.lower(), name)) -class AccountSettings(PlexObject): - """ Represents a single Account Setting - 'https://plex.tv/api/v2/user/{userUUID}/settings' - - Attributes: - id (str): Unknown. "experience"? - type (str): "json" - value (dict): Lots of user server, library, - and other endpoints and settings - hidden (str): Unknown. Are these settings hidden? - updatedAt (datetime): Datetime last updated - """ - - def _loadData(self, data): - self.id = data.attrib.get('id') - self.type = data.attrib.get('type') - self.value = self.values(data.attrib.get('value')) - self.hidden = data.attrib.get('hidden') - self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) - - def values(self, value): - value.replace(':false', ':False').replace(':true', ':True').replace(':null', ':None') - return json.loads(value) - - class AccountOptOut(PlexObject): """ Represents a single AccountOptOut 'https://plex.tv/api/v2/user/{userUUID}/settings/opt_outs' From aaa902059fc3cec2fe86941f7a20b102cb979433 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 17:03:08 -0700 Subject: [PATCH 250/356] Update account onlineMediaSources optOut test --- tests/test_myplex.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/tests/test_myplex.py b/tests/test_myplex.py index 6e31ca997..b6bcf7279 100644 --- a/tests/test_myplex.py +++ b/tests/test_myplex.py @@ -125,18 +125,28 @@ def enabled(): @pytest.mark.authenticated def test_myplex_onlineMediaSources_optOut(account): - mediaOptOut = account.onlineMediaSources()[0] - optOutValue = mediaOptOut.value + onlineMediaSources = account.onlineMediaSources() + for optOut in onlineMediaSources: + if optOut.key == 'tv.plex.provider.news': + # News is no longer available + continue + + optOutValue = optOut.value + optOut.optIn() + assert optOut.value == 'opt_in' + optOut.optOut() + assert optOut.value == 'opt_out' + if optOut.key == 'tv.plex.provider.music': + with pytest.raises(BadRequest): + optOut.optOutManaged() + else: + optOut.optOutManaged() + assert optOut.value == 'opt_out_managed' + # Reset original value + optOut._updateOptOut(optOutValue) + with pytest.raises(NotFound): - assert mediaOptOut.updateOptOut('what') - with pytest.raises(BadRequest): - assert mediaOptOut.updateOptOut(optOutValue) - choices = mediaOptOut.CHOICES - choices.remove(optOutValue) - mediaOptOut.updateOptOut(choices[0]) - assert account.onlineMediaSources()[0].value == choices[0] - choices.append(optOutValue) - account.onlineMediaSources()[0].updateOptOut(optOutValue) + assert onlineMediaSources[0]._updateOptOut('unknown') def test_myplex_inviteFriend_remove(account, plex, mocker): From 0626334ed5d271fae1aa4f661a2cbd7e5a3b371e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 17:19:26 -0700 Subject: [PATCH 251/356] Add tests for movie augmentation, reviews, and extras --- tests/test_video.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tests/test_video.py b/tests/test_video.py index b70b5647a..47168280a 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -563,6 +563,50 @@ def test_video_Movie_hubs(movies): assert hub.size == 1 +@pytest.mark.authenticated +def test_video_Movie_augmentation(movie, account): + onlineMediaSources = account.onlineMediaSources() + tidalOptOut = next( + optOut for optOut in onlineMediaSources + if optOut.key == 'tv.plex.provider.music' + ) + optOutValue = tidalOptOut.value + + tidalOptOut.optOut() + with pytest.raises(BadRequest): + movie.augmentation() + + tidalOptOut.optIn() + augmentations = movie.augmentation() + assert augmentations or augmentations == [] + + # Reset original Tidal opt out value + tidalOptOut._updateOptOut(optOutValue) + + +def test_video_Movie_reviews(movies): + movie = movies.get("Sita Sings The Blues") + reviews = movie.reviews() + assert reviews + review = next(r for r in reviews if r.link) + assert review.filter + assert utils.is_int(review.id) + assert review.image.startswith("rottentomatoes://") + assert review.link.startswith("http") + assert review.source + assert review.tag + assert review.text + + +def test_video_Movie_extras(movies): + movie = movies.get("Sita Sings The Blues") + extras = movie.extras() + assert extras + extra = extras[0] + assert extra.type == 'clip' + assert extra.section() == movies + + def test_video_Show_attrs(show): assert utils.is_datetime(show.addedAt) if show.art: From 7ddf47c223965a98edc84de01d23e3361e674a50 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 17:27:02 -0700 Subject: [PATCH 252/356] Add doc string for Review object --- plexapi/media.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plexapi/media.py b/plexapi/media.py index 30883b84c..3ca699780 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -863,11 +863,18 @@ class Guid(GuidTag): @utils.registerPlexObject -class Review(MediaTag): +class Review(PlexObject): """ Represents a single Review for a Movie. Attributes: TAG (str): 'Review' + filter (str): filter for reviews? + id (int): The ID of the review. + image (str): The image uri for the review. + link (str): The url to the online review. + source (str): The source of the review. + tag (str): The name of the reviewer. + text (str): The text of the review. """ TAG = 'Review' From 6405d226a419cb55c1be99aba309a8d0d2374f80 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 17:33:08 -0700 Subject: [PATCH 253/356] Mark movies extras test only available for Plex Pass --- tests/test_video.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_video.py b/tests/test_video.py index 47168280a..0e58186a1 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -598,6 +598,7 @@ def test_video_Movie_reviews(movies): assert review.text +@pytest.mark.authenticated def test_video_Movie_extras(movies): movie = movies.get("Sita Sings The Blues") extras = movie.extras() From 67b3fc694a821c02c49b9d20e5b22b90a2c856d0 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 17:50:35 -0700 Subject: [PATCH 254/356] Allow clips and extras to be streamed and downloaded --- plexapi/base.py | 2 +- plexapi/video.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/plexapi/base.py b/plexapi/base.py index 0c56110a2..1a5759b6f 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -610,7 +610,7 @@ def getStreamURL(self, **params): Raises: :exc:`~plexapi.exceptions.Unsupported`: When the item doesn't support fetching a stream URL. """ - if self.TYPE not in ('movie', 'episode', 'track'): + if self.TYPE not in ('movie', 'episode', 'track', 'clip'): raise Unsupported('Fetching stream URL for %s is unsupported.' % self.TYPE) mvb = params.get('maxVideoBitrate') vr = params.get('videoResolution', '') diff --git a/plexapi/video.py b/plexapi/video.py index 9a42a0ce1..609eaffc3 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -938,6 +938,9 @@ def locations(self): """ return [part.file for part in self.iterParts() if part] + def _prettyfilename(self): + return self.title + class Extra(Clip): """ Represents a single Extra (trailer, behindTheScenes, etc). """ @@ -949,3 +952,6 @@ def _loadData(self, data): self.librarySectionID = parent.librarySectionID self.librarySectionKey = parent.librarySectionKey self.librarySectionTitle = parent.librarySectionTitle + + def _prettyfilename(self): + return '%s (%s)' % (self.title, self.subtype) From c136c594ea32e4490c327b393ef9d4b5f09deeef Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 18:39:45 -0700 Subject: [PATCH 255/356] Mark online media sources tests with xfail * Test account is missing online media sources? --- tests/test_myplex.py | 3 ++- tests/test_video.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/test_myplex.py b/tests/test_myplex.py index b6bcf7279..f70b99540 100644 --- a/tests/test_myplex.py +++ b/tests/test_myplex.py @@ -124,6 +124,7 @@ def enabled(): @pytest.mark.authenticated +@pytest.mark.xfail(reason="Test account is missing online media sources?") def test_myplex_onlineMediaSources_optOut(account): onlineMediaSources = account.onlineMediaSources() for optOut in onlineMediaSources: @@ -146,7 +147,7 @@ def test_myplex_onlineMediaSources_optOut(account): optOut._updateOptOut(optOutValue) with pytest.raises(NotFound): - assert onlineMediaSources[0]._updateOptOut('unknown') + onlineMediaSources[0]._updateOptOut('unknown') def test_myplex_inviteFriend_remove(account, plex, mocker): diff --git a/tests/test_video.py b/tests/test_video.py index 0e58186a1..692c47779 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -564,6 +564,7 @@ def test_video_Movie_hubs(movies): @pytest.mark.authenticated +@pytest.mark.xfail(reason="Test account is missing online media sources?") def test_video_Movie_augmentation(movie, account): onlineMediaSources = account.onlineMediaSources() tidalOptOut = next( From 637886105c514161f6a28c903bca03fa46227091 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 02:36:18 +0000 Subject: [PATCH 256/356] Bump pillow from 8.1.2 to 8.2.0 Bumps [pillow](https://github.com/python-pillow/Pillow) from 8.1.2 to 8.2.0. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/8.1.2...8.2.0) Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 8dc25a8cf..607f4e897 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -4,7 +4,7 @@ #--------------------------------------------------------- coveralls==3.0.1 flake8==3.9.2 -pillow==8.1.2 +pillow==8.2.0 pytest==6.2.4 pytest-cache==1.0 pytest-cov==2.11.1 From a18ef92d619474827e0c11eec94639806b59683c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 02:42:53 +0000 Subject: [PATCH 257/356] Bump coveralls from 3.0.1 to 3.1.0 Bumps [coveralls](https://github.com/TheKevJames/coveralls-python) from 3.0.1 to 3.1.0. - [Release notes](https://github.com/TheKevJames/coveralls-python/releases) - [Changelog](https://github.com/TheKevJames/coveralls-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/TheKevJames/coveralls-python/compare/3.0.1...3.1.0) --- updated-dependencies: - dependency-name: coveralls dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 607f4e897..15bc3b89a 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -2,7 +2,7 @@ # PlexAPI requirements to run py.test. # pip install -r requirements_dev.txt #--------------------------------------------------------- -coveralls==3.0.1 +coveralls==3.1.0 flake8==3.9.2 pillow==8.2.0 pytest==6.2.4 From adcf1150b9ce76cfce52d9d1a7a51fcaf941ba35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 02:44:25 +0000 Subject: [PATCH 258/356] Bump sphinx from 3.5.4 to 4.0.2 Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 3.5.4 to 4.0.2. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/4.x/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v3.5.4...v4.0.2) Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 55d9a7c4e..8ac4bdcba 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -12,7 +12,7 @@ pytest-mock<3.6.2 recommonmark==0.7.1 requests==2.25.1 requests-mock==1.9.1 -sphinx==3.5.4 +sphinx==4.0.2 sphinx-rtd-theme==0.5.2 tqdm==4.59.0 websocket-client==0.58.0 From 94fbffe2a7f6f0aa5dc600d39878908ce7c060f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 02:49:00 +0000 Subject: [PATCH 259/356] Bump websocket-client from 0.58.0 to 1.0.1 Bumps [websocket-client](https://github.com/websocket-client/websocket-client) from 0.58.0 to 1.0.1. - [Release notes](https://github.com/websocket-client/websocket-client/releases) - [Changelog](https://github.com/websocket-client/websocket-client/blob/master/ChangeLog) - [Commits](https://github.com/websocket-client/websocket-client/commits) Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 8ac4bdcba..8b476327a 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -15,4 +15,4 @@ requests-mock==1.9.1 sphinx==4.0.2 sphinx-rtd-theme==0.5.2 tqdm==4.59.0 -websocket-client==0.58.0 +websocket-client==1.0.1 From f48b1d464ba4aec0c18e18edc4ef6661d35dd34a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 02:54:39 +0000 Subject: [PATCH 260/356] Bump tqdm from 4.59.0 to 4.61.0 Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.59.0 to 4.61.0. - [Release notes](https://github.com/tqdm/tqdm/releases) - [Commits](https://github.com/tqdm/tqdm/compare/v4.59.0...v4.61.0) Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 8b476327a..db1c82593 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -14,5 +14,5 @@ requests==2.25.1 requests-mock==1.9.1 sphinx==4.0.2 sphinx-rtd-theme==0.5.2 -tqdm==4.59.0 +tqdm==4.61.0 websocket-client==1.0.1 From 2935bce57e41d5be009af9449da064e4dbe8ffe7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 03:04:08 +0000 Subject: [PATCH 261/356] Bump requests-mock from 1.9.1 to 1.9.3 Bumps [requests-mock](https://github.com/jamielennox/requests-mock) from 1.9.1 to 1.9.3. - [Release notes](https://github.com/jamielennox/requests-mock/releases) - [Commits](https://github.com/jamielennox/requests-mock/compare/1.9.1...1.9.3) Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index db1c82593..7ffe042e4 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -11,7 +11,7 @@ pytest-cov==2.11.1 pytest-mock<3.6.2 recommonmark==0.7.1 requests==2.25.1 -requests-mock==1.9.1 +requests-mock==1.9.3 sphinx==4.0.2 sphinx-rtd-theme==0.5.2 tqdm==4.61.0 From 5d63111e5ea24314a8bdb5e07277697f88e6a700 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Jun 2021 03:08:56 +0000 Subject: [PATCH 262/356] Bump pytest-cov from 2.11.1 to 2.12.1 Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 2.11.1 to 2.12.1. - [Release notes](https://github.com/pytest-dev/pytest-cov/releases) - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v2.11.1...v2.12.1) --- updated-dependencies: - dependency-name: pytest-cov dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 7ffe042e4..8b0375512 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -7,7 +7,7 @@ flake8==3.9.2 pillow==8.2.0 pytest==6.2.4 pytest-cache==1.0 -pytest-cov==2.11.1 +pytest-cov==2.12.1 pytest-mock<3.6.2 recommonmark==0.7.1 requests==2.25.1 From 754698b37bd23733d829f43a7b25dbc3bca06a62 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 6 Jun 2021 20:31:13 -0700 Subject: [PATCH 263/356] Bump to 4.6.0 --- plexapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/__init__.py b/plexapi/__init__.py index 33c679f79..e5758331d 100644 --- a/plexapi/__init__.py +++ b/plexapi/__init__.py @@ -15,7 +15,7 @@ # PlexAPI Settings PROJECT = 'PlexAPI' -VERSION = '4.5.2' +VERSION = '4.6.0' TIMEOUT = CONFIG.get('plexapi.timeout', 30, int) X_PLEX_CONTAINER_SIZE = CONFIG.get('plexapi.container_size', 100, int) X_PLEX_ENABLE_FAST_CONNECT = CONFIG.get('plexapi.enable_fast_connect', False, bool) From 44373e22de63724a241322aa71b82348b4d47a21 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 7 Jun 2021 08:54:45 -0700 Subject: [PATCH 264/356] Add venv to .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3f426050b..d3b10acef 100644 --- a/.gitignore +++ b/.gitignore @@ -26,7 +26,7 @@ lib/ pip-selfcheck.json pyvenv.cfg MANIFEST - +venv/ # path for the test lib. tools/plex \ No newline at end of file From 90a1cff01eb0feeb90ff742cb809fa1b3210991a Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 7 Jun 2021 08:55:04 -0700 Subject: [PATCH 265/356] Fix return value when using USER_DONT_RELOAD_FOR_KEYS --- plexapi/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/base.py b/plexapi/base.py index 0a653ac3c..21bdc912a 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -455,7 +455,7 @@ def __getattribute__(self, attr): # Check a few cases where we dont want to reload if attr in _DONT_RELOAD_FOR_KEYS: return value if attr in _DONT_OVERWRITE_SESSION_KEYS: return value - if attr in USER_DONT_RELOAD_FOR_KEYS: return + if attr in USER_DONT_RELOAD_FOR_KEYS: return value if attr.startswith('_'): return value if value not in (None, []): return value if self.isFullObject(): return value From a353df1f56c397f6d36a8256faefb5b5082e8c4c Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 7 Jun 2021 11:56:54 -0700 Subject: [PATCH 266/356] Fix keyword arguments for playlist copyToUser --- plexapi/playlist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 3847246ae..c99626d07 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -390,7 +390,7 @@ def copyToUser(self, user): user (str): Username, email or user id of the user to copy the playlist to. """ userServer = self._server.switchUser(user) - return self.create(userServer, self.title, self.items()) + return self.create(server=userServer, title=self.title, items=self.items()) def sync(self, videoQuality=None, photoResolution=None, audioBitrate=None, client=None, clientId=None, limit=None, unwatched=False, title=None): From 7678e0cfef7b288c268b95eaf4506c75f02b6643 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 14 Jun 2021 00:57:07 -0400 Subject: [PATCH 267/356] add iter on a specific root tag in listAttrs --- plexapi/base.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plexapi/base.py b/plexapi/base.py index 0a653ac3c..2f836db37 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -295,9 +295,12 @@ def firstAttr(self, *attrs): if value is not None: return value - def listAttrs(self, data, attr, **kwargs): + def listAttrs(self, data, attr, rtag=None, **kwargs): """ Return a list of values from matching attribute. """ results = [] + # rtag to iter on a specific root tag + if rtag: + data = next(data.iter(rtag), []) for elem in data: kwargs['%s__exists' % attr] = True if self._checkAttrs(elem, **kwargs): From 54ce61b00667832a4db53dccbb7ca4daa1e37e1a Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 14 Jun 2021 00:58:13 -0400 Subject: [PATCH 268/356] use rtag for roles and entitlements --- plexapi/myplex.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 55227948d..fe856f345 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -135,11 +135,9 @@ def _loadData(self, data): self.subscriptionPlan = subscription.attrib.get('plan') self.subscriptionFeatures = self.listAttrs(subscription, 'id', etag='feature') - roles = data.find('roles') - self.roles = self.listAttrs(roles, 'id', etag='role') + self.roles = self.listAttrs(data, 'id', rtag='roles', etag='role') - entitlements = data.find('entitlements') - self.entitlements = self.listAttrs(entitlements, 'id', etag='entitlement') + self.entitlements = self.listAttrs(data, 'id', rtag='entitlements', etag='entitlement') # TODO: Fetch missing MyPlexAccount attributes self.profile_settings = None From cfefbafc93d25bc964e722e5b80d24f4c6f76aa3 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 14 Jun 2021 08:37:38 -0700 Subject: [PATCH 269/356] Remove manual random sort --- plexapi/library.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 006fda706..fb4e413cd 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -2014,7 +2014,6 @@ def _manualSorts(self): ('guid', 'asc', 'Guid'), ('id', 'asc', 'Rating Key'), ('index', 'asc', '%s Number' % self.type.capitalize()), - ('random', 'asc', 'Random'), ('summary', 'asc', 'Summary'), ('tagline', 'asc', 'Tagline'), ('updatedAt', 'asc', 'Date Updated') From a2bfc9e92f144d30a73cdc3442ee99cd8c1c921f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 14 Jun 2021 08:38:09 -0700 Subject: [PATCH 270/356] Remove manual artist last played field --- plexapi/library.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index fb4e413cd..f1fdaad8f 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -2080,10 +2080,6 @@ def _manualFields(self): ('rating', 'integer', 'Critic Rating'), ('viewOffset', 'integer', 'View Offset') ]) - elif self.type == 'artist': - additionalFields.extend([ - ('lastViewedAt', 'date', 'Artist Last Played') - ]) elif self.type == 'track': additionalFields.extend([ ('duration', 'integer', 'Duration'), From c1111506662684f368dc0a8a7849b74f776dbec9 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 14 Jun 2021 08:56:33 -0700 Subject: [PATCH 271/356] Remove manual random sort test --- tests/test_library.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index dde3d78ed..985751e56 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -461,9 +461,6 @@ def test_library_MovieSection_search_sort(movies): guid_asc = [r.guid for r in results_guid] assert guid_asc == sorted(guid_asc) - results_random = movies.search(sort="random") - assert len(results_random) == len(results) - results_summary = movies.search(sort="summary") summary_asc = [r.summary for r in results_summary] assert summary_asc == sorted(summary_asc) From 4bd550c3203a2e93a4f966c3b83b02b4c7205f4c Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Tue, 15 Jun 2021 21:37:09 -0700 Subject: [PATCH 272/356] Bump to 4.6.1 --- plexapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/__init__.py b/plexapi/__init__.py index e5758331d..49720f6b5 100644 --- a/plexapi/__init__.py +++ b/plexapi/__init__.py @@ -15,7 +15,7 @@ # PlexAPI Settings PROJECT = 'PlexAPI' -VERSION = '4.6.0' +VERSION = '4.6.1' TIMEOUT = CONFIG.get('plexapi.timeout', 30, int) X_PLEX_CONTAINER_SIZE = CONFIG.get('plexapi.container_size', 100, int) X_PLEX_ENABLE_FAST_CONNECT = CONFIG.get('plexapi.enable_fast_connect', False, bool) From 176aa36729950d305864f9795be81770ec701d6e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 18 Jun 2021 14:03:43 -0700 Subject: [PATCH 273/356] Allow blank sort direction Some sort fields don't follow the `defaultDirection` if the sort direction is not specified (e.g. `year` returns `year:asc` instead of the default `year:desc`). Allow blank `sortDir` and let the server handle it. --- plexapi/library.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 006fda706..3e3d7b479 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -921,10 +921,7 @@ def _validateSortField(self, sort, libtype=None): sortField = libtype + '.' + filterSort.key - if not sortDir: - sortDir = filterSort.defaultDirection - - availableDirections = ['asc', 'desc', 'nullsLast'] + availableDirections = ['', 'asc', 'desc', 'nullsLast'] if sortDir not in availableDirections: raise NotFound('Unknown sort direction "%s". ' 'Available sort directions: %s' From a5dfbe6eb701e428c6ffd4aef4280f3c9d230ca1 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 18 Jun 2021 14:04:14 -0700 Subject: [PATCH 274/356] Add manual viewUpdatedAt sort field for photos --- plexapi/library.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 3e3d7b479..678b2c1f8 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -2026,7 +2026,11 @@ def _manualSorts(self): additionalSorts.extend([ ('absoluteIndex', 'asc', 'Absolute Index') ]) - if self.type == 'collection': + elif self.type == 'photo': + additionalSorts.extend([ + ('viewUpdatedAt', 'desc', 'View Updated At') + ]) + elif self.type == 'collection': additionalSorts.extend([ ('addedAt', 'asc', 'Date Added') ]) From 2562334ad4645a222a7f51f3673e96d926658eac Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 18 Jun 2021 14:21:43 -0700 Subject: [PATCH 275/356] Add reverseSearchType util --- plexapi/utils.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/plexapi/utils.py b/plexapi/utils.py index 5fe31caa6..310200f69 100644 --- a/plexapi/utils.py +++ b/plexapi/utils.py @@ -148,6 +148,7 @@ def searchType(libtype): Parameters: libtype (str): LibType to lookup (movie, show, season, episode, artist, album, track, collection) + Raises: :exc:`~plexapi.exceptions.NotFound`: Unknown libtype """ @@ -159,6 +160,24 @@ def searchType(libtype): raise NotFound('Unknown libtype: %s' % libtype) +def reverseSearchType(libtype): + """ Returns the string value of the library type. + + Parameters: + libtype (int): Integer value of the library type. + + Raises: + :exc:`~plexapi.exceptions.NotFound`: Unknown libtype + """ + if libtype in SEARCHTYPES: + return libtype + libtype = int(libtype) + for k, v in SEARCHTYPES.items(): + if libtype == v: + return k + raise NotFound('Unknown libtype: %s' % libtype) + + def threaded(callback, listargs): """ Returns the result of for each set of `*args` in listargs. Each call to is called concurrently in their own separate threads. From 0b81f0887b93fb9b86cbf6ecabdcac9f1846ef74 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 18 Jun 2021 14:24:59 -0700 Subject: [PATCH 276/356] Add SmartFilterMixin --- plexapi/mixins.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/plexapi/mixins.py b/plexapi/mixins.py index 2ff12a208..b5e7e649c 100644 --- a/plexapi/mixins.py +++ b/plexapi/mixins.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from urllib.parse import quote_plus, urlencode +from urllib.parse import parse_qsl, quote_plus, unquote, urlencode, urlsplit from plexapi import media, settings, utils from plexapi.exceptions import BadRequest, NotFound @@ -559,3 +559,61 @@ def removeWriter(self, writers, locked=True): locked (bool): True (default) to lock the field, False to unlock the field. """ self._edit_tags('writer', writers, locked=locked, remove=True) + + +class SmartFilterMixin(object): + """ Mixing for Plex objects that can have smart filters. """ + + def _parseFilters(self, content): + """ Parse the content string and returns the filter dict. """ + content = urlsplit(unquote(content)) + filters = {} + filterOp = 'and' + filterGroups = [[]] + + for key, value in parse_qsl(content.query): + # Move = sign to key when operator is == + if value.startswith('='): + key += '=' + value = value[1:] + + if key == 'type': + filters['libtype'] = utils.reverseSearchType(value) + elif key == 'sort': + filters['sort'] = value.split(',') + elif key == 'limit': + filters['limit'] = int(value) + elif key == 'push': + filterGroups[-1].append([]) + filterGroups.append(filterGroups[-1][-1]) + elif key == 'and': + filterOp = 'and' + elif key == 'or': + filterOp = 'or' + elif key == 'pop': + filterGroups[-1].insert(0, filterOp) + filterGroups.pop() + else: + filterGroups[-1].append({key: value}) + + if filterGroups: + filters['filters'] = self._formatFilterGroups(filterGroups.pop()) + return filters + + def _formatFilterGroups(self, groups): + """ Formats the filter groups into the advanced search rules. """ + if len(groups) == 1 and isinstance(groups[0], list): + groups = groups.pop() + + filterOp = 'and' + rules = [] + + for g in groups: + if isinstance(g, list): + rules.append(self._formatFilterGroups(g)) + elif isinstance(g, dict): + rules.append(g) + elif g in {'and', 'or'}: + filterOp = g + + return {filterOp: rules} From dd0e3789f65da8a1a8dcb5b6eaf6cc1fce4a26ec Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 18 Jun 2021 14:26:48 -0700 Subject: [PATCH 277/356] Add SmartFilterMixin to collections and playlists --- plexapi/collection.py | 14 ++++++++++++-- plexapi/playlist.py | 28 +++++++++++++++++++--------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index 0eb20924d..930e767dc 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -6,13 +6,13 @@ from plexapi.exceptions import BadRequest, NotFound, Unsupported from plexapi.library import LibrarySection from plexapi.mixins import AdvancedSettingsMixin, ArtMixin, PosterMixin, RatingMixin -from plexapi.mixins import LabelMixin +from plexapi.mixins import LabelMixin, SmartFilterMixin from plexapi.playqueue import PlayQueue from plexapi.utils import deprecated @utils.registerPlexObject -class Collection(PlexPartialObject, AdvancedSettingsMixin, ArtMixin, PosterMixin, RatingMixin, LabelMixin): +class Collection(PlexPartialObject, AdvancedSettingsMixin, ArtMixin, PosterMixin, RatingMixin, LabelMixin, SmartFilterMixin): """ Represents a single Collection. Attributes: @@ -90,6 +90,7 @@ def _loadData(self, data): self.userRating = utils.cast(float, data.attrib.get('userRating')) self._items = None # cache for self.items self._section = None # cache for self.section + self._filters = None # cache for self.filters def __len__(self): # pragma: no cover return len(self.items()) @@ -141,6 +142,15 @@ def isPhoto(self): def children(self): return self.items() + def filters(self): + """ Returns the search filter dict for smart collection. + The filter dict be passed back into :func:`~plexapi.library.LibrarySection.search` + to get the list of items. + """ + if self.smart and self._filters is None: + self._filters = self._parseFilters(self.content) + return self._filters + def section(self): """ Returns the :class:`~plexapi.library.LibrarySection` this collection belongs to. """ diff --git a/plexapi/playlist.py b/plexapi/playlist.py index c99626d07..8333bc669 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -6,13 +6,13 @@ from plexapi.base import Playable, PlexPartialObject from plexapi.exceptions import BadRequest, NotFound, Unsupported from plexapi.library import LibrarySection -from plexapi.mixins import ArtMixin, PosterMixin +from plexapi.mixins import ArtMixin, PosterMixin, SmartFilterMixin from plexapi.playqueue import PlayQueue from plexapi.utils import deprecated @utils.registerPlexObject -class Playlist(PlexPartialObject, Playable, ArtMixin, PosterMixin): +class Playlist(PlexPartialObject, Playable, ArtMixin, PosterMixin, SmartFilterMixin): """ Represents a single Playlist. Attributes: @@ -61,6 +61,7 @@ def _loadData(self, data): self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt')) self._items = None # cache for self.items self._section = None # cache for self.section + self._filters = None # cache for self.filters def __len__(self): # pragma: no cover return len(self.items()) @@ -107,6 +108,22 @@ def isPhoto(self): """ Returns True if this is a photo playlist. """ return self.playlistType == 'photo' + def _getPlaylistItemID(self, item): + """ Match an item to a playlist item and return the item playlistItemID. """ + for _item in self.items(): + if _item.ratingKey == item.ratingKey: + return _item.playlistItemID + raise NotFound('Item with title "%s" not found in the playlist' % item.title) + + def filters(self): + """ Returns the search filter dict for smart playlist. + The filter dict be passed back into :func:`~plexapi.library.LibrarySection.search` + to get the list of items. + """ + if self.smart and self._filters is None: + self._filters = self._parseFilters(self.content) + return self._filters + def section(self): """ Returns the :class:`~plexapi.library.LibrarySection` this smart playlist belongs to. @@ -160,13 +177,6 @@ def get(self, title): """ Alias to :func:`~plexapi.playlist.Playlist.item`. """ return self.item(title) - def _getPlaylistItemID(self, item): - """ Match an item to a playlist item and return the item playlistItemID. """ - for _item in self.items(): - if _item.ratingKey == item.ratingKey: - return _item.playlistItemID - raise NotFound('Item with title "%s" not found in the playlist' % item.title) - def addItems(self, items): """ Add items to the playlist. From e51d8253f33874a00ab63a9f3c9966275b0c9708 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 18 Jun 2021 14:34:53 -0700 Subject: [PATCH 278/356] Add tests for smart collection/playlist filters --- tests/test_collection.py | 18 ++++++++++++++++++ tests/test_playlist.py | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/tests/test_collection.py b/tests/test_collection.py index 67aeff0e9..584434c06 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -184,6 +184,24 @@ def test_Collection_createSmart(plex, tvshows): collection.delete() +def test_Collection_smartFilters(plex, tvshows): + title = "test_Collection_smartFilters" + try: + collection = plex.createCollection( + title=title, + section=tvshows, + smart=True, + limit=5, + libtype="episode", + sort=["season.index:nullsLast", "episode.index:nullsLast", "show.titleSort"], + filters={"or": [{"show.title": "game"}, {'show.title': "100"}]} + ) + filters = collection.filters() + assert tvshows.search(**filters) == collection.items() + finally: + collection.delete() + + def test_Collection_exceptions(plex, movies, movie, artist): title = 'test_Collection_exceptions' try: diff --git a/tests/test_playlist.py b/tests/test_playlist.py index f5faff861..e5ddcd748 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -182,6 +182,22 @@ def test_Playlist_createSmart(plex, movies, movie): playlist.delete() +def test_Playlist_smartFilters(plex, tvshows): + try: + playlist = plex.createPlaylist( + title="smart_playlist_filters", + smart=True, + section=tvshows, + limit=5, + sort=["season.index:nullsLast", "episode.index:nullsLast", "show.titleSort"], + filters={"or": [{"show.title": "game"}, {'show.title': "100"}]} + ) + filters = playlist.filters() + assert tvshows.search(**filters) == playlist.items() + finally: + playlist.delete() + + def test_Playlist_section(plex, movies, movie): title = 'test_playlist_section' try: From 91cb388dcb094a14c248fa3905fe81f061411e9d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 18 Jun 2021 15:02:54 -0700 Subject: [PATCH 279/356] Don't format sort direction if not present --- plexapi/library.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 678b2c1f8..3fae983ec 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -927,7 +927,7 @@ def _validateSortField(self, sort, libtype=None): 'Available sort directions: %s' % (sortDir, availableDirections)) - return '%s:%s' % (sortField, sortDir) + return '%s:%s' % (sortField, sortDir) if sortDir else sortField def _validateAdvancedSearch(self, filters, libtype): """ Validates an advanced search filter dictionary. From 663402ed744bf094f637b8777656026680d5c0c1 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 18 Jun 2021 15:26:24 -0700 Subject: [PATCH 280/356] Update tests --- tests/test_collection.py | 23 +++++++++++++++++------ tests/test_utils.py | 9 +++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/tests/test_collection.py b/tests/test_collection.py index 584434c06..e580a1313 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -184,20 +184,31 @@ def test_Collection_createSmart(plex, tvshows): collection.delete() -def test_Collection_smartFilters(plex, tvshows): +def test_Collection_smartFilters(plex, movies): title = "test_Collection_smartFilters" + advancedFilters = { + 'and': [ + { + 'or': [ + {'title': 'elephant'}, + {'title=': 'Big Buck Bunny'} + ] + }, + {'year>>': 1990}, + {'unwatched': True} + ] + } try: collection = plex.createCollection( title=title, - section=tvshows, + section=movies, smart=True, limit=5, - libtype="episode", - sort=["season.index:nullsLast", "episode.index:nullsLast", "show.titleSort"], - filters={"or": [{"show.title": "game"}, {'show.title': "100"}]} + sort="year", + filters=advancedFilters ) filters = collection.filters() - assert tvshows.search(**filters) == collection.items() + assert movies.search(**filters) == collection.items() finally: collection.delete() diff --git a/tests/test_utils.py b/tests/test_utils.py index 9febf0dcf..0e62535da 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -39,6 +39,15 @@ def test_utils_searchType(): utils.searchType("kekekekeke") +def test_utils_reverseSearchType(): + st = utils.reverseSearchType(1) + assert st == "movie" + movie = utils.reverseSearchType("movie") + assert movie == "movie" + with pytest.raises(NotFound): + utils.reverseSearchType(-1) + + def test_utils_joinArgs(): test_dict = {"genre": "action", "type": 1337} assert utils.joinArgs(test_dict) == "?genre=action&type=1337" From b7e8b37b3e7aa7ab1516b2bc745abbd63b2b7ea0 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Tue, 29 Jun 2021 20:08:19 -0700 Subject: [PATCH 281/356] Add method to move items in a collection --- plexapi/collection.py | 22 ++++++++++++++++++++++ plexapi/playlist.py | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index 0eb20924d..e438a4086 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -277,6 +277,28 @@ def removeItems(self, items): key = '%s/items/%s' % (self.key, item.ratingKey) self._server.query(key, method=self._server._session.delete) + def moveItem(self, item, after=None): + """ Move an item to a new position in the collection. + + Parameters: + items (obj): :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, + or :class:`~plexapi.photo.Photo` objects to be moved in the collection. + after (obj): :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, + or :class:`~plexapi.photo.Photo` objects to move the item after in the collection. + + Raises: + :class:`plexapi.exceptions.BadRequest`: When trying to move items in a smart collection. + """ + if self.smart: + raise BadRequest('Cannot move items in a smart collection.') + + key = '%s/items/%s/move' % (self.key, item.ratingKey) + + if after: + key += '?after=%s' % after.ratingKey + + self._server.query(key, method=self._server._session.put) + def updateFilters(self, libtype=None, limit=None, sort=None, filters=None, **kwargs): """ Update the filters for a smart collection. diff --git a/plexapi/playlist.py b/plexapi/playlist.py index c99626d07..280a57a24 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -225,7 +225,7 @@ def removeItems(self, items): self._server.query(key, method=self._server._session.delete) def moveItem(self, item, after=None): - """ Move an item to a new position in playlist. + """ Move an item to a new position in the playlist. Parameters: items (obj): :class:`~plexapi.audio.Audio`, :class:`~plexapi.video.Video`, From ca0eb309c2de2a3724d1ce7ce70e226d66d95c94 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Tue, 29 Jun 2021 20:08:39 -0700 Subject: [PATCH 282/356] Update collection tests for moving items --- tests/test_collection.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tests/test_collection.py b/tests/test_collection.py index 67aeff0e9..ed6481f61 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -85,17 +85,24 @@ def test_Collection_sortUpdate(collection): collection.sortUpdate("release") -def test_Collection_add_remove(collection, movies, show): +def test_Collection_add_move_remove(collection, movies, show): movie = movies.get("Big Buck Bunny") assert movie not in collection collection.addItems(movie) collection.reload() assert movie in collection + items = collection.items() + collection.moveItem(items[1]) + items_moved = collection.reload().items() + assert items_moved[0] == items[1] + assert items_moved[1] == items[0] + collection.moveItem(items[1], after=items[0]) + items_moved = collection.reload().items() + assert items_moved[0] == items[0] + assert items_moved[1] == items[1] collection.removeItems(movie) collection.reload() assert movie not in collection - with pytest.raises(BadRequest): - collection.addItems(show) def test_Collection_edit(collection, movies): @@ -206,6 +213,8 @@ def test_Collection_exceptions(plex, movies, movie, artist): collection.addItems(movie) with pytest.raises(BadRequest): collection.removeItems(movie) + with pytest.raises(BadRequest): + collection.moveItem(movie) finally: collection.delete() From 293207e186e6e5fb240c9e41d61544029b3feebc Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 4 Jul 2021 18:58:35 -0700 Subject: [PATCH 283/356] Add ability to use FilterChoice objects for library search tags --- plexapi/library.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 006fda706..8d44f0b14 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -847,12 +847,6 @@ def _validateFieldValue(self, filterField, values, libtype=None): values = [values] fieldType = self.getFieldType(filterField.type) - choiceTypes = {'tag', 'subtitleLanguage', 'audioLanguage', 'resolution'} - if fieldType.type in choiceTypes: - filterChoices = self.listFilterChoices(filterField.key, libtype) - else: - filterChoices = [] - results = [] try: @@ -865,11 +859,8 @@ def _validateFieldValue(self, filterField, values, libtype=None): value = float(value) if '.' in str(value) else int(value) elif fieldType.type == 'string': value = str(value) - elif fieldType.type in choiceTypes: - value = str((value.id or value.tag) if isinstance(value, media.MediaTag) else value) - matchValue = value.lower() - value = next((f.key for f in filterChoices - if matchValue in {f.key.lower(), f.title.lower()}), value) + elif fieldType.type in {'tag', 'subtitleLanguage', 'audioLanguage', 'resolution'}: + value = self._validateFieldValueTag(value, filterField, libtype) results.append(str(value)) except (ValueError, AttributeError): raise BadRequest('Invalid value "%s" for filter field "%s", value should be type %s' @@ -888,6 +879,21 @@ def _validateFieldValueDate(self, value): else: return int(utils.toDatetime(value, '%Y-%m-%d').timestamp()) + def _validateFieldValueTag(self, value, filterField, libtype): + """ Validates a filter tag value. A filter tag value can be a :class:`~plexapi.library.FilterChoice` object, + a :class:`~plexapi.media.MediaTag` object, the exact name :attr:`MediaTag.tag` (*str*), + or the exact id :attr:`MediaTag.id` (*int*). + """ + if isinstance(value, FilterChoice): + return value.key + if isinstance(value, media.MediaTag): + value = str(value.id or value.tag) + else: + value = str(value) + filterChoices = self.listFilterChoices(filterField.key, libtype) + matchValue = value.lower() + return next((f.key for f in filterChoices if matchValue in {f.key.lower(), f.title.lower()}), value) + def _validateSortFields(self, sort, libtype=None): """ Validates a list of filter sort fields is available for the library. Returns the validated comma separated sort fields string. From be1b6eb646d288452a2692ce8c9bff95d055c981 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 4 Jul 2021 19:21:44 -0700 Subject: [PATCH 284/356] Add ability to use FilteringSort objects for library search sort --- plexapi/library.py | 48 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 8d44f0b14..30d2b14f0 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -895,23 +895,31 @@ def _validateFieldValueTag(self, value, filterField, libtype): return next((f.key for f in filterChoices if matchValue in {f.key.lower(), f.title.lower()}), value) def _validateSortFields(self, sort, libtype=None): - """ Validates a list of filter sort fields is available for the library. + """ Validates a list of filter sort fields is available for the library. Sort fields can be a + list of :class:`~plexapi.library.FilteringSort` objects, or a comma separated string. Returns the validated comma separated sort fields string. """ if isinstance(sort, str): sort = sort.split(',') + if not isinstance(sort, (list, tuple)): + sort = [sort] + validatedSorts = [] for _sort in sort: - validatedSorts.append(self._validateSortField(_sort.strip(), libtype)) + validatedSorts.append(self._validateSortField(_sort, libtype)) return ','.join(validatedSorts) def _validateSortField(self, sort, libtype=None): - """ Validates a filter sort field is available for the library. + """ Validates a filter sort field is available for the library. A sort field can be a + :class:`~plexapi.library.FilteringSort` object, or a string. Returns the validated sort field string. """ - match = re.match(r'(?:([a-zA-Z]*)\.)?([a-zA-Z]+):?([a-zA-Z]*)', sort) + if isinstance(sort, FilteringSort): + return '%s.%s:%s' % (libtype or self.TYPE, sort.key, sort.defaultDirection) + + match = re.match(r'(?:([a-zA-Z]*)\.)?([a-zA-Z]+):?([a-zA-Z]*)', sort.strip()) if not match: raise BadRequest('Invalid filter sort: %s' % sort) _libtype, sortField, sortDir = match.groups() @@ -1015,9 +1023,8 @@ def search(self, title=None, sort=None, maxresults=None, libtype=None, Parameters: title (str, optional): General string query to search for. Partial string matches are allowed. - sort (str or list, optional): A string of comma separated sort fields or a list of sort fields - in the format ``column:dir``. - See :func:`~plexapi.library.LibrarySection.listSorts` to get a list of available sort fields. + sort (:class:`~plexapi.library.FilteringSort` or str or list, optional): A field to sort the results. + See the details below for more info. maxresults (int, optional): Only return the specified number of results. libtype (str, optional): Return results of a specific type (movie, show, season, episode, artist, album, track, photoalbum, photo, collection) (e.g. ``libtype='episode'`` will only @@ -1033,6 +1040,28 @@ def search(self, title=None, sort=None, maxresults=None, libtype=None, :exc:`~plexapi.exceptions.BadRequest`: When the sort or filter is invalid. :exc:`~plexapi.exceptions.NotFound`: When applying an unknown sort or filter. + **Sorting Results** + + The search results can be sorted by including the ``sort`` parameter. + + * See :func:`~plexapi.library.LibrarySection.listSorts` to get a list of available sort fields. + + The ``sort`` parameter can be a :class:`~plexapi.library.FilteringSort` object or a sort string in the + format ``field:dir``. The sort direction ``dir`` can be ``asc``, ``desc``, or ``nullsLast``. Omitting the + sort direction or using a :class:`~plexapi.library.FilteringSort` object will sort the results in the default + direction of the field. Multi-sorting on multiple fields can be achieved by using a comma separated list of + sort strings, or a list of :class:`~plexapi.library.FilteringSort` object or strings. + + Examples: + + .. code-block:: python + + library.search(sort="titleSort:desc") # Sort title in descending order + library.search(sort="titleSort") # Sort title in the default order + # Multi-sort by year in descending order, then by audience rating in descending order + library.search(sort="year:desc,audienceRating:desc") + library.search(sort=["year:desc", "audienceRating:desc"]) + **Using Plex Filters** Any of the available custom filters can be applied to the search results @@ -1071,8 +1100,9 @@ def search(self, title=None, sort=None, maxresults=None, libtype=None, * **writer** (:class:`~plexapi.media.MediaTag`): Search for the name of a writer. * **year** (*int*): Search for a specific year. - Tag type filter values can be a :class:`~plexapi.media.MediaTag` object, the exact name - :attr:`MediaTag.tag` (*str*), or the exact id :attr:`MediaTag.id` (*int*). + Tag type filter values can be a :class:`~plexapi.library.FilterChoice` object, + :class:`~plexapi.media.MediaTag` object, the exact name :attr:`MediaTag.tag` (*str*), + or the exact id :attr:`MediaTag.id` (*int*). Date type filter values can be a ``datetime`` object, a relative date using a one of the available date suffixes (e.g. ``30d``) (*str*), or a date in ``YYYY-MM-DD`` (*str*) format. From f7980e4a1670870e63b409ce5b6b5071a59d2a49 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 4 Jul 2021 19:22:11 -0700 Subject: [PATCH 285/356] Update library search tests for FilterChoice and FilteringSort objects --- tests/test_library.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/test_library.py b/tests/test_library.py index dde3d78ed..f743acd35 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -370,6 +370,13 @@ def test_library_MovieSection_search(movies, movie, collection): _test_library_search(movies, collection) +def test_library_MovieSection_search_FilterChoice(movies, collection): + filterChoice = next(c for c in movies.listFilterChoices("collection") if c.title == collection.title) + results = movies.search(filters={'collection': filterChoice}) + movie = collection.items()[0] + assert movie in results + + def test_library_MovieSection_advancedSearch(movies, movie): advancedFilters = { 'and': [ @@ -483,7 +490,13 @@ def test_library_MovieSection_search_sort(movies): results_multi_list = movies.search(sort=["year:desc", "titleSort:desc"]) titleSort_multi_list = [(r.year, r.titleSort) for r in results_multi_list] - assert titleSort_multi_list == sorted(titleSort_multi_str, reverse=True) + assert titleSort_multi_list == sorted(titleSort_multi_list, reverse=True) + + # Test sort using FilteringSort object + sortObj = next(s for s in movies.listSorts() if s.key == "year") + results_sortObj = movies.search(sort=sortObj) + sortObj_list = [r.year for r in results_sortObj] + assert sortObj_list == sorted(sortObj_list, reverse=True) def test_library_ShowSection_search_sort(tvshows): From 40c22711a60b9ced9be6756be697017e9fd24e4d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 4 Jul 2021 21:32:58 -0700 Subject: [PATCH 286/356] Fix updateProgress and updateTimeline tests milliseconds --- tests/test_library.py | 12 ++++++------ tests/test_video.py | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index dde3d78ed..65ae54669 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -82,8 +82,8 @@ def test_library_fetchItem(plex, movie): def test_library_onDeck(plex, movie): - movie.updateProgress(movie.duration * 1000 / 10) # set progress to 10% - assert len(list(plex.library.onDeck())) + movie.updateProgress(movie.duration // 4) # set progress to 25% + assert movie in plex.library.onDeck() movie.markUnwatched() @@ -174,11 +174,11 @@ def test_librarty_deleteMediaPreviews(movies): def test_library_MovieSection_onDeck(movie, movies, tvshows, episode): - movie.updateProgress(movie.duration * 1000 / 10) # set progress to 10% - assert movies.onDeck() + movie.updateProgress(movie.duration // 4) # set progress to 25% + assert movie in movies.onDeck() movie.markUnwatched() - episode.updateProgress(episode.duration * 1000 / 10) - assert tvshows.onDeck() + episode.updateProgress(episode.duration // 4) + assert episode in tvshows.onDeck() episode.markUnwatched() diff --git a/tests/test_video.py b/tests/test_video.py index 692c47779..3d7d925e0 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -913,13 +913,13 @@ def test_video_Season_mixins_tags(show): def test_video_Episode_updateProgress(episode, patched_http_call): - episode.updateProgress(10 * 60 * 1000) # 10 minutes. + episode.updateProgress(2 * 60 * 1000) # 2 minutes. def test_video_Episode_updateTimeline(episode, patched_http_call): episode.updateTimeline( - 10 * 60 * 1000, state="playing", duration=episode.duration - ) # 10 minutes. + 2 * 60 * 1000, state="playing", duration=episode.duration + ) # 2 minutes. def test_video_Episode_stop(episode, mocker, patched_http_call): From b192e5eea9651dc8349896dc5b9bb831cacdb35d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 4 Jul 2021 21:45:34 -0700 Subject: [PATCH 287/356] Reset collection sort after move test to avoid corrupted XML --- tests/test_collection.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test_collection.py b/tests/test_collection.py index ed6481f61..37cf384f4 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -103,6 +103,10 @@ def test_Collection_add_move_remove(collection, movies, show): collection.removeItems(movie) collection.reload() assert movie not in collection + # Reset collection sort due to bug with corrupted XML response + # for movies that have been moved in a collection and have + # progress (updateProgress) or marked as played (markWatched) + collection.sortUpdate("release") def test_Collection_edit(collection, movies): From b4314c19956faf68e8e9142c195b039d371ffdaa Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 4 Jul 2021 22:06:23 -0700 Subject: [PATCH 288/356] Add back custom sort to collection sort test authenticated only --- tests/test_collection.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/test_collection.py b/tests/test_collection.py index 37cf384f4..2f3ee6ff0 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -85,7 +85,15 @@ def test_Collection_sortUpdate(collection): collection.sortUpdate("release") -def test_Collection_add_move_remove(collection, movies, show): +@pytest.mark.authenticated +def test_Collection_sortUpdate_custom(collection): + collection.sortUpdate(sort="custom") + collection.reload() + assert collection.collectionSort == 2 + collection.sortUpdate("release") + + +def test_Collection_add_move_remove(collection, movies): movie = movies.get("Big Buck Bunny") assert movie not in collection collection.addItems(movie) From 88038a9b6c1a5cfaa10fc2322f619d1e6c6ad014 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 16 Jul 2021 10:14:13 -0700 Subject: [PATCH 289/356] Set default sync subtitleSize --- plexapi/sync.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plexapi/sync.py b/plexapi/sync.py index ce60ca9f8..53dc0636f 100644 --- a/plexapi/sync.py +++ b/plexapi/sync.py @@ -178,19 +178,19 @@ class MediaSettings(object): photoQuality (int): photo quality on scale 0 to 100. photoResolution (str): maximum photo resolution, formatted as WxH (e.g. `1920x1080`). videoResolution (str): maximum video resolution, formatted as WxH (e.g. `1280x720`, may be empty). - subtitleSize (int|str): unknown, usually equals to 0, may be empty string. + subtitleSize (int): subtitle size on scale 0 to 100. videoQuality (int): video quality on scale 0 to 100. """ def __init__(self, maxVideoBitrate=4000, videoQuality=100, videoResolution='1280x720', audioBoost=100, - musicBitrate=192, photoQuality=74, photoResolution='1920x1080', subtitleSize=''): + musicBitrate=192, photoQuality=74, photoResolution='1920x1080', subtitleSize=100): self.audioBoost = plexapi.utils.cast(int, audioBoost) self.maxVideoBitrate = plexapi.utils.cast(int, maxVideoBitrate) if maxVideoBitrate != '' else '' self.musicBitrate = plexapi.utils.cast(int, musicBitrate) if musicBitrate != '' else '' self.photoQuality = plexapi.utils.cast(int, photoQuality) if photoQuality != '' else '' self.photoResolution = photoResolution self.videoResolution = videoResolution - self.subtitleSize = subtitleSize + self.subtitleSize = plexapi.utils.cast(int, subtitleSize) if subtitleSize != '' else '' self.videoQuality = plexapi.utils.cast(int, videoQuality) if videoQuality != '' else '' @staticmethod From 753a67ffcd58e02ac5c07d577fe40ea52fbb7a69 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Fri, 16 Jul 2021 09:55:07 -0700 Subject: [PATCH 290/356] Remove Content-type header from sync --- plexapi/myplex.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index fe856f345..925a189f8 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -623,9 +623,7 @@ def sync(self, sync_item, client=None, clientId=None): } url = SyncList.key.format(clientId=client.clientIdentifier) - data = self.query(url, method=self._session.post, headers={ - 'Content-type': 'x-www-form-urlencoded', - }, params=params) + data = self.query(url, method=self._session.post, params=params) return SyncItem(self, data, None, clientIdentifier=client.clientIdentifier) From 9a2673fa379d4ce574c65dc337935bb6c31aa67a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 18:49:40 -0500 Subject: [PATCH 291/356] Bump websocket-client from 1.0.1 to 1.1.0 (#777) --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 7c2c09140..2e5cad0ea 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -15,4 +15,4 @@ requests-mock==1.9.3 sphinx==4.0.2 sphinx-rtd-theme==0.5.2 tqdm==4.61.0 -websocket-client==1.0.1 +websocket-client==1.1.0 From 1817bfc7e3c6661670a2e9892a6afc0a6f3b7e67 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 18:52:33 -0500 Subject: [PATCH 292/356] Bump pillow from 8.2.0 to 8.3.1 (#791) --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 2e5cad0ea..da0ddd0bb 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -4,7 +4,7 @@ #--------------------------------------------------------- coveralls==3.1.0 flake8==3.9.2 -pillow==8.2.0 +pillow==8.3.1 pytest==6.2.4 pytest-cache==1.0 pytest-cov==2.12.1 From d5cdbb9b8e0a1b52345dd9943e08435ea65e6a6d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 18:56:29 -0500 Subject: [PATCH 293/356] Bump tqdm from 4.61.0 to 4.61.2 (#790) --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index da0ddd0bb..725738dea 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -14,5 +14,5 @@ requests==2.25.1 requests-mock==1.9.3 sphinx==4.0.2 sphinx-rtd-theme==0.5.2 -tqdm==4.61.0 +tqdm==4.61.2 websocket-client==1.1.0 From b8b04025ca0bb37df54524e5563fcf897b317324 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 19:00:13 -0500 Subject: [PATCH 294/356] Bump coveralls from 3.1.0 to 3.2.0 (#801) --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 725738dea..07c4e9ad6 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -2,7 +2,7 @@ # PlexAPI requirements to run py.test. # pip install -r requirements_dev.txt #--------------------------------------------------------- -coveralls==3.1.0 +coveralls==3.2.0 flake8==3.9.2 pillow==8.3.1 pytest==6.2.4 From d84da70a3df1249d6b4cfb231996af7152c769d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 19:05:09 -0500 Subject: [PATCH 295/356] Bump sphinx from 4.0.2 to 4.1.2 (#802) --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 07c4e9ad6..440cd9bf4 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -12,7 +12,7 @@ pytest-mock<3.6.2 recommonmark==0.7.1 requests==2.25.1 requests-mock==1.9.3 -sphinx==4.0.2 +sphinx==4.1.2 sphinx-rtd-theme==0.5.2 tqdm==4.61.2 websocket-client==1.1.0 From 05f625f97676243fb17f5a939bb6c3f04a5e951f Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 26 Jul 2021 17:09:53 -0700 Subject: [PATCH 296/356] Add GitHub Actions to Dependabot (#792) --- .github/dependabot.yml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 13a08e874..396b688f5 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,8 +1,15 @@ version: 2 updates: -- package-ecosystem: pip - directory: "/" - schedule: - interval: daily - time: "11:00" - open-pull-requests-limit: 10 + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "daily" + time: "11:00" + open-pull-requests-limit: 10 + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: daily + time: "11:00" + open-pull-requests-limit: 10 From 2c540f69c83fff3e4b574848e129c516b062109c Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 26 Jul 2021 18:36:54 -0700 Subject: [PATCH 297/356] Add producers, roles, and hasCommercialMarker to Episode objects (#797) * Add producers and roles to Episode * Add producers and roles to episode test * Add hasCommercialMarker to Episode --- plexapi/media.py | 4 +++- plexapi/video.py | 14 ++++++++++++++ tests/test_video.py | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/plexapi/media.py b/plexapi/media.py index 3ca699780..addc3fdfb 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -964,10 +964,12 @@ def __repr__(self): name = self._clean(self.firstAttr('type')) start = utils.millisecondToHumanstr(self._clean(self.firstAttr('start'))) end = utils.millisecondToHumanstr(self._clean(self.firstAttr('end'))) - return '<%s:%s %s - %s>' % (self.__class__.__name__, name, start, end) + offsets = '%s-%s' % (start, end) + return '<%s>' % ':'.join([self.__class__.__name__, name, offsets]) def _loadData(self, data): self._data = data + self.id = utils.cast(int, data.attrib.get('id')) self.type = data.attrib.get('type') self.start = utils.cast(int, data.attrib.get('startTimeOffset')) self.end = utils.cast(int, data.attrib.get('endTimeOffset')) diff --git a/plexapi/video.py b/plexapi/video.py index 609eaffc3..090d9502b 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -767,7 +767,9 @@ class Episode(Video, Playable, ArtMixin, PosterMixin, RatingMixin, parentThumb (str): URL to season thumbnail image (/library/metadata//thumb/). parentTitle (str): Name of the season for the episode. parentYear (int): Year the season was released. + producers (List<:class:`~plexapi.media.Producer`>): List of producers objects. rating (float): Episode rating (7.9; 9.8; 8.1). + roles (List<:class:`~plexapi.media.Role`>): List of role objects. skipParent (bool): True if the show's seasons are set to hidden. viewOffset (int): View offset in milliseconds. writers (List<:class:`~plexapi.media.Writer`>): List of writers objects. @@ -809,7 +811,9 @@ def _loadData(self, data): self.parentThumb = data.attrib.get('parentThumb') self.parentTitle = data.attrib.get('parentTitle') self.parentYear = utils.cast(int, data.attrib.get('parentYear')) + self.producers = self.findItems(data, media.Producer) self.rating = utils.cast(float, data.attrib.get('rating')) + self.roles = self.findItems(data, media.Role) self.skipParent = utils.cast(bool, data.attrib.get('skipParent', '0')) self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0)) self.writers = self.findItems(data, media.Writer) @@ -838,6 +842,11 @@ def _prettyfilename(self): """ Returns a human friendly filename. """ return '%s.%s' % (self.grandparentTitle.replace(' ', '.'), self.seasonEpisode) + @property + def actors(self): + """ Alias to self.roles. """ + return self.roles + @property def locations(self): """ This does not exist in plex xml response but is added to have a common @@ -865,6 +874,11 @@ def seasonEpisode(self): """ Returns the s00e00 string containing the season and episode numbers. """ return 's%se%s' % (str(self.seasonNumber).zfill(2), str(self.episodeNumber).zfill(2)) + @property + def hasCommercialMarker(self): + """ Returns True if the episode has a commercial marker in the xml. """ + return any(marker.type == 'commercial' for marker in self.markers) + @property def hasIntroMarker(self): """ Returns True if the episode has an intro marker in the xml. """ diff --git a/tests/test_video.py b/tests/test_video.py index 3d7d925e0..d919b6b16 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -1016,8 +1016,13 @@ def test_video_Episode_attrs(episode): assert utils.is_thumb(episode.parentThumb) assert episode.parentTitle == "Season 1" assert episode.parentYear is None + if episode.producers: + assert episode.producers # Test episode doesn't have producers assert episode.rating is None assert utils.is_int(episode.ratingKey) + if episode.roles: + assert "Jason Momoa" in [i.tag for i in episode.roles] + assert episode.actors == episode.roles assert episode._server._baseurl == utils.SERVER_BASEURL assert episode.skipParent is False assert utils.is_string(episode.summary, gte=100) From 3b1dce7a8d5b571eadda4198e5419326c841caa2 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Mon, 26 Jul 2021 20:38:16 -0500 Subject: [PATCH 298/356] Decouple resource address sorting from connection attempts (#800) * Decouple resource address sorting from connection attempts * Fix lint * Move defaults to class --- plexapi/myplex.py | 56 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 925a189f8..15da2115d 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -923,6 +923,10 @@ class MyPlexResource(PlexObject): TAG = 'Device' key = 'https://plex.tv/api/resources?includeHttps=1&includeRelay=1' + # Default order to prioritize available resource connections + DEFAULT_LOCATION_ORDER = ['local', 'remote', 'relay'] + DEFAULT_SCHEME_ORDER = ['https', 'http'] + def _loadData(self, data): self._data = data self.name = data.attrib.get('name') @@ -947,38 +951,64 @@ def _loadData(self, data): self.ownerid = utils.cast(int, data.attrib.get('ownerId', 0)) self.sourceTitle = data.attrib.get('sourceTitle') # owners plex username. - def connect(self, ssl=None, timeout=None): - """ Returns a new :class:`~plexapi.server.PlexServer` or :class:`~plexapi.client.PlexClient` object. + def preferred_connections( + self, + ssl=None, + timeout=None, + locations=DEFAULT_LOCATION_ORDER, + schemes=DEFAULT_SCHEME_ORDER, + ): + """ Returns a sorted list of the available connection addresses for this resource. Often times there is more than one address specified for a server or client. - This function will prioritize local connections before remote or relay and HTTPS before HTTP. - After trying to connect to all available addresses for this resource and - assuming at least one connection was successful, the PlexServer object is built and returned. + Default behavior will prioritize local connections before remote or relay and HTTPS before HTTP. Parameters: ssl (bool, optional): Set True to only connect to HTTPS connections. Set False to only connect to HTTP connections. Set None (default) to connect to any HTTP or HTTPS connection. timeout (int, optional): The timeout in seconds to attempt each connection. - - Raises: - :exc:`~plexapi.exceptions.NotFound`: When unable to connect to any addresses for this resource. """ - # Keys in the order we want the connections to be sorted - locations = ['local', 'remote', 'relay'] - schemes = ['https', 'http'] connections_dict = {location: {scheme: [] for scheme in schemes} for location in locations} for connection in self.connections: # Only check non-local connections unless we own the resource if self.owned or (not self.owned and not connection.local): location = 'relay' if connection.relay else ('local' if connection.local else 'remote') - connections_dict[location]['http'].append(connection.httpuri) - connections_dict[location]['https'].append(connection.uri) + if location not in locations: + continue + if 'http' in schemes: + connections_dict[location]['http'].append(connection.httpuri) + if 'https' in schemes: + connections_dict[location]['https'].append(connection.uri) if ssl is True: schemes.remove('http') elif ssl is False: schemes.remove('https') connections = [] for location in locations: for scheme in schemes: connections.extend(connections_dict[location][scheme]) + return connections + + def connect( + self, + ssl=None, + timeout=None, + locations=DEFAULT_LOCATION_ORDER, + schemes=DEFAULT_SCHEME_ORDER, + ): + """ Returns a new :class:`~plexapi.server.PlexServer` or :class:`~plexapi.client.PlexClient` object. + Uses `MyPlexResource.preferred_connections()` to generate the priority order of connection addresses. + After trying to connect to all available addresses for this resource and + assuming at least one connection was successful, the PlexServer object is built and returned. + + Parameters: + ssl (bool, optional): Set True to only connect to HTTPS connections. Set False to + only connect to HTTP connections. Set None (default) to connect to any + HTTP or HTTPS connection. + timeout (int, optional): The timeout in seconds to attempt each connection. + + Raises: + :exc:`~plexapi.exceptions.NotFound`: When unable to connect to any addresses for this resource. + """ + connections = self.preferred_connections(ssl, timeout, locations, schemes) # Try connecting to all known resource connections in parellel, but # only return the first server (in order) that provides a response. cls = PlexServer if 'server' in self.provides else PlexClient From 6cacc4a55a713caa1c4e65daf48e285cc226a479 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 26 Jul 2021 18:45:58 -0700 Subject: [PATCH 299/356] Add playlist title search and sorting (#782) * Add title and sort arguments to server playlists method * Raise NotFound when retrieving a playlist or collection * Update tests for collection/playlist NotFound --- plexapi/library.py | 26 +++++++++++++++++--------- plexapi/server.py | 29 ++++++++++++++++++++++------- tests/conftest.py | 12 ++++++------ tests/test_library.py | 12 ++++++++++++ 4 files changed, 57 insertions(+), 22 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 2b60144e5..d98f684df 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1405,10 +1405,14 @@ def collection(self, title): Parameters: title (str): Title of the item to return. + + Raises: + :exc:`~plexapi.exceptions.NotFound`: Unable to find collection. """ - results = self.collections(title__iexact=title) - if results: - return results[0] + try: + return self.collections(title=title, title__iexact=title)[0] + except IndexError: + raise NotFound('Unable to find collection with title "%s".' % title) from None def collections(self, **kwargs): """ Returns a list of collections from this library section. @@ -1430,15 +1434,19 @@ def playlist(self, title): Parameters: title (str): Title of the item to return. + + Raises: + :exc:`~plexapi.exceptions.NotFound`: Unable to find playlist. """ - results = self.playlists(title__iexact=title) - if results: - return results[0] + try: + return self.playlists(title=title, title__iexact=title)[0] + except IndexError: + raise NotFound('Unable to find playlist with title "%s".' % title) from None - def playlists(self, **kwargs): + def playlists(self, sort=None, **kwargs): """ Returns a list of playlists from this library section. """ - key = '/playlists?type=15&playlistType=%s§ionID=%s' % (self.CONTENT_TYPE, self.key) - return self.fetchItems(key, **kwargs) + return self._server.playlists( + playlistType=self.CONTENT_TYPE, sectionId=self.key, sort=sort, **kwargs) @deprecated('use "listFields" instead') def filterFields(self, mediaType=None): diff --git a/plexapi/server.py b/plexapi/server.py index 2ec8c422d..db3bc025d 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -575,17 +575,29 @@ def history(self, maxresults=9999999, mindate=None, ratingKey=None, accountID=No args['X-Plex-Container-Start'] += args['X-Plex-Container-Size'] return results - def playlists(self, playlistType=None): + def playlists(self, playlistType=None, sectionId=None, title=None, sort=None, **kwargs): """ Returns a list of all :class:`~plexapi.playlist.Playlist` objects on the server. Parameters: playlistType (str, optional): The type of playlists to return (audio, video, photo). Default returns all playlists. + sectionId (int, optional): The section ID (key) of the library to search within. + title (str, optional): General string query to search for. Partial string matches are allowed. + sort (str or list, optional): A string of comma separated sort fields in the format ``column:dir``. """ - key = '/playlists' - if playlistType: - key = '%s?playlistType=%s' % (key, playlistType) - return self.fetchItems(key) + args = {} + if playlistType is not None: + args['playlistType'] = playlistType + if sectionId is not None: + args['sectionID'] = sectionId + if title is not None: + args['title'] = title + if sort is not None: + # TODO: Automatically retrieve and validate sort field similar to LibrarySection.search() + args['sort'] = sort + + key = '/playlists%s' % utils.joinArgs(args) + return self.fetchItems(key, **kwargs) def playlist(self, title): """ Returns the :class:`~plexapi.client.Playlist` that matches the specified title. @@ -594,9 +606,12 @@ def playlist(self, title): title (str): Title of the playlist to return. Raises: - :exc:`~plexapi.exceptions.NotFound`: Invalid playlist title. + :exc:`~plexapi.exceptions.NotFound`: Unable to find playlist. """ - return self.fetchItem('/playlists', title=title) + try: + return self.playlists(title=title, title__iexact=title)[0] + except IndexError: + raise NotFound('Unable to find playlist with title "%s".' % title) from None def optimizedItems(self, removeAll=None): """ Returns list of all :class:`~plexapi.media.Optimized` objects connected to server. """ diff --git a/tests/conftest.py b/tests/conftest.py index de3cbaec6..21a50e66c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -276,9 +276,9 @@ def photo(photoalbum): @pytest.fixture() def collection(plex, movies, movie): - c = movies.collection("Test Collection") - if c: return c - else: + try: + return movies.collection("Test Collection") + except NotFound: return plex.createCollection( title="Test Collection", section=movies, @@ -288,9 +288,9 @@ def collection(plex, movies, movie): @pytest.fixture() def playlist(plex, tvshows, season): - p = tvshows.playlist("Test Playlist") - if p: return p - else: + try: + return tvshows.playlist("Test Playlist") + except NotFound: return plex.createPlaylist( title="Test Playlist", items=season.episodes()[:3] diff --git a/tests/test_library.py b/tests/test_library.py index 00ef80d20..66a1df3f1 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -207,6 +207,11 @@ def test_library_MovieSection_collections(movies, movie): collection.delete() +def test_library_MovieSection_collection_exception(movies): + with pytest.raises(NotFound): + movies.collection("Does Not Exists") + + def test_library_ShowSection_all(tvshows): assert len(tvshows.all(title__iexact="The 100")) @@ -241,10 +246,17 @@ def test_library_ShowSection_playlists(tvshows, show): assert playlist in playlists p = tvshows.playlist(playlist.title) assert playlist == p + playlists = tvshows.playlists(title="test_", sort="mediaCount:asc") + assert playlist in playlists finally: playlist.delete() +def test_library_ShowSection_playlist_exception(tvshows): + with pytest.raises(NotFound): + tvshows.playlist("Does Not Exists") + + def test_library_MusicSection_albums(music): assert len(music.albums()) From 42260aa1b653ffd5de55efc67d0c6695d63544b1 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 26 Jul 2021 18:46:30 -0700 Subject: [PATCH 300/356] Add libtype argument for creating smart playlists (#799) * Add libtype keyword argument for smart playlists * Update docs, remove libtype collection from smart playlists/collections * Cannot create a smart playlist or collection from other collections * Update smart playlist filter test for libtype --- plexapi/collection.py | 2 +- plexapi/playlist.py | 12 ++++++++---- plexapi/server.py | 8 +++++--- tests/test_playlist.py | 2 ++ 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/plexapi/collection.py b/plexapi/collection.py index 1d0e1260b..cd9e52c16 100644 --- a/plexapi/collection.py +++ b/plexapi/collection.py @@ -442,7 +442,7 @@ def create(cls, server, title, section, items=None, smart=False, limit=None, smart (bool): True to create a smart collection. Default False. limit (int): Smart collections only, limit the number of items in the collection. libtype (str): Smart collections only, the specific type of content to filter - (movie, show, season, episode, artist, album, track, photoalbum, photo, collection). + (movie, show, season, episode, artist, album, track, photoalbum, photo). sort (str or list, optional): Smart collections only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. See :func:`~plexapi.library.LibrarySection.search` for more info. diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 4bcd72c54..bac46965c 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -341,13 +341,15 @@ def _create(cls, server, title, items): return cls(server, data, initpath=key) @classmethod - def _createSmart(cls, server, title, section, limit=None, sort=None, filters=None, **kwargs): + def _createSmart(cls, server, title, section, limit=None, libtype=None, sort=None, filters=None, **kwargs): """ Create a smart playlist. """ if not isinstance(section, LibrarySection): section = server.library.section(section) + libtype = libtype or section.METADATA_TYPE + searchKey = section._buildSearchKey( - sort=sort, libtype=section.METADATA_TYPE, limit=limit, filters=filters, **kwargs) + sort=sort, libtype=libtype, limit=limit, filters=filters, **kwargs) uri = '%s%s' % (server._uriRoot(), searchKey) key = '/playlists%s' % utils.joinArgs({ @@ -361,7 +363,7 @@ def _createSmart(cls, server, title, section, limit=None, sort=None, filters=Non @classmethod def create(cls, server, title, section=None, items=None, smart=False, limit=None, - sort=None, filters=None, **kwargs): + libtype=None, sort=None, filters=None, **kwargs): """ Create a playlist. Parameters: @@ -373,6 +375,8 @@ def create(cls, server, title, section=None, items=None, smart=False, limit=None :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to be added to the playlist. smart (bool): True to create a smart playlist. Default False. limit (int): Smart playlists only, limit the number of items in the playlist. + libtype (str): Smart playlists only, the specific type of content to filter + (movie, show, season, episode, artist, album, track, photoalbum, photo). sort (str or list, optional): Smart playlists only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. See :func:`~plexapi.library.LibrarySection.search` for more info. @@ -389,7 +393,7 @@ def create(cls, server, title, section=None, items=None, smart=False, limit=None :class:`~plexapi.playlist.Playlist`: A new instance of the created Playlist. """ if smart: - return cls._createSmart(server, title, section, limit, sort, filters, **kwargs) + return cls._createSmart(server, title, section, limit, libtype, sort, filters, **kwargs) else: return cls._create(server, title, items) diff --git a/plexapi/server.py b/plexapi/server.py index db3bc025d..c31c9a692 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -427,7 +427,7 @@ def createCollection(self, title, section, items=None, smart=False, limit=None, smart (bool): True to create a smart collection. Default False. limit (int): Smart collections only, limit the number of items in the collection. libtype (str): Smart collections only, the specific type of content to filter - (movie, show, season, episode, artist, album, track, photoalbum, photo, collection). + (movie, show, season, episode, artist, album, track, photoalbum, photo). sort (str or list, optional): Smart collections only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. See :func:`~plexapi.library.LibrarySection.search` for more info. @@ -448,7 +448,7 @@ def createCollection(self, title, section, items=None, smart=False, limit=None, libtype=libtype, sort=sort, filters=filters, **kwargs) def createPlaylist(self, title, section=None, items=None, smart=False, limit=None, - sort=None, filters=None, **kwargs): + libtype=None, sort=None, filters=None, **kwargs): """ Creates and returns a new :class:`~plexapi.playlist.Playlist`. Parameters: @@ -459,6 +459,8 @@ def createPlaylist(self, title, section=None, items=None, smart=False, limit=Non :class:`~plexapi.video.Video`, or :class:`~plexapi.photo.Photo` objects to be added to the playlist. smart (bool): True to create a smart playlist. Default False. limit (int): Smart playlists only, limit the number of items in the playlist. + libtype (str): Smart playlists only, the specific type of content to filter + (movie, show, season, episode, artist, album, track, photoalbum, photo). sort (str or list, optional): Smart playlists only, a string of comma separated sort fields or a list of sort fields in the format ``column:dir``. See :func:`~plexapi.library.LibrarySection.search` for more info. @@ -476,7 +478,7 @@ def createPlaylist(self, title, section=None, items=None, smart=False, limit=Non """ return Playlist.create( self, title, section=section, items=items, smart=smart, limit=limit, - sort=sort, filters=filters, **kwargs) + libtype=libtype, sort=sort, filters=filters, **kwargs) def createPlayQueue(self, item, **kwargs): """ Creates and returns a new :class:`~plexapi.playqueue.PlayQueue`. diff --git a/tests/test_playlist.py b/tests/test_playlist.py index e5ddcd748..92b1204a6 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -189,10 +189,12 @@ def test_Playlist_smartFilters(plex, tvshows): smart=True, section=tvshows, limit=5, + libtype='show', sort=["season.index:nullsLast", "episode.index:nullsLast", "show.titleSort"], filters={"or": [{"show.title": "game"}, {'show.title': "100"}]} ) filters = playlist.filters() + filters['libtype'] = tvshows.METADATA_TYPE # Override libtype to check playlist items assert tvshows.search(**filters) == playlist.items() finally: playlist.delete() From 6b4cf300ae9deaf5642d4d9a0722fb80827acbec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jul 2021 20:53:09 -0500 Subject: [PATCH 301/356] Bump requests from 2.25.1 to 2.26.0 (#795) Bumps [requests](https://github.com/psf/requests) from 2.25.1 to 2.26.0. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/master/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.25.1...v2.26.0) --- updated-dependencies: - dependency-name: requests dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 440cd9bf4..b1c1c4502 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -10,7 +10,7 @@ pytest-cache==1.0 pytest-cov==2.12.1 pytest-mock<3.6.2 recommonmark==0.7.1 -requests==2.25.1 +requests==2.26.0 requests-mock==1.9.3 sphinx==4.1.2 sphinx-rtd-theme==0.5.2 From f89b086468bb48f1582c4ca16ac3a08923f438e6 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Mon, 26 Jul 2021 20:53:19 -0500 Subject: [PATCH 302/356] Deprecate Python 3.5 (#804) --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9bdb35275..19c40a0e4 100644 --- a/setup.py +++ b/setup.py @@ -35,7 +35,7 @@ url='https://github.com/pkkid/python-plexapi', packages=['plexapi'], install_requires=requirements, - python_requires='>=3.5', + python_requires='>=3.6', long_description=readme, keywords=['plex', 'api'], classifiers=[ From bd7de4281ec599e096c8991bbd1e583a0d196d8d Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Mon, 26 Jul 2021 20:59:51 -0500 Subject: [PATCH 303/356] Release 4.7.0 --- plexapi/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/__init__.py b/plexapi/__init__.py index 49720f6b5..f53692cfc 100644 --- a/plexapi/__init__.py +++ b/plexapi/__init__.py @@ -15,7 +15,7 @@ # PlexAPI Settings PROJECT = 'PlexAPI' -VERSION = '4.6.1' +VERSION = '4.7.0' TIMEOUT = CONFIG.get('plexapi.timeout', 30, int) X_PLEX_CONTAINER_SIZE = CONFIG.get('plexapi.container_size', 100, int) X_PLEX_ENABLE_FAST_CONNECT = CONFIG.get('plexapi.enable_fast_connect', False, bool) From 63afd5bdc555f4a7a33ade379c32ffa5c68df04c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Aug 2021 10:12:11 -0500 Subject: [PATCH 304/356] Bump codecov/codecov-action from 1 to 2.0.2 (#803) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 1 to 2.0.2. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v1...v2.0.2) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0b9d4b900..01198fd16 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -251,6 +251,6 @@ jobs: coverage xml - name: Upload ${{ matrix.plex }} coverage to Codecov - uses: codecov/codecov-action@v1 + uses: codecov/codecov-action@v2.0.2 with: flags: ${{ matrix.plex }} From 71ceed0d5a706d0a3996f5c3d369ef3c1dc62b74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Aug 2021 10:12:45 -0500 Subject: [PATCH 305/356] Bump tqdm from 4.61.2 to 4.62.0 (#809) Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.61.2 to 4.62.0. - [Release notes](https://github.com/tqdm/tqdm/releases) - [Commits](https://github.com/tqdm/tqdm/compare/v4.61.2...v4.62.0) --- updated-dependencies: - dependency-name: tqdm dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index b1c1c4502..15586c8f0 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -14,5 +14,5 @@ requests==2.26.0 requests-mock==1.9.3 sphinx==4.1.2 sphinx-rtd-theme==0.5.2 -tqdm==4.61.2 +tqdm==4.62.0 websocket-client==1.1.0 From 0b39e4eea80ea83aa2e953d7ff7cc2917af761a0 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 25 Aug 2021 18:05:49 -0700 Subject: [PATCH 306/356] Set CI docker container to default environment LANG="en_US.UTF-8" (#820) --- tools/plex-bootstraptest.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tools/plex-bootstraptest.py b/tools/plex-bootstraptest.py index 7c059b871..cb9db9331 100755 --- a/tools/plex-bootstraptest.py +++ b/tools/plex-bootstraptest.py @@ -55,15 +55,15 @@ "-p", "32414:32414/udp", "-e", - 'TZ="Europe/London"', - "-e", "PLEX_CLAIM=%(claim_token)s", "-e", "ADVERTISE_IP=http://%(advertise_ip)s:32400/", + "-e", + "TZ=%(timezone)s", + "-e", + "LANG=%(language)s", "-h", "%(hostname)s", - "-e", - 'TZ="%(timezone)s"', "-v", "%(destination)s/db:/config", "-v", @@ -352,6 +352,9 @@ def alert_callback(data): parser.add_argument( "--timezone", help="Timezone to set inside plex", default="UTC" ) # noqa + parser.add_argument( + "--language", help="Language to set inside plex", default="en_US.UTF-8" + ) # noqa parser.add_argument( "--destination", help="Local path where to store all the media", @@ -441,6 +444,7 @@ def alert_callback(data): "hostname": opts.server_name, "claim_token": account.claimToken() if account else "", "timezone": opts.timezone, + "language": opts.language, "advertise_ip": opts.advertise_ip, "image_tag": opts.docker_tag, "container_name_extra": "" if account else "unclaimed-", From 96a35dc379907dba31b2b03a8b33995a0a6e56bd Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 28 Jul 2021 14:50:24 -0700 Subject: [PATCH 307/356] Update Playlists test for posters --- tests/test_playlist.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_playlist.py b/tests/test_playlist.py index 92b1204a6..53ecec3c1 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -5,6 +5,7 @@ from plexapi.exceptions import BadRequest, NotFound, Unsupported from . import conftest as utils +from . import test_mixins def test_Playlist_attrs(playlist): @@ -255,3 +256,8 @@ def test_Playlist_exceptions(plex, movies, movie, artist): playlist.moveItem(movie) finally: playlist.delete() + + +def test_Playlist_mixins_images(playlist): + #test_mixins.edit_art(playlist) + test_mixins.edit_poster(playlist) From 0811e5334cd0a152a09537d87c87ff85305cd5ee Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 2 Aug 2021 20:37:17 -0700 Subject: [PATCH 308/356] Add method to get the Plex Web URL for media items --- plexapi/base.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/plexapi/base.py b/plexapi/base.py index bb41f11f0..22cde2029 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -575,12 +575,45 @@ def delete(self): def history(self, maxresults=9999999, mindate=None): """ Get Play History for a media item. + Parameters: maxresults (int): Only return the specified number of results (optional). mindate (datetime): Min datetime to return results from. """ return self._server.history(maxresults=maxresults, mindate=mindate, ratingKey=self.ratingKey) + def _buildWebURL(self, base=None, endpoint='details', key='', legacy=False): + """ Build the Plex Web URL for the item. + + Parameters: + base (str): The base URL before the fragment (``#!``). + Default is https://app.plex.tv/desktop. + endpoint (str): The Plex Web URL endpoint. + 'playlist' for playlists, 'details' for all other media types. + key (str): The Plex API URL for the item (/library/metadata/). + legacy (bool): True or False to use the legacy URL. + Photoalbum and Photo use the legacy URL. + """ + if base is None: + base = 'https://app.plex.tv/desktop' + + params = {'key': key or self.key} + if legacy: + params['legacy'] = 1 + + return '%s#!/server/%s/%s%s' % ( + base, self._server.machineIdentifier, endpoint, utils.joinArgs(params) + ) + + def getWebURL(self, base=None): + """ Returns the Plex Web URL for the item. + + Parameters: + base (str): The base URL before the fragment (``#!``). + Default is https://app.plex.tv/desktop. + """ + return self._buildWebURL(base=base) + class Playable(object): """ This is a general place to store functions specific to media that is Playable. From 9483e4d9c9072af7cc5f8e5eeb51804d0ce9b00e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 2 Aug 2021 20:37:29 -0700 Subject: [PATCH 309/356] Add custom Plex Web URL override for track, photo, and playlist --- plexapi/audio.py | 9 +++++++++ plexapi/photo.py | 18 ++++++++++++++++++ plexapi/playlist.py | 9 +++++++++ 3 files changed, 36 insertions(+) diff --git a/plexapi/audio.py b/plexapi/audio.py index bb1dee225..f6701cc54 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -415,3 +415,12 @@ def trackNumber(self): def _defaultSyncTitle(self): """ Returns str, default title for a new syncItem. """ return '%s - %s - %s' % (self.grandparentTitle, self.parentTitle, self.title) + + def getWebURL(self, base=None): + """ Returns the Plex Web URL for the track's album. + + Parameters: + base (str): The base URL before the fragment (``#!``). + Default is https://app.plex.tv/desktop. + """ + return self._buildWebURL(base=base, key=self.parentKey) diff --git a/plexapi/photo.py b/plexapi/photo.py index f3196663b..008a97e19 100644 --- a/plexapi/photo.py +++ b/plexapi/photo.py @@ -137,6 +137,15 @@ def download(self, savepath=None, keep_original_name=False, showstatus=False): filepaths.append(filepath) return filepaths + def getWebURL(self, base=None): + """ Returns the Plex Web URL for the photoalbum. + + Parameters: + base (str): The base URL before the fragment (``#!``). + Default is https://app.plex.tv/desktop. + """ + return self._buildWebURL(base=base, legacy=True) + @utils.registerPlexObject class Photo(PlexPartialObject, Playable, ArtUrlMixin, PosterUrlMixin, RatingMixin, TagMixin): @@ -301,3 +310,12 @@ def download(self, savepath=None, keep_original_name=False, showstatus=False): if filepath: filepaths.append(filepath) return filepaths + + def getWebURL(self, base=None): + """ Returns the Plex Web URL for the photo's photoalbum. + + Parameters: + base (str): The base URL before the fragment (``#!``). + Default is https://app.plex.tv/desktop. + """ + return self._buildWebURL(base=base, key=self.parentKey, legacy=True) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index bac46965c..3bb189137 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -459,3 +459,12 @@ def sync(self, videoQuality=None, photoResolution=None, audioBitrate=None, clien raise Unsupported('Unsupported playlist content') return myplex.sync(sync_item, client=client, clientId=clientId) + + def getWebURL(self, base=None): + """ Returns the Plex Web URL for the playlist. + + Parameters: + base (str): The base URL before the fragment (``#!``). + Default is https://app.plex.tv/desktop. + """ + return self._buildWebURL(base=base, endpoint='playlist') From 17ab4ce252738bc11856817aef78359fbf99315a Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 4 Aug 2021 13:11:28 -0700 Subject: [PATCH 310/356] Add getWebURL for LibrarySection and library hubs --- plexapi/base.py | 2 +- plexapi/library.py | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/plexapi/base.py b/plexapi/base.py index 22cde2029..9a8e2e544 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -595,7 +595,7 @@ def _buildWebURL(self, base=None, endpoint='details', key='', legacy=False): Photoalbum and Photo use the legacy URL. """ if base is None: - base = 'https://app.plex.tv/desktop' + base = 'https://app.plex.tv/desktop/' params = {'key': key or self.key} if legacy: diff --git a/plexapi/library.py b/plexapi/library.py index d98f684df..94bef71b5 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1456,6 +1456,29 @@ def filterFields(self, mediaType=None): def listChoices(self, category, libtype=None, **kwargs): return self.listFilterChoices(field=category, libtype=libtype) + def getWebURL(self, base=None, tab=None, key=None): + """ Returns the Plex Web URL for the library. + + Parameters: + base (str): The base URL before the fragment (``#!``). + Default is https://app.plex.tv/desktop. + tab (str): The library tab (recommended, library, collections, playlists, timeline). + key (str): A hub key. + """ + if base is None: + base = 'https://app.plex.tv/desktop/' + + params = {'source': self.key} + if tab is not None: + params['pivot'] = tab + if key is not None: + params['key'] = key + params['pageType'] = 'list' + + return '%s#!/media/%s/com.plexapp.plugins.library%s' % ( + base, self._server.machineIdentifier, utils.joinArgs(params) + ) + class MovieSection(LibrarySection): """ Represents a :class:`~plexapi.library.LibrarySection` section containing movies. @@ -1857,6 +1880,7 @@ def _loadData(self, data): self.style = data.attrib.get('style') self.title = data.attrib.get('title') self.type = data.attrib.get('type') + self._section = None # cache for self.section def __len__(self): return self.size @@ -1868,6 +1892,22 @@ def reload(self): self.more = False self.size = len(self.items) + def section(self): + """ Returns the :class:`~plexapi.library.LibrarySection` this hub belongs to. + """ + if self._section is None: + self._section = self._server.library.sectionByID(self.librarySectionID) + return self._section + + def getWebURL(self, base=None): + """ Returns the Plex Web URL for the library. + + Parameters: + base (str): The base URL before the fragment (``#!``). + Default is https://app.plex.tv/desktop. + """ + return self.section().getWebURL(base=base, key=self.key) + class HubMediaTag(PlexObject): """ Base class of hub media tag search results. From e10f96a52959c8ab78640bc284157172cf08bd54 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 4 Aug 2021 13:12:33 -0700 Subject: [PATCH 311/356] Add getPlaylistsWebURL for the server playlists page --- plexapi/server.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/plexapi/server.py b/plexapi/server.py index c31c9a692..b673c2f37 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -890,6 +890,25 @@ def resources(self): key = '/statistics/resources?timespan=6' return self.fetchItems(key, StatisticsResources) + def getPlaylistsWebURL(self, base=None, tab=None): + """ Returns the Plex Web URL for the server playlists page. + + Parameters: + base (str): The base URL before the fragment (``#!``). + Default is https://app.plex.tv/desktop. + tab (str): The playlist tab (audio, video, photo). + """ + if base is None: + base = 'https://app.plex.tv/desktop/' + + params = {'source': 'playlists'} + if tab is not None: + params['pivot'] = 'playlists.%s' % tab + + return '%s#!/media/%s/com.plexapp.plugins.library%s' % ( + base, self._server.machineIdentifier, utils.joinArgs(params) + ) + class Account(PlexObject): """ Contains the locally cached MyPlex account information. The properties provided don't From 3bebeaacd53663f0caf6a31cad03d362cdabb463 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 4 Aug 2021 14:02:01 -0700 Subject: [PATCH 312/356] Add tests for Plex Web URLs --- tests/test_audio.py | 26 ++++++++++++++++++++++++++ tests/test_collection.py | 10 ++++++++++ tests/test_library.py | 26 ++++++++++++++++++++++++++ tests/test_photo.py | 20 ++++++++++++++++++++ tests/test_playlist.py | 15 +++++++++++++++ tests/test_server.py | 13 +++++++++++++ tests/test_video.py | 35 +++++++++++++++++++++++++++++++++++ 7 files changed, 145 insertions(+) diff --git a/tests/test_audio.py b/tests/test_audio.py index 33325a4c5..94c76fc3b 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +from urllib.parse import quote_plus + from . import conftest as utils from . import test_media, test_mixins @@ -103,6 +105,14 @@ def test_audio_Artist_media_tags(artist): test_media.tag_style(artist) +def test_video_Artist_PlexWebURL(plex, artist): + url = artist.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'details' in url + assert quote_plus(artist.key) in url + + def test_audio_Album_attrs(album): assert utils.is_datetime(album.addedAt) if album.art: @@ -196,6 +206,14 @@ def test_audio_Album_media_tags(album): test_media.tag_style(album) +def test_video_Album_PlexWebURL(plex, album): + url = album.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'details' in url + assert quote_plus(album.key) in url + + def test_audio_Track_attrs(album): track = album.get("As Colourful As Ever").reload() assert utils.is_datetime(track.addedAt) @@ -337,6 +355,14 @@ def test_audio_Track_media_tags(track): test_media.tag_mood(track) +def test_video_Track_PlexWebURL(plex, track): + url = track.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'details' in url + assert quote_plus(track.parentKey) in url + + def test_audio_Audio_section(artist, album, track): assert artist.section() assert album.section() diff --git a/tests/test_collection.py b/tests/test_collection.py index 92490359f..52ae5f1a7 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +from urllib.parse import quote_plus + import pytest from plexapi.exceptions import BadRequest, NotFound @@ -283,3 +285,11 @@ def test_Collection_mixins_rating(collection): def test_Collection_mixins_tags(collection): test_mixins.edit_label(collection) + + +def test_Collection_PlexWebURL(plex, collection): + url = collection.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'details' in url + assert quote_plus(collection.key) in url diff --git a/tests/test_library.py b/tests/test_library.py index 66a1df3f1..3a6442ec4 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- from collections import namedtuple from datetime import datetime, timedelta +from urllib.parse import quote_plus + import pytest from plexapi.exceptions import BadRequest, NotFound @@ -212,6 +214,30 @@ def test_library_MovieSection_collection_exception(movies): movies.collection("Does Not Exists") +def test_library_MovieSection_PlexWebURL(plex, movies): + tab = 'library' + url = movies.getWebURL(tab=tab) + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'source=%s' % movies.key in url + assert 'pivot=%s' % tab in url + # Test a different base + base = 'https://doesnotexist.com/plex' + url = movies.getWebURL(base=base) + assert url.startswith(base) + + +def test_library_MovieSection_PlexWebURL_hub(plex, movies): + hubs = movies.hubs() + hub = next(iter(hubs), None) + assert hub is not None + url = hub.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'source=%s' % movies.key in url + assert quote_plus(hub.key) in url + + def test_library_ShowSection_all(tvshows): assert len(tvshows.all(title__iexact="The 100")) diff --git a/tests/test_photo.py b/tests/test_photo.py index 8d282f81d..499948c80 100644 --- a/tests/test_photo.py +++ b/tests/test_photo.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +from urllib.parse import quote_plus + from . import test_media, test_mixins @@ -22,6 +24,15 @@ def test_photo_Photoalbum_mixins_rating(photoalbum): test_mixins.edit_rating(photoalbum) +def test_video_Photoalbum_PlexWebURL(plex, photoalbum): + url = photoalbum.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'details' in url + assert quote_plus(photoalbum.key) in url + assert 'legacy=1' in url + + def test_photo_Photo_mixins_rating(photo): test_mixins.edit_rating(photo) @@ -33,3 +44,12 @@ def test_photo_Photo_mixins_tags(photo): def test_photo_Photo_media_tags(photo): photo.reload() test_media.tag_tag(photo) + + +def test_video_Photo_PlexWebURL(plex, photo): + url = photo.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'details' in url + assert quote_plus(photo.parentKey) in url + assert 'legacy=1' in url diff --git a/tests/test_playlist.py b/tests/test_playlist.py index 92b1204a6..d571c0895 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import time +from urllib.parse import quote_plus import pytest from plexapi.exceptions import BadRequest, NotFound, Unsupported @@ -255,3 +256,17 @@ def test_Playlist_exceptions(plex, movies, movie, artist): playlist.moveItem(movie) finally: playlist.delete() + + +def test_Playlist_PlexWebURL(plex, show): + title = 'test_playlist_plexweburl' + episodes = show.episodes() + playlist = plex.createPlaylist(title, items=episodes[:3]) + try: + url = playlist.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'playlist' in url + assert quote_plus(playlist.key) in url + finally: + playlist.delete() diff --git a/tests/test_server.py b/tests/test_server.py index 4d7eaa17f..c0f8afd9e 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -512,3 +512,16 @@ def test_server_transcode_sessions(plex, requests_mock): assert session.videoCodec in utils.CODECS assert session.videoDecision == "transcode" assert utils.is_int(session.width, gte=852) + + +def test_server_PlaylistsPlexWebURL(plex): + tab = 'audio' + url = plex.getPlaylistsWebURL(tab=tab) + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'source=playlists' in url + assert 'pivot=playlists.%s' % tab in url + # Test a different base + base = 'https://doesnotexist.com/plex' + url = plex.getPlaylistsWebURL(base=base) + assert url.startswith(base) diff --git a/tests/test_video.py b/tests/test_video.py index d919b6b16..b4829d09a 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -608,6 +608,17 @@ def test_video_Movie_extras(movies): assert extra.type == 'clip' assert extra.section() == movies +def test_video_Movie_PlexWebURL(plex, movie): + url = movie.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'details' in url + assert quote_plus(movie.key) in url + # Test a different base + base = 'https://doesnotexist.com/plex' + url = movie.getWebURL(base=base) + assert url.startswith(base) + def test_video_Show_attrs(show): assert utils.is_datetime(show.addedAt) @@ -801,6 +812,14 @@ def test_video_Show_media_tags(show): test_media.tag_similar(show) +def test_video_Show_PlexWebURL(plex, show): + url = show.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'details' in url + assert quote_plus(show.key) in url + + def test_video_Season(show): seasons = show.seasons() assert len(seasons) == 2 @@ -912,6 +931,14 @@ def test_video_Season_mixins_tags(show): test_mixins.edit_collection(season) +def test_video_Season_PlexWebURL(plex, season): + url = season.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'details' in url + assert quote_plus(season.key) in url + + def test_video_Episode_updateProgress(episode, patched_http_call): episode.updateProgress(2 * 60 * 1000) # 2 minutes. @@ -1119,6 +1146,14 @@ def test_video_Episode_media_tags(episode): test_media.tag_writer(episode) +def test_video_Episode_PlexWebURL(plex, episode): + url = episode.getWebURL() + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'details' in url + assert quote_plus(episode.key) in url + + def test_that_reload_return_the_same_object(plex): # we want to check this that all the urls are correct movie_library_search = plex.library.section("Movies").search("Elephants Dream")[0] From 927001006b26ec4f6066991f1d59e3a88030746e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Aug 2021 21:43:07 -0500 Subject: [PATCH 313/356] Bump tqdm from 4.62.0 to 4.62.2 (#817) --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 15586c8f0..4096a1a2e 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -14,5 +14,5 @@ requests==2.26.0 requests-mock==1.9.3 sphinx==4.1.2 sphinx-rtd-theme==0.5.2 -tqdm==4.62.0 +tqdm==4.62.2 websocket-client==1.1.0 From 088b523bbeea8f7cc07a1c546f0839a54ab31e12 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Aug 2021 21:43:50 -0500 Subject: [PATCH 314/356] Bump codecov/codecov-action from 2.0.2 to 2.0.3 (#818) --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 01198fd16..6c1712154 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -251,6 +251,6 @@ jobs: coverage xml - name: Upload ${{ matrix.plex }} coverage to Codecov - uses: codecov/codecov-action@v2.0.2 + uses: codecov/codecov-action@v2.0.3 with: flags: ${{ matrix.plex }} From e13fb27f7c30a37da92e8ae2add17d26e7e3a0b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Aug 2021 21:48:08 -0500 Subject: [PATCH 315/356] Bump websocket-client from 1.1.0 to 1.2.1 (#813) --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 4096a1a2e..4089d7f17 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -15,4 +15,4 @@ requests-mock==1.9.3 sphinx==4.1.2 sphinx-rtd-theme==0.5.2 tqdm==4.62.2 -websocket-client==1.1.0 +websocket-client==1.2.1 From 371b02a54450013dc5eec500421f354c4dd5b03f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Sep 2021 11:24:13 -0500 Subject: [PATCH 316/356] Bump pytest from 6.2.4 to 6.2.5 (#821) --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 4089d7f17..a852ffc1c 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -5,7 +5,7 @@ coveralls==3.2.0 flake8==3.9.2 pillow==8.3.1 -pytest==6.2.4 +pytest==6.2.5 pytest-cache==1.0 pytest-cov==2.12.1 pytest-mock<3.6.2 From 9f9e2350006da3c613a71f5bdee07d2c1181d89f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Sep 2021 11:30:03 -0500 Subject: [PATCH 317/356] Bump pillow from 8.3.1 to 8.3.2 (#824) --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index a852ffc1c..e330f9485 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -4,7 +4,7 @@ #--------------------------------------------------------- coveralls==3.2.0 flake8==3.9.2 -pillow==8.3.1 +pillow==8.3.2 pytest==6.2.5 pytest-cache==1.0 pytest-cov==2.12.1 From 168f1d331c41b02e341512b19934470dc6426960 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 12 Sep 2021 20:53:06 -0400 Subject: [PATCH 318/356] Add attribute for Sonic Analysis (#814) * adding new attribute found in Albums and Tracks when Sonically Analyzed * update docstring and add property hasSonicAnalysis --- plexapi/audio.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plexapi/audio.py b/plexapi/audio.py index bb1dee225..a4d9c27e9 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -28,6 +28,7 @@ class Audio(PlexPartialObject): librarySectionTitle (str): :class:`~plexapi.library.LibrarySection` title. listType (str): Hardcoded as 'audio' (useful for search filters). moods (List<:class:`~plexapi.media.Mood`>): List of mood objects. + musicAnalysisVersion (int): The Plex music analysis version for the item. ratingKey (int): Unique key identifying the item. summary (str): Summary of the artist, album, or track. thumb (str): URL to thumbnail image (/library/metadata//thumb/). @@ -59,6 +60,7 @@ def _loadData(self, data): self.librarySectionTitle = data.attrib.get('librarySectionTitle') self.listType = 'audio' self.moods = self.findItems(data, media.Mood) + self.musicAnalysisVersion = utils.cast(int, data.attrib.get('musicAnalysisVersion')) self.ratingKey = utils.cast(int, data.attrib.get('ratingKey')) self.summary = data.attrib.get('summary') self.thumb = data.attrib.get('thumb') @@ -78,6 +80,11 @@ def _defaultSyncTitle(self): """ Returns str, default title for a new syncItem. """ return self.title + @property + def hasSonicAnalysis(self): + """ Returns True if the audio has been sonically analyzed. """ + return self.musicAnalysisVersion == 1 + def sync(self, bitrate, client=None, clientId=None, limit=None, title=None): """ Add current audio (artist, album or track) as sync item for specified device. See :func:`~plexapi.myplex.MyPlexAccount.sync` for possible exceptions. From 692a23586cce87a79755a2ed11913dc233161689 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 12 Sep 2021 17:56:21 -0700 Subject: [PATCH 319/356] Add methods to lock and unlock artwork and posters (#825) * Add private _edit method * Add fields attribute to playlists * Add lock and unlock methods to art, banner, and poster mixins * Add tests for locking and unlocking art and posters --- plexapi/base.py | 20 +++++++++------ plexapi/mixins.py | 24 ++++++++++++++++++ plexapi/playlist.py | 15 ++++++++---- tests/test_audio.py | 6 ++++- tests/test_collection.py | 2 ++ tests/test_mixins.py | 53 ++++++++++++++++++++++++++++++---------- tests/test_photo.py | 2 ++ tests/test_playlist.py | 4 ++- tests/test_video.py | 10 +++++++- 9 files changed, 107 insertions(+), 29 deletions(-) diff --git a/plexapi/base.py b/plexapi/base.py index bb41f11f0..322a909c9 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -505,6 +505,17 @@ def isPartialObject(self): """ Returns True if this is not a full object. """ return not self.isFullObject() + def _edit(self, **kwargs): + """ Actually edit an object. """ + if 'id' not in kwargs: + kwargs['id'] = self.ratingKey + if 'type' not in kwargs: + kwargs['type'] = utils.searchType(self.type) + + part = '/library/sections/%s/all?%s' % (self.librarySectionID, + urlencode(kwargs)) + self._server.query(part, method=self._server._session.put) + def edit(self, **kwargs): """ Edit an object. @@ -517,14 +528,7 @@ def edit(self, **kwargs): 'collection[0].tag.tag': 'Super', 'collection.locked': 0} """ - if 'id' not in kwargs: - kwargs['id'] = self.ratingKey - if 'type' not in kwargs: - kwargs['type'] = utils.searchType(self.type) - - part = '/library/sections/%s/all?%s' % (self.librarySectionID, - urlencode(kwargs)) - self._server.query(part, method=self._server._session.put) + self._edit(**kwargs) def _edit_tags(self, tag, items, locked=True, remove=False): """ Helper to edit tags. diff --git a/plexapi/mixins.py b/plexapi/mixins.py index b5e7e649c..16c35b1e3 100644 --- a/plexapi/mixins.py +++ b/plexapi/mixins.py @@ -97,6 +97,14 @@ def setArt(self, art): """ art.select() + def lockArt(self): + """ Lock the background artwork for a Plex object. """ + self._edit(**{'art.locked': 1}) + + def unlockArt(self): + """ Unlock the background artwork for a Plex object. """ + self._edit(**{'art.locked': 0}) + class BannerUrlMixin(object): """ Mixin for Plex objects that can have a banner url. """ @@ -138,6 +146,14 @@ def setBanner(self, banner): """ banner.select() + def lockBanner(self): + """ Lock the banner for a Plex object. """ + self._edit(**{'banner.locked': 1}) + + def unlockBanner(self): + """ Unlock the banner for a Plex object. """ + self._edit(**{'banner.locked': 0}) + class PosterUrlMixin(object): """ Mixin for Plex objects that can have a poster url. """ @@ -184,6 +200,14 @@ def setPoster(self, poster): """ poster.select() + def lockPoster(self): + """ Lock the poster for a Plex object. """ + self._edit(**{'thumb.locked': 1}) + + def unlockPoster(self): + """ Unlock the poster for a Plex object. """ + self._edit(**{'thumb.locked': 0}) + class RatingMixin(object): """ Mixin for Plex objects that can have user star ratings. """ diff --git a/plexapi/playlist.py b/plexapi/playlist.py index bac46965c..a4f3daf95 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -2,7 +2,7 @@ import re from urllib.parse import quote_plus, unquote -from plexapi import utils +from plexapi import media, utils from plexapi.base import Playable, PlexPartialObject from plexapi.exceptions import BadRequest, NotFound, Unsupported from plexapi.library import LibrarySection @@ -24,6 +24,7 @@ class Playlist(PlexPartialObject, Playable, ArtMixin, PosterMixin, SmartFilterMi content (str): The filter URI string for smart playlists. duration (int): Duration of the playlist in milliseconds. durationInSeconds (int): Duration of the playlist in seconds. + fields (List<:class:`~plexapi.media.Field`>): List of field objects. guid (str): Plex GUID for the playlist (com.plexapp.agents.none://XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX). icon (str): Icon URI string for smart playlists. key (str): API URL (/playlist/). @@ -48,8 +49,9 @@ def _loadData(self, data): self.content = data.attrib.get('content') self.duration = utils.cast(int, data.attrib.get('duration')) self.durationInSeconds = utils.cast(int, data.attrib.get('durationInSeconds')) - self.icon = data.attrib.get('icon') + self.fields = self.findItems(data, media.Field) self.guid = data.attrib.get('guid') + self.icon = data.attrib.get('icon') self.key = data.attrib.get('key', '').replace('/items', '') # FIX_BUG_50 self.leafCount = utils.cast(int, data.attrib.get('leafCount')) self.playlistType = data.attrib.get('playlistType') @@ -288,6 +290,11 @@ def updateFilters(self, limit=None, sort=None, filters=None, **kwargs): })) self._server.query(key, method=self._server._session.put) + def _edit(self, **kwargs): + """ Actually edit the playlist. """ + key = '%s%s' % (self.key, utils.joinArgs(kwargs)) + self._server.query(key, method=self._server._session.put) + def edit(self, title=None, summary=None): """ Edit the playlist. @@ -300,9 +307,7 @@ def edit(self, title=None, summary=None): args['title'] = title if summary: args['summary'] = summary - - key = '%s%s' % (self.key, utils.joinArgs(args)) - self._server.query(key, method=self._server._session.put) + self._edit(**args) def delete(self): """ Delete the playlist. """ diff --git a/tests/test_audio.py b/tests/test_audio.py index 33325a4c5..bd70a7b30 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -11,7 +11,7 @@ def test_audio_Artist_attr(artist): assert utils.is_art(artist.art) if artist.countries: assert "United States of America" in [i.tag for i in artist.countries] - #assert "Electronic" in [i.tag for i in artist.genres] + # assert "Electronic" in [i.tag for i in artist.genres] assert utils.is_string(artist.guid, gte=5) assert artist.index == 1 assert utils.is_metadata(artist._initpath) @@ -74,6 +74,8 @@ def test_audio_Artist_mixins_edit_advanced_settings(artist): def test_audio_Artist_mixins_images(artist): + test_mixins.lock_art(artist) + test_mixins.lock_poster(artist) test_mixins.edit_art(artist) test_mixins.edit_poster(artist) test_mixins.attr_artUrl(artist) @@ -169,6 +171,8 @@ def test_audio_Album_artist(album): def test_audio_Album_mixins_images(album): + test_mixins.lock_art(album) + test_mixins.lock_poster(album) test_mixins.edit_art(album) test_mixins.edit_poster(album) test_mixins.attr_artUrl(album) diff --git a/tests/test_collection.py b/tests/test_collection.py index 92490359f..cc2c494ad 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -271,6 +271,8 @@ def test_Collection_art(collection): def test_Collection_mixins_images(collection): + test_mixins.lock_art(collection) + test_mixins.lock_poster(collection) test_mixins.edit_art(collection) test_mixins.edit_poster(collection) test_mixins.attr_artUrl(collection) diff --git a/tests/test_mixins.py b/tests/test_mixins.py index 3f6109e9e..acc3d63b7 100644 --- a/tests/test_mixins.py +++ b/tests/test_mixins.py @@ -78,7 +78,34 @@ def edit_writer(obj): _test_mixins_tag(obj, "writers", "Writer") -def _test_mixins_image(obj, attr): +def _test_mixins_lock_image(obj, attr): + cap_attr = attr[:-1].capitalize() + lock_img_method = getattr(obj, "lock" + cap_attr) + unlock_img_method = getattr(obj, "unlock" + cap_attr) + field = "thumb" if attr == 'posters' else attr[:-1] + _fields = lambda: [f.name for f in obj.fields] + assert field not in _fields() + lock_img_method() + obj.reload() + assert field in _fields() + unlock_img_method() + obj.reload() + assert field not in _fields() + + +def lock_art(obj): + _test_mixins_lock_image(obj, "arts") + + +def lock_banner(obj): + _test_mixins_lock_image(obj, "banners") + + +def lock_poster(obj): + _test_mixins_lock_image(obj, "posters") + + +def _test_mixins_edit_image(obj, attr): cap_attr = attr[:-1].capitalize() get_img_method = getattr(obj, attr) set_img_method = getattr(obj, "set" + cap_attr) @@ -106,7 +133,7 @@ def _test_mixins_image(obj, attr): images = get_img_method() file_image = [ i for i in images - if i.ratingKey.startswith('upload://') and i.ratingKey.endswith(CUTE_CAT_SHA1) + if i.ratingKey.startswith("upload://") and i.ratingKey.endswith(CUTE_CAT_SHA1) ] assert file_image # Reset to default image @@ -115,39 +142,39 @@ def _test_mixins_image(obj, attr): def edit_art(obj): - _test_mixins_image(obj, 'arts') + _test_mixins_edit_image(obj, "arts") def edit_banner(obj): - _test_mixins_image(obj, 'banners') + _test_mixins_edit_image(obj, "banners") def edit_poster(obj): - _test_mixins_image(obj, 'posters') + _test_mixins_edit_image(obj, "posters") def _test_mixins_imageUrl(obj, attr): - url = getattr(obj, attr + 'Url') + url = getattr(obj, attr + "Url") if getattr(obj, attr): assert url.startswith(utils.SERVER_BASEURL) assert "/library/metadata/" in url or "/library/collections/" in url assert attr in url or "composite" in url - if attr == 'thumb': - assert getattr(obj, 'posterUrl') == url + if attr == "thumb": + assert getattr(obj, "posterUrl") == url else: assert url is None def attr_artUrl(obj): - _test_mixins_imageUrl(obj, 'art') + _test_mixins_imageUrl(obj, "art") def attr_bannerUrl(obj): - _test_mixins_imageUrl(obj, 'banner') + _test_mixins_imageUrl(obj, "banner") def attr_posterUrl(obj): - _test_mixins_imageUrl(obj, 'thumb') + _test_mixins_imageUrl(obj, "thumb") def _test_mixins_editAdvanced(obj): @@ -163,7 +190,7 @@ def _test_mixins_editAdvanced(obj): def _test_mixins_editAdvanced_bad_pref(obj): with pytest.raises(NotFound): - assert obj.preference('bad-pref') + assert obj.preference("bad-pref") def _test_mixins_defaultAdvanced(obj): @@ -188,7 +215,7 @@ def edit_rating(obj): obj.reload() assert obj.userRating is None with pytest.raises(BadRequest): - assert obj.rate('bad-rating') + assert obj.rate("bad-rating") with pytest.raises(BadRequest): assert obj.rate(-1) with pytest.raises(BadRequest): diff --git a/tests/test_photo.py b/tests/test_photo.py index 8d282f81d..e60b733f4 100644 --- a/tests/test_photo.py +++ b/tests/test_photo.py @@ -12,6 +12,8 @@ def test_photo_Photoalbum(photoalbum): def test_photo_Photoalbum_mixins_images(photoalbum): + # test_mixins.lock_art(photoalbum) # Unlocking photoalbum artwork is broken in Plex + # test_mixins.lock_poster(photoalbum) # Unlocking photoalbum poster is broken in Plex test_mixins.edit_art(photoalbum) test_mixins.edit_poster(photoalbum) test_mixins.attr_artUrl(photoalbum) diff --git a/tests/test_playlist.py b/tests/test_playlist.py index 53ecec3c1..5bc96cd4f 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -259,5 +259,7 @@ def test_Playlist_exceptions(plex, movies, movie, artist): def test_Playlist_mixins_images(playlist): - #test_mixins.edit_art(playlist) + # test_mixins.lock_art(playlist) + test_mixins.lock_poster(playlist) + # test_mixins.edit_art(playlist) test_mixins.edit_poster(playlist) diff --git a/tests/test_video.py b/tests/test_video.py index d919b6b16..f883cd6d0 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -45,6 +45,8 @@ def test_video_Movie_mixins_edit_advanced_settings(movie): def test_video_Movie_mixins_images(movie): + test_mixins.lock_art(movie) + test_mixins.lock_poster(movie) test_mixins.edit_art(movie) test_mixins.edit_poster(movie) @@ -776,6 +778,8 @@ def test_video_Show_mixins_edit_advanced_settings(show): @pytest.mark.xfail(reason="Changing show art fails randomly") def test_video_Show_mixins_images(show): + test_mixins.lock_art(show) + test_mixins.lock_poster(show) test_mixins.edit_art(show) test_mixins.edit_poster(show) test_mixins.attr_artUrl(show) @@ -896,6 +900,8 @@ def test_video_Season_episodes(show): def test_video_Season_mixins_images(show): season = show.season(season=1) + test_mixins.lock_art(season) + test_mixins.lock_poster(season) test_mixins.edit_art(season) test_mixins.edit_poster(season) test_mixins.attr_artUrl(season) @@ -1096,7 +1102,9 @@ def test_video_Episode_unwatched(tvshows): def test_video_Episode_mixins_images(episode): - #test_mixins.edit_art(episode) # Uploading episode artwork is broken in Plex + test_mixins.lock_art(episode) + test_mixins.lock_poster(episode) + # test_mixins.edit_art(episode) # Uploading episode artwork is broken in Plex test_mixins.edit_poster(episode) test_mixins.attr_artUrl(episode) test_mixins.attr_posterUrl(episode) From b8cef9dc1225c491f086b6dd1eecaf52314ff2af Mon Sep 17 00:00:00 2001 From: jjlawren Date: Sun, 12 Sep 2021 19:59:23 -0500 Subject: [PATCH 320/356] Update version handling and add helper script (#806) * Update version handling and add helper script * Remove typing hints * Address review, add tag argument --- plexapi/__init__.py | 3 +- plexapi/const.py | 9 ++++ setup.py | 8 +--- tools/version_bump.py | 106 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 119 insertions(+), 7 deletions(-) create mode 100644 plexapi/const.py create mode 100755 tools/version_bump.py diff --git a/plexapi/__init__.py b/plexapi/__init__.py index f53692cfc..06a1ee63c 100644 --- a/plexapi/__init__.py +++ b/plexapi/__init__.py @@ -6,6 +6,7 @@ from uuid import getnode from plexapi.config import PlexConfig, reset_base_headers +import plexapi.const as const from plexapi.utils import SecretsFilter # Load User Defined Config @@ -15,7 +16,7 @@ # PlexAPI Settings PROJECT = 'PlexAPI' -VERSION = '4.7.0' +VERSION = __version__ = const.__version__ TIMEOUT = CONFIG.get('plexapi.timeout', 30, int) X_PLEX_CONTAINER_SIZE = CONFIG.get('plexapi.container_size', 100, int) X_PLEX_ENABLE_FAST_CONNECT = CONFIG.get('plexapi.enable_fast_connect', False, bool) diff --git a/plexapi/const.py b/plexapi/const.py new file mode 100644 index 000000000..47cf44147 --- /dev/null +++ b/plexapi/const.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +"""Constants used by plexapi.""" + +# Library version +MAJOR_VERSION = 4 +MINOR_VERSION = 7 +PATCH_VERSION = 0 +__short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" +__version__ = f"{__short_version__}.{PATCH_VERSION}" diff --git a/setup.py b/setup.py index 19c40a0e4..3f6029ece 100644 --- a/setup.py +++ b/setup.py @@ -9,11 +9,7 @@ except ImportError: from distutils.core import setup -# Get the current version -with open('plexapi/__init__.py') as handle: - for line in handle.readlines(): - if line.startswith('VERSION'): - version = re.findall("'([0-9\.]+?)'", line)[0] +from plexapi import const # Get README.rst contents readme = open('README.rst', 'r').read() @@ -28,7 +24,7 @@ setup( name='PlexAPI', - version=version, + version=const.__version__, description='Python bindings for the Plex API.', author='Michael Shepanski', author_email='michael.shepanski@gmail.com', diff --git a/tools/version_bump.py b/tools/version_bump.py new file mode 100755 index 000000000..6abee5098 --- /dev/null +++ b/tools/version_bump.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""Helper script to bump the current version.""" +import argparse +import re +import subprocess + +from packaging.version import Version + +from plexapi import const + +SUPPORTED_BUMP_TYPES = ["patch", "minor", "major"] + + +def _bump_release(release, bump_type): + """Return a bumped release tuple consisting of 3 numbers.""" + major, minor, patch = release + + if bump_type == "patch": + patch += 1 + elif bump_type == "minor": + minor += 1 + patch = 0 + elif bump_type == "major": + major += 1 + minor = 0 + patch = 0 + + return major, minor, patch + + +def bump_version(version, bump_type): + """Return a new version given a current version and action.""" + new_release = _bump_release(version.release, bump_type) + temp = Version("0") + temp._version = version._version._replace(release=new_release) + return Version(str(temp)) + + +def write_version(version): + """Update plexapi constant file with new version.""" + with open("plexapi/const.py") as f: + content = f.read() + + version_names = ["MAJOR", "MINOR", "PATCH"] + version_values = str(version).split(".", 2) + + for n, v in zip(version_names, version_values): + version_line = f"{n}_VERSION = " + content = re.sub(f"{version_line}.*\n", f"{version_line}{v}\n", content) + + with open("plexapi/const.py", "wt") as f: + content = f.write(content) + + +def main(): + """Execute script.""" + parser = argparse.ArgumentParser(description="Bump version of plexapi") + parser.add_argument( + "bump_type", + help="The type of version bump to perform", + choices=SUPPORTED_BUMP_TYPES, + ) + parser.add_argument( + "--commit", action="store_true", help="Create a version bump commit" + ) + parser.add_argument( + "--tag", action="store_true", help="Tag the commit with the release version" + ) + arguments = parser.parse_args() + + if arguments.tag and not arguments.commit: + parser.error("--tag requires use of --commit") + + if arguments.commit and subprocess.run(["git", "diff", "--quiet"]).returncode == 1: + print("Cannot use --commit because git is dirty") + return + + current = Version(const.__version__) + bumped = bump_version(current, arguments.bump_type) + assert bumped > current, "Bumped version is not newer than old version" + + write_version(bumped) + + if not arguments.commit: + return + + subprocess.run(["git", "commit", "-nam", f"Release {bumped}"]) + + if arguments.tag: + subprocess.run(["git", "tag", str(bumped), "-m", f"Release {bumped}"]) + +def test_bump_version(): + """Make sure it all works.""" + import pytest + + assert bump_version(Version("4.7.0"), "patch") == Version("4.7.1") + assert bump_version(Version("4.7.0"), "minor") == Version("4.8.0") + assert bump_version(Version("4.7.3"), "minor") == Version("4.8.0") + assert bump_version(Version("4.7.0"), "major") == Version("5.0.0") + assert bump_version(Version("4.7.3"), "major") == Version("5.0.0") + assert bump_version(Version("5.0.0"), "major") == Version("6.0.0") + + +if __name__ == "__main__": + main() From 69739d6f2a2e6140e58220a6e6432d4cfdc9a94c Mon Sep 17 00:00:00 2001 From: jjlawren Date: Sun, 12 Sep 2021 20:51:18 -0500 Subject: [PATCH 321/356] Fix PMS timeline reporting on clients when using playMedia (#826) --- plexapi/client.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plexapi/client.py b/plexapi/client.py index 1d45c3f1e..56f522d22 100644 --- a/plexapi/client.py +++ b/plexapi/client.py @@ -511,7 +511,9 @@ def playMedia(self, media, offset=0, **params): playqueue = media if isinstance(media, PlayQueue) else self._server.createPlayQueue(media) self.sendCommand('playback/playMedia', **dict({ + 'providerIdentifier': 'com.plexapp.plugins.library', 'machineIdentifier': self._server.machineIdentifier, + 'protocol': server_url[0], 'address': server_url[1].strip('/'), 'port': server_port, 'offset': offset, From a50875afd6d034ae60832680c7b441a2a35e92b2 Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Sun, 12 Sep 2021 20:55:59 -0500 Subject: [PATCH 322/356] Release 4.7.1 --- plexapi/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/const.py b/plexapi/const.py index 47cf44147..4cb4c9f1d 100644 --- a/plexapi/const.py +++ b/plexapi/const.py @@ -4,6 +4,6 @@ # Library version MAJOR_VERSION = 4 MINOR_VERSION = 7 -PATCH_VERSION = 0 +PATCH_VERSION = 1 __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" From 9c5aa088f3f24865ecdbed02bbe14dfeb4c9f163 Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Sun, 12 Sep 2021 21:29:56 -0500 Subject: [PATCH 323/356] Fix PyPI action dependency --- .github/workflows/pypi.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml index f6f33db44..bd257aed3 100644 --- a/.github/workflows/pypi.yml +++ b/.github/workflows/pypi.yml @@ -26,6 +26,7 @@ jobs: - name: Install dependencies and build run: | pip install -U pip + pip install -r requirements.txt pip install setuptools wheel python setup.py sdist bdist_wheel From 118717e60b24bf6e2a5ecebe5dafffedf16af73b Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Sun, 12 Sep 2021 22:02:49 -0500 Subject: [PATCH 324/356] Add workflow_dispatch to PyPI action --- .github/workflows/pypi.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml index bd257aed3..50f291c67 100644 --- a/.github/workflows/pypi.yml +++ b/.github/workflows/pypi.yml @@ -4,6 +4,7 @@ name: PyPI on: + workflow_dispatch: ~ release: types: [published] From bc6afebed975417f82d5bd7db02ef92c2a3a4483 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 15 Sep 2021 10:50:55 -0700 Subject: [PATCH 325/356] Add includeGuids parameter when retrieving library results --- plexapi/library.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index d98f684df..c546d7037 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -457,7 +457,7 @@ def get(self, title): Parameters: title (str): Title of the item to return. """ - key = '/library/sections/%s/all?title=%s' % (self.key, quote(title, safe='')) + key = '/library/sections/%s/all?includeGuids=1&title=%s' % (self.key, quote(title, safe='')) return self.fetchItem(key, title__iexact=title) def all(self, libtype=None, **kwargs): @@ -979,6 +979,8 @@ def _buildSearchKey(self, title=None, sort=None, libtype=None, limit=None, filte """ args = {} filter_args = [] + + args['includeGuids'] = int(bool(kwargs.pop('includeGuids', True))) for field, values in list(kwargs.items()): if field.split('__')[-1] not in OPERATORS: filter_args.append(self._validateFilterField(field, values, libtype)) From 4d6cffdbd1402e3819571474ede742c0718c855e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 15 Sep 2021 12:58:03 -0700 Subject: [PATCH 326/356] Add test for LibrarySection.all() returning guids --- tests/test_library.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/test_library.py b/tests/test_library.py index 66a1df3f1..6ebc14824 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -2,6 +2,7 @@ from collections import namedtuple from datetime import datetime, timedelta import pytest +import plexapi.base from plexapi.exceptions import BadRequest, NotFound from . import conftest as utils @@ -58,6 +59,19 @@ def test_library_section_movies_all(movies): assert len(movies.all(container_start=0, container_size=1, maxresults=1)) == 1 +def test_library_section_movies_all_guids(movies): + plexapi.base.USER_DONT_RELOAD_FOR_KEYS.add('guids') + try: + results = movies.all(includeGuids=False) + assert results[0].guids == [] + results = movies.all() + assert results[0].guids + movie = movies.get("Sita Sings the Blues") + assert movie.guids + finally: + plexapi.base.USER_DONT_RELOAD_FOR_KEYS.remove('guids') + + def test_library_section_totalViewSize(tvshows): assert tvshows.totalViewSize() == 2 assert tvshows.totalViewSize(libtype="show") == 2 From 842ec8ac428c6845fb74e477174af510bcb625dd Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 15 Sep 2021 12:38:48 -0700 Subject: [PATCH 327/356] Add includeGuids when parsing smart filters --- plexapi/mixins.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plexapi/mixins.py b/plexapi/mixins.py index 16c35b1e3..af5d1da5e 100644 --- a/plexapi/mixins.py +++ b/plexapi/mixins.py @@ -601,7 +601,9 @@ def _parseFilters(self, content): key += '=' value = value[1:] - if key == 'type': + if key == 'includeGuids': + filters['includeGuids'] = int(value) + elif key == 'type': filters['libtype'] = utils.reverseSearchType(value) elif key == 'sort': filters['sort'] = value.split(',') From 222fe04a0829fad0a65227c04d92ec4a31dca118 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:46:57 -0700 Subject: [PATCH 328/356] Add method to get media item using a guid --- plexapi/library.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/plexapi/library.py b/plexapi/library.py index c546d7037..cd269ee5a 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -460,6 +460,17 @@ def get(self, title): key = '/library/sections/%s/all?includeGuids=1&title=%s' % (self.key, quote(title, safe='')) return self.fetchItem(key, title__iexact=title) + def getGuid(self, guid): + """ Returns the media item with the specified external IMDB, TMDB, or TVDB ID. + Note: This search uses a PlexAPI operator so performance may be slow. + + Parameters: + guid (str): The external guid of the item to return. + Examples: IMDB ``imdb://tt0944947``, TMDB ``tmdb://1399``, TVDB ``tvdb://121361``. + """ + key = '/library/sections/%s/all?includeGuids=1' % self.key + return self.fetchItem(key, Guid__id__iexact=guid) + def all(self, libtype=None, **kwargs): """ Returns a list of all items from this library section. See description of :func:`~plexapi.library.LibrarySection.search()` for details about filtering / sorting. From 046b2ec66d0e69f10ea49d696ddb523a14072ace Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:36:04 -0700 Subject: [PATCH 329/356] Add test for getting and item using a guid --- tests/test_library.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_library.py b/tests/test_library.py index 6ebc14824..7dd8200bb 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -53,6 +53,11 @@ def test_library_section_get_movie(movies): assert movies.get("Sita Sings the Blues") +def test_library_MovieSection_getGuid(movies, movie): + result = movies.getGuid(guid=movie.guids[0].id) + assert result == movie + + def test_library_section_movies_all(movies): # size should always be none unless pagenation is being used. assert movies.totalSize == 4 From 65d538c97637aecb27bff9e5a9dc5a05f60c087e Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:37:07 -0700 Subject: [PATCH 330/356] Update doc string for get and getGuid with raises exception --- plexapi/library.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plexapi/library.py b/plexapi/library.py index cd269ee5a..5a5ea7bd9 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -456,6 +456,9 @@ def get(self, title): Parameters: title (str): Title of the item to return. + + Raises: + :exc:`~plexapi.exceptions.NotFound`: The title is not found in the library. """ key = '/library/sections/%s/all?includeGuids=1&title=%s' % (self.key, quote(title, safe='')) return self.fetchItem(key, title__iexact=title) @@ -467,6 +470,9 @@ def getGuid(self, guid): Parameters: guid (str): The external guid of the item to return. Examples: IMDB ``imdb://tt0944947``, TMDB ``tmdb://1399``, TVDB ``tvdb://121361``. + + Raises: + :exc:`~plexapi.exceptions.NotFound`: The guid is not found in the library. """ key = '/library/sections/%s/all?includeGuids=1' % self.key return self.fetchItem(key, Guid__id__iexact=guid) From 607d4b0fafef596646c396bb010777c5223e9d6d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 16 Sep 2021 15:03:46 -0700 Subject: [PATCH 331/356] Add album format and subformat tags --- plexapi/audio.py | 4 ++++ plexapi/media.py | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/plexapi/audio.py b/plexapi/audio.py index a4d9c27e9..760d88e03 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -234,6 +234,7 @@ class Album(Audio, ArtMixin, PosterMixin, RatingMixin, UnmatchMatchMixin, TAG (str): 'Directory' TYPE (str): 'album' collections (List<:class:`~plexapi.media.Collection`>): List of collection objects. + formats (List<:class:`~plexapi.media.Format`>): List of format objects. genres (List<:class:`~plexapi.media.Genre`>): List of genre objects. key (str): API URL (/library/metadata/). labels (List<:class:`~plexapi.media.Label`>): List of label objects. @@ -248,6 +249,7 @@ class Album(Audio, ArtMixin, PosterMixin, RatingMixin, UnmatchMatchMixin, rating (float): Album rating (7.9; 9.8; 8.1). studio (str): Studio that released the album. styles (List<:class:`~plexapi.media.Style`>): List of style objects. + subformats (List<:class:`~plexapi.media.Subformat`>): List of subformat objects. viewedLeafCount (int): Number of items marked as played in the album view. year (int): Year the album was released. """ @@ -258,6 +260,7 @@ def _loadData(self, data): """ Load attribute values from Plex XML response. """ Audio._loadData(self, data) self.collections = self.findItems(data, media.Collection) + self.formats = self.findItems(data, media.Format) self.genres = self.findItems(data, media.Genre) self.key = self.key.replace('/children', '') # FIX_BUG_50 self.labels = self.findItems(data, media.Label) @@ -272,6 +275,7 @@ def _loadData(self, data): self.rating = utils.cast(float, data.attrib.get('rating')) self.studio = data.attrib.get('studio') self.styles = self.findItems(data, media.Style) + self.subformats = self.findItems(data, media.Subformat) self.viewedLeafCount = utils.cast(int, data.attrib.get('viewedLeafCount')) self.year = utils.cast(int, data.attrib.get('year')) diff --git a/plexapi/media.py b/plexapi/media.py index addc3fdfb..0fa961d78 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -731,6 +731,18 @@ class Director(MediaTag): FILTER = 'director' +@utils.registerPlexObject +class Format(MediaTag): + """ Represents a single Format media tag. + + Attributes: + TAG (str): 'Format' + FILTER (str): 'format' + """ + TAG = 'Format' + FILTER = 'format' + + @utils.registerPlexObject class Genre(MediaTag): """ Represents a single Genre media tag. @@ -815,6 +827,18 @@ class Style(MediaTag): FILTER = 'style' +@utils.registerPlexObject +class Subformat(MediaTag): + """ Represents a single Subformat media tag. + + Attributes: + TAG (str): 'Subformat' + FILTER (str): 'subformat' + """ + TAG = 'Subformat' + FILTER = 'subformat' + + @utils.registerPlexObject class Tag(MediaTag): """ Represents a single Tag media tag. From 1efe0a908d4824d6e3461c475bb937e5afc4c0e8 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Thu, 16 Sep 2021 15:23:59 -0700 Subject: [PATCH 332/356] Update audio tests --- tests/test_audio.py | 22 +++++++++++++++++++--- tests/test_library.py | 8 ++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/tests/test_audio.py b/tests/test_audio.py index bd70a7b30..bbd9df320 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -1,4 +1,7 @@ # -*- coding: utf-8 -*- +import pytest +from plexapi.exceptions import BadRequest + from . import conftest as utils from . import test_media, test_mixins @@ -36,9 +39,9 @@ def test_audio_Artist_attr(artist): assert utils.is_int(artist.viewCount, gte=0) -def test_audio_Artist_get(artist, music): - artist == music.searchArtists(**{"title": "Broke For Free"})[0] - artist.title == "Broke For Free" +def test_audio_Artist_get(artist): + track = artist.get(album="Layers", title="As Colourful as Ever") + assert track.title == "As Colourful as Ever" def test_audio_Artist_history(artist): @@ -52,6 +55,8 @@ def test_audio_Artist_track(artist): track = artist.track(album="Layers", track=1) assert track.parentTitle == "Layers" assert track.index == 1 + with pytest.raises(BadRequest): + artist.track() def test_audio_Artist_tracks(artist): @@ -69,6 +74,11 @@ def test_audio_Artist_albums(artist): assert len(albums) == 1 and albums[0].title == "Layers" +def test_audio_Artist_hubs(artist): + hubs = artist.hubs() + assert isinstance(hubs, list) + + def test_audio_Artist_mixins_edit_advanced_settings(artist): test_mixins.edit_advanced_settings(artist) @@ -109,6 +119,7 @@ def test_audio_Album_attrs(album): assert utils.is_datetime(album.addedAt) if album.art: assert utils.is_art(album.art) + assert isinstance(album.formats, list) assert isinstance(album.genres, list) assert album.index == 1 assert utils.is_metadata(album._initpath) @@ -126,6 +137,7 @@ def test_audio_Album_attrs(album): assert album.ratingKey >= 1 assert album._server._baseurl == utils.SERVER_BASEURL assert album.studio == "[no label]" + assert isinstance(album.subformats, list) assert album.summary == "" if album.thumb: assert utils.is_thumb(album.thumb) @@ -157,6 +169,8 @@ def test_audio_Album_track(album, track=None): track = track or album.track("As Colourful As Ever") track2 = album.track(track=1) assert track == track2 + with pytest.raises(BadRequest): + album.track() def test_audio_Album_get(album): @@ -215,6 +229,7 @@ def test_audio_Track_attrs(album): assert utils.is_thumb(track.grandparentThumb) assert track.grandparentTitle == "Broke For Free" assert track.guid.startswith("mbid://") or track.guid.startswith("plex://track/") + assert track.hasSonicAnalysis is False assert track.index == 1 assert track.trackNumber == track.index assert utils.is_metadata(track._initpath) @@ -253,6 +268,7 @@ def test_audio_Track_attrs(album): assert track.viewOffset == 0 assert track.viewedAt is None assert track.year is None + assert track.url(None) is None assert media.aspectRatio is None assert media.audioChannels == 2 assert media.audioCodec == "mp3" diff --git a/tests/test_library.py b/tests/test_library.py index 66a1df3f1..83a443ecd 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -261,14 +261,18 @@ def test_library_MusicSection_albums(music): assert len(music.albums()) -def test_library_MusicSection_searchTracks(music): - assert len(music.searchTracks(title="As Colourful As Ever")) +def test_library_MusicSection_searchArtists(music): + assert len(music.searchArtists(title="Broke for Free")) def test_library_MusicSection_searchAlbums(music): assert len(music.searchAlbums(title="Layers")) +def test_library_MusicSection_searchTracks(music): + assert len(music.searchTracks(title="As Colourful As Ever")) + + def test_library_MusicSection_recentlyAdded(music, artist): album = artist.albums()[0] track = album.tracks()[0] From ae4b4d7ce495d6612fc6718aaff03a74834be762 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Tue, 21 Sep 2021 09:33:37 -0700 Subject: [PATCH 333/356] Fix typo in lyric streams doc string --- plexapi/media.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/media.py b/plexapi/media.py index 0fa961d78..82766e77a 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -174,7 +174,7 @@ def subtitleStreams(self): return [stream for stream in self.streams if isinstance(stream, SubtitleStream)] def lyricStreams(self): - """ Returns a list of :class:`~plexapi.media.SubtitleStream` objects in this MediaPart. """ + """ Returns a list of :class:`~plexapi.media.LyricStream` objects in this MediaPart. """ return [stream for stream in self.streams if isinstance(stream, LyricStream)] def setDefaultAudioStream(self, stream): From 49ce2f9bb4ae3f63c856ea7f690f128a4052e320 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 26 Sep 2021 15:23:09 -0700 Subject: [PATCH 334/356] Refactor getWebURL --- plexapi/audio.py | 11 +++-------- plexapi/base.py | 29 ++++++----------------------- plexapi/library.py | 17 +---------------- plexapi/photo.py | 22 ++++++---------------- plexapi/playlist.py | 11 +++-------- plexapi/server.py | 35 ++++++++++++++++++++++++++--------- 6 files changed, 45 insertions(+), 80 deletions(-) diff --git a/plexapi/audio.py b/plexapi/audio.py index f6701cc54..7761d6dbb 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -416,11 +416,6 @@ def _defaultSyncTitle(self): """ Returns str, default title for a new syncItem. """ return '%s - %s - %s' % (self.grandparentTitle, self.parentTitle, self.title) - def getWebURL(self, base=None): - """ Returns the Plex Web URL for the track's album. - - Parameters: - base (str): The base URL before the fragment (``#!``). - Default is https://app.plex.tv/desktop. - """ - return self._buildWebURL(base=base, key=self.parentKey) + def _getWebURL(self, base=None): + """ Get the Plex Web URL with the correct parameters. """ + return self._server._buildWebURL(base=base, endpoint='details', key=self.parentKey) diff --git a/plexapi/base.py b/plexapi/base.py index 9a8e2e544..b6f0af6a9 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -582,37 +582,20 @@ def history(self, maxresults=9999999, mindate=None): """ return self._server.history(maxresults=maxresults, mindate=mindate, ratingKey=self.ratingKey) - def _buildWebURL(self, base=None, endpoint='details', key='', legacy=False): - """ Build the Plex Web URL for the item. - - Parameters: - base (str): The base URL before the fragment (``#!``). - Default is https://app.plex.tv/desktop. - endpoint (str): The Plex Web URL endpoint. - 'playlist' for playlists, 'details' for all other media types. - key (str): The Plex API URL for the item (/library/metadata/). - legacy (bool): True or False to use the legacy URL. - Photoalbum and Photo use the legacy URL. + def _getWebURL(self, base=None): + """ Get the Plex Web URL with the correct parameters. + Private method to allow overriding parameters from subclasses. """ - if base is None: - base = 'https://app.plex.tv/desktop/' - - params = {'key': key or self.key} - if legacy: - params['legacy'] = 1 - - return '%s#!/server/%s/%s%s' % ( - base, self._server.machineIdentifier, endpoint, utils.joinArgs(params) - ) + return self._server._buildWebURL(base=base, endpoint='details', key=self.key) def getWebURL(self, base=None): - """ Returns the Plex Web URL for the item. + """ Returns the Plex Web URL for a media item. Parameters: base (str): The base URL before the fragment (``#!``). Default is https://app.plex.tv/desktop. """ - return self._buildWebURL(base=base) + return self._getWebURL(base=base) class Playable(object): diff --git a/plexapi/library.py b/plexapi/library.py index 94bef71b5..928877846 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -1465,19 +1465,13 @@ def getWebURL(self, base=None, tab=None, key=None): tab (str): The library tab (recommended, library, collections, playlists, timeline). key (str): A hub key. """ - if base is None: - base = 'https://app.plex.tv/desktop/' - params = {'source': self.key} if tab is not None: params['pivot'] = tab if key is not None: params['key'] = key params['pageType'] = 'list' - - return '%s#!/media/%s/com.plexapp.plugins.library%s' % ( - base, self._server.machineIdentifier, utils.joinArgs(params) - ) + return self._server._buildWebURL(base=base, **params) class MovieSection(LibrarySection): @@ -1899,15 +1893,6 @@ def section(self): self._section = self._server.library.sectionByID(self.librarySectionID) return self._section - def getWebURL(self, base=None): - """ Returns the Plex Web URL for the library. - - Parameters: - base (str): The base URL before the fragment (``#!``). - Default is https://app.plex.tv/desktop. - """ - return self.section().getWebURL(base=base, key=self.key) - class HubMediaTag(PlexObject): """ Base class of hub media tag search results. diff --git a/plexapi/photo.py b/plexapi/photo.py index 008a97e19..6a60db811 100644 --- a/plexapi/photo.py +++ b/plexapi/photo.py @@ -137,14 +137,9 @@ def download(self, savepath=None, keep_original_name=False, showstatus=False): filepaths.append(filepath) return filepaths - def getWebURL(self, base=None): - """ Returns the Plex Web URL for the photoalbum. - - Parameters: - base (str): The base URL before the fragment (``#!``). - Default is https://app.plex.tv/desktop. - """ - return self._buildWebURL(base=base, legacy=True) + def _getWebURL(self, base=None): + """ Get the Plex Web URL with the correct parameters. """ + return self._server._buildWebURL(base=base, endpoint='details', key=self.key, legacy=1) @utils.registerPlexObject @@ -311,11 +306,6 @@ def download(self, savepath=None, keep_original_name=False, showstatus=False): filepaths.append(filepath) return filepaths - def getWebURL(self, base=None): - """ Returns the Plex Web URL for the photo's photoalbum. - - Parameters: - base (str): The base URL before the fragment (``#!``). - Default is https://app.plex.tv/desktop. - """ - return self._buildWebURL(base=base, key=self.parentKey, legacy=True) + def _getWebURL(self, base=None): + """ Get the Plex Web URL with the correct parameters. """ + return self._server._buildWebURL(base=base, endpoint='details', key=self.parentKey, legacy=1) diff --git a/plexapi/playlist.py b/plexapi/playlist.py index 3bb189137..c0510e5e7 100644 --- a/plexapi/playlist.py +++ b/plexapi/playlist.py @@ -460,11 +460,6 @@ def sync(self, videoQuality=None, photoResolution=None, audioBitrate=None, clien return myplex.sync(sync_item, client=client, clientId=clientId) - def getWebURL(self, base=None): - """ Returns the Plex Web URL for the playlist. - - Parameters: - base (str): The base URL before the fragment (``#!``). - Default is https://app.plex.tv/desktop. - """ - return self._buildWebURL(base=base, endpoint='playlist') + def _getWebURL(self, base=None): + """ Get the Plex Web URL with the correct parameters. """ + return self._server._buildWebURL(base=base, endpoint='playlist', key=self.key) diff --git a/plexapi/server.py b/plexapi/server.py index b673c2f37..5c0beaeda 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -890,24 +890,41 @@ def resources(self): key = '/statistics/resources?timespan=6' return self.fetchItems(key, StatisticsResources) - def getPlaylistsWebURL(self, base=None, tab=None): - """ Returns the Plex Web URL for the server playlists page. + def _buildWebURL(self, base=None, endpoint=None, **kwargs): + """ Build the Plex Web URL for the object. Parameters: base (str): The base URL before the fragment (``#!``). Default is https://app.plex.tv/desktop. - tab (str): The playlist tab (audio, video, photo). + endpoint (str): The Plex Web URL endpoint. + None for server, 'playlist' for playlists, 'details' for all other media types. + **kwargs (dict): Dictionary of URL parameters. """ if base is None: base = 'https://app.plex.tv/desktop/' - params = {'source': 'playlists'} - if tab is not None: - params['pivot'] = 'playlists.%s' % tab + if endpoint: + return '%s#!/server/%s/%s%s' % ( + base, self.machineIdentifier, endpoint, utils.joinArgs(kwargs) + ) + else: + return '%s#!/media/%s/com.plexapp.plugins.library%s' % ( + base, self.machineIdentifier, utils.joinArgs(kwargs) + ) + + def getWebURL(self, base=None, playlistTab=None): + """ Returns the Plex Web URL for the server. - return '%s#!/media/%s/com.plexapp.plugins.library%s' % ( - base, self._server.machineIdentifier, utils.joinArgs(params) - ) + Parameters: + base (str): The base URL before the fragment (``#!``). + Default is https://app.plex.tv/desktop. + playlistTab (str): The playlist tab (audio, video, photo). Only used for the playlist URL. + """ + if playlistTab is not None: + params = {'source': 'playlists', 'pivot': 'playlists.%s' % playlistTab} + else: + params = {'key': '/hubs', 'pageType': 'hub'} + return self._buildWebURL(base=base, **params) class Account(PlexObject): From 516c8ed02fad607157a5a3026820fb66c92d53da Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 26 Sep 2021 15:23:18 -0700 Subject: [PATCH 335/356] Update Plex Web URL tests --- tests/test_library.py | 2 +- tests/test_server.py | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/tests/test_library.py b/tests/test_library.py index 3a6442ec4..92205007b 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -231,7 +231,7 @@ def test_library_MovieSection_PlexWebURL_hub(plex, movies): hubs = movies.hubs() hub = next(iter(hubs), None) assert hub is not None - url = hub.getWebURL() + url = hub.section().getWebURL(key=hub.key) assert url.startswith('https://app.plex.tv/desktop') assert plex.machineIdentifier in url assert 'source=%s' % movies.key in url diff --git a/tests/test_server.py b/tests/test_server.py index c0f8afd9e..a6b364969 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import re import time +from urllib.parse import quote_plus import pytest from datetime import datetime @@ -514,14 +515,22 @@ def test_server_transcode_sessions(plex, requests_mock): assert utils.is_int(session.width, gte=852) -def test_server_PlaylistsPlexWebURL(plex): - tab = 'audio' - url = plex.getPlaylistsWebURL(tab=tab) +def test_server_PlexWebURL(plex): + url = plex.getWebURL() assert url.startswith('https://app.plex.tv/desktop') assert plex.machineIdentifier in url - assert 'source=playlists' in url - assert 'pivot=playlists.%s' % tab in url + assert quote_plus('/hubs') in url + assert 'pageType=hub' in url # Test a different base base = 'https://doesnotexist.com/plex' - url = plex.getPlaylistsWebURL(base=base) + url = plex.getWebURL(base=base) assert url.startswith(base) + + +def test_server_PlexWebURL_playlists(plex): + tab = 'audio' + url = plex.getWebURL(playlistTab=tab) + assert url.startswith('https://app.plex.tv/desktop') + assert plex.machineIdentifier in url + assert 'source=playlists' in url + assert 'pivot=playlists.%s' % tab in url From 105a1569803dfb82f3c3e642ea6b805f9bc42589 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 26 Sep 2021 19:04:26 -0700 Subject: [PATCH 336/356] Add example to getGuid doc string --- plexapi/library.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/plexapi/library.py b/plexapi/library.py index 5a5ea7bd9..79c94027c 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -465,7 +465,9 @@ def get(self, title): def getGuid(self, guid): """ Returns the media item with the specified external IMDB, TMDB, or TVDB ID. - Note: This search uses a PlexAPI operator so performance may be slow. + Note: This search uses a PlexAPI operator so performance may be slow. All items from the + entire Plex library need to be retrieved for each guid search. It is recommended to create + your own lookup dictionary if you are searching for a lot of external guids. Parameters: guid (str): The external guid of the item to return. @@ -473,6 +475,22 @@ def getGuid(self, guid): Raises: :exc:`~plexapi.exceptions.NotFound`: The guid is not found in the library. + + Example: + + .. code-block:: python + + # This will retrieve all items in the entire library 3 times + result1 = library.getGuid('imdb://tt0944947') + result2 = library.getGuid('tmdb://1399') + result3 = library.getGuid('tvdb://121361') + + # This will only retrieve all items in the library once to create a lookup dictionary + guidLookup = {guid.id: item for item in library.all() for guid in item.guids} + result1 = guidLookup['imdb://tt0944947'] + result2 = guidLookup['tmdb://1399'] + result3 = guidLookup['tvdb://121361'] + """ key = '/library/sections/%s/all?includeGuids=1' % self.key return self.fetchItem(key, Guid__id__iexact=guid) From 31c679fd1d1c10d5b243dec73e4d0513b43ec664 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Oct 2021 10:57:50 -0700 Subject: [PATCH 337/356] Bump sphinx from 4.1.2 to 4.2.0 (#828) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 4.1.2 to 4.2.0. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/4.x/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v4.1.2...v4.2.0) --- updated-dependencies: - dependency-name: sphinx dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index e330f9485..a4b3cb290 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -12,7 +12,7 @@ pytest-mock<3.6.2 recommonmark==0.7.1 requests==2.26.0 requests-mock==1.9.3 -sphinx==4.1.2 +sphinx==4.2.0 sphinx-rtd-theme==0.5.2 tqdm==4.62.2 websocket-client==1.2.1 From 94278ff3d94ed0e06ad5d7d807e52b3d9be2cf16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Oct 2021 11:16:58 -0700 Subject: [PATCH 338/356] Bump sphinx-rtd-theme from 0.5.2 to 1.0.0 (#829) Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 0.5.2 to 1.0.0. - [Release notes](https://github.com/readthedocs/sphinx_rtd_theme/releases) - [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst) - [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/0.5.2...1.0.0) --- updated-dependencies: - dependency-name: sphinx-rtd-theme dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index a4b3cb290..ff9e19dd6 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -13,6 +13,6 @@ recommonmark==0.7.1 requests==2.26.0 requests-mock==1.9.3 sphinx==4.2.0 -sphinx-rtd-theme==0.5.2 +sphinx-rtd-theme==1.0.0 tqdm==4.62.2 websocket-client==1.2.1 From f421544ce7ecd4b1d459cde8e675e692670c4fff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Oct 2021 11:31:23 -0700 Subject: [PATCH 339/356] Bump tqdm from 4.62.2 to 4.62.3 (#833) Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.62.2 to 4.62.3. - [Release notes](https://github.com/tqdm/tqdm/releases) - [Commits](https://github.com/tqdm/tqdm/compare/v4.62.2...v4.62.3) --- updated-dependencies: - dependency-name: tqdm dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index ff9e19dd6..f7880926e 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -14,5 +14,5 @@ requests==2.26.0 requests-mock==1.9.3 sphinx==4.2.0 sphinx-rtd-theme==1.0.0 -tqdm==4.62.2 +tqdm==4.62.3 websocket-client==1.2.1 From ed707040bcfae69e5f894b00f001d932dd4e3fdd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Oct 2021 12:05:34 -0700 Subject: [PATCH 340/356] Bump pytest-cov from 2.12.1 to 3.0.0 (#838) Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 2.12.1 to 3.0.0. - [Release notes](https://github.com/pytest-dev/pytest-cov/releases) - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v2.12.1...v3.0.0) --- updated-dependencies: - dependency-name: pytest-cov dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index f7880926e..a657289cb 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -7,7 +7,7 @@ flake8==3.9.2 pillow==8.3.2 pytest==6.2.5 pytest-cache==1.0 -pytest-cov==2.12.1 +pytest-cov==3.0.0 pytest-mock<3.6.2 recommonmark==0.7.1 requests==2.26.0 From 26648f68606e739d06b0eb7428e43a94ecb1c7cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Oct 2021 12:26:46 -0700 Subject: [PATCH 341/356] Bump codecov/codecov-action from 2.0.3 to 2.1.0 (#830) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 2.0.3 to 2.1.0. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v2.0.3...v2.1.0) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6c1712154..bedf08ef1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -251,6 +251,6 @@ jobs: coverage xml - name: Upload ${{ matrix.plex }} coverage to Codecov - uses: codecov/codecov-action@v2.0.3 + uses: codecov/codecov-action@v2.1.0 with: flags: ${{ matrix.plex }} From 09730b5dc2a19e5d3b13134a8ddad3a10d08192b Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 4 Oct 2021 16:08:45 -0700 Subject: [PATCH 342/356] Release 4.7.2 --- plexapi/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexapi/const.py b/plexapi/const.py index 4cb4c9f1d..cb518feb2 100644 --- a/plexapi/const.py +++ b/plexapi/const.py @@ -4,6 +4,6 @@ # Library version MAJOR_VERSION = 4 MINOR_VERSION = 7 -PATCH_VERSION = 1 +PATCH_VERSION = 2 __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" From d036c404efe1f218188fea1a03150ba17063164c Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 10 Oct 2021 11:23:24 -0700 Subject: [PATCH 343/356] Update bug report template to issues form (#839) --- .github/ISSUE_TEMPLATE/BUG_REPORT.yml | 66 +++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/bug_report.md | 32 ------------- 2 files changed, 66 insertions(+), 32 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/BUG_REPORT.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml new file mode 100644 index 000000000..81e7700a7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT.yml @@ -0,0 +1,66 @@ +name: Bug Report +description: Create a bug report to help us improve. +body: + - type: markdown + attributes: + value: > + **THIS IS NOT THE PLACE TO ASK FOR SUPPORT!** + Please use [Discord](https://discord.gg/GtAnnZAkuw) for support issues. + - type: textarea + id: description + attributes: + label: Describe the Bug + description: A clear and concise description of the bug. + validations: + required: true + - type: textarea + id: code + attributes: + label: Code Snippets + description: > + Add a code snippet that can be used to reproduce the bug. + This will be automatically formatted into code, so no need for backticks. + render: python + - type: textarea + id: expected + attributes: + label: Expected Behavior + description: A clear and concise description of what you expected to happen. + - type: textarea + id: additional + attributes: + label: Additional Context + description: Add any other context about the bug here. + - type: input + id: os + attributes: + label: Operating System and Version + placeholder: eg. Windows 10, macOS 10.15, Ubuntu 20.04, etc. + validations: + required: true + - type: input + id: plex + attributes: + label: Plex Media Server Version + description: Check Plex Server > Settings (not Plex Web) > General. + placeholder: eg. 1.24.4.5081 + validations: + required: true + - type: input + id: python + attributes: + label: Python Version + placeholder: eg. 3.7.10 + validations: + required: true + - type: input + id: plexapi + attributes: + label: PlexAPI Version + placeholder: eg. 4.7.2 + validations: + required: true + - type: markdown + attributes: + value: | + Make sure to close your issue when it's solved! If you found the solution yourself please comment so that others benefit from it. diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index a342e427c..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Bug Report -about: Create a bug report to help us improve. -title: '' -labels: '' -assignees: '' - ---- - -**Describe the issue** - -A clear and concise description the issue. - -**Code snippets** - -Add code snippet to help explain your problem. - - please use markdown [Code and Syntax Highlighting](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#code-and-syntax-highlighting) for code snippet - -**Expected behavior** - -A clear and concise description of what you expected to happen. - -**Enviroment (please complete the following information):** - - - OS: [e.g. Linux, Windows, Docker] - - Plex version [eg. version 1.21.1.3830] - - Python Version [e.g. 3.7.8] - - PlexAPI version [e.g. 4.3.0] - -**Additional context** - -Add any other context about the issue here. From 1c2bc0af7997baf71d2dc6629bfb89af3c3ba3b0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Nov 2021 12:53:22 -0800 Subject: [PATCH 344/356] Bump flake8 from 3.9.2 to 4.0.1 (#842) Bumps [flake8](https://github.com/pycqa/flake8) from 3.9.2 to 4.0.1. - [Release notes](https://github.com/pycqa/flake8/releases) - [Commits](https://github.com/pycqa/flake8/compare/3.9.2...4.0.1) --- updated-dependencies: - dependency-name: flake8 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index a657289cb..4b12397ff 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -3,7 +3,7 @@ # pip install -r requirements_dev.txt #--------------------------------------------------------- coveralls==3.2.0 -flake8==3.9.2 +flake8==4.0.1 pillow==8.3.2 pytest==6.2.5 pytest-cache==1.0 From d6ee141820b02fec36fa86668e5bd57599e20237 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Nov 2021 13:12:06 -0800 Subject: [PATCH 345/356] Bump pillow from 8.3.2 to 8.4.0 (#843) Bumps [pillow](https://github.com/python-pillow/Pillow) from 8.3.2 to 8.4.0. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/master/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/8.3.2...8.4.0) --- updated-dependencies: - dependency-name: pillow dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 4b12397ff..e1ef75dc9 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -4,7 +4,7 @@ #--------------------------------------------------------- coveralls==3.2.0 flake8==4.0.1 -pillow==8.3.2 +pillow==8.4.0 pytest==6.2.5 pytest-cache==1.0 pytest-cov==3.0.0 From d40886bf6753d3bff3751eea3c0ccbfb24dd80b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Nov 2021 13:18:05 -0800 Subject: [PATCH 346/356] Bump sphinx from 4.2.0 to 4.3.0 (#853) Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 4.2.0 to 4.3.0. - [Release notes](https://github.com/sphinx-doc/sphinx/releases) - [Changelog](https://github.com/sphinx-doc/sphinx/blob/4.x/CHANGES) - [Commits](https://github.com/sphinx-doc/sphinx/compare/v4.2.0...v4.3.0) --- updated-dependencies: - dependency-name: sphinx dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index e1ef75dc9..d6e64a6bc 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -12,7 +12,7 @@ pytest-mock<3.6.2 recommonmark==0.7.1 requests==2.26.0 requests-mock==1.9.3 -sphinx==4.2.0 +sphinx==4.3.0 sphinx-rtd-theme==1.0.0 tqdm==4.62.3 websocket-client==1.2.1 From 3e1ce1c968dbf12926d01d487f51b4047da9a6d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 20 Nov 2021 13:20:29 -0800 Subject: [PATCH 347/356] Bump coveralls from 3.2.0 to 3.3.1 (#854) Bumps [coveralls](https://github.com/TheKevJames/coveralls-python) from 3.2.0 to 3.3.1. - [Release notes](https://github.com/TheKevJames/coveralls-python/releases) - [Changelog](https://github.com/TheKevJames/coveralls-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/TheKevJames/coveralls-python/compare/3.2.0...3.3.1) --- updated-dependencies: - dependency-name: coveralls dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index d6e64a6bc..6b2d9cc3b 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -2,7 +2,7 @@ # PlexAPI requirements to run py.test. # pip install -r requirements_dev.txt #--------------------------------------------------------- -coveralls==3.2.0 +coveralls==3.3.1 flake8==4.0.1 pillow==8.4.0 pytest==6.2.5 From 34a42185ac56bf073f1511e6457ade259096746c Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 20 Nov 2021 13:53:00 -0800 Subject: [PATCH 348/356] Update server transcodeImage method (#845) * Update server transcodeImage method * Update server transcodeImage tests --- plexapi/server.py | 45 ++++++++++++++++++++++++++++-------- tests/test_server.py | 55 ++++++++++++++++++++++++++++++++++++-------- 2 files changed, 81 insertions(+), 19 deletions(-) diff --git a/plexapi/server.py b/plexapi/server.py index 5c0beaeda..ab359b3f6 100644 --- a/plexapi/server.py +++ b/plexapi/server.py @@ -734,21 +734,46 @@ def startAlertListener(self, callback=None): notifier.start() return notifier - def transcodeImage(self, media, height, width, opacity=100, saturation=100): - """ Returns the URL for a transcoded image from the specified media object. - Returns None if no media specified (needed if user tries to pass thumb - or art directly). + def transcodeImage(self, imageUrl, height, width, + opacity=None, saturation=None, blur=None, background=None, + minSize=True, upscale=True, imageFormat=None): + """ Returns the URL for a transcoded image. Parameters: + imageUrl (str): The URL to the image + (eg. returned by :func:`~plexapi.mixins.PosterUrlMixin.thumbUrl` + or :func:`~plexapi.mixins.ArtUrlMixin.artUrl`). + The URL can be an online image. height (int): Height to transcode the image to. width (int): Width to transcode the image to. - opacity (int): Opacity of the resulting image (possibly deprecated). - saturation (int): Saturating of the resulting image. + opacity (int, optional): Change the opacity of the image (0 to 100) + saturation (int, optional): Change the saturation of the image (0 to 100). + blur (int, optional): The blur to apply to the image in pixels (e.g. 3). + background (str, optional): The background hex colour to apply behind the opacity (e.g. '000000'). + minSize (bool, optional): Maintain smallest dimension. Default True. + upscale (bool, optional): Upscale the image if required. Default True. + imageFormat (str, optional): 'jpeg' (default) or 'png'. """ - if media: - transcode_url = '/photo/:/transcode?height=%s&width=%s&opacity=%s&saturation=%s&url=%s' % ( - height, width, opacity, saturation, media) - return self.url(transcode_url, includeToken=True) + params = { + 'url': imageUrl, + 'height': height, + 'width': width, + 'minSize': int(bool(minSize)), + 'upscale': int(bool(upscale)) + } + if opacity is not None: + params['opacity'] = opacity + if saturation is not None: + params['saturation'] = saturation + if blur is not None: + params['blur'] = blur + if background is not None: + params['background'] = str(background).strip('#') + if imageFormat is not None: + params['format'] = imageFormat.lower() + + key = '/photo/:/transcode%s' % utils.joinArgs(params) + return self.url(key, includeToken=True) def url(self, key, includeToken=None): """ Build a URL string with proper token argument. Token will be appended to the URL diff --git a/tests/test_server.py b/tests/test_server.py index a6b364969..f30f4ad8e 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -60,24 +60,52 @@ def test_server_url(plex): def test_server_transcodeImage(tmpdir, plex, movie): - width, height = 500, 500 - original_url = plex.url(movie.thumb) - resize_url = plex.transcodeImage(movie.thumb, height, width) - grayscale_url = plex.transcodeImage(movie.thumb, height, width, saturation=0) + width, height = 500, 100 + background = "000000" + + original_url = movie.thumbUrl + resize_jpeg_url = plex.transcodeImage(original_url, height, width) + no_minSize_png_url = plex.transcodeImage(original_url, height, width, minSize=False, imageFormat="png") + grayscale_url = plex.transcodeImage(original_url, height, width, saturation=0) + opacity_background_url = plex.transcodeImage(original_url, height, width, opacity=0, background=background, blur=100) + online_no_upscale_url = plex.transcodeImage( + "https://raw.githubusercontent.com/pkkid/python-plexapi/master/tests/data/cute_cat.jpg", 1000, 1000, upscale=False) + original_img = download( original_url, plex._token, savepath=str(tmpdir), filename="original_img", ) - resized_img = download( - resize_url, plex._token, savepath=str(tmpdir), filename="resize_image" + resized_jpeg_img = download( + resize_jpeg_url, plex._token, savepath=str(tmpdir), filename="resized_jpeg_img" + ) + no_minSize_png_img = download( + no_minSize_png_url, plex._token, savepath=str(tmpdir), filename="no_minSize_png_img" ) grayscale_img = download( grayscale_url, plex._token, savepath=str(tmpdir), filename="grayscale_img" ) - with Image.open(resized_img) as image: - assert width, height == image.size + opacity_background_img = download( + opacity_background_url, plex._token, savepath=str(tmpdir), filename="opacity_background_img" + ) + online_no_upscale_img = download( + online_no_upscale_url, plex._token, savepath=str(tmpdir), filename="online_no_upscale_img" + ) + with Image.open(original_img) as image: - assert width, height != image.size + assert image.size[0] != width + assert image.size[1] != height + with Image.open(resized_jpeg_img) as image: + assert image.size[0] == width + assert image.size[1] != height + assert image.format == "JPEG" + with Image.open(no_minSize_png_img) as image: + assert image.size[0] != width + assert image.size[1] == height + assert image.format == "PNG" assert _detect_color_image(grayscale_img, thumb_size=150) == "grayscale" + assert _detect_dominant_hexcolor(opacity_background_img) == background + with Image.open(online_no_upscale_img) as image1: + with Image.open(utils.STUB_IMAGE_PATH) as image2: + assert image1.size == image2.size def _detect_color_image(file, thumb_size=150, MSE_cutoff=22, adjust_color_bias=True): @@ -101,6 +129,15 @@ def _detect_color_image(file, thumb_size=150, MSE_cutoff=22, adjust_color_bias=T return "blackandwhite" +def _detect_dominant_hexcolor(file): + # https://stackoverflow.com/questions/3241929/python-find-dominant-most-common-color-in-an-image + pilimg = Image.open(file) + pilimg.convert("RGB") + pilimg.resize((1, 1), resample=0) + rgb_color = pilimg.getpixel((0, 0)) + return "{:02x}{:02x}{:02x}".format(*rgb_color) + + def test_server_fetchitem_notfound(plex): with pytest.raises(NotFound): plex.fetchItem(123456789) From 01131c95cf46423d5780416569743fb4944ea8c5 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 20 Nov 2021 14:16:58 -0800 Subject: [PATCH 349/356] Cleanup download methods (#847) * Add utils.cleanFilename * Refactor download methods * Add option to download episodes, tracks, photos into subfolders * Update download tests * Test download keep_original_filename --- plexapi/audio.py | 41 ++++++++++++--------------- plexapi/base.py | 52 ++++++++++++++++++++++------------ plexapi/photo.py | 69 +++++++++++---------------------------------- plexapi/utils.py | 9 ++++++ plexapi/video.py | 54 +++++++++++------------------------ tests/test_audio.py | 28 ++++++++++-------- tests/test_photo.py | 21 ++++++++++++-- tests/test_utils.py | 4 +-- tests/test_video.py | 33 +++++++++++++--------- 9 files changed, 150 insertions(+), 161 deletions(-) diff --git a/plexapi/audio.py b/plexapi/audio.py index 20a70ffa0..656b9250a 100644 --- a/plexapi/audio.py +++ b/plexapi/audio.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import os from urllib.parse import quote_plus from plexapi import library, media, utils @@ -205,23 +206,20 @@ def get(self, title=None, album=None, track=None): """ Alias of :func:`~plexapi.audio.Artist.track`. """ return self.track(title, album, track) - def download(self, savepath=None, keep_original_name=False, **kwargs): - """ Downloads all tracks for the artist to the specified location. + def download(self, savepath=None, keep_original_name=False, subfolders=False, **kwargs): + """ Download all tracks from the artist. See :func:`~plexapi.base.Playable.download` for details. Parameters: - savepath (str): Title of the track to return. - keep_original_name (bool): Set True to keep the original filename as stored in - the Plex server. False will create a new filename with the format - " - ". - kwargs (dict): If specified, a :func:`~plexapi.audio.Track.getStreamURL` will - be returned and the additional arguments passed in will be sent to that - function. If kwargs is not specified, the media items will be downloaded - and saved to disk. + savepath (str): Defaults to current working dir. + keep_original_name (bool): True to keep the original filename otherwise + a friendlier filename is generated. + subfolders (bool): True to separate tracks in to album folders. + **kwargs: Additional options passed into :func:`~plexapi.base.PlexObject.getStreamURL`. """ filepaths = [] - for album in self.albums(): - for track in album.tracks(): - filepaths += track.download(savepath, keep_original_name, **kwargs) + for track in self.tracks(): + _savepath = os.path.join(savepath, track.parentTitle) if subfolders else savepath + filepaths += track.download(_savepath, keep_original_name, **kwargs) return filepaths @@ -314,17 +312,13 @@ def artist(self): return self.fetchItem(self.parentKey) def download(self, savepath=None, keep_original_name=False, **kwargs): - """ Downloads all tracks for the artist to the specified location. + """ Download all tracks from the album. See :func:`~plexapi.base.Playable.download` for details. Parameters: - savepath (str): Title of the track to return. - keep_original_name (bool): Set True to keep the original filename as stored in - the Plex server. False will create a new filename with the format - " - ". - kwargs (dict): If specified, a :func:`~plexapi.audio.Track.getStreamURL` will - be returned and the additional arguments passed in will be sent to that - function. If kwargs is not specified, the media items will be downloaded - and saved to disk. + savepath (str): Defaults to current working dir. + keep_original_name (bool): True to keep the original filename otherwise + a friendlier filename is generated. + **kwargs: Additional options passed into :func:`~plexapi.base.PlexObject.getStreamURL`. """ filepaths = [] for track in self.tracks(): @@ -398,7 +392,8 @@ def _loadData(self, data): def _prettyfilename(self): """ Returns a filename for use in download. """ - return '%s - %s %s' % (self.grandparentTitle, self.parentTitle, self.title) + return '%s - %s - %s - %s' % ( + self.grandparentTitle, self.parentTitle, str(self.trackNumber).zfill(2), self.title) def album(self): """ Return the track's :class:`~plexapi.audio.Album`. """ diff --git a/plexapi/base.py b/plexapi/base.py index ab1bef44d..94bfe2ad5 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -681,34 +681,50 @@ def play(self, client): client.playMedia(self) def download(self, savepath=None, keep_original_name=False, **kwargs): - """ Downloads this items media to the specified location. Returns a list of + """ Downloads the media item to the specified location. Returns a list of filepaths that have been saved to disk. Parameters: - savepath (str): Title of the track to return. - keep_original_name (bool): Set True to keep the original filename as stored in - the Plex server. False will create a new filename with the format - " - ". - kwargs (dict): If specified, a :func:`~plexapi.audio.Track.getStreamURL` will - be returned and the additional arguments passed in will be sent to that - function. If kwargs is not specified, the media items will be downloaded - and saved to disk. + savepath (str): Defaults to current working dir. + keep_original_name (bool): True to keep the original filename otherwise + a friendlier filename is generated. See filenames below. + **kwargs (dict): Additional options passed into :func:`~plexapi.audio.Track.getStreamURL` + to download a transcoded stream, otherwise the media item will be downloaded + as-is and saved to disk. + + **Filenames** + + * Movie: `` (<year>)`` + * Episode: ``<show title> - s00e00 - <episode title>`` + * Track: ``<artist title> - <album title> - 00 - <track title>`` + * Photo: ``<photoalbum title> - <photo/clip title>`` or ``<photo/clip title>`` """ filepaths = [] - locations = [i for i in self.iterParts() if i] - for location in locations: - filename = location.file - if keep_original_name is False: - filename = '%s.%s' % (self._prettyfilename(), location.container) - # So this seems to be a alot slower but allows transcode. + parts = [i for i in self.iterParts() if i] + + for part in parts: + if not keep_original_name: + filename = utils.cleanFilename('%s.%s' % (self._prettyfilename(), part.container)) + else: + filename = part.file + if kwargs: + # So this seems to be a alot slower but allows transcode. download_url = self.getStreamURL(**kwargs) else: - download_url = self._server.url('%s?download=1' % location.key) - filepath = utils.download(download_url, self._server._token, filename=filename, - savepath=savepath, session=self._server._session) + download_url = self._server.url('%s?download=1' % part.key) + + filepath = utils.download( + download_url, + self._server._token, + filename=filename, + savepath=savepath, + session=self._server._session + ) + if filepath: filepaths.append(filepath) + return filepaths def stop(self, reason=''): diff --git a/plexapi/photo.py b/plexapi/photo.py index 6a60db811..c24d7fb16 100644 --- a/plexapi/photo.py +++ b/plexapi/photo.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import os from urllib.parse import quote_plus from plexapi import media, utils, video @@ -107,34 +108,21 @@ def get(self, title): """ Alias to :func:`~plexapi.photo.Photoalbum.photo`. """ return self.episode(title) - def iterParts(self): - """ Iterates over the parts of the media item. """ - for album in self.albums(): - for photo in album.photos(): - for part in photo.iterParts(): - yield part - - def download(self, savepath=None, keep_original_name=False, showstatus=False): - """ Download photo files to specified directory. + def download(self, savepath=None, keep_original_name=False, subfolders=False): + """ Download all photos and clips from the photo ablum. See :func:`~plexapi.base.Playable.download` for details. Parameters: savepath (str): Defaults to current working dir. - keep_original_name (bool): True to keep the original file name otherwise - a friendlier is generated. - showstatus(bool): Display a progressbar. + keep_original_name (bool): True to keep the original filename otherwise + a friendlier filename is generated. + subfolders (bool): True to separate photos/clips in to photo album folders. """ filepaths = [] - locations = [i for i in self.iterParts() if i] - for location in locations: - name = location.file - if not keep_original_name: - title = self.title.replace(' ', '.') - name = '%s.%s' % (title, location.container) - url = self._server.url('%s?download=1' % location.key) - filepath = utils.download(url, self._server._token, filename=name, showstatus=showstatus, - savepath=savepath, session=self._server._session) - if filepath: - filepaths.append(filepath) + for album in self.albums(): + _savepath = os.path.join(savepath, album.title) if subfolders else savepath + filepaths += album.download(_savepath, keep_original_name) + for photo in self.photos() + self.clips(): + filepaths += photo.download(savepath, keep_original_name) return filepaths def _getWebURL(self, base=None): @@ -218,6 +206,12 @@ def _loadData(self, data): self.userRating = utils.cast(float, data.attrib.get('userRating')) self.year = utils.cast(int, data.attrib.get('year')) + def _prettyfilename(self): + """ Returns a filename for use in download. """ + if self.parentTitle: + return '%s - %s' % (self.parentTitle, self.title) + return self.title + def photoalbum(self): """ Return the photo's :class:`~plexapi.photo.Photoalbum`. """ return self.fetchItem(self.parentKey) @@ -241,12 +235,6 @@ def locations(self): """ return [part.file for item in self.media for part in item.parts if part] - def iterParts(self): - """ Iterates over the parts of the media item. """ - for item in self.media: - for part in item.parts: - yield part - def sync(self, resolution, client=None, clientId=None, limit=None, title=None): """ Add current photo as sync item for specified device. See :func:`~plexapi.myplex.MyPlexAccount.sync` for possible exceptions. @@ -283,29 +271,6 @@ def sync(self, resolution, client=None, clientId=None, limit=None, title=None): return myplex.sync(sync_item, client=client, clientId=clientId) - def download(self, savepath=None, keep_original_name=False, showstatus=False): - """ Download photo files to specified directory. - - Parameters: - savepath (str): Defaults to current working dir. - keep_original_name (bool): True to keep the original file name otherwise - a friendlier is generated. - showstatus(bool): Display a progressbar. - """ - filepaths = [] - locations = [i for i in self.iterParts() if i] - for location in locations: - name = location.file - if not keep_original_name: - title = self.title.replace(' ', '.') - name = '%s.%s' % (title, location.container) - url = self._server.url('%s?download=1' % location.key) - filepath = utils.download(url, self._server._token, filename=name, showstatus=showstatus, - savepath=savepath, session=self._server._session) - if filepath: - filepaths.append(filepath) - return filepaths - def _getWebURL(self, base=None): """ Get the Plex Web URL with the correct parameters. """ return self._server._buildWebURL(base=base, endpoint='details', key=self.parentKey, legacy=1) diff --git a/plexapi/utils.py b/plexapi/utils.py index 310200f69..92d642993 100644 --- a/plexapi/utils.py +++ b/plexapi/utils.py @@ -4,7 +4,9 @@ import logging import os import re +import string import time +import unicodedata import warnings import zipfile from datetime import datetime @@ -251,6 +253,13 @@ def toList(value, itemcast=None, delim=','): return [itemcast(item) for item in value.split(delim) if item != ''] +def cleanFilename(filename, replace='_'): + whitelist = "-_.()[] {}{}".format(string.ascii_letters, string.digits) + cleaned_filename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore').decode() + cleaned_filename = ''.join(c if c in whitelist else replace for c in cleaned_filename) + return cleaned_filename + + def downloadSessionImages(server, filename=None, height=150, width=150, opacity=100, saturation=100): # pragma: no cover """ Helper to download a bif image or thumb.url from plex.server.sessions. diff --git a/plexapi/video.py b/plexapi/video.py index 090d9502b..4049d6c53 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -357,8 +357,8 @@ def hasPreviewThumbnails(self): return any(part.hasPreviewThumbnails for media in self.media for part in media.parts) def _prettyfilename(self): - # This is just for compat. - return self.title + """ Returns a filename for use in download. """ + return '%s (%s)' % (self.title, self.year) def reviews(self): """ Returns a list of :class:`~plexapi.media.Review` objects. """ @@ -375,32 +375,6 @@ def hubs(self): data = self._server.query(self._details_key) return self.findItems(data, library.Hub, rtag='Related') - def download(self, savepath=None, keep_original_name=False, **kwargs): - """ Download video files to specified directory. - - Parameters: - savepath (str): Defaults to current working dir. - keep_original_name (bool): True to keep the original file name otherwise - a friendlier is generated. - **kwargs: Additional options passed into :func:`~plexapi.base.PlexObject.getStreamURL`. - """ - filepaths = [] - locations = [i for i in self.iterParts() if i] - for location in locations: - name = location.file - if not keep_original_name: - title = self.title.replace(' ', '.') - name = '%s.%s' % (title, location.container) - if kwargs is not None: - url = self.getStreamURL(**kwargs) - else: - self._server.url('%s?download=1' % location.key) - filepath = utils.download(url, self._server._token, filename=name, - savepath=savepath, session=self._server._session) - if filepath: - filepaths.append(filepath) - return filepaths - @utils.registerPlexObject class Show(Video, AdvancedSettingsMixin, ArtMixin, BannerMixin, PosterMixin, RatingMixin, SplitMergeMixin, UnmatchMatchMixin, @@ -582,18 +556,20 @@ def unwatched(self): """ Returns list of unwatched :class:`~plexapi.video.Episode` objects. """ return self.episodes(viewCount=0) - def download(self, savepath=None, keep_original_name=False, **kwargs): - """ Download video files to specified directory. + def download(self, savepath=None, keep_original_name=False, subfolders=False, **kwargs): + """ Download all episodes from the show. See :func:`~plexapi.base.Playable.download` for details. Parameters: savepath (str): Defaults to current working dir. - keep_original_name (bool): True to keep the original file name otherwise - a friendlier is generated. + keep_original_name (bool): True to keep the original filename otherwise + a friendlier filename is generated. + subfolders (bool): True to separate episodes in to season folders. **kwargs: Additional options passed into :func:`~plexapi.base.PlexObject.getStreamURL`. """ filepaths = [] for episode in self.episodes(): - filepaths += episode.download(savepath, keep_original_name, **kwargs) + _savepath = os.path.join(savepath, 'Season %s' % str(episode.seasonNumber).zfill(2)) if subfolders else savepath + filepaths += episode.download(_savepath, keep_original_name, **kwargs) return filepaths @@ -714,12 +690,12 @@ def unwatched(self): return self.episodes(viewCount=0) def download(self, savepath=None, keep_original_name=False, **kwargs): - """ Download video files to specified directory. + """ Download all episodes from the season. See :func:`~plexapi.base.Playable.download` for details. Parameters: savepath (str): Defaults to current working dir. - keep_original_name (bool): True to keep the original file name otherwise - a friendlier is generated. + keep_original_name (bool): True to keep the original filename otherwise + a friendlier filename is generated. **kwargs: Additional options passed into :func:`~plexapi.base.PlexObject.getStreamURL`. """ filepaths = [] @@ -839,8 +815,8 @@ def __repr__(self): ] if p]) def _prettyfilename(self): - """ Returns a human friendly filename. """ - return '%s.%s' % (self.grandparentTitle.replace(' ', '.'), self.seasonEpisode) + """ Returns a filename for use in download. """ + return '%s - %s - %s' % (self.grandparentTitle, self.seasonEpisode, self.title) @property def actors(self): @@ -953,6 +929,7 @@ def locations(self): return [part.file for part in self.iterParts() if part] def _prettyfilename(self): + """ Returns a filename for use in download. """ return self.title @@ -968,4 +945,5 @@ def _loadData(self, data): self.librarySectionTitle = parent.librarySectionTitle def _prettyfilename(self): + """ Returns a filename for use in download. """ return '%s (%s)' % (self.title, self.subtype) diff --git a/tests/test_audio.py b/tests/test_audio.py index 356afa954..0c873a566 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -117,7 +117,7 @@ def test_audio_Artist_media_tags(artist): test_media.tag_style(artist) -def test_video_Artist_PlexWebURL(plex, artist): +def test_audio_Artist_PlexWebURL(plex, artist): url = artist.getWebURL() assert url.startswith('https://app.plex.tv/desktop') assert plex.machineIdentifier in url @@ -224,7 +224,7 @@ def test_audio_Album_media_tags(album): test_media.tag_style(album) -def test_video_Album_PlexWebURL(plex, album): +def test_audio_Album_PlexWebURL(plex, album): url = album.getWebURL() assert url.startswith('https://app.plex.tv/desktop') assert plex.machineIdentifier in url @@ -375,7 +375,7 @@ def test_audio_Track_media_tags(track): test_media.tag_mood(track) -def test_video_Track_PlexWebURL(plex, track): +def test_audio_Track_PlexWebURL(plex, track): url = track.getWebURL() assert url.startswith('https://app.plex.tv/desktop') assert plex.machineIdentifier in url @@ -390,16 +390,20 @@ def test_audio_Audio_section(artist, album, track): assert track.section().key == album.section().key == artist.section().key -def test_audio_Track_download(monkeydownload, tmpdir, track): - f = track.download(savepath=str(tmpdir)) - assert f +def test_audio_Artist_download(monkeydownload, tmpdir, artist): + total = len(artist.tracks()) + filepaths = artist.download(savepath=str(tmpdir)) + assert len(filepaths) == total + subfolders = artist.download(savepath=str(tmpdir), subfolders=True) + assert len(subfolders) == total -def test_audio_album_download(monkeydownload, album, tmpdir): - f = album.download(savepath=str(tmpdir)) - assert len(f) == 1 +def test_audio_Album_download(monkeydownload, tmpdir, album): + total = len(album.tracks()) + filepaths = album.download(savepath=str(tmpdir)) + assert len(filepaths) == total -def test_audio_Artist_download(monkeydownload, artist, tmpdir): - f = artist.download(savepath=str(tmpdir)) - assert len(f) == 1 +def test_audio_Track_download(monkeydownload, tmpdir, track): + filepaths = track.download(savepath=str(tmpdir)) + assert len(filepaths) == 1 diff --git a/tests/test_photo.py b/tests/test_photo.py index 1ca422db8..b0d36753a 100644 --- a/tests/test_photo.py +++ b/tests/test_photo.py @@ -26,7 +26,7 @@ def test_photo_Photoalbum_mixins_rating(photoalbum): test_mixins.edit_rating(photoalbum) -def test_video_Photoalbum_PlexWebURL(plex, photoalbum): +def test_photo_Photoalbum_PlexWebURL(plex, photoalbum): url = photoalbum.getWebURL() assert url.startswith('https://app.plex.tv/desktop') assert plex.machineIdentifier in url @@ -48,10 +48,27 @@ def test_photo_Photo_media_tags(photo): test_media.tag_tag(photo) -def test_video_Photo_PlexWebURL(plex, photo): +def test_photo_Photo_PlexWebURL(plex, photo): url = photo.getWebURL() assert url.startswith('https://app.plex.tv/desktop') assert plex.machineIdentifier in url assert 'details' in url assert quote_plus(photo.parentKey) in url assert 'legacy=1' in url + + +def test_photo_Photoalbum_download(monkeydownload, tmpdir, photoalbum): + total = 0 + for album in photoalbum.albums(): + total += len(album.photos()) + len(album.clips()) + total += len(photoalbum.photos()) + total += len(photoalbum.clips()) + filepaths = photoalbum.download(savepath=str(tmpdir)) + assert len(filepaths) == total + subfolders = photoalbum.download(savepath=str(tmpdir), subfolders=True) + assert len(subfolders) == total + + +def test_photo_Photo_download(monkeydownload, tmpdir, photo): + filepaths = photo.download(savepath=str(tmpdir)) + assert len(filepaths) == 1 diff --git a/tests/test_utils.py b/tests/test_utils.py index 0e62535da..24396e0b6 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -78,7 +78,8 @@ def test_utils_download(plex, episode): url = episode.getStreamURL() locations = episode.locations[0] session = episode._server._session - assert utils.download(url, plex._token, filename=locations, mocked=True) + assert utils.download( + url, plex._token, filename=locations, mocked=True) assert utils.download( url, plex._token, filename=locations, session=session, mocked=True ) @@ -87,7 +88,6 @@ def test_utils_download(plex, episode): ) - def test_millisecondToHumanstr(): res = utils.millisecondToHumanstr(1000) assert res == "00:00:01.0000" diff --git a/tests/test_video.py b/tests/test_video.py index d76bb8241..cec32f821 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -143,10 +143,14 @@ def test_video_Movie_iterParts(movie): def test_video_Movie_download(monkeydownload, tmpdir, movie): - filepaths1 = movie.download(savepath=str(tmpdir)) - assert len(filepaths1) >= 1 - filepaths2 = movie.download(savepath=str(tmpdir), videoResolution="500x300") - assert len(filepaths2) >= 1 + filepaths = movie.download(savepath=str(tmpdir)) + assert len(filepaths) == 1 + with_resolution = movie.download( + savepath=str(tmpdir), keep_original_filename=True, videoResolution="500x300" + ) + assert len(with_resolution) == 1 + filename = os.path.basename(movie.media[0].parts[0].file) + assert filename in with_resolution[0] def test_video_Movie_subtitlestreams(movie): @@ -728,24 +732,25 @@ def test_video_Show_episodes(tvshows): def test_video_Show_download(monkeydownload, tmpdir, show): - episodes = show.episodes() + total = len(show.episodes()) filepaths = show.download(savepath=str(tmpdir)) - assert len(filepaths) == len(episodes) + assert len(filepaths) == total + subfolders = show.download(savepath=str(tmpdir), subfolders=True) + assert len(subfolders) == total def test_video_Season_download(monkeydownload, tmpdir, show): - season = show.season("Season 1") + season = show.season(1) + total = len(season.episodes()) filepaths = season.download(savepath=str(tmpdir)) - assert len(filepaths) >= 4 + assert len(filepaths) == total def test_video_Episode_download(monkeydownload, tmpdir, episode): - f = episode.download(savepath=str(tmpdir)) - assert len(f) == 1 - with_sceen_size = episode.download( - savepath=str(tmpdir), **{"videoResolution": "500x300"} - ) - assert len(with_sceen_size) == 1 + filepaths = episode.download(savepath=str(tmpdir)) + assert len(filepaths) == 1 + with_resolution = episode.download(savepath=str(tmpdir), videoResolution="500x300") + assert len(with_resolution) == 1 # Analyze seems to fail intermittently From 4e8a6133eb61a0260cbdd42a285ee77397373249 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 20 Nov 2021 16:02:34 -0800 Subject: [PATCH 350/356] Fix media delete (#848) * Fix media delete * Update media delete test --- plexapi/media.py | 5 ++++- tests/test_video.py | 10 +++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/plexapi/media.py b/plexapi/media.py index 82766e77a..95385c4a2 100644 --- a/plexapi/media.py +++ b/plexapi/media.py @@ -79,13 +79,16 @@ def _loadData(self, data): self.make = data.attrib.get('make') self.model = data.attrib.get('model') + parent = self._parent() + self._parentKey = parent.key + @property def isOptimizedVersion(self): """ Returns True if the media is a Plex optimized version. """ return self.proxyType == utils.SEARCHTYPES['optimizedVersion'] def delete(self): - part = self._initpath + '/media/%s' % self.id + part = '%s/media/%s' % (self._parentKey, self.id) try: return self._server.query(part, method=self._server._session.delete) except BadRequest: diff --git a/tests/test_video.py b/tests/test_video.py index cec32f821..33a4f1452 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -129,13 +129,9 @@ def test_video_Movie_isPartialObject(movie): assert movie.isPartialObject() -def test_video_Movie_delete_part(movie, mocker): - # we need to reload this as there is a bug in part.delete - # See https://github.com/pkkid/python-plexapi/issues/201 - m = movie.reload() - for media in m.media: - with utils.callable_http_patch(): - media.delete() +def test_video_Movie_media_delete(movie, patched_http_call): + for media in movie.media: + media.delete() def test_video_Movie_iterParts(movie): From 777ea754be3ab63cae94bd8f1c958e3bd0232777 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 20 Nov 2021 16:16:01 -0800 Subject: [PATCH 351/356] Add methods for accepting and cancelling friend invites (#849) * Add accepting and cancelling friend invites * Add mocked tests for acceptInvite and cancelInvite * Rename methods to pendingInvite --- plexapi/myplex.py | 132 ++++++++++++++++++++++++++++++++++++------- tests/payloads.py | 7 +++ tests/test_myplex.py | 26 +++++++-- 3 files changed, 141 insertions(+), 24 deletions(-) diff --git a/plexapi/myplex.py b/plexapi/myplex.py index 15da2115d..312050a90 100644 --- a/plexapi/myplex.py +++ b/plexapi/myplex.py @@ -70,9 +70,6 @@ class MyPlexAccount(PlexObject): PLEXSERVERS = 'https://plex.tv/api/servers/{machineId}' # get FRIENDUPDATE = 'https://plex.tv/api/friends/{userId}' # put with args, delete REMOVEHOMEUSER = 'https://plex.tv/api/home/users/{userId}' # delete - REMOVEINVITE = 'https://plex.tv/api/invites/requested/{userId}?friend=1&server=1&home=1' # delete - REQUESTED = 'https://plex.tv/api/invites/requested' # get - REQUESTS = 'https://plex.tv/api/invites/requests' # get SIGNIN = 'https://plex.tv/users/sign_in.xml' # get with auth WEBHOOKS = 'https://plex.tv/api/v2/user/webhooks' # get, post with data OPTOUTS = 'https://plex.tv/api/v2/user/%(userUUID)s/settings/opt_outs' # get @@ -365,26 +362,55 @@ def createExistingUser(self, user, server, sections=None, allowSync=False, allow return self.query(url, self._session.post, headers=headers) def removeFriend(self, user): - """ Remove the specified user from all sharing. + """ Remove the specified user from your friends. Parameters: - user (str): MyPlexUser, username, email of the user to be added. + user (str): :class:`~plexapi.myplex.MyPlexUser`, username, or email of the user to be removed. """ - user = self.user(user) - url = self.FRIENDUPDATE if user.friend else self.REMOVEINVITE - url = url.format(userId=user.id) + user = user if isinstance(user, MyPlexUser) else self.user(user) + url = self.FRIENDUPDATE.format(userId=user.id) return self.query(url, self._session.delete) def removeHomeUser(self, user): - """ Remove the specified managed user from home. + """ Remove the specified user from your home users. Parameters: - user (str): MyPlexUser, username, email of the user to be removed from home. + user (str): :class:`~plexapi.myplex.MyPlexUser`, username, or email of the user to be removed. """ - user = self.user(user) + user = user if isinstance(user, MyPlexUser) else self.user(user) url = self.REMOVEHOMEUSER.format(userId=user.id) return self.query(url, self._session.delete) + def acceptInvite(self, user): + """ Accept a pending firend invite from the specified user. + + Parameters: + user (str): :class:`~plexapi.myplex.MyPlexInvite`, username, or email of the friend invite to accept. + """ + invite = user if isinstance(user, MyPlexInvite) else self.pendingInvite(user, includeSent=False) + params = { + 'friend': int(invite.friend), + 'home': int(invite.home), + 'server': int(invite.server) + } + url = MyPlexInvite.REQUESTS + '/%s' % invite.id + utils.joinArgs(params) + return self.query(url, self._session.put) + + def cancelInvite(self, user): + """ Cancel a pending firend invite for the specified user. + + Parameters: + user (str): :class:`~plexapi.myplex.MyPlexInvite`, username, or email of the friend invite to cancel. + """ + invite = user if isinstance(user, MyPlexInvite) else self.pendingInvite(user, includeReceived=False) + params = { + 'friend': int(invite.friend), + 'home': int(invite.home), + 'server': int(invite.server) + } + url = MyPlexInvite.REQUESTED + '/%s' % invite.id + utils.joinArgs(params) + return self.query(url, self._session.delete) + def updateFriend(self, user, server, sections=None, removeSections=False, allowSync=None, allowCameraUpload=None, allowChannels=None, filterMovies=None, filterTelevision=None, filterMusic=None): """ Update the specified user's share settings. @@ -455,7 +481,7 @@ def updateFriend(self, user, server, sections=None, removeSections=False, allowS return response_servers, response_filters def user(self, username): - """ Returns the :class:`~plexapi.myplex.MyPlexUser` that matches the email or username specified. + """ Returns the :class:`~plexapi.myplex.MyPlexUser` that matches the specified username or email. Parameters: username (str): Username, email or id of the user to return. @@ -467,19 +493,50 @@ def user(self, username): return user elif (user.username and user.email and user.id and username.lower() in - (user.username.lower(), user.email.lower(), str(user.id))): + (user.username.lower(), user.email.lower(), str(user.id))): return user raise NotFound('Unable to find user %s' % username) def users(self): """ Returns a list of all :class:`~plexapi.myplex.MyPlexUser` objects connected to your account. - This includes both friends and pending invites. You can reference the user.friend to - distinguish between the two. """ - friends = [MyPlexUser(self, elem) for elem in self.query(MyPlexUser.key)] - requested = [MyPlexUser(self, elem, self.REQUESTED) for elem in self.query(self.REQUESTED)] - return friends + requested + elem = self.query(MyPlexUser.key) + return self.findItems(elem, cls=MyPlexUser) + + def pendingInvite(self, username, includeSent=True, includeReceived=True): + """ Returns the :class:`~plexapi.myplex.MyPlexInvite` that matches the specified username or email. + Note: This can be a pending invite sent from your account or received to your account. + + Parameters: + username (str): Username, email or id of the user to return. + includeSent (bool): True to include sent invites. + includeReceived (bool): True to include received invites. + """ + username = str(username) + for invite in self.pendingInvites(includeSent, includeReceived): + if (invite.username and invite.email and invite.id and username.lower() in + (invite.username.lower(), invite.email.lower(), str(invite.id))): + return invite + + raise NotFound('Unable to find invite %s' % username) + + def pendingInvites(self, includeSent=True, includeReceived=True): + """ Returns a list of all :class:`~plexapi.myplex.MyPlexInvite` objects connected to your account. + Note: This includes all pending invites sent from your account and received to your account. + + Parameters: + includeSent (bool): True to include sent invites. + includeReceived (bool): True to include received invites. + """ + invites = [] + if includeSent: + elem = self.query(MyPlexInvite.REQUESTED) + invites += self.findItems(elem, cls=MyPlexInvite) + if includeReceived: + elem = self.query(MyPlexInvite.REQUESTS) + invites += self.findItems(elem, cls=MyPlexInvite) + return invites def _getSectionIds(self, server, sections): """ Converts a list of section objects or names to sectionIds needed for library sharing. """ @@ -731,10 +788,10 @@ class MyPlexUser(PlexObject): protected (False): Unknown (possibly SSL enabled?). recommendationsPlaylistId (str): Unknown. restricted (str): Unknown. + servers (List<:class:`~plexapi.myplex.<MyPlexServerShare`>)): Servers shared with the user. thumb (str): Link to the users avatar. title (str): Seems to be an aliad for username. username (str): User's username. - servers: Servers shared between user and friend """ TAG = 'User' key = 'https://plex.tv/api/users/' @@ -796,6 +853,43 @@ def history(self, maxresults=9999999, mindate=None): return hist +class MyPlexInvite(PlexObject): + """ This object represents pending friend invites. + + Attributes: + TAG (str): 'Invite' + createdAt (datetime): Datetime the user was invited. + email (str): User's email address (user@gmail.com). + friend (bool): True or False if the user is invited as a friend. + friendlyName (str): The user's friendly name. + home (bool): True or False if the user is invited to a Plex Home. + id (int): User's Plex account ID. + server (bool): True or False if the user is invited to any servers. + servers (List<:class:`~plexapi.myplex.<MyPlexServerShare`>)): Servers shared with the user. + thumb (str): Link to the users avatar. + username (str): User's username. + """ + TAG = 'Invite' + REQUESTS = 'https://plex.tv/api/invites/requests' + REQUESTED = 'https://plex.tv/api/invites/requested' + + def _loadData(self, data): + """ Load attribute values from Plex XML response. """ + self._data = data + self.createdAt = utils.toDatetime(data.attrib.get('createdAt')) + self.email = data.attrib.get('email') + self.friend = utils.cast(bool, data.attrib.get('friend')) + self.friendlyName = data.attrib.get('friendlyName') + self.home = utils.cast(bool, data.attrib.get('home')) + self.id = utils.cast(int, data.attrib.get('id')) + self.server = utils.cast(bool, data.attrib.get('server')) + self.servers = self.findItems(data, MyPlexServerShare) + self.thumb = data.attrib.get('thumb') + self.username = data.attrib.get('username', '') + for server in self.servers: + server.accountID = self.id + + class Section(PlexObject): """ This refers to a shared section. The raw xml for the data presented here can be found at: https://plex.tv/api/servers/{machineId}/shared_servers diff --git a/tests/payloads.py b/tests/payloads.py index 0828be4e9..dbee43ad4 100644 --- a/tests/payloads.py +++ b/tests/payloads.py @@ -34,3 +34,10 @@ <TranscodeSession key="qucs2leop3yzm0sng4urq1o0" throttled="0" complete="0" progress="1.2999999523162842" size="73138224" speed="6.4000000953674316" duration="6654989" remaining="988" context="streaming" sourceVideoCodec="h264" sourceAudioCodec="dca" videoDecision="transcode" audioDecision="transcode" protocol="dash" container="mp4" videoCodec="h264" audioCodec="aac" audioChannels="2" transcodeHwRequested="1" transcodeHwDecoding="dxva2" transcodeHwDecodingTitle="Windows (DXVA2)" transcodeHwEncoding="qsv" transcodeHwEncodingTitle="Intel (QuickSync)" transcodeHwFullPipeline="0" timeStamp="1611533677.0316164" maxOffsetAvailable="84.000667334000667" minOffsetAvailable="0" height="720" width="1280" /> </MediaContainer> """ + +MYPLEX_INVITE = """<MediaContainer friendlyName="myPlex" identifier="com.plexapp.plugins.myplex" machineIdentifier="xxxxxxxxxx" size="1"> +<Invite id="12345" createdAt="1635126033" friend="1" home="1" server="1" username="testuser" email="testuser@email.com" thumb="https://plex.tv/users/1234567890abcdef/avatar?c=12345" friendlyName="testuser"> +<Server name="testserver" numLibraries="2"/> +</Invite> +</MediaContainer> +""" diff --git a/tests/test_myplex.py b/tests/test_myplex.py index f70b99540..7c9e18793 100644 --- a/tests/test_myplex.py +++ b/tests/test_myplex.py @@ -1,8 +1,10 @@ # -*- coding: utf-8 -*- import pytest from plexapi.exceptions import BadRequest, NotFound +from plexapi.myplex import MyPlexInvite from . import conftest as utils +from .payloads import MYPLEX_INVITE def test_myplex_accounts(account, plex): @@ -150,7 +152,7 @@ def test_myplex_onlineMediaSources_optOut(account): onlineMediaSources[0]._updateOptOut('unknown') -def test_myplex_inviteFriend_remove(account, plex, mocker): +def test_myplex_inviteFriend(account, plex, mocker): inv_user = "hellowlol" vid_filter = {"contentRating": ["G"], "label": ["foo"]} secs = plex.library.sections() @@ -172,9 +174,21 @@ def test_myplex_inviteFriend_remove(account, plex, mocker): assert inv_user not in [u.title for u in account.users()] - with pytest.raises(NotFound): - with utils.callable_http_patch(): - account.removeFriend(inv_user) + +def test_myplex_acceptInvite(account, requests_mock): + url = MyPlexInvite.REQUESTS + requests_mock.get(url, text=MYPLEX_INVITE) + invite = account.pendingInvite('testuser', includeSent=False) + with utils.callable_http_patch(): + account.acceptInvite(invite) + + +def test_myplex_cancelInvite(account, requests_mock): + url = MyPlexInvite.REQUESTED + requests_mock.get(url, text=MYPLEX_INVITE) + invite = account.pendingInvite('testuser', includeReceived=False) + with utils.callable_http_patch(): + account.cancelInvite(invite) def test_myplex_updateFriend(account, plex, mocker, shared_username): @@ -186,7 +200,6 @@ def test_myplex_updateFriend(account, plex, mocker, shared_username): mocker.patch.object(account, "_getSectionIds", return_value=ids) mocker.patch.object(account, "user", return_value=user) with utils.callable_http_patch(): - account.updateFriend( shared_username, plex, @@ -200,6 +213,9 @@ def test_myplex_updateFriend(account, plex, mocker, shared_username): filterMusic={"label": ["foo"]}, ) + with utils.callable_http_patch(): + account.removeFriend(shared_username) + def test_myplex_createExistingUser(account, plex, shared_username): user = account.user(shared_username) From 8815cda4448157effc6a2d2b84b5e8483ccfb049 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 20 Nov 2021 16:29:08 -0800 Subject: [PATCH 352/356] Add totalDuration and totalStorage properties to LibrarySection (#851) * Add LibrarySection properties totalDuration and totalStorage * Add tests for LibrarySection totalDuration and totalStorage --- plexapi/library.py | 34 +++++++++++++++++++++++++++++++++- tests/test_library.py | 9 ++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index f62d59138..5afff962e 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -356,6 +356,9 @@ def _loadData(self, data): self._filterTypes = None self._fieldTypes = None self._totalViewSize = None + self._totalSize = None + self._totalDuration = None + self._totalStorage = None def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, **kwargs): """ Load the specified key to find and build all items with the specified tag @@ -394,7 +397,36 @@ def fetchItems(self, ekey, cls=None, container_start=None, container_size=None, @property def totalSize(self): """ Returns the total number of items in the library for the default library type. """ - return self.totalViewSize(includeCollections=False) + if self._totalSize is None: + self._totalSize = self.totalViewSize(includeCollections=False) + return self._totalSize + + @property + def totalDuration(self): + """ Returns the total duration (in milliseconds) of items in the library. """ + if self._totalDuration is None: + self._getTotalDurationStorage() + return self._totalDuration + + @property + def totalStorage(self): + """ Returns the total storage (in bytes) of items in the library. """ + if self._totalStorage is None: + self._getTotalDurationStorage() + return self._totalStorage + + def _getTotalDurationStorage(self): + """ Queries the Plex server for the total library duration and storage and caches the values. """ + data = self._server.query('/media/providers?includeStorage=1') + xpath = ( + './MediaProvider[@identifier="com.plexapp.plugins.library"]' + '/Feature[@type="content"]' + '/Directory[@id="%s"]' + ) % self.key + directory = next(iter(data.findall(xpath)), None) + if directory: + self._totalDuration = utils.cast(int, directory.attrib.get('durationTotal')) + self._totalStorage = utils.cast(int, directory.attrib.get('storageTotal')) def totalViewSize(self, libtype=None, includeCollections=True): """ Returns the total number of items in the library for a specified libtype. diff --git a/tests/test_library.py b/tests/test_library.py index a63602796..da2bb0156 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -61,7 +61,6 @@ def test_library_MovieSection_getGuid(movies, movie): def test_library_section_movies_all(movies): - # size should always be none unless pagenation is being used. assert movies.totalSize == 4 assert len(movies.all(container_start=0, container_size=1, maxresults=1)) == 1 @@ -79,6 +78,14 @@ def test_library_section_movies_all_guids(movies): plexapi.base.USER_DONT_RELOAD_FOR_KEYS.remove('guids') +def test_library_section_totalDuration(tvshows): + assert utils.is_int(tvshows.totalDuration) + + +def test_library_section_totalStorage(tvshows): + assert utils.is_int(tvshows.totalStorage) + + def test_library_section_totalViewSize(tvshows): assert tvshows.totalViewSize() == 2 assert tvshows.totalViewSize(libtype="show") == 2 From a8136d27767270135957dd65312dca824258dd08 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 20 Nov 2021 16:35:37 -0800 Subject: [PATCH 353/356] Change LibrarySection.reload() to reload in-place (#855) * Fix LibrarySection reload in-place to mimic PlexObject reload * Don't reload LibrarySection after edit * Also mimics PlexObject.edit() * Update library section edit test --- plexapi/library.py | 59 ++++++++++++++++++++++++++----------------- tests/test_library.py | 17 ++++++++----- 2 files changed, 47 insertions(+), 29 deletions(-) diff --git a/plexapi/library.py b/plexapi/library.py index 5afff962e..12ae407f8 100644 --- a/plexapi/library.py +++ b/plexapi/library.py @@ -26,47 +26,61 @@ class Library(PlexObject): def _loadData(self, data): self._data = data - self._sectionsByID = {} # cached Section UUIDs self.identifier = data.attrib.get('identifier') self.mediaTagVersion = data.attrib.get('mediaTagVersion') self.title1 = data.attrib.get('title1') self.title2 = data.attrib.get('title2') + self._sectionsByID = {} # cached sections by key + self._sectionsByTitle = {} # cached sections by title - def sections(self): - """ Returns a list of all media sections in this library. Library sections may be any of - :class:`~plexapi.library.MovieSection`, :class:`~plexapi.library.ShowSection`, - :class:`~plexapi.library.MusicSection`, :class:`~plexapi.library.PhotoSection`. - """ + def _loadSections(self): + """ Loads and caches all the library sections. """ key = '/library/sections' - sections = [] + self._sectionsByID = {} + self._sectionsByTitle = {} for elem in self._server.query(key): for cls in (MovieSection, ShowSection, MusicSection, PhotoSection): if elem.attrib.get('type') == cls.TYPE: section = cls(self._server, elem, key) self._sectionsByID[section.key] = section - sections.append(section) - return sections + self._sectionsByTitle[section.title.lower()] = section + + def sections(self): + """ Returns a list of all media sections in this library. Library sections may be any of + :class:`~plexapi.library.MovieSection`, :class:`~plexapi.library.ShowSection`, + :class:`~plexapi.library.MusicSection`, :class:`~plexapi.library.PhotoSection`. + """ + self._loadSections() + return list(self._sectionsByID.values()) - def section(self, title=None): + def section(self, title): """ Returns the :class:`~plexapi.library.LibrarySection` that matches the specified title. Parameters: title (str): Title of the section to return. """ - for section in self.sections(): - if section.title.lower() == title.lower(): - return section - raise NotFound('Invalid library section: %s' % title) + if not self._sectionsByTitle or title not in self._sectionsByTitle: + self._loadSections() + try: + return self._sectionsByTitle[title.lower()] + except KeyError: + raise NotFound('Invalid library section: %s' % title) from None def sectionByID(self, sectionID): """ Returns the :class:`~plexapi.library.LibrarySection` that matches the specified sectionID. Parameters: sectionID (int): ID of the section to return. + + Raises: + :exc:`~plexapi.exceptions.NotFound`: The library section ID is not found on the server. """ if not self._sectionsByID or sectionID not in self._sectionsByID: - self.sections() - return self._sectionsByID[sectionID] + self._loadSections() + try: + return self._sectionsByID[sectionID] + except KeyError: + raise NotFound('Invalid library sectionID: %s' % sectionID) from None def all(self, **kwargs): """ Returns a list of all media from all library sections. @@ -464,8 +478,12 @@ def delete(self): log.error(msg) raise - def reload(self, key=None): - return self._server.library.section(self.title) + def reload(self): + """ Reload the data for the library section. """ + self._server.library._loadSections() + newLibrary = self._server.library.sectionByID(self.key) + self.__dict__.update(newLibrary.__dict__) + return self def edit(self, agent=None, **kwargs): """ Edit a library (Note: agent is required). See :class:`~plexapi.library.Library` for example usage. @@ -478,11 +496,6 @@ def edit(self, agent=None, **kwargs): part = '/library/sections/%s?agent=%s&%s' % (self.key, agent, urlencode(kwargs)) self._server.query(part, method=self._server._session.put) - # Reload this way since the self.key dont have a full path, but is simply a id. - for s in self._server.library.sections(): - if s.key == self.key: - return s - def get(self, title): """ Returns the media item with the specified title. diff --git a/tests/test_library.py b/tests/test_library.py index da2bb0156..bc79e9aec 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -17,6 +17,8 @@ def test_library_Library_section(plex): assert section_name.title == "TV Shows" with pytest.raises(NotFound): assert plex.library.section("cant-find-me") + with pytest.raises(NotFound): + assert plex.library.sectionByID(-1) def test_library_Library_sectionByID_is_equal_section(plex, movies): @@ -129,12 +131,16 @@ def test_library_add_edit_delete(plex): scanner="Plex Movie Scanner", language="en", ) - assert plex.library.section(section_name) - edited_library = plex.library.section(section_name).edit( - name="a renamed lib", type="movie", agent="com.plexapp.agents.imdb" + section = plex.library.section(section_name) + assert section.title == section_name + new_title = "a renamed lib" + section.edit( + name=new_title, type="movie", agent="com.plexapp.agents.imdb" ) - assert edited_library.title == "a renamed lib" - plex.library.section("a renamed lib").delete() + section.reload() + assert section.title == new_title + section.delete() + assert section not in plex.library.sections() def test_library_Library_cleanBundle(plex): @@ -372,7 +378,6 @@ def test_library_editAdvanced_default(movies): if setting.id == "collectionMode": assert int(setting.value) == 0 - movies.reload() movies.defaultAdvanced() for setting in movies.settings(): assert str(setting.value) == str(setting.default) From 15e011fd291ecfb7d9da1e1596cb421e74ec8b9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= <glen@delfi.ee> Date: Sun, 21 Nov 2021 02:46:28 +0200 Subject: [PATCH 354/356] Add support for error callback for AlertListener (#850) --- plexapi/alert.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/plexapi/alert.py b/plexapi/alert.py index 9e0310fd5..79ecc4453 100644 --- a/plexapi/alert.py +++ b/plexapi/alert.py @@ -29,14 +29,18 @@ class AlertListener(threading.Thread): callback (func): Callback function to call on received messages. The callback function will be sent a single argument 'data' which will contain a dictionary of data received from the server. :samp:`def my_callback(data): ...` + callbackError (func): Callback function to call on errors. The callback function + will be sent a single argument 'error' which will contain the Error object. + :samp:`def my_callback(error): ...` """ key = '/:/websockets/notifications' - def __init__(self, server, callback=None): + def __init__(self, server, callback=None, callbackError=None): super(AlertListener, self).__init__() self.daemon = True self._server = server self._callback = callback + self._callbackError = callbackError self._ws = None def run(self): @@ -84,4 +88,9 @@ def _onError(self, *args): # pragma: no cover This is to support compatibility with current and previous releases of websocket-client. """ err = args[-1] - log.error('AlertListener Error: %s', err) + try: + log.error('AlertListener Error: %s', err) + if self._callbackError: + self._callbackError(err) + except Exception as err: # pragma: no cover + log.error('AlertListener Error: Error: %s', err) From a9ffd1e738cbbca7df3f64bdb693de422f4163cf Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 20 Nov 2021 17:14:34 -0800 Subject: [PATCH 355/356] Fix image mixins tests (#856) * Unlock images after edit image test * Enable playlist art mixins tests * Mark all image mixins tests as xfail * Changing images can fail randomly --- tests/test_audio.py | 2 ++ tests/test_collection.py | 1 + tests/test_mixins.py | 3 +++ tests/test_photo.py | 3 +++ tests/test_playlist.py | 5 +++-- tests/test_video.py | 5 ++++- 6 files changed, 16 insertions(+), 3 deletions(-) diff --git a/tests/test_audio.py b/tests/test_audio.py index 0c873a566..41363ddb0 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -85,6 +85,7 @@ def test_audio_Artist_mixins_edit_advanced_settings(artist): test_mixins.edit_advanced_settings(artist) +@pytest.mark.xfail(reason="Changing images fails randomly") def test_audio_Artist_mixins_images(artist): test_mixins.lock_art(artist) test_mixins.lock_poster(artist) @@ -194,6 +195,7 @@ def test_audio_Album_artist(album): artist.title == "Broke For Free" +@pytest.mark.xfail(reason="Changing images fails randomly") def test_audio_Album_mixins_images(album): test_mixins.lock_art(album) test_mixins.lock_poster(album) diff --git a/tests/test_collection.py b/tests/test_collection.py index 7e54a9dcd..52666c2bf 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -272,6 +272,7 @@ def test_Collection_art(collection): assert not arts # Collection has no default art +@pytest.mark.xfail(reason="Changing images fails randomly") def test_Collection_mixins_images(collection): test_mixins.lock_art(collection) test_mixins.lock_poster(collection) diff --git a/tests/test_mixins.py b/tests/test_mixins.py index acc3d63b7..34ca59c5a 100644 --- a/tests/test_mixins.py +++ b/tests/test_mixins.py @@ -139,6 +139,9 @@ def _test_mixins_edit_image(obj, attr): # Reset to default image if default_image: set_img_method(default_image) + # Unlock the image + unlock_img_method = getattr(obj, "unlock" + cap_attr) + unlock_img_method() def edit_art(obj): diff --git a/tests/test_photo.py b/tests/test_photo.py index b0d36753a..0ad2a524a 100644 --- a/tests/test_photo.py +++ b/tests/test_photo.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- from urllib.parse import quote_plus +import pytest + from . import test_media, test_mixins @@ -13,6 +15,7 @@ def test_photo_Photoalbum(photoalbum): assert a_pic +@pytest.mark.xfail(reason="Changing images fails randomly") def test_photo_Photoalbum_mixins_images(photoalbum): # test_mixins.lock_art(photoalbum) # Unlocking photoalbum artwork is broken in Plex # test_mixins.lock_poster(photoalbum) # Unlocking photoalbum poster is broken in Plex diff --git a/tests/test_playlist.py b/tests/test_playlist.py index 332344eca..331506f88 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -273,8 +273,9 @@ def test_Playlist_PlexWebURL(plex, show): playlist.delete() +@pytest.mark.xfail(reason="Changing images fails randomly") def test_Playlist_mixins_images(playlist): - # test_mixins.lock_art(playlist) + test_mixins.lock_art(playlist) test_mixins.lock_poster(playlist) - # test_mixins.edit_art(playlist) + test_mixins.edit_art(playlist) test_mixins.edit_poster(playlist) diff --git a/tests/test_video.py b/tests/test_video.py index 33a4f1452..02dec0d6c 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -44,6 +44,7 @@ def test_video_Movie_mixins_edit_advanced_settings(movie): test_mixins.edit_advanced_settings(movie) +@pytest.mark.xfail(reason="Changing images fails randomly") def test_video_Movie_mixins_images(movie): test_mixins.lock_art(movie) test_mixins.lock_poster(movie) @@ -788,7 +789,7 @@ def test_video_Show_mixins_edit_advanced_settings(show): test_mixins.edit_advanced_settings(show) -@pytest.mark.xfail(reason="Changing show art fails randomly") +@pytest.mark.xfail(reason="Changing images fails randomly") def test_video_Show_mixins_images(show): test_mixins.lock_art(show) test_mixins.lock_poster(show) @@ -918,6 +919,7 @@ def test_video_Season_episodes(show): assert len(episodes) >= 1 +@pytest.mark.xfail(reason="Changing images fails randomly") def test_video_Season_mixins_images(show): season = show.season(season=1) test_mixins.lock_art(season) @@ -1129,6 +1131,7 @@ def test_video_Episode_unwatched(tvshows): episode.markUnwatched() +@pytest.mark.xfail(reason="Changing images fails randomly") def test_video_Episode_mixins_images(episode): test_mixins.lock_art(episode) test_mixins.lock_poster(episode) From a4976137d2578b9c62b5f0e6d16f439792700d72 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 20 Nov 2021 17:31:34 -0800 Subject: [PATCH 356/356] Release 4.8.0 --- plexapi/const.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plexapi/const.py b/plexapi/const.py index cb518feb2..61c96c0b3 100644 --- a/plexapi/const.py +++ b/plexapi/const.py @@ -3,7 +3,7 @@ # Library version MAJOR_VERSION = 4 -MINOR_VERSION = 7 -PATCH_VERSION = 2 +MINOR_VERSION = 8 +PATCH_VERSION = 0 __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}"

b()VC3bYtkY`uf9ps-Mas91+^KLi@ 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

0les$VJ z$PgZ{NjQuxDm6j16M*taBnEA59qc1&DH7KL>H3k!kw!!whZ<+agZvX=cl+%(7?Ic? zV^Mzp^h)(=MSru`>?ZE-I^Bn9g2ocvvZUObx5EXgkf!p+O(k`{5N0dN!5{tl5cbVMgyb0a4MIGKtE1%>*QpMzC{Oz|`iv8h^R2OSlQIkQe>eoAz8BgUHr zk5BQN9YQ(h;nl^Yj)A0*^g5wPl1eeQ`aRs==?D9i!%g%0N=_5kGn{&fziIC<`9zpR z>g>a~v%*B$-~Wa$#~MV%p)VeSdv@xq-|aHll@IY=eDU(6XOnZ`eOLLg!FE5BTW}xK zb$RkD@(cq_I}4YQo;mp24cq#7t9liF`QJEzTde`}Gw2nJH^xVav9U(uZv+2`P{n!q z$vg#8PYhc2=Vj1FA-ISV&c^xWr`W2o@O_A0-0}~Skd4|5DuG^rR@JnYuL+E2S|0LY9XTZxuB@8KE$X+bd*v{%TYE z?wh?9bz0O1YI4@RsUqCQF<>k&gi<`MGJcFqH?Cc^>hrj=cBAd6=JrS+Kpbn-!4FF^ znYmP;1+%rk^;!AE@?&|+xn}&#soa>`2a^x{);xyxUBf_CAuznn*uFSv%WtVg+{@7T z*FKDFz7;7{TKfWsVJg+PW-1Y>AuB9VB2++n{8Uz7kADlk8V$+OYX3G>Na#h-O4*+z zMy!PkE)ZXSq0Ag%@DL(K)Y4aBO|mGo4Q!;JU!))LiHse$joK<4ze+m*;ygaYo1^Rl z^4naGPNd{=H~w3lVui$~XY|H>{pFnQgF*r(yud79exZ=4ZfW9D*Y*H-7Eh7FoU>|n zE=l)sxSF;vawJglIv7l)Z{M6n4c82?Jdy$CihO*g zd<2iHeRmd)t!e0+R)9UM6!NpZ>fLv9%~DKcTNa|j5(bO_yMH%~`-=e_f3*vDF?g*o ztuv~uEx;u-VXi3Jh?wyIWqMPO@z8Q(e~N55;7kc+M%BOmNo#SG*Fh>fW6z6p zz0>>&6oyXDEaEEjM|m8tNT<}c_vWX>z=_!egEh@SRO0&+fSgs&RziB$b!AE-!kc*z zR2HVI6#gYinJhkBRovlmX=(=T3eZz2ZG#mC)>$R0(ugxc0>( zj88scs%FAd-4c#GF|%!>_u4^6NmlgWwiJ}aQF8thqXI?;BAz~VYMOQ>BB7y_V>~mPeX2l26vIJ; zkG!;&e{sXrIdtT6F((>}Z*F6wG1yH;hV_CXvghvMys+WH!>z9E`^^1Z@VzJ>`Syr~ zqFKXwzCvBAon6B8C2?87X{)IPgZQ9 zL#$NYrsdH9l28JzJEwmipZnD`jMY#t z+DF%+om|v2(}{?42N(KR7Pxlsy1W`^yFxzvT7KxjB*IvZqwaqMuYTzSQQZ3++5`IX@SEj5>q01IT)d1~j1Szwgv#`~*HKv+m zkURE?F@eZso+MFt6v;5OQs%JIb2^!goUZ)->Kw4klW0 zz*NWo)57!$s{5$i05W@9(LxsbD*W0;hz{TSI}!UN2JFWai6j z`@K~}LNP3vQ7w$GkA09w9#txD#0pZglQ3eY5Jva;P{;u27l8a3-H>Nq^pCR=BvfUX zSijtTv-8fh^$4C<+-Fso`L%MyvJPp#R#_e7?NWat6Q$3(5{R1`?)|XKY#AJyYDD5J`+uWSSC84|3&wyq-+wU?{f8%U$b!&U+Y`{?p#gDZLedB5e{L0_poJ@zo(K}S`c zCl(Y9@Gn-lwpvcWtKZl(!3&RSwsN9I5>6F4e#jJVZ=te!fbBr+ z9tK-4Oa9h@Z%tTWIOT<-l+2e{AyfZ;M;VzsQd07uiM@rQxPQ~IgERL2hoLj1%KQ<$ zU4XWV50-SryQ89mJRXb$T&;(*3r%%3mZ*JZXak%wr$a9wb0L=ZL; zX(dzPLpfQ--T0<7i`q@vDE^R<*T;pmZ+)~Fhl`g`#Xz+W{nI2v2NrtG{`L_;GX zBp{#JesN~Udg|T770--D<+BjVv{?Uiz``C|li(@-Ryr`rgS_+RbaN4^$2r412fuCk zlhu~{HUiGnF-X%To$j+oUrzt=@mS*g)Zm<+paH9t zs^AjXaDu`Z1Re9HMs$kziaCs~I8-GHq^}sUpB%iI_sY6B2XGck$aE zm$`rRaDtmYlsa&AHST3SQ(3`xh7PDgE6LJPcuxd*>`z~4K45)>>`?~V%zO1EbmAUi zzk~}J_f8o{Jfi04gxi+{Le4xRyB|6N;cKFX@ zXQWD&JgKl$+zIqU=dxU7nO_~aJ^o)kxCP_r2kQiKe&<2l`#O=Uk1`5o@wSBXkWgTS z&mH3cx5Xe$q1+nLvd+u>N3@S{Xb<(w09TM`z$8oM_b8EEs`*JU6_w16G|6zcOQ->Z zm*?M)iUUA_Ds_dvI5aL53Z_ECO(px;T#3L|GkP~D4Up!G&6IrwfTZ8ZaRJV1>o#+) zYCpb08U5oDLg7{@BMmnMY_Tni@b^85t=j9uBZw`F=I<(LW#N3T^MO%&u-mT&{Tx?( z8Q%i2MD;QQ+%iAE@Fta|Pdl;07y{gjWgC%PKXpq-E2H?~Vv95KrV-P1D$B>=2qE_> zPvVcQM(m|b)#`7~8=1Y(a9_00;dgs)sUC=Sm1yHz2`zH|n@Y=jc5-sWd?_g|>urdniFZuMM58O7Ijn^8Fy?-p*-7=^d}6 z{cpB%uUZiH+~Uznbny~8d1Ri>A}r|81=SVm?5QDNWz_;b35C3BE;HBbQKR zyq(Gl3N|Y@%4FS*E?8W7Sx>iUD={n16IOJypR6*1NA^vFW}8$)o4*6;>Iva}d%Rj& z8(Hnvx4XuOG&0jWHg>1{n^tca@9Os`V@g=SCtn_BwBG_G{niyzmalT_18La=hn0JY z%>dwAuwT{uP)PPG{k_!*GNNdU^Sn2d7QTD|{J12`EPJ!$1hI(iGN;Vul=(hZn7c=NY#(y7 zD4h%Q7?YF63X08iM|x*QCuXcA%2&%hJld)C7o|>#7f4yZ)z2=> zQqT#*f$ldH`(()&=$_hp5n!i-4&QSh$jZU+<8N{Ths~A2xKia$kK}M(#8UX$@VR5n z4O-i;rBfp6Raw;F7Rfj1RZ#Bdmc3##J~|zY)Il;_fGF#$f57i4p<9%H^EMx@23mH3 z37#x0K8$}`Mg_l zida}cJEbQtkSFx56^(q9o2YO6lX?UzutS2P)+VBc*HBbK4bCQEp|S@lGA&vNLP;b4 zbn12!1jRAo-;-XV)#rp4h$aWWJz^LB)1*XI43aN7#483`9#0xKnupOoW+QCp4bEc zr4AWNEnJk_rZ2>i#wJMkhfYa!IhR(PV1yHgbf=`dqSRqYd=i=bvsOeosE9O5I>vZ( z6Y!kEhcP+D2>6u9p@j%k5LyV}Os_hql*xP8v4-MS>yEHP>A=2j$uY?wl-v(dr{}Xz zVT3opB6_)hJROrADywNXSwJ17F6mVb8S01!`*OyARh`A+?|bmHf}j6$qSq4*{9UVQ z{a*kCsQc)U79|w&ktys)2g|8&u;!Hea;Qt|Q^QACh_Ie@X8l|7$+d7`wB`8lr0S`h z>77?lvKB--*vYIzt^qZOx+|X8n%y8JA<@tavL)0Bw#W)6CcDXqc)?*nK;)-Uq9gOB zYt4@`PJ~8`L%Lx2b4WY`4irIY;p*H8)JO?C6uORKLBaDEkrHr03o*W>P$Oj&3O*Pk zCtJ~c2ZL~9+7h16XVkDrcn1eq#0BO??eZ#!p^m?JLCN1c@7C?yssX`JVMlg|r7=bw z6F7p5-3o^2SZal3Fhy044yPk=1Z1E=)G|EuZ#AI>q@OK1_Pu*uufq|O)Ts>goYarA zP^ON)pq+>v4OHP2rU?`xkbjHgZU$7+!9QXKocb+0&#>r}O7+r(Jm&&6^kl}9iXx5d zS1A<^!V3RhiE1zh?9zhjOA4 z=cU3=?fTabRfh)zn8KC19+e%%o9j5cyW)gK!iJDoS3SCO7=LiEn)SFSZnV>g8mcbohWXp5Vs0lt*q-RG~&GBVZd3%XLnQe)Qd=-aX*S` z;#0Rb<3G#6X5L#>-PNpH0hfWUMMo~Qnf2xab@vp*A#Nx0K4}G`af)cCvOvJ9&TVi} zb;NUBb##jR;nMRS7s9v!8dnemRE-ZYpit^_{)>&&a=L&NM<*5eNN+vi?9tiMpXyo- zwf?#ua>{^^b|721+IT`#r11VxPbCn{kq=-31k~Xt3e>Y3O_v%9v=pG|lzTD_$-oG_?5Q#acpIBEo?U zG6?bz!J#f4p)5mbg_02tOa0EKaW)!gr$lQ|;ud|8apDhI(j8t{kJP)rFr_MGX0#Y- zON|fyT~__DgF~?c>A}AweQ>ZxVC#^lAEu~2m`@e1)L}~8imB1<)N!MWzY=uFIK(qb zA%I{^ghL`<`&P{+AVo<>GA0=hPoibkqk^_y;w&A+zw*9Psv!>gaGB2XAl0K!aB;^Y z`Pji4$;<5J?j&1v=f0ag%(Qw>8A@JfhgdR$jmqjQN$XNtoT%< zaY#k+;|fC&RP-X=6hfLjf?0CrLdySnT=NvI`tos{Gcv=Lmc(A3(zMV$0hx}(e-62v zeU4A(13kJ&M^x%7j*qxHpwYWwUYjVUxFs^DN5m>64|XyOY^9HD)sK4O9HVb4w4(wr zt!q>r%JhO7>gf7fLmd%sjG$efvksN~)tcI5gsKY;9RGbp#Mxp15n_zM;Sv}*CE3jM zQDUbg!?Tr^U{B|!hF&3`_$?Lf%Ou`Fh9ca*1yAHtCm>4P?d#gnt9l{yv{NMHEy&X()?m9{4Ph`zYU%dFXrE;Pu$fCFbn);QW@ zPR7x@b27cXnVeN90{xP!(V#F6Ba8-BgaC^UO>jE$Gd&?6&wX%;UbM@{I)(U0Yy6v* zMv@p7`fd8sQGLDRgUeCwK@EriERvW|LJi6slCY4f6td_mqzd&er4@&!xToVIaG*Fh zO3)@aP!jWDf#r#^8!9q?QVe9!*LDmkN<3p6uB!nkfh-tz!uTomg!hcy+MhMVR$Nqh z#8KtvKc@f(-Kq1C=V6dn5DTgSf}&~f;-7;-dgbAd5C5het3*p5DZb$! zH~-f8*PM9M6H?Q4VL_Zrui`)#$EvR7kk&ZVxfYFS$9NhinAcU80X2@V!l~26z;UbZ zYvxg}3h|tFcfpeZIhA42{C1;DhdK@nj=!$OVI75GYex0yk>)sscGmb~FE;ILm%1Vkd~78yXmF5WB0v!0{D^Wr;p%7vM%E4s%KS96#__H#>dieIpDuK_ zKw(|yAi5BZFanyK%(|!y%9F~kv3b|VKno>ip&35^ji33BsAGa8W$7^J{K6-EPm+zffjsah_ZyvA5D z1?tb8Gn59zO=s6&OYf)T65$lx?^~X5YA+L_*#m~vLc{wwQdhg@M=|1`G9U>eer6LE%b4E*$Cz5lDz^0{`aNr;(%y8y0jsq=< znMibpE8#~w13G|-uHkky*UTvXN`>?}zXW*<91#Bz6rlqF zA3+hC#0?_Qj+@b-j3#rXnD~+n9jD?>2E2>zP|7o`mtzYxi1w_=mP0C18Ae7}K*_1f zdp+U<1=P}zMaI7~qldE`qD{mOpUNPq5T$^_PjX70$^6r=-;|+*0#qm?RZt}-^C8iW zGbOz+ZV#<~vVc3%N7C(p&y7SHqY?0MFc>;TOerkI0s zx*5R@=zjbjEk3pSuy)`S23CRwN(R3m6nSDh{xLDal7tE)#4YrJ1q~f01pMW4NX)x3 zxbmOLDH=&wXaOaf`!GrX2dv4@wVhiUoGG4-82)R}-OI5ILM50Wup<_fp6qPX$f;71 zM(|Dz5Fj+f{K`Daf}v>FAVQcJ!8ip&ITh}>W$+Lj#2aPeoJujmJMB9t87Ah134lU) zJFnr8)Pt6M8(q6U5GnQ-ERy4>7tSG$+ZE4{MRGv+@SOk!IHgoVI2fTsG)^_#=yz@9 zk8nWIsFZ@xwpRoZp4`TQ=i5SGKa^tPR=F8#C8aP@%Og!pNc~dbucI=QBG7Z5N9%~n zb}#ZboQrg%(}N z903z}f(9BB^R!cP50rHGii|3pWduQC>y&3_j)O5Ng&U7xA5}`;L8$AUG|LTwAK}1& zaf^t+f(+#>_90y11>m5>7)L`Xu*IPBIXQynFEGM5IEYdpu$8TN;U)p^it0FM1WBQw zq;3y800-GefD%1|KZguXi~Xf*;vX>GR$Z^v*Rnz^uw)26(wGV@MLwhvBlx8k=E#i$ zjBpKNG6F2XIb`9K#xzR8kqnqI8H)HUk|7mT0~&!kXF&is025>-C=Q1`|IkGc4wtj; zb~V-Nj#Ejh&hgxo>Kf4Y=C&f-=aPyrVk{`*K85c94W3Og;7srXAd zUd7;1&vQ?5fT&hJLRk(|M{%UWSz?9?hiSx(3N3^sVRJ$LVhUgcGbQcx^03fE8??AI z6@}{>YzY?pX8|8+i_(&rq z=2!T|1%{;*AdnBsF{da2#EFH5W6Yj*hx9K}1s<>SDPOB@!+e z4Ji3ZX+d#NGA!fA^J2w+LtThECQTuXTF7|G1OI4~CK%E)XrJzR2Y+XE<`0=7?u{0VQOf{ zx2GhOp*XyS21-ox8lI{MCL${+(-?wq>2%B?LV!c+b`uon5_8>e#97pcDU=c*nP-)c zLVDRJ{>eUY10M(kS{%j+W>GT3B3rz#+zAM9abL}nDnXDEffq@6D6f`e2h)3=7NuRF z(XMlKiFTk4AfSV@2~A-pydCHD_6=|oX9xlXC_@1u#!ItVsVzQXhnyK4w`Rabcl7mk zY|s$PVN^p70YpeaoyN3N;zLfssm)@rm~{Y0K6DHe2;kLBM8J&}B@P}OtwCwB)L%9= zr-&lKhyaenU>uBg#kui;zM$mrY)NDilcRNw0Btmgc}}Ezx>O^lu8K9$irWUS~of3EYXEO@sp=LXXB4EgXkgOJi{3Qqk>+DvcQ=Z z#)(5BS&x0fM$-q9DvDK~~f=KR7F0a+LC~?PSd1IhnaqcYS7p&?5FqohLtmhd`jw zn9ww2DHFXo$6qa4N~pWzPe(=|oZ?1IQsO2(LR5IAgZiD5X)QfSC_E-z;*-HSMai8o zI3;yXN#i(Mkz2Eoyg4Pl(86exalm{AH5mNBv zk0_w7%UL*(fDrK10RiSyRvezcz@IYl&sj>WkRqq3cubMvfo>0W2q^KV9e*hftf&ku zLL==F6scg40(`^)BmOzeWMoBP5U8GsTk1ktOCeW)n-^)eO13NgivQc>#kK?u-lhE>fRdOGI|z8r#*;d3lsU@?U_v>F zr#Xt;kb@U=skl*CqzlfuG?l$d%c7zH?4S%O0tHIy3Hyi(@`ZA$h>=yMOAQoGK?*7o z8nbSZ8=AMtX!D;6OyM;*hNHrVL8rUtE}3b(;b(3&oDOSn=dX zK`>NBJa7tSA?ZO$okmL)u>-}Cc?80k_)O#zT0|_tsTPOpLm$@@+q9>PKoHQF6r3Vx z%k%_>prBDtem(FtNs*BmFypAj7o~-gv$QY>CA}a5EtHWMv?$l0yJFiDG+uMPBnTCF z28Wh=g%}3ce55(DsXEFgcr5#ghiNqZMac_<642m_B7y=7O;S>E#^Ko0l!5YdEayLtZl{CM`XJjMOtuWC#un zLYZg>2O7tNyfL;4!vpO zZ+zmGL?a6*Z~;2lN4SaHkf!j`>_Z>dv%DhzjTTli4o1*IfrKt{g9^yN?rB$Op8UNy z5aEPHxQRXk}c~23TRJnMwl9k zcGCe0P=*&_gy_&L#Nrn9k#?X!J=2*w<&KdanBd}7k9svk3nDtiEy%F4s7X<`cs2nG zI7m{8+<+Yfe?&wR|4Q;T2kGufRpem4M3~q)sg1gv!X{0ZDhE;US4!XsNFK-pYD9q| zxk(mi^uxUN#|Y-y*g8dfasQd6Tc<$p2*i(8+A+p>HOuK+v6{?5AjTpGc0v(fRc8u z2nEuYUf~yK6aN^8bRqH$3!x#Th^#2VA7?7@1XH6XP18j?yNIy_utJ@bL9?4) z&Tt(gXhR2lKn8BKB*JqRno!{^y(lsK33x}Z(v}k5G0vuYoT)P=7uBIv2`xDl%FrmE zr6wbJ@)J2U;x8mMsziTDA zhC>7hV{$DjqJ~MKWuPX7feUHGq&{>TQWil*oGl{iNs!c`1JZ+(1QtY(L}*Y#69u#0 zg{}8o5YmLJG8erkQm?i^heSBeL^afia}5ja`>ZuZk_(eUXrNL4=8*^22mpdh#DPXB n3+og-DK((3+9?yn}Q00000NkvXXu0mjfL;n_3 literal 0 HcmV?d00001 diff --git a/docs/_static/images/LibrarySection.listSorts.png b/docs/_static/images/LibrarySection.listSorts.png new file mode 100644 index 0000000000000000000000000000000000000000..b9dc40d123e4ded7156b39de51ee7ea332640081 GIT binary patch literal 150660 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