def _retrieve_show_image(self, image_type, show_obj, which=0): """ Gets an image URL from theTVDB.com and fanart.tv, downloads it and returns the data. image_type: type of image to retrieve (currently supported: fanart, poster, banner) show_obj: a TVShow object to use when searching for the image which: optional, a specific numbered poster to look for Returns: the binary image data if available, or else None """ image_data = None indexer_lang = show_obj.lang or sickrage.app.config.indexer_default_language try: # There's gotta be a better way of doing this but we don't wanna # change the language value elsewhere lINDEXER_API_PARMS = IndexerApi(show_obj.indexer).api_params.copy() lINDEXER_API_PARMS['language'] = indexer_lang if show_obj.dvdorder != 0: lINDEXER_API_PARMS['dvdorder'] = True t = IndexerApi(show_obj.indexer).indexer(**lINDEXER_API_PARMS) except (indexer_error, IOError) as e: sickrage.app.log.warning("{}: Unable to look up show on ".format(show_obj.indexerid) + IndexerApi( show_obj.indexer).name + ", not downloading images: {}".format(e)) sickrage.app.log.debug("Indexer " + IndexerApi( show_obj.indexer).name + " maybe experiencing some problems. Try again later") return None if image_type not in ('fanart', 'poster', 'series', 'poster_thumb', 'series_thumb'): sickrage.app.log.warning( "Invalid image type " + str(image_type) + ", couldn't find it in the " + IndexerApi( show_obj.indexer).name + " object") return if image_type == 'poster_thumb': try: image_url = t.images(show_obj.indexerid, key_type='poster')[which]['thumbnail'] except (KeyError, IndexError): image_url = self._retrieve_show_images_from_fanart(show_obj, image_type, True) elif image_type == 'series_thumb': try: image_url = t.images(show_obj.indexerid, key_type='series')[which]['thumbnail'] except (KeyError, IndexError): image_url = self._retrieve_show_images_from_fanart(show_obj, image_type, True) else: try: image_url = t.images(show_obj.indexerid, key_type=image_type)[which]['filename'] except (KeyError, IndexError): image_url = self._retrieve_show_images_from_fanart(show_obj, image_type) if image_url: image_data = getShowImage(image_url) return image_data
def _retrieve_season_banner_image(show_obj, season, which=0): """ Should return a dict like: result = {<season number>: {1: '<url 1>', 2: <url 2>, ...},} """ indexer_lang = show_obj.lang or sickrage.app.config.indexer_default_language try: # There's gotta be a better way of doing this but we don't wanna # change the language value elsewhere lINDEXER_API_PARMS = IndexerApi(show_obj.indexer).api_params.copy() lINDEXER_API_PARMS['language'] = indexer_lang t = IndexerApi(show_obj.indexer).indexer(**lINDEXER_API_PARMS) # Give us just the normal season graphics return t.images(show_obj.indexerid, key_type='seasonwide', season=season)[which]['filename'] except (indexer_error, IOError) as e: sickrage.app.log.warning("{}: Unable to look up show on ".format(show_obj.indexerid) + IndexerApi( show_obj.indexer).name + ", not downloading images: {}".format(e)) sickrage.app.log.debug("Indexer " + IndexerApi( show_obj.indexer).name + " maybe experiencing some problems. Try again later") except (KeyError, IndexError): pass
def _retrieve_season_banner_image(show_obj, season, which=0): """ Should return a dict like: result = {<season number>: {1: '<url 1>', 2: <url 2>, ...},} """ indexer_lang = show_obj.lang or sickrage.app.config.indexer_default_language try: # There's gotta be a better way of doing this but we don't wanna # change the language value elsewhere lINDEXER_API_PARMS = IndexerApi(show_obj.indexer).api_params.copy() lINDEXER_API_PARMS['language'] = indexer_lang t = IndexerApi(show_obj.indexer).indexer(**lINDEXER_API_PARMS) # Give us just the normal season graphics image_data = t.images(show_obj.indexer_id, key_type='seasonwide', season=season) if image_data: return image_data[which]['filename'] sickrage.app.log.debug( "{}: No season {} banner images on {} to download found".format(show_obj.indexer_id, season, IndexerApi(show_obj.indexer).name)) except (KeyError, IndexError): pass
def indexerImage(id=None, which=None): media_format = ('normal', 'thumb')[which in ('banner_thumb', 'poster_thumb', 'small')] image_type = which[0:6] if image_type not in ('fanart', 'poster', 'banner'): sickrage.app.log.error("Invalid image type " + str(image_type) + ", couldn't find it in the " + IndexerApi(INDEXER_TVDB).name + " object") return try: lINDEXER_API_PARMS = IndexerApi(INDEXER_TVDB).api_params.copy() t = IndexerApi(INDEXER_TVDB).indexer(**lINDEXER_API_PARMS) image_name = str(id) + '.' + image_type + '.jpg' try: if media_format == "thumb": image_path = os.path.join(ImageCache()._thumbnails_dir(), image_name) if not os.path.exists(image_path): image_url = t.images(int(id), key_type=image_type)[0]['thumbnail'] sickrage.app.wsession.download(image_url, image_path) else: image_path = os.path.join(ImageCache()._cache_dir(), image_name) if not os.path.exists(image_path): image_url = t.images(int(id), key_type=image_type)[0]['filename'] sickrage.app.wsession.download(image_url, image_path) except (KeyError, IndexError): return if image_type == 'banner': return Banner(int(id), media_format).url elif image_type == 'fanart': return FanArt(int(id), media_format).url elif image_type == 'poster': return Poster(int(id), media_format).url except (indexer_error, IOError) as e: sickrage.app.log.warning( "{}: Unable to look up show on ".format(id) + IndexerApi(INDEXER_TVDB).name + ", not downloading images: {}".format(e.message))
def indexerImage(id=None, which=None): media_format = ('normal', 'thumb')[which in ('banner_thumb', 'poster_thumb', 'small')] image_type = which[0:6] if image_type not in ('fanart', 'poster', 'banner'): sickrage.app.log.error("Invalid image type " + str(image_type) + ", couldn't find it in the " + IndexerApi(INDEXER_TVDB).name + " object") return try: lINDEXER_API_PARMS = IndexerApi(INDEXER_TVDB).api_params.copy() t = IndexerApi(INDEXER_TVDB).indexer(**lINDEXER_API_PARMS) image_name = str(id) + '.' + image_type + '.jpg' if media_format == "thumb": image_path = os.path.join(ImageCache()._thumbnails_dir(), image_name) if not os.path.exists(image_path): image_data = t.images(int(id), key_type=image_type) if image_data: image_url = image_data[0]['thumbnail'] WebSession().download(image_url, image_path) else: image_path = os.path.join(ImageCache()._cache_dir(), image_name) if not os.path.exists(image_path): image_data = t.images(int(id), key_type=image_type) if image_data: image_url = image_data[0]['filename'] WebSession().download(image_url, image_path) except (KeyError, IndexError): pass if image_type == 'banner': return Banner(int(id), media_format) elif image_type == 'fanart': return FanArt(int(id), media_format) elif image_type == 'poster': return Poster(int(id), media_format)
def indexerImage(id=None, which=None): media_format = ('normal', 'thumb')[which in ('banner_thumb', 'poster_thumb', 'small')] image_type = which[0:6] if image_type not in ('fanart', 'poster', 'banner'): sickrage.app.log.error( "Invalid image type " + str(image_type) + ", couldn't find it in the " + IndexerApi( INDEXER_TVDB).name + " object") return try: lINDEXER_API_PARMS = IndexerApi(INDEXER_TVDB).api_params.copy() t = IndexerApi(INDEXER_TVDB).indexer(**lINDEXER_API_PARMS) image_name = str(id) + '.' + image_type + '.jpg' try: if media_format == "thumb": image_path = os.path.join(ImageCache()._thumbnails_dir(), image_name) if not os.path.exists(image_path): image_url = t.images(int(id), key_type=image_type)[0]['thumbnail'] sickrage.app.wsession.download(image_url, image_path) else: image_path = os.path.join(ImageCache()._cache_dir(), image_name) if not os.path.exists(image_path): image_url = t.images(int(id), key_type=image_type)[0]['filename'] sickrage.app.wsession.download(image_url, image_path) except (KeyError, IndexError): return if image_type == 'banner': return Banner(int(id), media_format).url elif image_type == 'fanart': return FanArt(int(id), media_format).url elif image_type == 'poster': return Poster(int(id), media_format).url except (indexer_error, IOError) as e: sickrage.app.log.warning("{}: Unable to look up show on ".format(id) + IndexerApi( INDEXER_TVDB).name + ", not downloading images: {}".format(e.message))
def _retrieve_show_image(self, image_type, show_obj, which=0): """ Gets an image URL from theTVDB.com and fanart.tv, downloads it and returns the data. image_type: type of image to retrieve (currently supported: fanart, poster, banner) show_obj: a TVShow object to use when searching for the image which: optional, a specific numbered poster to look for Returns: the binary image data if available, or else None """ image_data = None indexer_lang = show_obj.lang or sickrage.app.config.indexer_default_language if image_type not in ('fanart', 'poster', 'series', 'poster_thumb', 'series_thumb', 'fanart_thumb'): sickrage.app.log.warning("Invalid image type " + str(image_type) + ", couldn't find it in the " + IndexerApi(show_obj.indexer).name + " object") return # There's gotta be a better way of doing this but we don't wanna # change the language value elsewhere lINDEXER_API_PARMS = IndexerApi(show_obj.indexer).api_params.copy() lINDEXER_API_PARMS['language'] = indexer_lang if show_obj.dvdorder != 0: lINDEXER_API_PARMS['dvdorder'] = True t = IndexerApi(show_obj.indexer).indexer(**lINDEXER_API_PARMS) is_image_thumb = '_thumb' in image_type image_types = { '{}'.format(image_type): { 'indexer': lambda: t.images(show_obj.indexer_id, key_type=image_type.replace('_thumb', ''))[which][('filename', 'thumbnail')[is_image_thumb]], 'fanart': lambda: self._retrieve_show_images_from_fanart(show_obj, image_type.replace('_thumb', ''), is_image_thumb) } } for fname in ['indexer', 'fanart']: try: image_url = image_types[image_type][fname]() if image_url: image_data = self.get_show_image(image_url) if image_data: break except (KeyError, IndexError, TypeError) as e: pass return image_data