def merge_with_cert_desc(input_list, media_type):
    cert_list = get_certification_list(media_type)
    for item in input_list:
        if item['iso_3166_1'].upper() not in cert_list:
            continue
        hit = Utils.dictfind(lst=cert_list[item['iso_3166_1'].upper()],
                             key='certification',
                             value=item['certification'])
        if hit:
            item['meaning'] = hit['meaning']
    return input_list
def extended_tvshow_info(tvshow_id=None, cache_time=7, dbid=None):
    if not tvshow_id:
        return None
    session_str = ''
    response = get_tmdb_data(
        'tv/%s?append_to_response=alternative_titles,content_ratings,credits,external_ids,images,keywords,rating,similar,translations,videos&language=%s&include_image_language=en,null,%s&%s'
        % (tvshow_id, xbmcaddon.Addon().getSetting('LanguageID'),
           xbmcaddon.Addon().getSetting('LanguageID'), session_str),
        cache_time)
    if not response:
        return False
    videos = handle_tmdb_videos(
        response['videos']['results']) if 'videos' in response else []
    tmdb_id = Utils.fetch(response, 'id')
    external_ids = Utils.fetch(response, 'external_ids')
    if external_ids:
        imdb_id = Utils.fetch(external_ids, 'imdb_id')
        freebase_id = Utils.fetch(external_ids, 'freebase_id')
        tvdb_id = Utils.fetch(external_ids, 'tvdb_id')
        tvrage_id = Utils.fetch(external_ids, 'tvrage_id')
    artwork = get_image_urls(poster=response.get('poster_path'),
                             fanart=response.get('backdrop_path'))
    if len(response.get('episode_run_time', -1)) > 1:
        duration = '%i - %i' % (min(
            response['episode_run_time']), max(response['episode_run_time']))
    elif len(response.get('episode_run_time', -1)) == 1:
        duration = '%i' % response['episode_run_time'][0]
    else:
        duration = ''
    us_cert = Utils.dictfind(response['content_ratings']['results'],
                             'iso_3166_1', 'US')
    if us_cert:
        mpaa = us_cert['rating']
    elif response['content_ratings']['results']:
        mpaa = response['content_ratings']['results'][0]['rating']
    else:
        mpaa = ''
    genres = [item['name'] for item in response['genres']]
    tvshow = {
        'title': Utils.fetch(response, 'name'),
        'TVShowTitle': Utils.fetch(response, 'name'),
        'OriginalTitle': Utils.fetch(response, 'original_name'),
        'duration': duration,
        'duration(h)': Utils.format_time(duration, 'h'),
        'duration(m)': Utils.format_time(duration, 'm'),
        'id': tmdb_id,
        'tmdb_id': tmdb_id,
        'imdb_id': imdb_id,
        'freebase_id': freebase_id,
        'tvdb_id': tvdb_id,
        'tvrage_id': tvrage_id,
        'mpaa': mpaa,
        'genre': ' / '.join(genres),
        'credit_id': Utils.fetch(response, 'credit_id'),
        'Plot': Utils.clean_text(Utils.fetch(response, 'overview')),
        'year': Utils.get_year(Utils.fetch(response, 'first_air_date')),
        'media_type': 'tv',
        'Popularity': Utils.fetch(response, 'popularity'),
        'Rating': Utils.fetch(response, 'vote_average'),
        'country': Utils.fetch(response, 'original_language'),
        'User_Rating': str(Utils.fetch(response, 'rating')),
        'Votes': Utils.fetch(response, 'vote_count'),
        'Status': translate_status(Utils.fetch(response, 'status')),
        'path':
        'plugin://script.extendedinfo?info=extendedtvinfo&&id=%s' % tvshow_id,
        'trailer':
        'plugin://script.extendedinfo?info=playtvtrailer&&id=%s' % tvshow_id,
        'ShowType': Utils.fetch(response, 'type'),
        'homepage': Utils.fetch(response, 'homepage'),
        'last_air_date': Utils.fetch(response, 'last_air_date'),
        'first_air_date': Utils.fetch(response, 'first_air_date'),
        'TotalEpisodes': Utils.fetch(response, 'number_of_episodes'),
        'TotalSeasons': Utils.fetch(response, 'number_of_seasons'),
        'in_production': Utils.fetch(response, 'in_production'),
        'Release_Date': Utils.fetch(response, 'first_air_date'),
        'Premiered': Utils.fetch(response, 'first_air_date')
    }
    tvshow.update(artwork)
    if dbid:
        local_item = local_db.get_tvshow_from_db(dbid)
        tvshow.update(local_item)
    else:
        tvshow = local_db.merge_with_local_tvshow_info([tvshow])[0]
    tvshow['Rating'] = Utils.fetch(response, 'vote_average')
    listitems = {
        'actors': handle_tmdb_people(response['credits']['cast']),
        'similar': handle_tmdb_tvshows(response['similar']['results']),
        'studios': handle_tmdb_misc(response['production_companies']),
        'networks': handle_tmdb_misc(response['networks']),
        'certifications':
        handle_tmdb_misc(response['content_ratings']['results']),
        'crew': handle_tmdb_people(response['credits']['crew']),
        'genres': handle_tmdb_misc(response['genres']),
        'keywords': handle_tmdb_misc(response['keywords']['results']),
        'videos': videos,
        'seasons': handle_tmdb_seasons(response['seasons']),
        'images': handle_tmdb_images(response['images']['posters']),
        'backdrops': handle_tmdb_images(response['images']['backdrops'])
    }
    return (tvshow, listitems)
def extended_movie_info(movie_id=None, dbid=None, cache_time=14):
    if not movie_id:
        return None
    session_str = ''
    response = get_tmdb_data(
        'movie/%s?append_to_response=alternative_titles,credits,images,keywords,releases,videos,translations,similar,reviews,rating&include_image_language=en,null,%s&language=%s&%s'
        % (movie_id, xbmcaddon.Addon().getSetting('LanguageID'),
           xbmcaddon.Addon().getSetting('LanguageID'), session_str),
        cache_time)
    if not response:
        Utils.notify('Could not get movie information', sound=False)
        return {}
    mpaa = ''
    set_name = ''
    set_id = ''
    genres = [i['name'] for i in response['genres']]
    Studio = [i['name'] for i in response['production_companies']]
    authors = [
        i['name'] for i in response['credits']['crew']
        if i['department'] == 'Writing'
    ]
    directors = [
        i['name'] for i in response['credits']['crew']
        if i['department'] == 'Directing'
    ]
    us_cert = Utils.dictfind(response['releases']['countries'], 'iso_3166_1',
                             'US')
    if us_cert:
        mpaa = us_cert['certification']
    elif response['releases']['countries']:
        mpaa = response['releases']['countries'][0]['certification']
    movie_set = Utils.fetch(response, 'belongs_to_collection')
    if movie_set:
        set_name = Utils.fetch(movie_set, 'name')
        set_id = Utils.fetch(movie_set, 'id')
    artwork = get_image_urls(poster=response.get('poster_path'),
                             fanart=response.get('backdrop_path'))
    movie = {
        'title':
        Utils.fetch(response, 'title'),
        'Label':
        Utils.fetch(response, 'title'),
        'Tagline':
        Utils.fetch(response, 'tagline'),
        'duration':
        Utils.fetch(response, 'runtime'),
        'duration(h)':
        Utils.format_time(Utils.fetch(response, 'runtime'), 'h'),
        'duration(m)':
        Utils.format_time(Utils.fetch(response, 'runtime'), 'm'),
        'duration(hm)':
        Utils.format_time(Utils.fetch(response, 'runtime')),
        'mpaa':
        mpaa,
        'Director':
        ' / '.join(directors),
        'writer':
        ' / '.join(authors),
        'Budget':
        Utils.millify(Utils.fetch(response, 'budget')),
        'Revenue':
        Utils.millify(Utils.fetch(response, 'revenue')),
        'Homepage':
        Utils.fetch(response, 'homepage'),
        'Set':
        set_name,
        'SetId':
        set_id,
        'id':
        Utils.fetch(response, 'id'),
        'tmdb_id':
        Utils.fetch(response, 'id'),
        'imdb_id':
        Utils.fetch(response, 'imdb_id'),
        'Plot':
        Utils.clean_text(Utils.fetch(response, 'overview')),
        'OriginalTitle':
        Utils.fetch(response, 'original_title'),
        'Country':
        Utils.fetch(response, 'original_language'),
        'genre':
        ' / '.join(genres),
        'Rating':
        Utils.fetch(response, 'vote_average'),
        'Votes':
        Utils.fetch(response, 'vote_count'),
        'Adult':
        str(Utils.fetch(response, 'adult')),
        'Popularity':
        Utils.fetch(response, 'popularity'),
        'Status':
        translate_status(Utils.fetch(response, 'status')),
        'release_date':
        Utils.fetch(response, 'release_date'),
        'Premiered':
        Utils.fetch(response, 'release_date'),
        'Studio':
        ' / '.join(Studio),
        'year':
        Utils.get_year(Utils.fetch(response, 'release_date')),
        'path':
        'plugin://script.extendedinfo?info=extendedinfo&&id=%s' % movie_id,
        'trailer':
        'plugin://script.extendedinfo?info=playtrailer&&id=%s' % movie_id
    }
    movie.update(artwork)
    videos = handle_tmdb_videos(
        response['videos']['results']) if 'videos' in response else []
    if dbid:
        local_item = local_db.get_movie_from_db(dbid)
        movie.update(local_item)
    else:
        movie = local_db.merge_with_local_movie_info([movie])[0]
    movie['Rating'] = Utils.fetch(response, 'vote_average')
    listitems = {
        'actors': handle_tmdb_people(response['credits']['cast']),
        'similar': handle_tmdb_movies(response['similar']['results']),
        'studios': handle_tmdb_misc(response['production_companies']),
        'releases': handle_tmdb_misc(response['releases']['countries']),
        'crew': handle_tmdb_people(response['credits']['crew']),
        'genres': handle_tmdb_misc(response['genres']),
        'keywords': handle_tmdb_misc(response['keywords']['keywords']),
        'reviews': handle_tmdb_misc(response['reviews']['results']),
        'videos': videos,
        'images': handle_tmdb_images(response['images']['posters']),
        'backdrops': handle_tmdb_images(response['images']['backdrops'])
    }
    return (movie, listitems)