
    `j                    l    d dl mZ d dlZd dlZd dlmZ ddlmZ ddlm	Z	 ddl
mZ  G d d	          ZdS )
    )annotationsN)Any   )
HttpClient)NormalizedMovie)strip_season_from_titlec                  P    e Zd ZddZdd	ZddZd dZd!dZd"dZd#d$dZ	d%dZ
dS )&TmdbResolverconfigdict[str, Any]httpr   c                   |pi | _         || _        t          j        | j        j                  | _        | j                             d          pd| _        | j                             d          pd| _	        | j                             dd          | _
        | j                             dd                              d          | _        | j                             d	g           | _        d S )
Napi_key read_access_tokenlanguagezvi-VNimage_base_urlz#https://image.tmdb.org/t/p/original/	overrides)r   r   logging	getLogger	__class____name__loggetr   r   r   rstripr   r   )selfr   r   s      moviebot\tmdb.py__init__zTmdbResolver.__init__   s    l	$T^%<=={y117R!%1D!E!E!K
G<<"koo.>@effmmnqrrb99    movier   returnc                    |                      |          }|r|                     ||          S |j        r0| j                            dd          r|                     |           |S )NenabledT)_find_overrideapply_mappingtmdb_idr   r   _apply_tmdb_metadata)r   r!   overrides      r   applyzTmdbResolver.apply   sm    &&u-- 	7%%eX666= 	-T[__Y== 	-%%e,,,r    mappingc                   t          |                    d          p|j        pd          |_        |                    d          p|j        |_        |                    d          }|#|                     |t          |                     |                    d          r't          t          |d                             |_        |                    d          rt          |d                   |_        | j	        
                    d|j        |j        |j                   |j        r0| j                            dd	          r|                     |           |S )
Nr'   r   
media_typeseasontitleyearz1Applied TMDB mapping source=%s slug=%s tmdb_id=%sr$   T)strr   r'   r-   _set_episode_seasonintr   r/   r0   r   infosourcesource_slugr   r(   )r   r!   r+   r.   s       r   r&   zTmdbResolver.apply_mapping    s/   GKK	22IemIrJJ";;|44H8HX&&$$UCKK888;;w 	I1#gg6F2G2GHHEK;;v 	.WV_--EJI5<Y^Yjlqlyzzz= 	-T[__Y== 	-%%e,,,r    dict[str, Any] | Nonec                   |j                                         }|j                                        }| j        D ]'}t	          |                    d          pd                                          }|r||k    rBt	          |                    d          pd                                          }|r
||k    r|c S |                    d          }|rt          j        t	          |          |t          j                  }|r\t          |          }	|                    d          }
|
r2t          |                    t          |
                              |	d<   |	c S )d S )Nr5   r   slugslug_pattern)flagsseason_groupr.   )r5   lowerr6   r   r1   r   rematch
IGNORECASEdictr3   group)r   r!   r5   r9   itemitem_source	item_slugpatternr?   resolvedr<   s              r   r%   zTmdbResolver._find_override/   sW   ##%% &&((N 	$ 	$Ddhhx006B77==??K {f44DHHV,,23399;;I Y$..hh~..G $Wt2=III $#DzzH#'88N#;#;L# Q-0S=N=N1O1O-P-P*#OOOtr    Nonec                   | j         s	| j        sd S |j        dk    rdnd}|                                 \  }}d| d|j         }	 | j                            |||          }n:# t          $ r-}| j        	                    d|j        ||           Y d }~d S d }~ww xY w|j        dk    rB|
                    d          p|
                    d          }|
                    d	          pd
}	nA|
                    d          p|
                    d          }|
                    d          pd
}	|r!t          t          |                    |_        |	r.t          |	                              dd          d         |_        |
                    d          s|
                    d          rCt          |
                    d          p|
                    d          p|j                  |_        |
                    d          rt          |d                   |_        |
                    d          r| j         |d          |_        |
                    d          r| j         |d          |_        |
                    d          s|
                    d          rG|
                    d          p|
                    d          pd
gd         }
t          |
          |_        |
                    d          rd |d         D             |_        |                     |j        |j                  }|
                    d          rt          |d                   |_        d S d S )Nr!   tvhttps://api.themoviedb.org/3/r   paramsheadersz7TMDB metadata lookup failed tmdb_id=%s type=%s error=%sr/   namerelease_dater   first_air_date-r   r   original_titleoriginal_nameoverviewposter_pathbackdrop_pathruntimeepisode_run_timegenresc                H    g | ]}|                     d           |d           S )rO   )r   ).0genres     r   
<listcomp>z5TmdbResolver._apply_tmdb_metadata.<locals>.<listcomp>f   s.    [[[eSYIZIZ[E&M[[[r    imdb_id)r   r   r-   _authr'   r   get_json	Exceptionr   warningr   r   r1   r/   splitr0   rS   contentr   
poster_urlbackdrop_urlrX   rZ   external_idsr_   )r   r!   	tmdb_typerM   rN   urldataexcr/   daterX   rh   s               r   r(   z!TmdbResolver._apply_tmdb_metadataD   sa   | 	D$: 	F$/7::GG	**,,IiII%-II	9%%c&'%JJDD 	 	 	HVX]XegpruvvvFFFFF	 w&&HHW%%9&)9)9E88N++1rDDHHV$$9(9(9E88,--3D 	>1#e**==EK 	4Ta003EJ88$%% 	x/)B)B 	x#&txx0@'A'A'vTXXoE^E^'vbgbv#w#wE 88J 	2Z 011EM88M"" 	M"&"5LtM7JLLE88O$$ 	Q$($7!Po9N!P!PE88I 	)$((+=">"> 	)hhy))Vdhh7I.J.J.RrdTU-VGLLEM88H 	\[[tH~[[[EL(()95=III&& 	9Y 788EMMM	9 	9s   A# #
B-"BBr-   r1   r'   c                &   |r| j         s	| j        si S |dk    rdnd}|                     d          \  }}d| d| d}	 | j                            |||          S # t
          $ r)}| j                            d	|||           i cY d }~S d }~ww xY w)
Nr!   rJ   F)include_languagerK   r   z/external_idsrL   z;TMDB external_ids lookup failed tmdb_id=%s type=%s error=%s)r   r   r`   r   ra   rb   r   rc   )r   r-   r'   ri   rM   rN   rj   rl   s           r   rh   zTmdbResolver.external_idsk   s     	t| 	D4J 	I)W44GG$	**e*<<PiPP'PPP	9%%c&'%JJJ 	 	 	HZ\cenpstttIIIIII	s    A 
B'BBBTro   bool%tuple[dict[str, str], dict[str, str]]c                f    |r	d| j         ini }i }| j        rd| j         |d<   n
| j        |d<   ||fS )Nr   zBearer Authorizationr   )r   r   r   )r   ro   rM   rN   s       r   r`   zTmdbResolver._authw   sV    0@H*dm,,b! 	-'I1G'I'IGO$$ $F9wr    r.   r3   c                <    |j         D ]}|j        D ]	}||_        
d S )N)serversepisodesr.   )r   r!   r.   serverepisodes        r   r2   z TmdbResolver._set_episode_season   s<    m 	( 	(F!? ( (!'(	( 	(r    N)r   r   r   r   )r!   r   r"   r   )r!   r   r+   r   r"   r   )r!   r   r"   r7   )r!   r   r"   rH   )r-   r1   r'   r1   r"   r   )T)ro   rp   r"   rq   )r!   r   r.   r3   r"   rH   )r   
__module____qualname__r   r*   r&   r%   r(   rh   r`   r2    r    r   r
   r
      s        : : : :         *%9 %9 %9 %9N
 
 
 
    ( ( ( ( ( (r    r
   )
__future__r   r   r>   typingr   r   r   modelsr   utilsr   r
   r{   r    r   <module>r      s    " " " " " "  				             # # # # # # * * * * * *w( w( w( w( w( w( w( w( w( w(r    