U
    <®/eã  ã                   @   sª  d dl Z d dlZd dlZd dlZd dlmZ ejdd ¡ Z	dd„ Z
dd„ Zdd	„ Zd%dd„Zej de ¡ ¡dd„ ƒZejjej de	¡dd„ ƒƒZejjej dej¡dd„ ƒƒZejjej dej¡dd„ ƒƒZejjdd„ ƒZejjej dej¡dd„ ƒƒZejjej dej¡dd„ ƒƒZejjej dej¡dd„ ƒƒZejjej dej¡dd „ ƒƒZejjej dej ¡d!d"„ ƒƒZ!ejjej dej"¡d#d$„ ƒƒZ#dS )&é    NF)Zrequires_tokenc                 C   sB   dD ]}|| kst ‚q| j d¡s&t ‚dD ]}|| jks*t ‚q*d S )N)ZattributionÚnameÚhttp)z{z}z{y}z{x})ÚAssertionErrorÚurlÚ
startswith)ÚproviderÚkeyÚoption© r
   úD/tmp/pip-unpacked-wheel-eve_l6qg/xyzservices/tests/test_providers.pyÚcheck_provider   s
    r   c           	      C   s–   |   dddgddgg¡}|d d |d d  d }|d d |d d  d }|   d	d¡|   d
d¡ d }t |||¡}|j}|j}|j}|||fS )NÚboundsiLÿÿÿi¦ÿÿÿé´   éZ   r   é   é   Zmin_zoomZmax_zoomé   )ÚgetÚ
mercantileÚtileÚzÚxÚy)	r   r   ZlatZlonZzoomr   r   r   r   r
   r
   r   Úget_tile   s    r   c                 C   sh   t  ¡ }t jjdd}| d|¡ | d|¡ z|j| dd}W n  t jk
r`   t d¡ Y nX |j	S )Né   )Úmax_retrieszhttp://zhttps://é   )ÚtimeoutzTimeout.)
ÚrequestsÚSessionÚadaptersÚHTTPAdapterÚmountr   ÚConnectionErrorÚpytestÚxfailÚstatus_code)r   ÚsÚaÚrr
   r
   r   Úget_response    s    r*   Tc           	      C   s<  |   d¡rt d¡ t| ƒ\}}}z(t| j|||dƒ}|tjjksHt	‚W nì t	k
r6   |dkrt|rtt d¡ n¾|dkrˆt d¡ nª|dkrœt d	¡ n–|d
kr$ddddddddddddddddg}g }|D ],}|\}}}t| j|||dƒ}| 
|¡ qÒtdd„ |D ƒƒs2td|› ƒ‚ntd|› ƒ‚Y nX d S )NÚstatuszProvider is known to be broken.)r   r   r   i“  z;Provider not available due to API restrictions (Error 403).i÷  z,Service temporarily unavailable (Error 503).iö  zBad Gateway (Error 502).i”  )é   ij  iS  )é   é   é   )é   i}  i½Y  )r   r   r   )r   r-   é   )r-   r/   é   )r-   r/   é    )r-   r/   é!   )r-   é   r2   )r-   r5   r3   )r-   r5   r4   )r-   é   r2   )r-   r6   r3   )r-   r6   r4   )é	   i  éµ   )r,   i  i‚  c                 s   s   | ]}|t jjkV  qd S ©N)r   ÚcodesÚok)Ú.0r   r
   r
   r   Ú	<genexpr>Y   s     z"get_test_result.<locals>.<genexpr>zResponse code: )r   r$   r%   r   r*   Z	build_urlr   r:   r;   r   ÚappendÚanyÚ
ValueError)	r   Ú	allow_403r   r   r   r)   ÚoptionsÚresultsÚor
   r
   r   Úget_test_result,   sN    


ð
rE   Úprovider_namec                 C   s   t  ¡ |  }t|ƒ d S r9   )ÚxyzÚflattenr   )rF   r   r
   r
   r   Útest_minimal_provider_metadata_   s    rI   r   c                 C   s&   t |  }d| krt d¡ t|ƒ d S )NÚStadiaz1Stadia doesn't support tile download in this way.)Ú	flat_freer$   ÚskiprE   )r   r   r
   r
   r   Útest_free_providerse   s    
rM   c                 C   s`   zt jd }W n tk
r,   t d¡ Y nX |dkr@t d¡ tj|  |d}t|dd d S )NZTHUNDERFORESTúMissing API token.Ú úToken empty.©ZapikeyF©rA   )ÚosÚenvironÚKeyErrorr$   r%   rG   ÚThunderforestrE   ©rF   Útokenr   r
   r
   r   Útest_thunderforests   s    
rY   c                 C   s`   zt jd }W n tk
r,   t d¡ Y nX |dkr@t d¡ tj|  |d}t|dd d S )NZJAWGrN   rO   rP   ©ZaccessTokenFrR   )rS   rT   rU   r$   r%   rG   ÚJawgrE   rW   r
   r
   r   Ú	test_jawg   s    
r\   c                  C   s\   zt jd } W n tk
r,   t d¡ Y nX | dkr@t d¡ tj| d}t|dd d S )NZMAPBOXrN   rO   rP   rZ   FrR   )rS   rT   rU   r$   r%   rG   ZMapBoxrE   )rX   r   r
   r
   r   Útest_mapbox   s    
r]   c                 C   s`   zt jd }W n tk
r,   t d¡ Y nX |dkr@t d¡ tj|  |d}t|dd d S )NZMAPTILERrN   rO   rP   ©r   FrR   )rS   rT   rU   r$   r%   rG   ÚMapTilerrE   rW   r
   r
   r   Útest_maptilerœ   s    
r`   c                 C   s`   zt jd }W n tk
r,   t d¡ Y nX |dkr@t d¡ tj|  |d}t|dd d S )NZTOMTOMrN   rO   rP   rQ   FrR   )rS   rT   rU   r$   r%   rG   ÚTomTomrE   rW   r
   r
   r   Útest_tomtomª   s    
rb   c                 C   s`   zt jd }W n tk
r,   t d¡ Y nX |dkr@t d¡ tj|  |d}t|dd d S )NZOPENWEATHERMAPrN   rO   rP   ©ZapiKeyFrR   )rS   rT   rU   r$   r%   rG   ÚOpenWeatherMaprE   rW   r
   r
   r   Útest_openweathermap¸   s    
re   c                 C   s`   zt jd }W n tk
r,   t d¡ Y nX |dkr@t d¡ tj|  |d}t|dd d S )NZHEREV3rN   rO   rP   rc   FrR   )rS   rT   rU   r$   r%   rG   ÚHEREv3rE   rW   r
   r
   r   Útest_herev3Æ   s    
rg   c                 C   sp   zt jd }W n tk
r,   t d¡ Y nX |dkr@t d¡ tj|  |d}|d d |d< t|dd	 d S )
NZSTADIArN   rO   rP   )Zapi_keyr   z?api_key={api_key}FrR   )rS   rT   rU   r$   r%   rG   rJ   rE   rW   r
   r
   r   Útest_stadiaÔ   s    
rh   c                 C   s`   zt jd }W n tk
r,   t d¡ Y nX |dkr@t d¡ tj|  |d}t|dd d S )NZORDNANCESURVEYrN   rO   rP   r^   FrR   )rS   rT   rU   r$   r%   rG   ÚOrdnanceSurveyrE   rW   r
   r
   r   Útest_osã   s    
rj   )T)$rS   r   r$   r   Zxyzservices.providersZ	providersrG   ÚfilterrH   rK   r   r   r*   rE   ÚmarkZparametrizerI   ÚrequestrM   rV   rY   r[   r\   r]   r_   r`   ra   rb   rd   re   rf   rg   rJ   rh   ri   rj   r
   r
   r
   r   Ú<module>   sP   
3

