@ -14,7 +14,7 @@ import requests
from urllib3 . util . retry import Retry
from requests . adapters import HTTPAdapter
from six import iteritems
from six import integer_types , i teritems
from sg_helpers import get_url , try_int
from lib . dateutil . parser import parser
# noinspection PyProtectedMember
@ -29,7 +29,6 @@ from lib.pytvmaze import tvmaze
# noinspection PyUnreachableCode
if False :
from typing import Any , AnyStr , Dict , List , Optional
from six import integer_types
from lib . pytvmaze . tvmaze import Episode as TVMazeEpisode , Show as TVMazeShow
log = logging . getLogger ( ' tvmaze.api ' )
@ -167,7 +166,7 @@ class TvMaze(TVInfoBase):
elif t == TVINFO_IMDB :
if not self . config . get ( ' cache_search ' ) or ( None is shows and not is_none ) :
try :
show = tvmaze . lookup_imdb ( ( p , ' tt %07 d ' % p ) [ not str ( p ) . startswith ( ' tt ' ) ] )
show = tvmaze . lookup_imdb ( ( p , ' tt %08 d ' % p ) [ not str ( p ) . startswith ( ' tt ' ) ] )
self . _set_cache_entry ( cache_id_key , show , expire = self . search_cache_expire )
except ( BaseException , Exception ) :
continue
@ -564,94 +563,97 @@ class TvMaze(TVInfoBase):
"""
make out of TVMazeEpisode object and optionally TVMazeShow a TVInfoEpisode
"""
tv_s = TVInfoShow ( )
tv_s . seriesname = show_data . name
tv_s . id = show_data . maze_id
tv_s . seriesid = tv_s . id
tv_s . language = show_data . language
tv_s . overview = show_data . summary
tv_s . firstaired = show_data . premiered
tv_s . runtime = show_data . average_runtime or show_data . runtime
tv_s . vote_average = show_data . rating and show_data . rating . get ( ' average ' )
tv_s . popularity = show_data . weight
tv_s . genre_list = show_data . genres or [ ]
tv_s . genre = ' , ' . join ( tv_s . genre_list )
tv_s . official_site = show_data . official_site
tv_s . status = show_data . status
tv_s . show_type = show_data . type
tv_s . lastupdated = show_data . updated
tv_s . poster = show_data . image and show_data . image . get ( ' original ' )
tv_s . aliases = [ a . name for a in show_data . akas ]
ti_show = TVInfoShow ( )
ti_show . seriesname = show_data . name
ti_show . id = show_data . maze_id
ti_show . seriesid = ti_show . id
ti_show . language = show_data . language
ti_show . overview = show_data . summary
ti_show . firstaired = show_data . premiered
ti_show . runtime = show_data . average_runtime or show_data . runtime
ti_show . vote_average = show_data . rating and show_data . rating . get ( ' average ' )
ti_show . popularity = show_data . weight
ti_show . genre_list = show_data . genres or [ ]
ti_show . genre = ' , ' . join ( ti_show . genre_list )
ti_show . official_site = show_data . official_site
ti_show . status = show_data . status
ti_show . show_type = show_data . type
ti_show . lastupdated = show_data . updated
ti_show . poster = show_data . image and show_data . image . get ( ' original ' )
ti_show . aliases = [ a . name for a in show_data . akas ]
if ' days ' in show_data . schedule :
tv_s . airs_dayofweek = ' , ' . join ( show_data . schedule [ ' days ' ] )
ti_show . airs_dayofweek = ' , ' . join ( show_data . schedule [ ' days ' ] )
network = show_data . network or show_data . web_channel
if network :
tv_s . network_is_stream = None is not show_data . web_channel
tv_s . network = network . name
tv_s . network_id = network . maze_id
tv_s . network_country = network . country
tv_s . network_country_code = network . code
tv_s . network_timezone = network . timezone
ti_show . network_is_stream = None is not show_data . web_channel
ti_show . network = network . name
ti_show . network_id = network . maze_id
ti_show . network_country = network . country
ti_show . network_country_code = network . code
ti_show . network_timezone = network . timezone
if get_images and show_data . images :
b_set , f_set , p_set = False , False , False
for img in show_data . images :
img_type = img_type_map . get ( img . type , TVInfoImageType . other )
img_width , img_height = img . resolutions [ ' original ' ] . get ( ' width ' ) , \
img . resolutions [ ' original ' ] . get ( ' height ' )
for cur_ img in show_data . images :
img_type = img_type_map . get ( cur_ img. type , TVInfoImageType . other )
img_width , img_height = cur_ img. resolutions [ ' original ' ] . get ( ' width ' ) , \
cur_ img. resolutions [ ' original ' ] . get ( ' height ' )
img_ar = img_width and img_height and float ( img_width ) / float ( img_height )
img_ar_type = self . _which_type ( img_width , img_ar )
if TVInfoImageType . poster == img_type and img_ar and img_ar_type != img_type and \
tv_s . poster == img . resolutions . get ( ' original ' ) [ ' url ' ] :
ti_show . poster == cur_ img. resolutions . get ( ' original ' ) [ ' url ' ] :
p_set = False
tv_s . poster = None
tv_s . poster_thumb = None
ti_show . poster = None
ti_show . poster_thumb = None
img_type = ( TVInfoImageType . other , img_type ) [
not img_ar or img_ar_type == img_type or
img_type not in ( TVInfoImageType . banner , TVInfoImageType . poster , TVInfoImageType . fanart ) ]
img_src = { }
for res , img_url in iteritems ( img . resolutions ) :
img_size = img_size_map . get ( res )
for cur_ res, cur_ img_url in iteritems ( cur_ img. resolutions ) :
img_size = img_size_map . get ( cur_ res)
if img_size :
img_src [ img_size ] = img_url . get ( ' url ' )
tv_s . images . setdefault ( img_type , [ ] ) . append (
img_src [ img_size ] = cur_ img_url. get ( ' url ' )
ti_show . images . setdefault ( img_type , [ ] ) . append (
TVInfoImage (
image_type = img_type , sizes = img_src , img_id = img . id , main_image = img . main ,
type_str = img . type , width = img_width , height = img_height , aspect_ratio = img_ar ) )
image_type = img_type , sizes = img_src , img_id = cur_ img. id , main_image = cur_ img. main ,
type_str = cur_ img. type , width = img_width , height = img_height , aspect_ratio = img_ar ) )
if not p_set and TVInfoImageType . poster == img_type :
p_set = True
tv_s . poster = img . resolutions . get ( ' original ' ) [ ' url ' ]
tv_s . poster_thumb = img . resolutions . get ( ' original ' ) [ ' url ' ]
elif not b_set and ' banner ' == img . type and TVInfoImageType . banner == img_type :
ti_show . poster = cur_ img. resolutions . get ( ' original ' ) [ ' url ' ]
ti_show . poster_thumb = cur_ img. resolutions . get ( ' original ' ) [ ' url ' ]
elif not b_set and ' banner ' == cur_ img. type and TVInfoImageType . banner == img_type :
b_set = True
tv_s . banner = img . resolutions . get ( ' original ' ) [ ' url ' ]
tv_s . banner_thumb = img . resolutions . get ( ' medium ' ) [ ' url ' ]
elif not f_set and ' background ' == img . type and TVInfoImageType . fanart == img_type :
ti_show . banner = cur_ img. resolutions . get ( ' original ' ) [ ' url ' ]
ti_show . banner_thumb = cur_ img. resolutions . get ( ' medium ' ) [ ' url ' ]
elif not f_set and ' background ' == cur_ img. type and TVInfoImageType . fanart == img_type :
f_set = True
tv_s . fanart = img . resolutions . get ( ' original ' ) [ ' url ' ]
tv_s . ids = TVInfoIDs (
ti_show . fanart = cur_ img. resolutions . get ( ' original ' ) [ ' url ' ]
ti_show . ids = TVInfoIDs (
tvdb = show_data . externals . get ( ' thetvdb ' ) , rage = show_data . externals . get ( ' tvrage ' ) , tvmaze = show_data . id ,
imdb = show_data . externals . get ( ' imdb ' ) and try_int ( show_data . externals . get ( ' imdb ' ) . replace ( ' tt ' , ' ' ) , None ) )
tv_s . imdb_id = show_data . externals . get ( ' imdb ' ) and try_int ( show_data . externals . get ( ' imdb ' ) . replace ( ' tt ' , ' ' ) )
ep_obj = TVInfoEpisode ( )
ep_obj . id = episode_data . maze_id
ep_obj . seasonnumber = episode_data . season_number
ep_obj . episodenumber = episode_data . episode_number
ep_obj . episodename = episode_data . title
ep_obj . airtime = episode_data . airtime
ep_obj . firstaired = episode_data . airdate
ti_show . imdb_id = show_data . externals . get ( ' imdb ' )
if isinstance ( ti_show . imdb_id , integer_types ) :
ti_show . imdb_id = ' tt %08d ' % ti_show . imdb_id
ti_episode = TVInfoEpisode ( )
ti_episode . id = episode_data . maze_id
ti_episode . seasonnumber = episode_data . season_number
ti_episode . episodenumber = episode_data . episode_number
ti_episode . episodename = episode_data . title
ti_episode . airtime = episode_data . airtime
ti_episode . firstaired = episode_data . airdate
if episode_data . airstamp :
try :
at = _datetime_to_timestamp ( tz_p . parse ( episode_data . airstamp ) )
ep_obj . timestamp = at
ti_episode . timestamp = at
except ( BaseException , Exception ) :
pass
ep_obj . filename = episode_data . image and ( episode_data . image . get ( ' original ' ) or
episode_data . image . get ( ' medium ' ) )
ep_obj . is_special = episode_data . is_special ( )
ep_obj . overview = episode_data . summary
ep_obj . runtime = episode_data . runtime
ep_obj . show = tv_s
return ep_obj
ti_episode . filename = episode_data . image and ( episode_data . image . get ( ' original ' ) or
episode_data . image . get ( ' medium ' ) )
ti_episode . is_special = episode_data . is_special ( )
ti_episode . overview = episode_data . summary
ti_episode . runtime = episode_data . runtime
ti_episode . show = ti_show
return ti_episode
def _filtered_schedule ( self , condition , get_images = False ) :
try :
@ -660,5 +662,5 @@ class TvMaze(TVInfoBase):
if condition ( e ) and ( None is e . show . language or re . search ( ' (?i)eng|jap ' , e . show . language ) ) ] ,
key = lambda x : x . show . premiered or x . airstamp )
return [ self . _make_episode ( r , r . show , get_images ) for r in result ]
except ( BaseException , Exception ) as e :
except ( BaseException , Exception ) :
return [ ]