§
   -AìÏ;8xã                   ó¦   — d Z ddlZddlZdZdZdZdZdZdZdZ	 ej
        ¦   «         Zdddd	œZd
„ Zd„ Zdefd„Zd„ Zdefd„ZdZdZd„ Zd„ Zdd„ZdS )u  TMDb access of the engine (docs/plan/pro-tebe/010 Â§4): every answer goes through the generic `http:` cache in
library.db (wcs/metadata/TMDbCache.py), so a rebuild is mostly offline. Errors are never cached.

Tests replace `FETCH` with a function (path, params) -> dict.
é    Nzhttps://api.themoviedb.org/3/zcs-CZzFcredits,keywords,recommendations,similar,content_ratings,release_datesiÀ¨  i u i �' )ÚnetworkÚcachedÚfailedc                 ó  — dd l }dd l}ddlm} t	          |¦  «        } ||                     d¦  «        ¦  «        |d<   |                     t          | z   |d¬¦  «        }|                     ¦   «          | 	                    ¦   «         S )Nr   )Úget_tmdb_api_keyzplugin.video.milionarÚapi_keyé   )ÚparamsÚtimeout)
ÚrequestsÚ	xbmcaddonÚwcs.metadata.TMDbClientr   ÚdictÚAddonÚgetÚBASEÚraise_for_statusÚjson)Úpathr
   r   r   r   ÚqueryÚresponses          ú\/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/foryou/api.pyÚ_httpr      s‘   € Ø€O€O€OØÐÐÐØ8Ð8Ð8Ð8Ð8Ð8Ý�‰LŒL€EØ'Ð'¨	¯ªÐ8OÑ(PÔ(PÑQÔQ€Eˆ)ÑØ�|Š|�D 4™K°¸rˆ|ÑBÔB€HØ×ÒÑÔÐØ�=Š=‰?Œ?Ðó    c                 óp   — t           5  t          | xx         dz  cc<   d d d ¦  «         d S # 1 swxY w Y   d S )Né   )Ú_counter_lockÚSTATS)Únames    r   Ú_countr    "   s‚   € Ý	ð ð ÝˆdˆˆŒ�qÑˆˆ‰ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ˆ+«/²/c           	      ób  — ddl m} t          |pi ¦  «        }|                     dt          ¦  «         |                     | ||¦  «        }|�t          d¦  «         |S 	 t          pt          | |¦  «        }nm# t          $ r`}t          d¦  «         t          j        d                     | t          |¦  «        j        |¦  «        t          j        ¦  «         Y d}~dS d}~ww xY wt!          |t          ¦  «        st          d¦  «         dS t          d¦  «         |                     | ||¦  «         |S )	z2Cached TMDb JSON or None (offline, no key, error).r   ©Ú	TMDbCacheÚlanguageNr   r   u+   [MilionÃ¡Å™ ProTebe] TMDb {} failed: {}: {}r   )Úwcs.metadatar#   r   Ú
setdefaultÚLANGUAGEÚget_from_cacher    ÚFETCHr   Ú	ExceptionÚxbmcÚlogÚformatÚtypeÚ__name__Ú
LOGWARNINGÚ
isinstanceÚset_to_cache)r   r
   Úttlr#   r   ÚdataÚexcs          r   r   r   '   sE  € à&Ð&Ð&Ð&Ð&Ð&Ý�&�,˜BÑÔ€FØ
×Ò�j¥(Ñ+Ô+Ð+Ø×%Ò% d¨F°CÑ8Ô8€FØÐÝˆxÑÔÐØˆðÝ��  fÑ-Ô-ˆˆøÝð ð ð ÝˆxÑÔÐÝŒÐ>×EÒEÀdÍDÐQTÉIÌIÔL^Ð`cÑdÔdÕfjÔfuÑvÔvÐvØˆtˆtˆtˆtˆtøøøøðøøøõ �d�DÑ!Ô!ð ÝˆxÑÔÐØˆtÝ
ˆ9ÑÔÐØ×Ò˜4 ¨Ñ.Ô.Ð.Ø€Ks   ÁA6 Á6
C Â ACÃC c                 ó~   — t          d                     | t          |¦  «        ¦  «        dt          it          ¦  «        S )Nz{}/{}Úappend_to_response)r   r-   ÚintÚDETAIL_APPENDÚ
TTL_DETAIL)ÚmediaÚtmdb_ids     r   Údetailr=   >   s/   € Ýˆw�~Š~˜e¥S¨¡\¤\Ñ2Ô2Ð5IÍ=Ð4YÕ[eÑfÔfÐfr   c                 ój   — t          | ||¦  «        pi }d„ |                      d¦  «        pg D ¦   «         S )Nc                 óf   — g | ].}t          |t          ¦  «        ¯|                     d ¦  «        ¯,|‘Œ/S )Úid)r1   r   r   )Ú.0Úrs     r   ú
<listcomp>zresults.<locals>.<listcomp>D   s7   € ÐXÐXÐX�!µJ¸qÅ$Ñ4GÔ4GÐXÈAÏEÊEÐRVÉKÌKÐXˆAÐXÐXÐXr   Úresults)r   )r   r
   r3   r4   s       r   rD   rD   B   s=   € Ýˆt�V˜SÑ!Ô!Ð' R€DØXÐX�t—x’x 	Ñ*Ô*Ð0¨bÐXÑXÔXÐXr   i€:	 zhttps://image.tmdb.org/t/p/w500c           	      óF  — ddl m} ddlm} d                     | t          |¦  «        ¦  «        }|                     |ddit          ¦  «        }|�&t          d¦  «         | 	                    d	¦  «        pd
S 	 t          pt          |ddi¦  «        }nm# t          $ r`}t          d¦  «         t          j        d                     |t          |¦  «        j        |¦  «        t          j        ¦  «         Y d}~d
S d}~ww xY wt          d¦  «          ||pi  	                    d¦  «        pg ¦  «        }|rMt$          |d         z   | 	                    d¦  «        pdt'          | 	                    d¦  «        pd¦  «        z  dœnd	d
i}	|                     |ddi|	¦  «         |	d	         S )z¶URL of the title's logo (Czech > English > textless, no SVG) or ''. Shares the cache entry of
    wcs/metadata/TMDbLogo.py (only the chosen logo is stored, not the whole image list).r   r"   )Ú	pick_logoz{}/{}/imagesÚkindÚlogoNr   ÚurlÚ Úinclude_image_languagez
cs,en,nullr   u+   [MilionÃ¡Å™ ProTebe] logo {} failed: {}: {}r   ÚlogosÚ	file_pathÚwidthÚheightr   )rI   Úaspect)r%   r#   Úwcs.metadata.TMDbLogorF   r-   r8   r(   ÚTTL_LOGOr    r   r)   r   r*   r+   r,   r.   r/   r0   Ú	LOGO_BASEÚfloatr2   )
r;   r<   r#   rF   Úendpointr   r4   r5   ÚchosenÚresults
             r   rH   rH   K   sÙ  € ð 'Ð&Ð&Ð&Ð&Ð&Ø/Ð/Ð/Ð/Ð/Ð/Ø×$Ò$ U­C°©L¬LÑ9Ô9€HØ×%Ò% h°¸Ð0@Å(ÑKÔK€FØÐÝˆxÑÔÐØ�zŠz˜%Ñ Ô Ð& BÐ&ðÝ�� Ð+CÀ\Ð*RÑSÔSˆˆøÝð ð ð ÝˆxÑÔÐÝŒÐ>×EÒEÀhÕPTÐUXÑPYÔPYÔPbÐdgÑhÔhÕjnÔjyÑzÔzÐzØˆrˆrˆrˆrˆrøøøøðøøøõ ˆ9ÑÔÐØˆY˜˜
 ×'Ò'¨Ñ0Ô0Ð6°BÑ7Ô7€Fàð#•Y ¨Ô!4Ñ4ÀÇÂÈGÑATÔATÐAYÐXYÕ]bÐci×cmÒcmÐnvÑcwÔcwÐc|Ð{|Ñ]}Ô]}Ñ@}Ð~Ð~Ð~Ø˜r�{ð à×Ò˜8 f¨fÐ%5°vÑ>Ô>Ð>Ø�%Œ=Ðs   Á7B Â
C;ÂAC6Ã6C;c                  óø   — i } dD ]t}t          d                     |¦  «        dt          ¦  «        pi }|                      d¦  «        pg D ]/}|                      d¦  «        pd| t          |d         ¦  «        <   Œ0Œu| S )z0{genre_id: localized name} for films and series.)ÚtvÚmoviezgenre/{}/listNÚgenresr   rJ   r@   )r   r-   Ú
TTL_GENRESr8   )Úoutr;   r4   Úgenres       r   Úgenre_namesr_   c   sŽ   € à
€CØ ð <ð <ˆÝ�?×)Ò)¨%Ñ0Ô0°$½
ÑCÔCÐIÀrˆØ—X’X˜hÑ'Ô'Ð-¨2ð 	<ð 	<ˆEØ$)§I¢I¨fÑ$5Ô$5Ð$;¸ˆC•�E˜$”KÑ Ô Ñ!Ð!ð	<à€Jr   é   c           	      ój  ‡ ‡‡‡‡— t          ‰ ¦  «        Š dgt          ‰ ¦  «        z  Š‰ s‰S ddiŠt          j        ¦   «         Šˆ ˆˆˆfd„Šˆfd„t	          t          |t          ‰ ¦  «        ¦  «        ¦  «        D ¦   «         }|D ]}|                     ¦   «          Œ|D ]}|                     ¦   «          Œ‰S )z]Run zero-argument callables on a few threads; results in the same order (None for a failure).NÚnextr   c                  óx  •— 	 ‰5  ‰d         } ‰dxx         dz  cc<   d d d ¦  «         n# 1 swxY w Y   | t          ‰¦  «        k    rd S 	  ‰|          ¦   «         ‰| <   n\# t          $ rO}t          j        d                     t          |¦  «        j        |¦  «        t          j        ¦  «         Y d }~nd }~ww xY wŒ¹)NTrb   r   u(   [MilionÃ¡Å™ ProTebe] task failed: {}: {})Úlenr*   r+   r,   r-   r.   r/   r0   )Úir5   ÚcallsÚindexÚlockÚresults_s     €€€€r   Úworkerzparallel.<locals>.workerv   s  ø€ ð		vØð #ð #Ø˜&”M�Ø�f��” Ñ"��‘ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð •C˜‘J”JŠˆØ�ðvØ&˜e Aœh™jœj�˜‘�øÝð vð vð vÝ”ÐC×JÒJÍ4ÐPSÉ9Ì9ÔK]Ð_bÑcÔcÕeiÔetÑuÔuÐuÐuÐuÐuÐuÐuøøøøðvøøøð		vs%   …*ª.±.ÁA Á
B8Á)AB3Â3B8c                 ó:   •— g | ]}t          j        ‰¬ ¦  «        ‘ŒS ))Útarget)Ú	threadingÚThread)rA   Ú_rj   s     €r   rC   zparallel.<locals>.<listcomp>�   s'   ø€ ÐXÐXÐX°1�yÔ vÐ.Ñ.Ô.ÐXÐXÐXr   )Úlistrd   rm   ÚLockÚrangeÚminÚstartÚjoin)rf   ÚworkersÚthreadsÚthreadrg   rh   ri   rj   s   `   @@@@r   Úparallelry   m   sì   øøøøø€ å�‰KŒK€EØˆv�˜E™
œ
Ñ"€HØð ØˆØ�QˆK€EÝŒ>ÑÔ€Dð
vð 
vð 
vð 
vð 
vð 
vð 
vð 
vð YÐXÐXÐX½½cÀ'Í3ÈuÉ:Ì:Ñ>VÔ>VÑ8WÔ8WÐXÑXÔX€GØð ð ˆØ�Š‰ŒˆˆØð ð ˆØ�Š‰ŒˆˆØ€Or   )r`   )Ú__doc__rm   r+   r   r'   r9   ÚTTL_LISTr:   r\   r)   rq   r   r   r   r    r   r=   rD   rR   rS   rH   r_   ry   © r   r   ú<module>r}      s  ððð ð
 Ð Ð Ð à €€€à&€Ø€ØX€Ø€Ø€
Ø€
à€Ø�	”Ñ Ô €Ø ¨aÐ0Ð0€ðð ð ðð ð ð
 ˜xð ð ð ð ð.gð gð gð  8ð Yð Yð Yð Yð
 €Ø-€	ðð ð ð0ð ð ðð ð ð ð ð r   