import pytest import os from plexapi.utils import download def test_server_attr(pms): assert pms.baseurl == 'http://138.68.157.5:32400' assert pms.friendlyName == 'PMS_API_TEST_SERVER' assert pms.machineIdentifier == 'e42470b5c527c7e5ebbdc017b5a32c8c683f6f8b' assert pms.myPlex is True assert pms.myPlexMappingState == 'mapped' assert pms.myPlexSigninState == 'ok' assert pms.myPlexSubscription == '0' assert pms.myPlexUsername == 'testplexapi@gmail.com' assert pms.platform == 'Linux' assert pms.platformVersion == '4.4.0-59-generic (#80-Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017)' #assert pms.session == assert pms.token == os.environ.get('PLEX_TEST_TOKEN') assert pms.transcoderActiveVideoSessions == 0 assert pms.updatedAt == 1484943666 assert pms.version == '1.3.3.3148-b38628e' @pytest.mark.req_client def test_server_session(): pass def test_server_library(pms): assert pms.library def test_server_url(pms): assert 'ohno' in pms.url('ohno') def test_server_transcodeImage(tmpdir, pms, a_show): # Ideally we should also test the black white but this has to do for now. height = 500 width = 500 img_url_resize = pms.transcodeImage(a_show.banner, height, width) gray = img_url_resize = pms.transcodeImage(a_show.banner, height, width, saturation=0) resized_image = download(img_url_resize, savepath=str(tmpdir), filename='resize_image') org_image = download(a_show.server.url(a_show.banner), savepath=str(tmpdir), filename='org_image') gray_image = download(gray, savepath=str(tmpdir), filename='gray_image') from PIL import Image, ImageStat with Image.open(resized_image) as im: assert width, height == im.size with Image.open(org_image) as im: assert width, height != im.size def detect_color_image(file, thumb_size=150, MSE_cutoff=22, adjust_color_bias=True): #from http://stackoverflow.com/questions/20068945/detect-if-image-is-color-grayscale-or-black-and-white-with-python-pil pil_img = Image.open(file) bands = pil_img.getbands() if bands == ('R', 'G', 'B') or bands == ('R', 'G', 'B', 'A'): thumb = pil_img.resize((thumb_size, thumb_size)) SSE, bias = 0, [0, 0, 0] if adjust_color_bias: bias = ImageStat.Stat(thumb).mean[:3] bias = [b - sum(bias) / 3 for b in bias] for pixel in thumb.getdata(): mu = sum(pixel) / 3 SSE += sum((pixel[i] - mu - bias[i]) * (pixel[i] - mu - bias[i]) for i in [0, 1, 2]) MSE = float(SSE) / (thumb_size * thumb_size) if MSE <= MSE_cutoff: return 'grayscale' else: return 'color' elif len(bands) == 1: return 'blackandwhite' assert detect_color_image(gray_image, thumb_size=150) == 'grayscale' def test_server_search(pms): # basic search. see test_search.py assert pms.search('16 Blocks') def test_server_playlist(pms): pl = pms.playlist('some_playlist') assert pl.title == 'some_playlist' def test_server_playlists(pms): playlists = pms.playlists() assert len(playlists) def test_server_history(pms): history = pms.history() assert len(history) def test_server_token_in_headers(pms): h = pms.headers() assert 'X-Plex-Token' in h and len(h['X-Plex-Token']) ''' { 'X-Plex-Platform': plexapi.X_PLEX_PLATFORM, 'X-Plex-Platform-Version': plexapi.X_PLEX_PLATFORM_VERSION, 'X-Plex-Provides': plexapi.X_PLEX_PROVIDES, 'X-Plex-Product': plexapi.X_PLEX_PRODUCT, 'X-Plex-Version': plexapi.X_PLEX_VERSION, 'X-Plex-Device': plexapi.X_PLEX_DEVICE, 'X-Plex-Device-Name': plexapi.X_PLEX_DEVICE_NAME, 'X-Plex-Client-Identifier': plexapi.X_PLEX_IDENTIFIER, } ''' def _test_server_createPlayQueue(): # see test_playlists.py pass def _test_server_createPlaylist(): # see test_playlists.py pass @pytest.mark.req_client def test_server_client(pms): assert pms.client('Plex Web (Chrome)') @pytest.mark.req_client def test_server_clients(pms): assert len(pms.clients()) m = pms.clients()[0] assert m.baseurl == 'http://127.0.0.1:32400' assert m.device is None assert m.deviceClass == 'pc' assert m.machineIdentifier == '89hgkrbqxaxmf45o1q2949ru' assert m.model is None assert m.platform is None assert m.platformVersion is None assert m.product == 'Plex Web' assert m.protocol == 'plex' assert m.protocolCapabilities == ['timeline', 'playback', 'navigation', 'mirror', 'playqueues'] assert m.protocolVersion == '1' assert m.server.baseurl == 'http://138.68.157.5:32400' #assert m.session == assert m.state is None assert m.title == 'Plex Web (Chrome)' assert m.token is None assert m.vendor is None assert m.version == '2.12.5' def test_server_account(pms): acc = pms.account() assert acc.authToken #assert acc.mappingError == 'publisherror' # this is missing from time to time.. why? assert acc.mappingErrorMessage is None assert acc.mappingState == 'mapped' assert acc.privateAddress == '138.68.157.5' assert acc.privatePort == '32400' assert acc.publicAddress == '138.68.157.5' assert acc.publicPort == '32400' assert acc.signInState == 'ok' assert acc.subscriptionActive == '0' assert acc.subscriptionFeatures is None assert acc.subscriptionState == 'Unknown' assert acc.username == 'testplexapi@gmail.com'