From d1db099f71644342697d8ced40415fd8fb6516c9 Mon Sep 17 00:00:00 2001 From: Jason Mehring Date: Tue, 15 Oct 2013 16:24:49 -0400 Subject: [PATCH 1/2] grab tvdb fields more defensively --- .../core/providers/info/thetvdb/main.py | 100 +++++++++--------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/couchpotato/core/providers/info/thetvdb/main.py b/couchpotato/core/providers/info/thetvdb/main.py index ccb0c6ee..a4e01385 100644 --- a/couchpotato/core/providers/info/thetvdb/main.py +++ b/couchpotato/core/providers/info/thetvdb/main.py @@ -230,8 +230,8 @@ class TheTVDb(ShowProvider): # return None ## Images - poster = show['poster'] - backdrop = show['fanart'] + poster = show['poster'] or None + backdrop = show['fanart'] or None #poster = self.getImage(show, type = 'poster', size = 'cover') #backdrop = self.getImage(show, type = 'fanart', size = 'w1280') @@ -246,8 +246,8 @@ class TheTVDb(ShowProvider): 'id': int(show['id']), 'type': 'show', 'primary_provider': 'thetvdb', - 'titles': [show['seriesname'], ], - 'original_title': show['seriesname'], + 'titles': [show['seriesname'], ] or None, + 'original_title': show['seriesname'] or None, 'images': { 'poster': [poster] if poster else [], 'backdrop': [backdrop] if backdrop else [], @@ -256,23 +256,23 @@ class TheTVDb(ShowProvider): }, 'year': year, 'genres': genres, - 'imdb': show['imdb_id'], - 'zap2it_id': show['zap2it_id'], - 'seriesid': show['seriesid'], - 'network': show['network'], - 'networkid': show['networkid'], - 'airs_dayofweek': show['airs_dayofweek'], - 'airs_time': show['airs_time'], - 'firstaired': show['firstaired'], - 'released': show['firstaired'], - 'runtime': show['runtime'], - 'contentrating': show['contentrating'], - 'rating': show['rating'], - 'ratingcount': show['ratingcount'], - 'actors': show['actors'], - 'lastupdated': show['lastupdated'], - 'status': show['status'], - 'language': show['language'], + 'imdb': show['imdb_id'] or None, + 'zap2it_id': show['zap2it_id'] or None, + 'seriesid': show['seriesid'] or None, + 'network': show['network'] or None, + 'networkid': show['networkid'] or None, + 'airs_dayofweek': show['airs_dayofweek'] or None, + 'airs_time': show['airs_time'] or None, + 'firstaired': show['firstaired'] or None, + 'released': show['firstaired'] or None, + 'runtime': show['runtime'] or None, + 'contentrating': show['contentrating'] or None, + 'rating': show['rating'] or None, + 'ratingcount': show['ratingcount'] or None, + 'actors': show['actors'] or None, + 'lastupdated': show['lastupdated'] or None, + 'status': show['status'] or None, + 'language': show['language'] or None, } show_data = dict((k, v) for k, v in show_data.iteritems() if v) @@ -391,46 +391,46 @@ class TheTVDb(ShowProvider): 'primary_provider': 'thetvdb', 'via_thetvdb': True, 'thetvdb_id': int(episode['id']), - 'titles': [episode['episodename'], ], - 'original_title': episode['episodename'] , + 'titles': [episode['episodename'], ] or None, + 'original_title': episode['episodename'] or None, 'images': { 'poster': [poster] if poster else [], 'backdrop': [backdrop] if backdrop else [], 'poster_original': [], 'backdrop_original': [], }, - 'imdb': episode['imdb_id'], + 'imdb': episode['imdb_id'] or None, 'runtime': None, - 'released': episode['firstaired'], + 'released': episode['firstaired'] or None, 'year': year, 'plot': plot, 'genres': genres, 'parent_identifier': show['id'], - 'seasonnumber': episode['seasonnumber'], - 'episodenumber': episode['episodenumber'], - 'combined_episodenumber': episode['combined_episodenumber'], - 'absolute_number': episode['absolute_number'], - 'combined_season': episode['combined_season'], - 'productioncode': episode['productioncode'], - 'seriesid': episode['seriesid'], - 'seasonid': episode['seasonid'], - 'firstaired': episode['firstaired'], - 'thumb_added': episode['thumb_added'], - 'thumb_height': episode['thumb_height'], - 'thumb_width': episode['thumb_width'], - 'rating': episode['rating'], - 'ratingcount': episode['ratingcount'], - 'epimgflag': episode['epimgflag'], - 'dvd_episodenumber': episode['dvd_episodenumber'], - 'dvd_discid': episode['dvd_discid'], - 'dvd_chapter': episode['dvd_chapter'], - 'dvd_season': episode['dvd_season'], - 'tms_export': episode['tms_export'], - 'writer': episode['writer'], - 'director': episode['director'], - 'gueststars': episode['gueststars'], - 'lastupdated': episode['lastupdated'], - 'language': episode['language'], + 'seasonnumber': episode['seasonnumber'] or None, + 'episodenumber': episode['episodenumber'] or None, + 'combined_episodenumber': episode['combined_episodenumber'] or None, + 'absolute_number': episode['absolute_number'] or None, + 'combined_season': episode['combined_season'] or None, + 'productioncode': episode['productioncode'] or None, + 'seriesid': episode['seriesid'] or None, + 'seasonid': episode['seasonid'] or None, + 'firstaired': episode['firstaired'] or None, + 'thumb_added': episode['thumb_added'] or None, + 'thumb_height': episode['thumb_height'] or None, + 'thumb_width': episode['thumb_width'] or None, + 'rating': episode['rating'] or None, + 'ratingcount': episode['ratingcount'] or None, + 'epimgflag': episode['epimgflag'] or None, + 'dvd_episodenumber': episode['dvd_episodenumber'] or None, + 'dvd_discid': episode['dvd_discid'] or None, + 'dvd_chapter': episode['dvd_chapter'] or None, + 'dvd_season': episode['dvd_season'] or None, + 'tms_export': episode['tms_export'] or None, + 'writer': episode['writer'] or None, + 'director': episode['director'] or None, + 'gueststars': episode['gueststars'] or None, + 'lastupdated': episode['lastupdated'] or None, + 'language': episode['language'] or None, } episode_data = dict((k, v) for k, v in episode_data.iteritems() if v) From e0aba01866526dfea1f237c9e45a858b972dee4b Mon Sep 17 00:00:00 2001 From: Jason Mehring Date: Tue, 15 Oct 2013 17:54:06 -0400 Subject: [PATCH 2/2] more tvdb info provider guards --- .../core/providers/info/thetvdb/main.py | 118 ++++++++++-------- 1 file changed, 65 insertions(+), 53 deletions(-) diff --git a/couchpotato/core/providers/info/thetvdb/main.py b/couchpotato/core/providers/info/thetvdb/main.py index a4e01385..d45423b1 100644 --- a/couchpotato/core/providers/info/thetvdb/main.py +++ b/couchpotato/core/providers/info/thetvdb/main.py @@ -225,15 +225,18 @@ class TheTVDb(ShowProvider): 'zap2it_id': u'SH01009396' """ - # Make sure we have a valid show id, not '' or None + # + # NOTE: show object only allows direct access via + # show['id'], not show.get('id') + # + + # TODO: Make sure we have a valid show id, not '' or None #if len (show['id']) is 0: # return None ## Images poster = show['poster'] or None backdrop = show['fanart'] or None - #poster = self.getImage(show, type = 'poster', size = 'cover') - #backdrop = self.getImage(show, type = 'fanart', size = 'w1280') genres = [] if show['genre'] is None else show['genre'].strip('|').split('|') if show['firstaired'] is not None: @@ -242,12 +245,17 @@ class TheTVDb(ShowProvider): else: year = None + try: + id = int(show['id']) + except: + id = None + show_data = { - 'id': int(show['id']), + 'id': id, 'type': 'show', 'primary_provider': 'thetvdb', - 'titles': [show['seriesname'], ] or None, - 'original_title': show['seriesname'] or None, + 'titles': [show['seriesname'] or u'', ], + 'original_title': show['seriesname'] or u'', 'images': { 'poster': [poster] if poster else [], 'backdrop': [backdrop] if backdrop else [], @@ -296,7 +304,7 @@ class TheTVDb(ShowProvider): """ number, season = season_tuple - title = toUnicode('%s - Season %s' % (show['seriesname'], str(number))) + title = toUnicode('%s - Season %s' % (show['seriesname'] or u'', str(number))) poster = [] try: for id, data in show.data['_banners']['season']['season'].items(): @@ -306,15 +314,20 @@ class TheTVDb(ShowProvider): except: pass + try: + id = (show['id'] + ':' + str(number)) + except: + id = None + # XXX: work on title; added defualt_title to fix an error season_data = { - 'id': (show['id'] + ':' + str(number)), + 'id': id, 'type': 'season', 'primary_provider': 'thetvdb', 'titles': [title, ], 'original_title': title, 'via_thetvdb': True, - 'parent_identifier': show['id'], + 'parent_identifier': show['id'] or None, 'seasonnumber': str(number), 'images': { 'poster': poster, @@ -366,71 +379,70 @@ class TheTVDb(ShowProvider): ('episodename', u'Pilot')] """ - ## Images - #poster = self.getImage(episode, type = 'poster', size = 'cover') - #backdrop = self.getImage(episode, type = 'fanart', size = 'w1280') - ##poster_original = self.getImage(episode, type = 'poster', size = 'original') - ##backdrop_original = self.getImage(episode, type = 'backdrop', size = 'original') - - poster = episode['filename'] or [] + poster = episode.get('filename', []) backdrop = [] genres = [] - plot = "%s - %sx%s - %s" % (show['seriesname'], - episode['seasonnumber'], - episode['episodenumber'], - episode['overview']) - if episode['firstaired'] is not None: + plot = "%s - %sx%s - %s" % (show['seriesname'] or u'', + episode.get('seasonnumber', u'?'), + episode.get('episodenumber', u'?'), + episode.get('overview', u'')) + if episode.get('firstaired', None) is not None: try: year = datetime.strptime(episode['firstaired'], '%Y-%m-%d').year except: year = None else: year = None + try: + id = int(episode['id']) + except: + id = None + episode_data = { - 'id': int(episode['id']), + 'id': id, 'type': 'episode', 'primary_provider': 'thetvdb', 'via_thetvdb': True, - 'thetvdb_id': int(episode['id']), - 'titles': [episode['episodename'], ] or None, - 'original_title': episode['episodename'] or None, + 'thetvdb_id': id, + 'titles': [episode.get('episodename', u''), ], + 'original_title': episode.get('episodename', u'') , 'images': { 'poster': [poster] if poster else [], 'backdrop': [backdrop] if backdrop else [], 'poster_original': [], 'backdrop_original': [], }, - 'imdb': episode['imdb_id'] or None, + 'imdb': episode.get('imdb_id', None), 'runtime': None, - 'released': episode['firstaired'] or None, + 'released': episode.get('firstaired', None), 'year': year, 'plot': plot, 'genres': genres, - 'parent_identifier': show['id'], - 'seasonnumber': episode['seasonnumber'] or None, - 'episodenumber': episode['episodenumber'] or None, - 'combined_episodenumber': episode['combined_episodenumber'] or None, - 'absolute_number': episode['absolute_number'] or None, - 'combined_season': episode['combined_season'] or None, - 'productioncode': episode['productioncode'] or None, - 'seriesid': episode['seriesid'] or None, - 'seasonid': episode['seasonid'] or None, - 'firstaired': episode['firstaired'] or None, - 'thumb_added': episode['thumb_added'] or None, - 'thumb_height': episode['thumb_height'] or None, - 'thumb_width': episode['thumb_width'] or None, - 'rating': episode['rating'] or None, - 'ratingcount': episode['ratingcount'] or None, - 'epimgflag': episode['epimgflag'] or None, - 'dvd_episodenumber': episode['dvd_episodenumber'] or None, - 'dvd_discid': episode['dvd_discid'] or None, - 'dvd_chapter': episode['dvd_chapter'] or None, - 'dvd_season': episode['dvd_season'] or None, - 'tms_export': episode['tms_export'] or None, - 'writer': episode['writer'] or None, - 'director': episode['director'] or None, - 'gueststars': episode['gueststars'] or None, - 'lastupdated': episode['lastupdated'] or None, - 'language': episode['language'] or None, + 'parent_identifier': show['id'] or None, + 'seasonnumber': episode.get('seasonnumber', None), + 'episodenumber': episode.get('episodenumber', None), + 'combined_episodenumber': episode.get('combined_episodenumber', None), + 'absolute_number': episode.get('absolute_number', None), + 'combined_season': episode.get('combined_season', None), + 'productioncode': episode.get('productioncode', None), + 'seriesid': episode.get('seriesid', None), + 'seasonid': episode.get('seasonid', None), + 'firstaired': episode.get('firstaired', None), + 'thumb_added': episode.get('thumb_added', None), + 'thumb_height': episode.get('thumb_height', None), + 'thumb_width': episode.get('thumb_width', None), + 'rating': episode.get('rating', None), + 'ratingcount': episode.get('ratingcount', None), + 'epimgflag': episode.get('epimgflag', None), + 'dvd_episodenumber': episode.get('dvd_episodenumber', None), + 'dvd_discid': episode.get('dvd_discid', None), + 'dvd_chapter': episode.get('dvd_chapter', None), + 'dvd_season': episode.get('dvd_season', None), + 'tms_export': episode.get('tms_export', None), + 'writer': episode.get('writer', None), + 'director': episode.get('director', None), + 'gueststars': episode.get('gueststars', None), + 'lastupdated': episode.get('lastupdated', None), + 'language': episode.get('language', None), } episode_data = dict((k, v) for k, v in episode_data.iteritems() if v)