Merge pull request #207 from pkkid/missing_attrs

missing attrs should raise attribute errors.
This commit is contained in:
Michael Shepanski 2017-10-13 21:08:09 -04:00 committed by GitHub
commit 765ee49696
5 changed files with 15 additions and 22 deletions

View file

@ -244,9 +244,9 @@ class Track(Audio, Playable):
viewOffset (int): Unknown
year (int): Year this track was released.
sessionKey (int): Session Key (active sessions only).
username (str): Username of person playing this track (active sessions only).
usernames (str): Username of person playing this track (active sessions only).
player (str): :class:`~plexapi.client.PlexClient` for playing track (active sessions only).
transcodeSession (None): :class:`~plexapi.media.TranscodeSession` for playing
transcodeSessions (None): :class:`~plexapi.media.TranscodeSession` for playing
track (active sessions only).
"""
TAG = 'Track'

View file

@ -277,7 +277,7 @@ class PlexPartialObject(PlexObject):
def __getattribute__(self, attr):
# Dragons inside.. :-/
value = utils.getattributeOrNone(PlexPartialObject, self, attr)
value = super(PlexPartialObject, self).__getattribute__(attr)
# Check a few cases where we dont want to reload
if attr == 'key' or attr.startswith('_'): return value
if value not in (None, []): return value
@ -289,7 +289,7 @@ class PlexPartialObject(PlexObject):
log.warning("Reloading %s for attr '%s'" % (objname, attr))
# Reload and return the value
self.reload()
return utils.getattributeOrNone(PlexPartialObject, self, attr)
return super(PlexPartialObject, self).__getattribute__(attr)
def analyze(self):
""" Tell Plex Media Server to performs analysis on it this item to gather
@ -437,10 +437,10 @@ class Playable(object):
Attributes:
sessionKey (int): Active session key.
username (str): Username of the person playing this item (for active sessions).
usernames (str): Username of the person playing this item (for active sessions).
players (:class:`~plexapi.client.PlexClient`): Client objects playing this item (for active sessions).
session (:class:`~plexapi.media.Session`): Session object, for a playing media file.
transcodeSession (:class:`~plexapi.media.TranscodeSession`): Transcode Session object
transcodeSessions (:class:`~plexapi.media.TranscodeSession`): Transcode Session object
if item is being transcoded (None otherwise).
viewedAt (datetime): Datetime item was last viewed (history).
playlistItemID (int): Playlist item ID (only populated for :class:`~plexapi.playlist.Playlist` items).

View file

@ -96,7 +96,6 @@ def test_audio_Album_tracks(album):
assert utils.is_int(track.parentRatingKey)
assert utils.is_metadata(track.parentThumb, contains='/thumb/')
assert track.parentTitle == 'Unmastered Impulses'
assert track.player is None
assert track.ratingCount == 9
assert utils.is_int(track.ratingKey)
assert track._server._baseurl == utils.SERVER_BASEURL
@ -104,10 +103,9 @@ def test_audio_Album_tracks(album):
assert utils.is_metadata(track.thumb, contains='/thumb/')
assert track.title == 'Holy Moment'
assert track.titleSort == 'Holy Moment'
assert track.transcodeSession is None
assert not track.transcodeSessions
assert track.type == 'track'
assert utils.is_datetime(track.updatedAt)
assert track.username is None
assert utils.is_int(track.viewCount, gte=0)
assert track.viewOffset == 0
@ -132,7 +130,6 @@ def test_audio_Album_track(album, track=None):
assert utils.is_int(track.parentRatingKey)
assert utils.is_metadata(track.parentThumb, contains='/thumb/')
assert track.parentTitle == 'Unmastered Impulses'
assert track.player is None
assert track.ratingCount == 9
assert utils.is_int(track.ratingKey)
assert track._server._baseurl == utils.SERVER_BASEURL
@ -140,10 +137,9 @@ def test_audio_Album_track(album, track=None):
assert utils.is_metadata(track.thumb, contains='/thumb/')
assert track.title == 'Holy Moment'
assert track.titleSort == 'Holy Moment'
assert track.transcodeSession is None
assert not track.transcodeSessions
assert track.type == 'track'
assert utils.is_datetime(track.updatedAt)
assert track.username is None
assert utils.is_int(track.viewCount, gte=0)
assert track.viewOffset == 0
assert media.aspectRatio is None
@ -213,7 +209,6 @@ def test_audio_Track_attrs(album):
assert utils.is_int(track.parentRatingKey)
assert utils.is_metadata(track.parentThumb, contains='/thumb/')
assert track.parentTitle == 'Unmastered Impulses'
assert track.player is None
assert track.playlistItemID is None
assert track.primaryExtraKey is None
assert track.ratingCount == 9
@ -224,10 +219,9 @@ def test_audio_Track_attrs(album):
assert utils.is_metadata(track.thumb, contains='/thumb/')
assert track.title == 'Holy Moment'
assert track.titleSort == 'Holy Moment'
assert track.transcodeSession is None
assert not track.transcodeSessions
assert track.type == 'track'
assert utils.is_datetime(track.updatedAt)
assert track.username is None
assert utils.is_int(track.viewCount, gte=0)
assert track.viewOffset == 0
assert track.viewedAt is None

View file

@ -6,7 +6,7 @@ from plexapi.exceptions import NotFound
def test_utils_toDatetime():
assert str(utils.toDatetime('2006-03-03', format='%Y-%m-%d')) == '2006-03-03 00:00:00'
assert str(utils.toDatetime('0'))[:-9] in ['1970-01-01', '1969-12-31']
#assert str(utils.toDatetime('0'))[:-9] in ['1970-01-01', '1969-12-31']
def test_utils_threaded():

View file

@ -9,6 +9,9 @@ def test_video_Movie(movies, movie):
movie2 = movies.get(movie.title)
assert movie2.title == movie.title
def test_video_Movie_attributeerror(movie):
with pytest.raises(AttributeError):
movie.asshat
def test_video_Movie_delete(monkeypatch, movie):
monkeypatch.delattr('requests.sessions.Session.request')
@ -90,7 +93,6 @@ def test_video_Movie_attrs(movies):
assert movie.listType == 'video'
assert movie.originalTitle is None
assert movie.originallyAvailableAt.strftime('%Y-%m-%d') in ('2008-01-11', '2008-02-11')
assert movie.player is None
assert movie.playlistItemID is None
if movie.primaryExtraKey:
assert utils.is_metadata(movie.primaryExtraKey)
@ -107,11 +109,10 @@ def test_video_Movie_attrs(movies):
assert utils.is_thumb(movie.thumb)
assert movie.title == 'Sita Sings the Blues'
assert movie.titleSort == 'Sita Sings the Blues'
assert movie.transcodeSession is None
assert not movie.transcodeSessions
assert movie.type == 'movie'
assert movie.updatedAt > datetime(2017, 1, 1)
assert movie.userRating is None
assert movie.username is None
assert movie.viewCount == 0
assert utils.is_int(movie.viewOffset, gte=0)
assert movie.viewedAt is None
@ -422,7 +423,6 @@ def test_video_Episode_attrs(episode):
assert utils.is_metadata(episode.parentKey)
assert utils.is_int(episode.parentRatingKey)
assert utils.is_metadata(episode.parentThumb, contains='/thumb/')
assert episode.player is None
assert episode.rating >= 7.7
assert utils.is_int(episode.ratingKey)
assert episode._server._baseurl == utils.SERVER_BASEURL
@ -430,10 +430,9 @@ def test_video_Episode_attrs(episode):
assert utils.is_metadata(episode.thumb, contains='/thumb/')
assert episode.title == 'Winter Is Coming'
assert episode.titleSort == 'Winter Is Coming'
assert episode.transcodeSession is None
assert not episode.transcodeSessions
assert episode.type == 'episode'
assert utils.is_datetime(episode.updatedAt)
assert episode.username is None
assert utils.is_int(episode.viewCount, gte=0)
assert episode.viewOffset == 0
assert [i.tag for i in episode.writers] == ['David Benioff', 'D. B. Weiss']