o
    óT·j
E  ã                   @   sØ   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Zd dl	Z	d dl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ de defd	d
„Z!de fdd„Z"G dd„ deƒZ#dS )é    N)ÚPath)ÚTestCase)Úpatch)ÚYouTubeTranscriptApiÚTranscriptsDisabledÚNoTranscriptFoundÚVideoUnavailableÚ	IpBlockedÚNotTranslatableÚTranslationLanguageNotAvailableÚCookiePathInvalidÚCookieInvalidÚFailedToCreateConsentCookieÚYouTubeRequestFailedÚInvalidVideoIdÚFetchedTranscriptÚFetchedTranscriptSnippetÚAgeRestrictedÚRequestBlockedÚVideoUnplayableÚPoTokenRequired)ÚGenericProxyConfigÚWebshareProxyConfigÚfilenameÚreturnc                 C   s   t djtj t¡| d�ƒS )Nz{dirname}/assets/{filename})Údirnamer   )r   ÚformatÚosÚpathr   Ú__file__)r   © r    úg/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/youtube_transcript_api/test/test_api.pyÚget_asset_path"   s
   ÿÿr"   c                 C   s<   t t| ƒdd��}| ¡ W  d   ƒ S 1 sw   Y  d S )NÚrb)Úmode)Úopenr"   Úread)r   Úfiler    r    r!   Ú
load_asset*   s   $ÿr(   c                   @   s”  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zed9ƒd:d;„ ƒZ ed9ƒd<d=„ ƒZ!ed9ƒd>d?„ ƒZ"ed9ƒd@dA„ ƒZ#ed9ƒdBdC„ ƒZ$e%j&j'dDdE�dFdG„ ƒZ(e%j&j'dDdE�dHdI„ ƒZ)e%j&j'dDdE�dJdK„ ƒZ*e%j&j'dDdE�dLdM„ ƒZ+dNS )OÚTestYouTubeTranscriptApic                 C   s’   t tdddd�tdddd�tddd	d�gd
dddd�| _| j ¡ | _t ¡  tjtjdt	dƒd� tjtj
dt	dƒd� tjtj
dt	dƒd� d S )NzHey, this is just a testg        g¤p=
×£ø?)ÚtextÚstartÚdurationz#this is not the original transcriptg¤p=
×£@z-just something shorter, I made up for testinggÍÌÌÌÌÌ@g¶óýÔxé	@ÚEnglishÚenFÚGJLlxj_dtq8)ÚsnippetsÚlanguageÚlanguage_codeÚis_generatedÚvideo_idú*https://www.youtube.com/youtubei/v1/playerzyoutube.innertube.json.static©Úbodyúhttps://www.youtube.com/watchzyoutube.html.staticú%https://www.youtube.com/api/timedtextztranscript.xml.static)r   r   Úref_transcriptÚto_raw_dataÚref_transcript_rawÚ	httprettyÚenableÚregister_uriÚPOSTr(   ÚGET©Úselfr    r    r!   ÚsetUp0   sN   ýýýõëýý
ýzTestYouTubeTranscriptApi.setUpc                 C   s   t  ¡  t  ¡  d S )N)r=   ÚresetÚdisablerB   r    r    r!   ÚtearDownZ   s   z!TestYouTubeTranscriptApi.tearDownc                 C   s   t ƒ  d¡}|  || j¡ d S )Nr/   )r   ÚfetchÚassertEqualr:   ©rC   Ú
transcriptr    r    r!   Ú
test_fetch^   s
   þz#TestYouTubeTranscriptApi.test_fetchc                 C   s.   t ƒ jddd�}d| jd _|  || j¡ d S )Nr/   T)Úpreserve_formattingz*this is <i>not</i> the original transcripté   )r   rH   r:   r*   rI   rJ   r    r    r!   Útest_fetch_formattedf   s   ÿþz-TestYouTubeTranscriptApi.test_fetch_formattedc                 C   s4   t jt jdtdƒd� tƒ  d¡}|  || j¡ d S )Nr5   z0youtube_altered_user_agent.innertube.json.staticr6   r/   )r=   r?   r@   r(   r   rH   rI   r:   rJ   r    r    r!   Ú#test_fetch__with_altered_user_agentr   s   ýþz<TestYouTubeTranscriptApi.test_fetch__with_altered_user_agentc                 C   s.   t ƒ  d¡}dd„ |D ƒ}|  |h d£¡ d S )Nr/   c                 S   s   h | ]}|j ’qS r    )r2   )Ú.0rK   r    r    r!   Ú	<setcomp>ƒ   s    z5TestYouTubeTranscriptApi.test_list.<locals>.<setcomp>>   ÚcsÚder.   ÚesÚhiÚjaÚkoÚzh)r   ÚlistrI   )rC   Útranscript_listÚlanguage_codesr    r    r!   Ú	test_list€   s
   ÿz"TestYouTubeTranscriptApi.test_listc                 C   s(   t ƒ  d¡}| dg¡}|  |j¡ d S )Nr/   rS   )r   rZ   Ú find_manually_created_transcriptÚassertFalser3   ©rC   r[   rK   r    r    r!   Ú test_list__find_manually_created‰   s   z9TestYouTubeTranscriptApi.test_list__find_manually_createdc                 C   s^   t ƒ  d¡}|  t¡� | dg¡ W d   ƒ n1 sw   Y  | dg¡}|  |j¡ d S )Nr/   rS   r.   )r   rZ   ÚassertRaisesr   Úfind_generated_transcriptÚ
assertTruer3   r`   r    r    r!   Útest_list__find_generated�   s   ÿz2TestYouTubeTranscriptApi.test_list__find_generatedc                 C   óR   t jt jdtdƒd� |  t¡� tƒ  d¡ W d   ƒ d S 1 s"w   Y  d S )Nr5   ú/youtube_video_unavailable.innertube.json.staticr6   z8https://www.youtube.com/youtubei/v1/player?v=GJLlxj_dtq8)r=   r?   r@   r(   rb   r   r   rZ   rB   r    r    r!   Útest_list__url_as_video_id™   s   ýÿ"ÿz3TestYouTubeTranscriptApi.test_list__url_as_video_idc                 C   s>   t ƒ  d¡ dg¡}| d¡}|  |jd¡ |  d|j¡ d S )Nr/   r.   Úarz	&tlang=ar)r   rZ   Úfind_transcriptÚ	translaterI   r2   ÚassertInÚ_url)rC   rK   Útranslated_transcriptr    r    r!   Útest_translate_transcript¥   s   
z2TestYouTubeTranscriptApi.test_translate_transcriptc                 C   sN   t ƒ  d¡ dg¡}|  t¡� | d¡ W d   ƒ d S 1 s w   Y  d S )Nr/   r.   Úxyz)r   rZ   rj   rb   r   rk   rJ   r    r    r!   Ú=test_translate_transcript__translation_language_not_available­   s   "ÿzVTestYouTubeTranscriptApi.test_translate_transcript__translation_language_not_availablec                 C   sT   t ƒ  d¡ dg¡}g |_|  t¡� | d¡ W d   ƒ d S 1 s#w   Y  d S )Nr/   r.   Úaf)r   rZ   rj   Útranslation_languagesrb   r
   rk   rJ   r    r    r!   Ú+test_translate_transcript__not_translatable³   s
   "ÿzDTestYouTubeTranscriptApi.test_translate_transcript__not_translatablec                 C   sT   t ƒ  dddg¡ t ¡ j}|  d|¡ |  t|d ƒd¡ |  |d d d¡ d S )Nr/   rT   r.   ÚlangrN   r   )r   rH   r=   Úlast_requestÚquerystringrl   rI   Úlen©rC   Úquery_stringr    r    r!   Ú$test_fetch__correct_language_is_usedº   s
   
z=TestYouTubeTranscriptApi.test_fetch__correct_language_is_usedc                 C   sj   t jt jdtdƒd� tƒ  dddg¡ t  ¡ j}|  d|¡ |  	t
|d ƒd¡ |  	|d d	 d¡ d S )
Nr5   z'youtube_ww1_nl_en.innertube.json.staticr6   ÚF1xioXWb8CYrT   r.   ru   rN   r   )r=   r?   r@   r(   r   rH   rv   rw   rl   rI   rx   ry   r    r    r!   Ú%test_fetch__fallback_language_is_usedÂ   s   ý
z>TestYouTubeTranscriptApi.test_fetch__fallback_language_is_usedc                 C   sb   t jt jdtdƒd� tƒ  d¡ |  tt  ¡ ƒd¡ t  ¡ dd … D ]}|  |j	d d¡ q#d S )	Nr8   ú youtube_consent_page.html.staticr6   r|   é   rN   Úcookiez'CONSENT=YES+cb.20210328-17-p0.de+FX+119)
r=   r?   rA   r(   r   rH   rI   rx   Úlatest_requestsÚheaders)rC   Úrequestr    r    r!   Ú+test_fetch__create_consent_cookie_if_neededÐ   s   ý
ÿÿzDTestYouTubeTranscriptApi.test_fetch__create_consent_cookie_if_neededc                 C   s`   t dƒD ]}tjtjdtdƒd� q|  t¡� tƒ  d¡ W d   ƒ d S 1 s)w   Y  d S )Né   r8   r~   r6   r|   )	Úranger=   r?   rA   r(   rb   r   r   rH   )rC   Ú_r    r    r!   Ú5test_fetch__exception_if_create_consent_cookie_failedÞ   s   ý"ÿzNTestYouTubeTranscriptApi.test_fetch__exception_if_create_consent_cookie_failedc                 C   rf   )Nr8   z(youtube_consent_page_invalid.html.staticr6   r|   )r=   r?   rA   r(   rb   r   r   rH   rB   r    r    r!   Ú3test_fetch__exception_if_consent_cookie_age_invalidé   ó   ý"ÿzLTestYouTubeTranscriptApi.test_fetch__exception_if_consent_cookie_age_invalidc                 C   rf   )Nr5   rg   r6   Úabc)r=   r?   r@   r(   rb   r   r   rH   rB   r    r    r!   Ú*test_fetch__exception_if_video_unavailableó   rŠ   zCTestYouTubeTranscriptApi.test_fetch__exception_if_video_unavailablec                 C   s^   t jt jddd� |  t¡�}tƒ  d¡ W d   ƒ n1 sw   Y  |  dt|j	ƒ¡ d S )Nr5   iô  ©Ústatusr‹   zRequest to YouTube failed: )
r=   r?   r@   rb   r   r   rH   rl   ÚstrÚ	exception©rC   Úcmr    r    r!   Ú.test_fetch__exception_if_youtube_request_failsý   s   ÿÿzGTestYouTubeTranscriptApi.test_fetch__exception_if_youtube_request_failsc                 C   rf   ©Nr8   z%youtube_too_many_requests.html.staticr6   r‹   ©r=   r?   rA   r(   rb   r	   r   rH   rB   r    r    r!   Ú6test_fetch__exception_if_youtube_request_limit_reached  s   ý"ÿzOTestYouTubeTranscriptApi.test_fetch__exception_if_youtube_request_limit_reachedc                 C   sN   t jt jddd� |  t¡� tƒ  d¡ W d   ƒ d S 1 s w   Y  d S )Nr9   i­  r�   r‹   )r=   r?   rA   rb   r	   r   rH   rB   r    r    r!   Ú8test_fetch__exception_if_timedtext_request_limit_reached  s   ý"ÿzQTestYouTubeTranscriptApi.test_fetch__exception_if_timedtext_request_limit_reachedc                 C   rf   )Nr5   z,youtube_age_restricted.innertube.json.staticr6   ÚNjp5uhTorCo)r=   r?   r@   r(   rb   r   r   rH   rB   r    r    r!   Ú'test_fetch__exception_if_age_restricted  rŠ   z@TestYouTubeTranscriptApi.test_fetch__exception_if_age_restrictedc                 C   rf   r”   r•   rB   r    r    r!   Ú#test_fetch__exception_if_ip_blocked)  rŠ   z<TestYouTubeTranscriptApi.test_fetch__exception_if_ip_blockedc                 C   rf   )Nr5   z/youtube_po_token_required.innertube.json.staticr6   r/   )r=   r?   r@   r(   rb   r   r   rH   rB   r    r    r!   Ú*test_fetch__exception_if_po_token_required3  rŠ   zCTestYouTubeTranscriptApi.test_fetch__exception_if_po_token_requiredc                 C   sb   t jt jdtdƒd� |  t¡�}tƒ  d¡ W d   ƒ n1 s!w   Y  |  dt	|j
ƒ¡ d S )Nr5   ú-youtube_request_blocked.innertube.json.staticr6   r˜   z)YouTube is blocking requests from your IP)r=   r?   r@   r(   rb   r   r   rH   rl   r�   r�   r‘   r    r    r!   Ú%test_fetch__exception_request_blocked=  s   ýÿz>TestYouTubeTranscriptApi.test_fetch__exception_request_blockedc                 C   s†   t jt jdtdƒd� |  t¡�}tƒ  d¡ W d   ƒ n1 s!w   Y  |j}|  	|j
d¡ |  	|jddg¡ |  dt|ƒ¡ d S )Nr5   z(youtube_unplayable.innertube.json.staticr6   r˜   zCustom ReasonzSub Reason 1zSub Reason 2)r=   r?   r@   r(   rb   r   r   rH   r�   rI   ÚreasonÚsub_reasonsrl   r�   )rC   r’   r�   r    r    r!   Ú test_fetch__exception_unplayableI  s   ýÿz9TestYouTubeTranscriptApi.test_fetch__exception_unplayablec                 C   sž   t jt jdtdƒd� |  t¡� tƒ  d¡ W d   ƒ n1 s!w   Y  t jt jdtdƒd� |  t¡� tƒ  d¡ W d   ƒ d S 1 sHw   Y  d S )Nr5   z2youtube_transcripts_disabled.innertube.json.staticr6   ÚdsMFmonKDD4z3youtube_transcripts_disabled2.innertube.json.staticÚFjg5lYqvzUs)r=   r?   r@   r(   rb   r   r   rH   rB   r    r    r!   Ú-test_fetch__exception_if_transcripts_disabledW  s    ýÿý"ÿzFTestYouTubeTranscriptApi.test_fetch__exception_if_transcripts_disabledc                 C   sR   |   t¡�}tƒ jddgd� W d   ƒ n1 sw   Y  |  dt|jƒ¡ d S )Nr/   Úcz)Ú	languageszNo transcripts were found for)rb   r   r   rH   rl   r�   r�   r‘   r    r    r!   Ú-test_fetch__exception_if_language_unavailablei  s   ÿzFTestYouTubeTranscriptApi.test_fetch__exception_if_language_unavailablezByoutube_transcript_api.proxies.GenericProxyConfig.to_requests_dictc                 C   s6   t ddd�}t|d� d¡}|  || j¡ | ¡  d S )Núhttp://localhost:8080©Úhttp_urlÚ	https_url©Úproxy_configr/   )r   r   rH   rI   r:   Úassert_any_call)rC   Úto_requests_dictr¬   rK   r    r    r!   Útest_fetch__with_proxyo  s   þ
ÿþz/TestYouTubeTranscriptApi.test_fetch__with_proxyc                 C   s<   t ddd�}t|d� d¡ t ¡ }|  |j d¡d¡ d S )NÚusernameÚpassword©Úproxy_usernameÚproxy_passwordr«   r/   Ú
ConnectionÚclose)r   r   rH   r=   rv   rI   r‚   Úget)rC   r®   r¬   rƒ   r    r    r!   Ú0test_fetch__with_proxy_prevent_alive_connections~  s   ÿzITestYouTubeTranscriptApi.test_fetch__with_proxy_prevent_alive_connectionsc                 C   sX   t dƒD ]}tjtjdtdƒd� qtddd�}t|d� d	¡ |  t	t 
¡ ƒd
¡ d S )Né   r5   rœ   r6   r°   r±   r²   r«   r˜   é	   )r†   r=   r?   r@   r(   r   r   rH   rI   rx   r�   )rC   r®   r‡   r¬   r    r    r!   Ú)test_fetch__with_proxy_retry_when_blocked‰  s   ýþzBTestYouTubeTranscriptApi.test_fetch__with_proxy_retry_when_blockedc                 C   s®   d}t |ƒD ]}tjtjdtdƒd� qtdd|d�}|  t¡�}t|d� 	d	¡ W d   ƒ n1 s3w   Y  |  
tt ¡ ƒ|d
 ¡ |  
|jj|¡ |  dt|jƒ¡ d S )Né   r5   rœ   r6   r°   r±   )r³   r´   Úretries_when_blockedr«   r˜   r…   ÚWebshare)r†   r=   r?   r@   r(   r   rb   r   r   rH   rI   rx   r�   r�   Ú_proxy_configrl   r�   )rC   r®   Úretriesr‡   r¬   r’   r    r    r!   Ú4test_fetch__with_webshare_proxy_reraise_when_blockedš  s$   ýýÿzMTestYouTubeTranscriptApi.test_fetch__with_webshare_proxy_reraise_when_blockedc                 C   s–   t jt jdtdƒd� tddd�}|  t¡�}t|d� d¡ W d   ƒ n1 s)w   Y  |  	t
t  ¡ ƒd¡ |  	|jj|¡ |  d	t|jƒ¡ d S )
Nr5   rœ   r6   r§   r¨   r«   r˜   r…   z!YouTube is blocking your requests)r=   r?   r@   r(   r   rb   r   r   rH   rI   rx   r�   r�   r¿   rl   r�   )rC   r®   r¬   r’   r    r    r!   Ú3test_fetch__with_generic_proxy_reraise_when_blocked°  s   ýþÿzLTestYouTubeTranscriptApi.test_fetch__with_generic_proxy_reraise_when_blockedzfThis test is temporarily disabled because cookie auth is currently not working due to YouTube changes.)rž   c                 C   s*   t dƒ}t|d� d¡}|  || j¡ d S )Núexample_cookies.txt©Úcookie_pathr/   )r"   r   rH   rI   r:   )rC   rÅ   rK   r    r    r!   Útest_fetch__with_cookiesÃ  s   þz1TestYouTubeTranscriptApi.test_fetch__with_cookiesc                 C   s8   t dƒ}t|d�}|jjj}|  dditj |¡¡ d S )NrÃ   rÄ   Ú
TEST_FIELDÚ
TEST_VALUE)	r"   r   Ú_fetcherÚ_http_clientÚcookiesrI   ÚrequestsÚutilsÚdict_from_cookiejar)rC   rÅ   Úytt_apiÚsession_cookiesr    r    r!   Útest_load_cookiesÐ  s   


þz*TestYouTubeTranscriptApi.test_load_cookiesc                 C   óB   t dƒ}|  t¡� t|d� W d   ƒ d S 1 sw   Y  d S )Nznonexistent_cookies.txtrÄ   )r"   rb   r   r   ©rC   rÅ   r    r    r!   Ú test_load_cookies__bad_file_pathß  ó   "ÿz9TestYouTubeTranscriptApi.test_load_cookies__bad_file_pathc                 C   rÒ   )Nzexpired_example_cookies.txtrÄ   )r"   rb   r   r   rÓ   r    r    r!   Ú#test_load_cookies__no_valid_cookiesè  rÕ   z<TestYouTubeTranscriptApi.test_load_cookies__no_valid_cookiesN),Ú__name__Ú
__module__Ú__qualname__rD   rG   rL   rO   rP   r]   ra   re   rh   ro   rq   rt   r{   r}   r„   rˆ   r‰   rŒ   r“   r–   r—   r™   rš   r›   r�   r    r£   r¦   r   r¯   r¸   r»   rÁ   rÂ   ÚpytestÚmarkÚskiprÆ   rÑ   rÔ   rÖ   r    r    r    r!   r)   /   sn    *	












ÿ
	ÿ
ÿ
ÿr)   )$rÚ   r   Úpathlibr   Úunittestr   Úunittest.mockr   rÌ   r=   Úyoutube_transcript_apir   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Úyoutube_transcript_api.proxiesr   r   r�   r"   r(   r)   r    r    r    r!   Ú<module>   s    P