
    -Ph9                       d Z ddlmZ ddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZ ddlmZmZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ ddlmZ er,ddlm Z  ddl!m"Z" ddl#m$Z$ ddlm%Z%m&Z&m'Z'm(Z(m)Z) ddlm*Z* ddl+m,Z, d:dZ-d;dZ. ej/        ddd           G d d                      Z0d<d(Z1d=d.Z2d>d2Z3d?d4Z4d@d6Z5dAd8Z6dAd9Z7dS )BzBThis module contains the code for loading intersphinx inventories.    )annotationsN)
itemgetter)TYPE_CHECKING)urlsplit
urlunsplit)INVENTORY_FILENAME)ConfigError)LOGGERInventoryAdapter_IntersphinxProject)__)requests)InventoryFile)Path)Sphinx)Config)IntersphinxMappingInventoryCacheEntryInventoryLocationInventoryNameInventoryURI)
_Inventory)	Inventoryappr   configr   returnNonec                L   i }d}|j                                                                         D ]'\  }}t          |t                    r|s2|dz  }t          d          }t          j        ||           |j         |= Ot          |t          t          z            s3|dz  }t          d          }t          j        |||           |j         |= 	 |\  }}nO# t          t          t          f$ r5 |dz  }t          d          }t          j        |||           |j         |= Y w xY w|rt          |t                    s4|dz  }t          d          }t          j        |||           |j         |= @||v r;|dz  }t          d          }t          j        |||||                    |j         |= |||<   t          |t          t          z            s|f}g }	|D ]c}
|
|
r+t          |
t                    r|	                    |
           1|dz  }t          d	          }t          j        ||
|           |j         |= d||t          |	          ff|j         |<   )|dk    rt          d
          }t          |          |dk    r!t          d          }t          ||z            dS )ah  Validate and normalise :confval:`intersphinx_mapping`.

    Ensure that:

    * Keys are non-empty strings.
    * Values are two-element tuples or lists.
    * The first element of each value pair (the target URI)
      is a non-empty string.
    * The second element of each value pair (inventory locations)
      is a tuple of non-empty strings or None.
    r      zrInvalid intersphinx project identifier `%r` in intersphinx_mapping. Project identifiers must be non-empty strings.zTInvalid value `%r` in intersphinx_mapping[%r]. Expected a two-element tuple or list.zgInvalid value `%r` in intersphinx_mapping[%r]. Values must be a (target URI, inventory locations) pair.zjInvalid target URI value `%r` in intersphinx_mapping[%r][0]. Target URIs must be unique non-empty strings.zInvalid target URI value `%r` in intersphinx_mapping[%r][0]. Target URIs must be unique (other instance in intersphinx_mapping[%r]).Nz{Invalid inventory location value `%r` in intersphinx_mapping[%r][1]. Inventory locations must be non-empty strings or None.z6Invalid `intersphinx_mapping` configuration (1 error).z8Invalid `intersphinx_mapping` configuration (%s errors).)intersphinx_mappingcopyitems
isinstancestrr   r
   errortuplelist	TypeError
ValueError	Exceptionappendr	   )r   r   seenerrorsnamevaluemsguriinvtargetstargets              \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/ext/intersphinx/_load.pyvalidate_intersphinx_mappingr6   %   s5    /1DF16688>>@@ II IIe$$$ 	D 	aKFA C Ld###*40 %%$,00 	aKF8 C LeT****40
	HC:y1 	 	 	aKFK C LeT****40H	  	*S#.. 	aKF@ C Lc4(((*40$;;aKFZ C Lc4c333*40S	#ut|,, 	&C ,. 	 	F~~Jvs,C,C~v&&&&!M  S&$///.t4,03g2G+H"4(({{IJJ#zzKLL#,''' zs   CA	D"!D"c                     j         }t          t          j                              t          |          }|j         j        j        }g }|                                D ]a\  }\  }}	 t          |||          }|	                    |           1# t          $ r$}	t          d          }
t          |
          |	d}	~	ww xY wd |D             }t                    D ]}|         d         |vr|= ||vr|= t                               j                  t           j                                        5  fd|D             }d t           j                            |          D             }ddd           n# 1 swxY w Y   t)          |          r|                                 t-          dd          }t/                                          |	          }|D ]Z\  }}}||j        |<   |                                D ]3\  }}|j                            |i                               |           4YdS dS )
zuLoad all intersphinx mappings into the environment.

    The intersphinx mappings are expected to be normalized.
    )r.   
target_uri	locationszCAn invalid intersphinx_mapping entry was added after normalisation.Nc                    h | ]	}|j         
S  )r8   ).0projects     r5   	<setcomp>z load_mappings.<locals>.<setcomp>   s    @@@GW'@@@    r   c           
     Z    g | ]'}                     t          |j                   (S ))r=   cachenowr   srcdir)submit_fetch_inventory_grouprC   )r<   r=   r   intersphinx_cache
inv_configrB   pools     r5   
<listcomp>z!load_mappings.<locals>.<listcomp>   sR     

 

 

  KK&'!z   

 

 

r?   c                6    g | ]}|                                 S r;   )resultr<   fs     r5   rI   z!load_mappings.<locals>.<listcomp>   s     PPP!188::PPPr?   r   )key)envinttimer   rA   r   r    valuesr   r+   r)   r   r	   	frozenset
_InvConfigfrom_config
concurrentfuturesThreadPoolExecutoras_completedanyclearr   sortednamed_inventoryr"   main_inventory
setdefaultupdate)r   rO   inventoriesr    projectsr.   r1   r9   r=   errr0   expected_urisrW   updatedby_name_and_timecache_values_expiryinvdataobjtypeobjectsrF   rG   rB   rH   s   `                   @@@@r5   load_mappingsrl      s    
 'C
dikk

C"3''KALAR.1j.LH"5"<"<">"> % %sI
	%)cY  G OOG$$$$  	, 	, 	,U C c""+		, A@x@@@M*++ ' 'S!!$,???!#&&%% "#&''
33J			.	.	0	0 QD

 

 

 

 

 

 

 

 $

 

 

 QPz'9'F'Fw'O'OPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q 7|| S &a++/6688>NOOO&2 	S 	S"D'707K'-$+MMOO S S *55grBBII'RRRRSS S	S 	Ss*   .B
C B??C=<FF	F	T)frozenkw_onlyslotsc                  Z    e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   edd            ZdS )rT   rP   intersphinx_cache_limitzint | float | Noneintersphinx_timeoutbool
tls_verifyzstr | dict[str, str] | Nonetls_cacertsr$   
user_agentr   r   r   c                T     | |j         |j        |j        |j        |j                  S )Nrq   rr   rt   ru   rv   rx   )clsr   s     r5   rU   z_InvConfig.from_config   s9    s$*$B & :(*(
 
 
 	
r?   N)r   r   r   rT   )__name__
__module____qualname____annotations__classmethodrU   r;   r?   r5   rT   rT      sm             ++++,,,,OOO
 
 
 [
 
 
r?   rT   r=   r   rA   'dict[InventoryURI, InventoryCacheEntry]rB   rP   rC   r   rs   c                `   |j         dk    r||j         dz  z
  }nd}d}g }| j        D ]}| t          j        | j        t
                    }	n|}	d|	vs | j        |vs|| j                 d         |k     rt          j        t          d          | j	        t          |	                     	 t          | j        |	||          }
n1# t          $ r$}|                    |j                   Y d }~d }~ww xY w|
r| j	        ||
j        f|| j        <   d} n|snt!          |          t!          | j                  k     r5t          j        t          d	                     |D ]}t          j        |  nBd
                    d |D                       }t          j        dt          d          |           |S )Nr   iQ F://r   z.loading intersphinx inventory '%s' from %s ...r8   inv_locationr   rC   TzXencountered some issues with some of the inventories, but they had working alternatives:
c              3  <   K   | ]}|d          |dd         z  V  dS )r   r   Nr;   rL   s     r5   	<genexpr>z)_fetch_inventory_group.<locals>.<genexpr>&  s2      ::A1Q4!ABB%<::::::r?   z%s
%szAfailed to reach any of the inventories with the following issues:)rq   r9   	posixpathjoinr8   r   r
   infor   r.   _get_safe_url_fetch_inventoryr*   r+   argsdatalenwarning)r=   rA   rB   r   rC   
cache_timere   failureslocationr   r2   rc   failissuess                 r5   rE   rE      s)    %** 69EAA

 
GH% " "$>'*<>PQQLL#L
 %%!..W'(+j88KCDDl++  	&&1!-!!	      )))  ,3L#sx,Gg() 
	XW.//	/	/6 	
 	
 	
  	 	DK	 :::::::RSS	
 	
 	

 Ns   'C  
C.
C))C.r1   r   r2   r$   r   c                v    t          ||t                              | j                  | j                  j        S )6Fetch, parse and return an intersphinx inventory file.r   )r   rT   rU   r   rC   r   )r   r1   r2   s      r5   fetch_inventoryr   /  s<    %%cj11z	  
 r?   r8   r   r   c                    d| v rt          |           } d|v rt          | ||          \  }} nt          ||          }	 t          j        ||           }n'# t
          $ r}d|}t          |          |d}~ww xY w|S )r   r   )r8   r   r   )r   rC   )r1   z*unknown or unsupported inventory version: N)_strip_basic_auth_fetch_inventory_url_fetch_inventory_filer   loadsr)   )r8   r   r   rC   raw_datar2   excr0   s           r5   r   r   9  s     
&z22
3!V 
  
  
** )l6RRR'!(
;;; ' ' 'B3BBoo3&' Js    A 
A;!A66A;tuple[bytes, str]c                Z   	 t          j        ||j        |j        |j        |j        f          5 }|                                 |j        }|j        }d d d            n# 1 swxY w Y   n0# t          $ r#}d||j
        t          |          f|_         d }~ww xY w||k    rt          d          }t          j        |||           | |t           j                            |          t           j                            |          dz   hv rt           j                            |          } || fS )N)timeout_user_agent	_tls_infoz4intersphinx inventory %r not fetchable due to %s: %sz)intersphinx inventory has moved: %s -> %s/)r   getrr   rv   rt   ru   raise_for_statuscontenturlr*   	__class__r$   r   r   r
   r   ospathdirname)r8   r   r   rr   new_inv_locationrc   r0   s           r5   r   r   R  s   \.)(&*<=	
 
 
 	%
    yH u	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%    BMHH	
 	 '''<==C'7888GOOL))GOOL))C/
 
 

 )9::JZs:   .A+ #AA+ A##A+ &A#'A+ +
B5BBbytesc                    	 t          || z  d          5 }|                                }d d d            n# 1 swxY w Y   n5# t          $ r(}d| |j        j        t          |          f|_         d }~ww xY w|S )Nrbz3intersphinx inventory %r not readable due to %s: %s)openreadr*   r   rz   r$   r   )r   rC   rM   r   rc   s        r5   r   r   v  s    
&<'.. 	 !vvxxH	  	  	  	  	  	  	  	  	  	  	  	  	  	  	    AM"HH	
 	 Os2   A 6A :A :A 
A4#A//A4r   c                    t          |           }|j        | S t          |          }|j        r|j         d|j         d|j         |d<   n|j         d|j         |d<   t          |          S )a5  Gets version of *url* with basic auth passwords obscured. This function
    returns results suitable for printing and logging.

    E.g.: https://user:12345@example.com => https://user@example.com

    :param url: a url
    :type url: ``str``

    :return: *url* with password removed
    :rtype: ``str``
    N@:r   )r   usernamer'   porthostnamer   )r   partsfragss      r5   r   r     s     SMME~
U: 	<.HH5>HHEJHHE!HH.;;5>;;E!H%   r?   c                    t          t          |                     }d|d         v r$|d                             d          d         |d<   t          |          S )a  Returns *url* with basic auth credentials removed. Also returns the
    basic auth username and password if they're present in *url*.

    E.g.: https://user:pass@example.com => https://example.com

    *url* need not include basic auth credentials.

    :param url: url which may or may not contain basic auth credentials
    :type url: ``str``

    :return: *url* with any basic auth creds removed
    :rtype: ``str``
    r   r   )r'   r   splitr   )r   r   s     r5   r   r     sP     #E
eAh8>>#&&q)aer?   )r   r   r   r   r   r   )r   r   r   r   )r=   r   rA   r   rB   rP   r   rT   rC   r   r   rs   )r   r   r1   r   r2   r$   r   r   )
r8   r   r   r$   r   rT   rC   r   r   r   )r8   r   r   r$   r   rT   r   r   )r   r$   rC   r   r   r   )r   r$   r   r$   )8__doc__
__future__r   concurrent.futuresrV   dataclassesos.pathr   r   rQ   operatorr   typingr   urllib.parser   r   sphinx.builders.htmlr   sphinx.errorsr	   sphinx.ext.intersphinx._sharedr
   r   r   sphinx.localer   sphinx.utilr   sphinx.util.inventoryr   pathlibr   sphinx.applicationr   sphinx.configr   r   r   r   r   r   r   sphinx.util.typingr   r6   rl   	dataclassrT   rE   r   r   r   r   r   r   r;   r?   r5   <module>r      s   H H " " " " " "                                 - - - - - - - - 3 3 3 3 3 3 % % % % % % X X X X X X X X X X                   / / / / / / -))))))$$$$$$              100000,,,,,,b( b( b( b(JBS BS BS BSJ dD===
 
 
 
 
 
 
 >=
$J J J JZ      2!  !  !  ! H   ! ! ! !2     r?   