o $a T@sdZddlZddlZddlZddlZddlZddlmZddl m Z m Z m Z m Z mZmZddlmZmZddlmZddlmZmZddlmZddlZdd lmZdd lmZdd lm Z dd l!m"Z"dd l#m$Z$ddl%m&Z&ddl'm(Z(m)Z)ddl*m+Z+m,Z,ddl-m.Z.ddl/m0Z0m1Z1e+2e3Z4GdddZ5de6de6fddZ7dQde6de"de fddZ8de6de6fddZ9dede6d e de fd!d"Z:d#e6de6d$e d%e de d&e;ded+e$d,ee6d-e1d.ed/edef d0d1Z?d,ee6d2e0d+e$d3e e6d4e6d.ed/edeefd5d6Z@d7e&d,ee6d2e0d8eZCd7e&d,e6d.ed/edeef d?d@ZDd7e&d8e 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`` @)listr splitr )r6fragsr$r$r%_strip_basic_authRs  r<configcCsBtj|d||jd}||j|j_tj|jjdd|j_|jS)uReads data from *url* with an HTTP *GET*. This function supports fetching from resources which use basic HTTP auth as laid out by RFC1738 § 3.1. See § 5 for grammar definitions for URLs. .. seealso: https://www.ietf.org/rfc/rfc1738.txt :param url: URL of an HTTP resource :type url: ``str`` :return: data read from resource described by *url* :rtype: ``file``-like object T)streamr=timeout)decode_content) rgetintersphinx_timeoutraise_for_statusr6raw functoolspartialread)r6r=rr$r$r%_read_from_urlgs  rIcCs`t|}|jdur |St|}|jr"d|j|j|j|d<t|Sd|j|j|d<t|S)a5Gets 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`` Nz{}@{}:{}r8z{}@{})r usernamer9portformathostnamer )r6partsr;r$r$r% _get_safe_urls rOappuriinvc Cspd|v}|s t|}zd|vrt||jd}n tt|j|d}Wnty9}z d||jt |f|_ d}~wwzet |drd|j }||krdt td||||t|t|dfvrdt|}|/z|rmtjntj}t|||}Wnty} ztd | | d} ~ wwWdW|S1swYW|Sty}z d ||jjt |f|_ d}~ww) z6Fetch, parse and return an intersphinx inventory file.://)r=rbz4intersphinx inventory %r not fetchable due to %s: %sNr6z)intersphinx inventory has moved: %s -> %s/z,unknown or unsupported inventory version: %rz3intersphinx inventory %r not readable due to %s: %s)r<rIr=openrjoinsrcdir Exception __class__r4argsr r6loggerinfordirname posixpathrload ValueErrorr/) rPrQrRlocaluriferrnewinvrWinvdataexcr$r$r%fetch_inventorysT      rhnameinvsr*nowc Cs ||jjd}g}z|D]}|st|t}d|vs'||vs'||d|krt|} ttd| zt |||} Wnt yS} z | | j WYd} ~ q d} ~ ww| r||| f||<W|gkred St |t |krttd|D]} tj| qvd Sddd|D} ttd d| d Sq W|gkrd St |t |krttd|D]} tj| qd Sddd|D} ttd d| d S|gkrwt |t |krttd|D]} tj| qwddd|D} ttd d| w) NiQrSr8z(loading intersphinx inventory from %s...zXencountered some issues with some of the inventories, but they had working alternatives: cSs g|] }|d|ddqS)rr8Nr$.0rcr$r$r% s z)fetch_inventory_group..zAfailed to reach any of the inventories with the following issues:TF)r=intersphinx_cache_limitr_rWrrOr\r]rrhrYappendr[lenwarning)rirQrjr*rPrk cache_timefailuresrR safe_inv_urlrfrdfailissuesr$r$r%fetch_inventory_groupsx            ryc Cs"tt}t|jj}tj1}g}|jj D]\}\}}| | t ||||j||qddtj|D}Wdn1sEwYt|r|t|j } tdd| D} dd| D} | | D]!\}} } |ry| |j|<| D]\}}|j|i|q}qmdSdS)z3Load all intersphinx mappings into the environment.cSsg|]}|qSr$)resultrmr$r$r%rosz!load_mappings..Ncss|] }|dr|VqdS)rNr$rnvr$r$r% sz load_mappings..cSsg|]}|ds|qS)rr$r{r$r$r%ro)r5timerbuilderr concurrentfuturesThreadPoolExecutorr=intersphinx_mappingvaluesrqsubmitryr* as_completedanyr.r9sortedr-itemsr, setdefaultupdate)rPrk inventoriespoolrrirQrjupdated cached_vals named_vals unnamed_vals_xrftypeobjectsr$r$r% load_mappingss.      rdomaininv_namedatanodecontnodec Cs|\}}}}d|vr|drtt|dd|}|r%td||f} ntd|f} tjddd|| d} |d rB| || S|d ksQ|jd kr|d d kr| } |dur{| |dr{| | | t |dd| t |dd| S| || S| | ||| S)NrSrefdoc.z (in %s v%s)z(in %s)F)internalrefurireftitle refexplicit-stdreftypekeyword:r8) rArrWrrr referencerqriastext startswithrZrr) rrrrrprojversionrQdispnamernewnodetitler$r$r%_create_element_from_results,     r inventoryobjtypestargetc s|D]A}||vr q|||vr|||}n$|dkr9|ttfdd||} | r8||| d}nqqt|||||SdS)Nzstd:termcs |kSr()lower)k target_lowerr$r%4s z8_resolve_reference_in_domain_by_target..r)rr9filterkeysr) rrrrrrrobjtyperinsensitive_matchesr$rr%&_resolve_reference_in_domain_by_target$s   rrhonor_disabled_refsc sjdkrd|vr|djdkrd|vr|dfdd|D}|r4|jjfd d|D}t||||d ||}|durF|S|} | durQdSt|||| ||S) Nr cmdoptionoptionpy attributemethodcsg|] }dj|qS)z{}:{})rLri)rnt)rr$r%roSsz0_resolve_reference_in_domain..csg|]}|vr|qSr$r$)rno)disabledr$r%roXr~ reftarget)rirqr=intersphinx_disabled_reftypesrget_full_qualified_name) rrrrrrrrresfull_qualified_namer$)rrr%_resolve_reference_in_domainDs&      rc Cs|o|du}|rd|jjvrdS|d}|dkrG|jD]'\}}|r,|d|jjvr,qt|j} t|||||| ||} | durD| SqdS|d}|sPdS|r\|d|jjvr\dS||}| |} | sjdSt|||||| ||S)N*rrz:* refdomain) r=rdomainsrr9 object_typesrrA get_domainobjtypes_for_role) rrrrrrtyp domain_namerrrr$r$r%_resolve_referencehsD     rcCs|t|jvSr()rr-)rrr$r$r%inventory_existssrcCs*t||sJt||t|j|d||S)zAttempt to resolve a missing reference via intersphinx references. Resolution is tried in the given inventory with the target as is. Requires ``inventory_exists(env, inv_name)``. F)rrrr-)rrrrr$r$r%resolve_reference_in_inventorys rcCst|dt|j|||S)zAttempt to resolve a missing reference via intersphinx references. Resolution is tried with the target as is in any inventory. N)rrr,)rrrrr$r$r%resolve_reference_any_inventorysrcCsnt|d||}|dur |S|d}d|vrdS|dd\}}t||s&dS||d<t||||}||d<|S)agAttempt to resolve a missing reference via intersphinx references. Resolution is tried first with the target as is in any inventory. If this does not succeed, then the target is split by the first ``:``, to form ``inv_name:newtarget``. If ``inv_name`` is a named inventory, then resolution is tried in that inventory with the new target. TNrrr8)rr:rr)rrrrrr newtargetres_invr$r$r%"resolve_reference_detect_inventorys  rcCs t|||S)zBAttempt to resolve a missing reference via intersphinx references.)r)rPrrrr$r$r%missing_references rc Cs|jD]l\}}zGt|ttfr0||}\}}t|ts/tt d||j |Wqnd||}}}t|tsH|||fff|j|<n |||ff|j|<Wqt ys}ztt d|||j |WYd}~qd}~wwdS)Nz0intersphinx identifier %r is not string. Ignoredz3Failed to read intersphinx_mapping[%s], ignored: %r) rcopyr isinstancer9tupler4r\rsrpoprY)rPr=keyvaluerirQrRrgr$r$r%normalize_intersphinx_mappings,    rcCsn|did|ddd|ddd|dgd|jdtd d |d t|d ttjd ddS)NrTrpFrBrz config-initedi )priorityzbuilder-initedzmissing-referencer8)r env_versionparallel_read_safe)add_config_valueconnectrrrsphinx__display_version__)rPr$r$r%setups  rargvc s6t|dkrtdtjdtdGdddGfddd}z?|d}t|d |}t|p2iD]*}t|t||D]\}}td ||d d krUd |d nd |dfqBq4WdSty}zt|j d|j ddWYd}~dSd}~wt y}z td|WYd}~dSd}~ww)z-Debug functionality to print out an inventoryr8zXPrint out an inventory file. Error: must specify local path or URL to an inventory file.filec@s"eZdZUdZeed<dZdZdS)z inspect_main..MockConfigNrBF)r/r0r1rBr5__annotations__ tls_verify user_agentr$r$r$r% MockConfigs rcs(eZdZdZZdeddfddZdS)zinspect_main..MockApprmsgrNcSst|tjddS)Nr)printsysstderr)r#rr$r$r%warn sz"inspect_main..MockApp.warn)r/r0r1rXr=r4rr$rr$r%MockApp srrrz %-40s %s%srz%-40s: NzUnknown error: %r) rrrrrexitrhrrrar[rY)rrfilenamerfrentryeinforgr$rr% inspect_mains4   *r__main__r8)rr()Nr2concurrent.futuresrrEr_rrosrtypingrrrrrr urllib.parser r docutilsr docutils.nodesr r docutils.utilsrrsphinx.addnodesrsphinx.applicationrsphinx.builders.htmlr sphinx.configrsphinx.domainsrsphinx.environmentr sphinx.localerr sphinx.utilrrsphinx.util.inventoryrsphinx.util.typingrr getLoggerr/r\rr4r<rIrOrhfloatboolryrrrrrrrrrrrrr_logging basicConfigrr$r$r$r%s            ' %!    $ )      #