U
    9%eq5                     @   sL  d Z ddlZddlZddlmZ ddlZzddlZW n ek
rL   dZY nX zddlZW n ek
rr   dZY nX ddl	m
Z
mZmZmZmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZ e Ze Ze Z e Z!e Z"ej#j$edkd	d
ej#%ded egdd Z&ej#j$edkdd
dd Z'dd Z(dd Z)dd Z*ej#j%dedfedfedfgdddgdd d! Z+ej#j%dee e"gdddgdd"d# Z,ej#j-d$d% Z.ej#j-d&d' Z/ej#j-ej#%d(d)d*gd+d, Z0ej#j-d-d. Z1ej#j-ej#j$edkd/d
d0d1 Z2ej#j-ej#j$edkd/d
d2d3 Z3ej#j$edk	d4d
d5d6 Z4ej#j$edk	d7d
ej#%d8e
eegd9d: Z5ej#j-ej#j$edkd	d
ej#j%d;ee
feefgd<dgdd=d> Z6ej#j-ej#j$edkd	d
d?d@ Z7ej#j-ej#j$edkd	d
ej#j$edkdd
dAdB Z8ej#j-dCdD Z9dS )EzK
Test the downloader classes and functions separately from the Pooch core.
    N)TemporaryDirectory   )	HTTPDownloaderFTPDownloaderSFTPDownloaderDOIDownloaderchoose_downloaderFigshareRepositoryZenodoRepositoryDataverseRepository
doi_to_url)Unzip   )pooch_test_urlcheck_large_datacheck_tiny_datadata_over_ftppooch_test_figshare_urlpooch_test_zenodo_url pooch_test_zenodo_with_slash_urlpooch_test_dataverse_urlzrequires tqdm)reasonurltiny-data.txtc                 C   s   t | dd}|jdkstdS )DThe progressbar keyword argument must pass through choose_downloaderTprogressbarNr   r   AssertionErrorr   
downloader r!   [/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/pooch/tests/test_downloaders.pytest_progressbar_kwarg_passed9   s    
r#   zrequires paramikoc                  C   s"   d} t | dd}|jdkstdS )r   /sftp://test.rebex.net/pub/example/pocketftp.pngTr   Nr   r   r!   r!   r"   "test_progressbar_kwarg_passed_sftpG   s    r%   c                	   C   s@   t t td W 5 Q R X t t td W 5 Q R X dS )z6Should raise ValueError when protocol is not supportedzhttpup://some-invalid-url.comzdoii:XXX/XXX/fileN)pytestraises
ValueErrorr   r!   r!   r!   r"   test_unsupported_protocolO   s    r)   c               	   C   s<   t t} t dddd W 5 Q R X dt| jks8tdS )z/Should fail if data repository is not supportedz%doi:10.21105/joss.01943/file_name.txtN)r   Zoutput_filepoochz(Invalid data repository 'joss.theoj.org')r&   r'   r(   r   strvaluer   excr!   r!   r"   test_invalid_doi_repositoryX   s      r/   c               	   C   s6   t t} tdd W 5 Q R X dt| jks2tdS )z#Should fail if the DOI is not foundZNOTAREALDOI)doizIs the DOI correct?N)r&   r'   r(   r   r+   r,   r   r-   r!   r!   r"   test_doi_url_not_foundb   s    r1   zrepository,doiz10.6084/m9.figshare.14763051.v1z10.5281/zenodo.4924875z10.11588/data/TKCFEFfigshareZzenodoZ	dataverse)Zidsc              	   C   sL   t t&}t|}| ||}|jdd W 5 Q R X dt|jksHtdS )z3Should fail if the file is not found in the archivezbla.txt)	file_namezFile 'bla.txt' not foundN)	r&   r'   r(   r   Z
initializedownload_urlr+   r,   r   )
repositoryr0   r.   r   repor!   r!   r"    test_figshare_url_file_not_foundi   s
    r7   c              	   C   sB   t  2}t }tj|d}|| d |d t| W 5 Q R X dS )zTest the DOI downloaderr   N)r   r   ospathjoinr   )r   local_storer    outfiler!   r!   r"   test_doi_downloader{   s
    r=   c               	   C   sf   t  V} td }t }tj| d}|||d t |ddd}dd |D \}t| W 5 Q R X dS )zf
    Test the Zenodo downloader when the path contains a forward slash

    Related to issue #336
    z!santisoler/pooch-test-data-v1.zipztest-data.zipNdownload)actionr*   c                 S   s   g | ]}d |kr|qS )r   r!   ).0fr!   r!   r"   
<listcomp>   s      z>test_zenodo_downloader_with_slash_in_fname.<locals>.<listcomp>)r   ZENODOURL_W_SLASHr   r8   r9   r:   r   r   )r;   base_urlr    r<   fnamesfnamer!   r!   r"   *test_zenodo_downloader_with_slash_in_fname   s    rG   c               
   C   s   t } | d| d d } | dd }d| d}t D}t }tj|d}tjt	|d	 || d |d W 5 Q R X W 5 Q R X dS )
zf
    Test if passing a Figshare url without a version warns about it, but still
    downloads it.
    N./   zThe Figshare DOI 'z#' doesn't specify which version of r   )match)
FIGSHAREURLrindexr   r   r8   r9   r:   r&   ZwarnsUserWarning)r   r0   Zwarning_msgr;   r    r<   r!   r!   r"   !test_figshare_unspecified_version   s    rP   zversion, missing, present)r   7LC08_L2SP_218074_20190114_20200829_02_T1-cropped.tar.gzcropped-before.tar.gz)r   rR   rQ   c                 C   sL   d|  }d| d}t ||}dd |jD }||ks<t||ksHtdS )zG
    Test if setting the version in Figshare DOI works as expected
    z10.6084/m9.figshare.21665630.vzhttps://doi.org/rI   c                 S   s   g | ]}|d  qS )namer!   )r@   itemr!   r!   r"   rB      s     z:test_figshare_data_repository_versions.<locals>.<listcomp>N)r	   Zapi_responser   )versionmissingZpresentr0   r   r2   	filenamesr!   r!   r"   &test_figshare_data_repository_versions   s    

rX   c              
   C   sZ   t | dF}t 4}t| jd}tj|d}|||d t| W 5 Q R X W 5 Q R X dS )zTest ftp downloaderr   )portN)r   r   r   server_portr8   r9   r:   r   )	ftpserverr   r;   r    r<   r!   r!   r"   test_ftp_downloader   s    r\   zrequires paramiko to run SFTPc               	   C   sP   t  @} tddd}d}tj| d}|||d tj|sBtW 5 Q R X dS )zTest sftp downloaderdemopasswordusernamer^   r$   pocketftp.pngN)r   r   r8   r9   r:   existsr   )r;   r    r   r<   r!   r!   r"   test_sftp_downloader   s    rc   c                  C   sl   t  \} tddd}d}tj| d}t|d(}tt |||d W 5 Q R X W 5 Q R X W 5 Q R X dS )zFDownloader should fail when a file object rather than string is passedr]   r^   r_   r$   ra   wbN)	r   r   r8   r9   r:   openr&   r'   	TypeError)r;   r    r   r<   Zoutfile_objr!   r!   r"   (test_sftp_downloader_fail_if_file_object   s    rg   zparamiko must be missingc               	   C   s2   t t} t  W 5 Q R X dt| jks.tdS )z+test must fail if paramiko is not installedz
'paramiko'N)r&   r'   r(   r   r+   r,   r   r-   r!   r!   r"   -test_sftp_downloader_fail_if_paramiko_missing   s    rh   ztqdm must be missingr    c              	   C   s6   t t}| dd W 5 Q R X dt|jks2tdS )zFMake sure an error is raised if trying to use progressbar without tqdmTr   z'tqdm'N)r&   r'   r(   r+   r,   r   )r    r.   r!   r!   r"   !test_downloader_progressbar_fails   s    ri   zurl,downloaderhttpc           
   	   C   s   |dd}t  }d}| | } tj||}|| |d | }|jdd  }t|dksdt	t
jdkrtd	}	nd
}	|dd |	kst	t| W 5 Q R X dS )z@Setup a downloader function that prints a progress bar for fetchTr   r   NrK   O   win32100%|####################A   100%|████████████████████   )r   r8   r9   r:   
readouterrerrsplitstriplenr   sysplatformr   )
r   r    capsysr>   r;   rF   r<   capturedprintedprogressr!   r!   r"   test_downloader_progressbar  s    	

r|   c           	   
   C   s   t |d}td|jd}t |}tj|d}|||d |  }|j	dd 
 }t|dkshttjdkrxd	}nd
}|dd |kstt| W 5 Q R X W 5 Q R X dS )zESetup an FTP downloader function that prints a progress bar for fetchr   T)r   rY   Nrk   rK   rl   rm   rn   ro   rp   )r   r   rZ   r   r8   r9   r:   rq   rr   rs   rt   ru   r   rv   rw   r   )	rx   r[   r   r>   r;   r<   ry   rz   r{   r!   r!   r"   test_downloader_progressbar_ftp!  s    
r}   c              	   C   s   t dddd}t }d}tj|d}|||d |  }|jdd	  }t	|d
ks`t
tjdkrpd}nd}|dd |kst
tj|st
W 5 Q R X dS )zFSetup an SFTP downloader function that prints a progress bar for fetchTr]   r^   )r   r`   r^   r$   ra   Nrk   rK   rl   rm   rn   ro   rp   )r   r   r8   r9   r:   rq   rr   rs   rt   ru   r   rv   rw   rb   )rx   r    r;   r   r<   ry   rz   r{   r!   r!   r"    test_downloader_progressbar_sftp:  s    
r~   c              	   C   s   G dd d}|dd}t |d}t `}d}t| }tj|d}|||d |  }|jdd 	 }	d	}
|	|
ks|t
t| W 5 Q R X dS )
zASetup a downloader function with an arbitrary progress bar class.c                   @   sD   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	dd Z
dS )zEtest_downloader_arbitrary_progressbar.<locals>.MinimalProgressDisplayz&A minimalist replacement for tqdm.tqdmc                 S   s   d| _ || _d S )Nr   )counttotal)selfr   r!   r!   r"   __init__Y  s    zNtest_downloader_arbitrary_progressbar.<locals>.MinimalProgressDisplay.__init__c                 S   s   t | jd t | j S )zrepresent current completionrI   )r+   r   r   r   r!   r!   r"   __repr__]  s    zNtest_downloader_arbitrary_progressbar.<locals>.MinimalProgressDisplay.__repr__c                 S   s   t d|  tjdd dS )zprint self.__repr__ to stderrrk    )fileendNprintrv   stderrr   r!   r!   r"   rendera  s    zLtest_downloader_arbitrary_progressbar.<locals>.MinimalProgressDisplay.renderc                 S   s   || _ |   dS )zmodify completion and renderN)r   r   )r   ir!   r!   r"   updatee  s    zLtest_downloader_arbitrary_progressbar.<locals>.MinimalProgressDisplay.updatec                 S   s
   d| _ dS )zset counter to 0r   N)r   r   r!   r!   r"   resetj  s    zKtest_downloader_arbitrary_progressbar.<locals>.MinimalProgressDisplay.resetc                   S   s   t dtjd dS )zprint a new empty liner   )r   Nr   r!   r!   r!   r"   closen  s    zKtest_downloader_arbitrary_progressbar.<locals>.MinimalProgressDisplay.closeN)__name__
__module____qualname____doc__r   r   r   r   r   staticmethodr   r!   r!   r!   r"   MinimalProgressDisplayV  s   r   N)r   r   zlarge-data.txtrk   rK   z336/336)r   r   BASEURLr8   r9   r:   rq   rr   rs   rt   r   r   )rx   r   Zpbarr>   r;   rF   r   r<   ry   rz   r{   r!   r!   r"   %test_downloader_arbitrary_progressbarR  s    

r   ):r   r8   rv   tempfiler   r&   ZtqdmImportErrorZparamikoZdownloadersr   r   r   r   r   r	   r
   r   r   Z
processorsr   utilsr   r   r   r   r   r   r   r   r   rM   Z	ZENODOURLrC   ZDATAVERSEURLmarkZskipifZparametrizer#   r%   r)   r/   r1   r7   r=   networkrG   rP   rX   r\   rc   rg   rh   ri   r|   r}   r~   r   r!   r!   r!   r"   <module>   s   

,(
	
	
	







