Fix Plex showing removed shared users (#46971)

This commit is contained in:
jjlawren 2021-02-23 16:36:46 -06:00 committed by GitHub
parent c9847920af
commit 425d56d024
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 36 additions and 7 deletions

View File

@ -213,21 +213,27 @@ class PlexServer:
try:
system_accounts = self._plex_server.systemAccounts()
shared_users = self.account.users() if self.account else []
except Unauthorized:
_LOGGER.warning(
"Plex account has limited permissions, shared account filtering will not be available"
)
else:
self._accounts = [
account.name for account in system_accounts if account.name
]
self._accounts = []
for user in shared_users:
for shared_server in user.servers:
if shared_server.machineIdentifier == self.machine_identifier:
self._accounts.append(user.title)
_LOGGER.debug("Linked accounts: %s", self.accounts)
owner_account = [
account.name for account in system_accounts if account.accountID == 1
]
owner_account = next(
(account.name for account in system_accounts if account.accountID == 1),
None,
)
if owner_account:
self._owner_username = owner_account[0]
self._owner_username = owner_account
self._accounts.append(owner_account)
_LOGGER.debug("Server owner found: '%s'", self._owner_username)
self._version = self._plex_server.version

View File

@ -218,6 +218,12 @@ def plextv_resources_fixture(plextv_resources_base):
return plextv_resources_base.format(second_server_enabled=0)
@pytest.fixture(name="plextv_shared_users", scope="session")
def plextv_shared_users_fixture(plextv_resources_base):
"""Load payload for plex.tv shared users and return it."""
return load_fixture("plex/plextv_shared_users.xml")
@pytest.fixture(name="session_base", scope="session")
def session_base_fixture():
"""Load the base session payload and return it."""
@ -293,6 +299,7 @@ def mock_plex_calls(
children_200,
children_300,
empty_library,
empty_payload,
grandchildren_300,
library,
library_sections,
@ -310,12 +317,15 @@ def mock_plex_calls(
playlist_500,
plextv_account,
plextv_resources,
plextv_shared_users,
plex_server_accounts,
plex_server_clients,
plex_server_default,
security_token,
):
"""Mock Plex API calls."""
requests_mock.get("https://plex.tv/api/users/", text=plextv_shared_users)
requests_mock.get("https://plex.tv/api/invites/requested", text=empty_payload)
requests_mock.get("https://plex.tv/users/account", text=plextv_account)
requests_mock.get("https://plex.tv/api/resources", text=plextv_resources)

View File

@ -116,6 +116,7 @@ async def test_setup_when_certificate_changed(
plex_server_default,
plextv_account,
plextv_resources,
plextv_shared_users,
):
"""Test setup component when the Plex certificate has changed."""
await async_setup_component(hass, "persistent_notification", {})
@ -141,6 +142,9 @@ async def test_setup_when_certificate_changed(
unique_id=DEFAULT_DATA["server_id"],
)
requests_mock.get("https://plex.tv/api/users/", text=plextv_shared_users)
requests_mock.get("https://plex.tv/api/invites/requested", text=empty_payload)
requests_mock.get("https://plex.tv/users/account", text=plextv_account)
requests_mock.get("https://plex.tv/api/resources", text=plextv_resources)
requests_mock.get(old_url, exc=WrongCertHostnameException)

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<MediaContainer friendlyName="myPlex" identifier="com.plexapp.plugins.myplex" machineIdentifier="85a28b6ea2b35c1a10cbdd967b74117a45e8694f" totalSize="3" size="3">
<User id="1000" title="User 1000" username="User 1000" email="user_1000@email.com" recommendationsPlaylistId="" thumb="https://plex.tv/users/0000000000000000/avatar?c=1467656888" protected="0" home="0" allowTuners="0" allowSync="0" allowCameraUpload="0" allowChannels="0" allowSubtitleAdmin="0" filterAll="" filterMovies="" filterMusic="" filterPhotos="" filterTelevision="" restricted="0">
<Server id="7654321" serverId="000001" machineIdentifier="unique_id_123" name="plex" lastSeenAt="1614072646" numLibraries="4" allLibraries="0" owned="1" pending="0"/>
</User>
<User id="1001" title="User 1001" username="User 1001" email="user_1001@email.com" recommendationsPlaylistId="" thumb="https://plex.tv/users/0000000000000001/avatar?c=1599008193" protected="0" home="0" allowTuners="0" allowSync="0" allowCameraUpload="0" allowChannels="0" allowSubtitleAdmin="0" filterAll="" filterMovies="" filterMusic="" filterPhotos="" filterTelevision="" restricted="0">
<Server id="1234567" serverId="000001" machineIdentifier="unique_id_123" name="plex" lastSeenAt="1614072646" numLibraries="5" allLibraries="0" owned="1" pending="0"/>
</User>
</MediaContainer>