
    aca#                        d dl Z d dlmZ d dlmZ d dlmZmZ e j	        d             Z
e j	        d             Ze j	        d             Ze j	        d             Ze j	        d             Ze j	        d	             Ze j	        d
             Zd Zd Zd Zd Zd Zd Zd Ze j                            de          d             Ze j                            de          d             Zd Zd Zd ZdS )    N)URLError)TileProviderBunchc                  &    t          ddd          S )N*https://myserver.com/tiles/{z}/{x}/{y}.png(C) xyzservicesmy_public_providerurlattributionnamer        :lib/python3.11/site-packages/xyzservices/tests/test_lib.pybasic_providerr      s"    8%!   r   c                  (    t          dddd          S )N-https://myserver.com/tiles/{z}/{x}/{y}{r}.pngr   my_public_provider2@2x)r   r   r   rr   r   r   r   retina_providerr      s%    ;%"
	   r   c                  &    t          ddd          S )Nr   r   my_public_retina_provider3r
   r   r   r   r   silent_retina_providerr      s"    ;%)   r   c                  (    t          dddd          S )NzAhttps://myserver.com/tiles/{z}/{x}/{y}?access_token={accessToken}r   z<insert your access token here>my_private_provider)r   r   accessTokenr   r   r   r   r   private_providerr   $   s%    O%5"	   r   c                  (    t          dddd          S )Nr   r   C&copy; <a href="https://xyzservices.readthedocs.io">xyzservices</a>my_public_provider_html)r   r   html_attributionr   r   r   r   r   html_attr_providerr$   .   s%    8%^&	   r   c                  (    t          dddd          S )N.https://{s}.myserver.com/tiles/{z}/{x}/{y}.pngr   abcdmy_subdomain_provider)r   r   
subdomainsr   r   r   r   r   subdomain_providerr*   8   s%    <%$	   r   c           
      H    t          | |||t          ||                    S )N)r$   r*   )r   r   r   r   bunched)r   )r   r   r   r   r$   r*   s         r   
test_bunchr-   B   s?     %'5)1FX
 
 
   r   c                  B   d} t          j        t          | dz             5  t          i            d d d            n# 1 swxY w Y   t          j        t          | dz             5  t          ddi           d d d            n# 1 swxY w Y   t          j        t          | dz             5  t          dd	d
           d d d            n# 1 swxY w Y   t          j        t          | dz             5  t          dd	
           d d d            d S # 1 swxY w Y   d S )NzxThe attributes `name`, `url`, and `attribution` are required to initialise a `TileProvider`. Please provide values for: z`name`, `url`, `attribution`matchz`url`, `attribution`r   mynamez`attribution`my_urlmy_name)r   r   )pytestraisesAttributeErrorr   )msgs    r    test_expect_name_url_attributionr8   V   s%   	 
 
~S3Q-Q	R	R	R  R              	~S3I-I	J	J	J ) )fh'((() ) ) ) ) ) ) ) ) ) ) ) ) ) )	~S?-B	C	C	C ; ;Xy99:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	~S?-B	C	C	C 3 3	22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3sE   =AA&BBB-CCC5DDDc                    d}|                                  |k    sJ d}|                      ddd          |k    sJ |                      dddd          |k    sJ |                     ddd          |k    sJ d}|                     ddd          |k    sJ |                     dddd          |k    sJ d	}|                     dddd
          |k    sJ d}|                     d          |k    sJ t          j        t          d          5  |                                  d d d            n# 1 swxY w Y   d}|                     d          sJ d}|                                 sJ d S )Nr   z$https://myserver.com/tiles/3/1/2.png         r   )scale_factorz'https://myserver.com/tiles/3/1/2@2x.pngz'https://myserver.com/tiles/3/1/2@5x.pngz@5xz<https://myserver.com/tiles/{z}/{x}/{y}?access_token=my_tokenmy_token)r   z#Token is required for this providerr/   r&   F)fill_subdomainz,https://a.myserver.com/tiles/{z}/{x}/{y}.png)	build_urlr4   r5   
ValueError)r   r   r   r   r*   expecteds         r   test_build_urlrC   f   s    <H##%%11115H##Aq!,,8888##Aq!%#@@HLLLL!++Aq!44@@@@8H$$Q1--9999!++Aq!%+HHHTTTT8H$$Q15$AAXMMMMMH%%*%==IIII	z)N	O	O	O % %""$$$% % % % % % % % % % % % % % % @H''u'======H'')))))))s   D11D58D5c                 f    |                                  du sJ |                                 du sJ d S )NTFrequires_token)r   r   s     r   test_requires_tokenrG      sB    **,,4444((**e333333r   c                 Z   g d}|D ]}||                                  v sJ t          | |d          }g d}|                                 }||z   D ]}||v sJ 	|                    d          dk    sJ |                    d          dk    sJ |                    d          dk    sJ d S )	N)<div class="xyz-wrap"><div class="xyz-header">z3<div class="xyz-obj">xyzservices.TileProvider</div>z.<div class="xyz-name">my_public_provider</div>z<div class="xyz-details">z<dl class="xyz-attrs">zL<dt><span>url</span></dt><dd>https://myserver.com/tiles/{z}/{x}/{y}.png</dd>z9<dt><span>attribution</span></dt><dd>(C) xyzservices</dd>firstsecond)z,<div class="xyz-obj">xyzservices.Bunch</div>z#<div class="xyz-name">2 items</div>z<ul class="xyz-collapsible"><li class="xyz-child">z%<span>xyzservices.TileProvider</span>z<div class="xyz-inside">rN   r;   rI   r<   rJ   )_repr_html_r   count)r   r   provider_stringshtml_stringbunchbunch_strings
bunch_reprs          r   test_html_reprrV      s   	 	 	 ( ; ;n88:::::::NoFFGGE  M ""$$J'-7 ) )j(((((455::::455::::6771<<<<<<r   c                 \    |                                  }t          |t                    sJ d S )N)copy
isinstancer   )r   basic2s     r   	test_copyr[      s/      ""Ffl+++++++r   c                      t           j                            d          } t          | t                    sJ d| v sJ | d         dk    sJ t           j        j        d         dk    sJ d S )Nmykey)apikeyr   r^   
essentiels)xyzGeoportailFranceplanrY   r   )updated_providers    r   test_callablerd      s     +000@@&55555$$$$$H%0000$X.,>>>>>>r   c                 D    | j         | j        k    sJ |j         dk    sJ d S )Nr!   )r#   r   )r   r$   s     r   test_html_attribution_fallbackrf      sA    *n.HHHHH+P	Q    r   ztimeout error)reasonr5   c                  \    t          j        d          } t          | t                     sJ d S )Nz!OpenStreetMap Standard aka Mapnik)r   from_qmsrY   providers    r   test_from_qmsrl      s/    $%HIIHh-------r   c                      t          j        t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )NLolWut)r4   r5   rA   r   ri   r   r   r   test_from_qms_not_found_errorro      s    	z	"	" ( (h'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   <A A c                     t          t          | |          t          ||                    }t          |          dk    sJ t          |                                          dk    sJ d S )NrK   )first_bunchsecond_bunchr;      )r   lenflatten)r   r   r   r   nested_bunchs        r   test_flattenrw      s     GGG!7@PQQQ  L
 |!!!!|##%%&&!++++++r   c                    t          |                     d                                                    dk    sJ t          |                     d                                                    dk    sJ t          |                     d                                                    dk    sJ t          |                     d                                                    dk    sJ t          |                     d	
                                                    dk    sJ t          |                     d
                                                    dk    sJ t          |                     d
                    dk    sJ t          |                     dd                                                    dk    sJ t          |                     d                                                    dk    sJ d }t          |                     |                                                    dk    sJ d S )Nprivate)keywordr:   publicrs   z{s}retina)r   TrE   F   )rz   rF   nonsenser   c                 d    t          | d          r| j        dk    rdS t          | d          rdS dS )Nr)   r'   Tr   F)hasattrr)   rj   s    r   customztest_filter.<locals>.custom   sD    8\** 	x/Bf/L 	48S!! 	4ur   )functionr;   )rt   filterru   )r-   r   s     r   test_filterr      s,   z   33;;==>>!CCCCz   22::<<==BBBBz   //7799::a????z  h //7799::a????z   55==??@@AEEEEz   66>>@@AAQFFFFz   66771<<<<z  u EEMMOOPPTUUUUUz  j 1199;;<<AAAA   z  & 1199;;<<AAAAAAr   c                     g d} | D ]:}t          j        |          }t          |t                    sJ |j        dk    sJ ;t          j        t          d          5  t          j        d           d d d            n# 1 swxY w Y   d}t          j        |          }t          |t                    sJ |j        |k    sJ d S )N)zCartoDB Positroncartodbpositronzcartodb-positronzcarto db/positronCARTO_DB_POSITRONCartoDB.PositronzCarto,db,positronr   zNo matching provider foundr/   zi don't existz+NASAGIBS.ASTER_GDEM_Greyscale_Shaded_Relief)r`   
query_namerY   r   r   r4   r5   rA   )optionsoptionqueriedoption_with_underscores       r   test_query_namer      s$     G  2 2.(('<00000|111111	z)E	F	F	F ( ('''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( Kn344Gg|,,,,,<1111111s   A>>BB)r4   urllib.errorr   xyzservices.providers	providersr`   xyzservicesr   r   fixturer   r   r   r   r$   r*   r-   r8   rC   rG   rV   r[   rd   rf   markxfailrl   ro   rw   r   r   r   r   r   <module>r      s    ! ! ! ! ! ! # # # # # # + + + + + + + +                     &3 3 3  *  *  *F4 4 4
= = =D, , ,
? ? ?   /(;;. . <;.
 /(;;( ( <;(
	, 	, 	,B B B*2 2 2 2 2r   