3

T'ícZpã@sÄdZddlZddlZddlZddlZddlZddlmZmZddlm	Z	ddl
mZddlm
Z
ddlmZmZddlmZdd	lmZmZmZmZmZmZmZmZmZmZmZdd
lm Z m!Z!m"Z"ddl#m$Z$ddl%m&Z&dd
l'm(Z(ddl)m*Z*m+Z+m,Z,ddl-m.Z.ddl/m0Z0ddl1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8ddl9m:Z:ddl;m<Z<m=Z=m'Z'ddl>m?Z?m@Z@mAZAmBZBmCZCddlDmEZEe=jFeGƒZHejIdƒZJGdd„deƒZKGdd„deƒZLGdd„deƒZMGd d!„d!eƒZNeeLeeOePePeQffZRd"d#iZSdZTd$ZUd%ZVe&eQd&œd'd(„ZWGd)d*„d*eƒZXe'j'j(ePeYd+œd,d-„ZZGd.d/„d/e0ƒZ[Gd0d1„d1ƒZ\Gd2d3„d3eƒZ]Gd4d5„d5e:ƒZ^e.ePeePd6œd7d8„Z_e.e2dd9œd:d;„Z`e.eePefd<œd=d>„ZadS)?z$The CheckExternalLinksBuilder class.éN)ÚdatetimeÚtimezone)Úparsedate_to_datetime)Ú
HTMLParser)Úpath)Ú
PriorityQueueÚQueue)ÚThread)ÚAnyÚDictÚ	GeneratorÚListÚ
NamedTupleÚOptionalÚPatternÚSetÚTupleÚUnionÚcast)ÚunquoteÚurlparseÚ
urlunparse)Únodes)ÚElement)ÚResponse)ÚConnectionErrorÚ	HTTPErrorÚTooManyRedirects)ÚSphinx)ÚDummyBuilder)ÚConfig)ÚRemovedInSphinx50Warning)ÚBuildEnvironment)Ú__)ÚSphinxPostTransform)Ú
encode_uriÚloggingÚrequests)ÚdarkgrayÚ	darkgreenÚpurpleÚredÚ	turquoise)Ú
get_node_linez([a-z]+:)?//c@seZdZUeeeedS)Ú	HyperlinkN)	Ú__name__Ú
__module__Ú__qualname__ÚstrÚuriÚdocnamerÚintÚlineno©r7r7ú;/tmp/pip-build-gk9425m9/sphinx/sphinx/builders/linkcheck.pyr.'s
r.c@seZdZUeeedS)ÚCheckRequestN)r/r0r1ÚfloatÚ
next_checkrr.Ú	hyperlinkr7r7r7r8r9-s
r9c@s&eZdZUeeeee	e
dS)ÚCheckResultN)r/r0r1r2r3r4r5r6ÚstatusÚmessageÚcoder7r7r7r8r=2s
r=c@seZdZUeedS)Ú	RateLimitN)r/r0r1r:Údelayr;r7r7r7r8rA;s
rAÚAcceptz/text/html,application/xhtml+xml;q=0.9,*/*;q=0.8égN@)ÚnodeÚreturncCstjdtddt|ƒpdS)zž
    PriorityQueue items must be comparable. The line number is part of the
    tuple used by the PriorityQueue, keep an homogeneous type for comparison.
    znode_line_or_0() is deprecated.é)Ú
stacklevelr)ÚwarningsÚwarnr!r-)rEr7r7r8Únode_line_or_0Ks
rKcs:eZdZdZeddœ‡fdd„Zeeddœdd„Z‡ZS)	ÚAnchorCheckParserz9Specialized HTML parser that looks for a specific anchor.N)Ú
search_anchorrFcstƒjƒ||_d|_dS)NF)ÚsuperÚ__init__rMÚfound)ÚselfrM)Ú	__class__r7r8rOXs
zAnchorCheckParser.__init__)ÚtagÚattrsrFcCs0x*|D]"\}}|dkr||jkrd|_PqWdS)NÚidÚnameT)rUrV)rMrP)rQrSrTÚkeyÚvaluer7r7r8Úhandle_starttag^sz!AnchorCheckParser.handle_starttag)	r/r0r1Ú__doc__r2rOr
rYÚ
__classcell__r7r7)rRr8rLUsrL)ÚresponseÚanchorrFcCsRt|ƒ}x:|jdddD](}t|tƒr.|jƒ}|j|ƒ|jrPqW|jƒ|jS)z…Reads HTML data from a response object `response` searching for `anchor`.
    Returns True if anchor was found, False otherwise.
    iT)Ú
chunk_sizeÚdecode_unicode)rLÚiter_contentÚ
isinstanceÚbytesÚdecodeÚfeedrPÚclose)r\r]ÚparserÚchunkr7r7r8Úcheck_anchores

rhc@sbeZdZdZdZedƒZddœdd„Zee	e
dœdd	„ƒZee	ee
e
fdœd
d„ƒZee	e
dœdd
„ƒZeeedœdd„ƒZeeeefdœdd„ƒZeeeeeeffdœdd„ƒZddœdd„Zeeedœdd„Zeedœdd„Zee	edœdd„Zeedœdd„Z e!ddœd d!„Z"eeeeedd"œd#d$„Z#e$dd%œd&d'„Z%ddœd(d)„Z&dS)*ÚCheckExternalLinksBuilderz+
    Checks for broken external links.
    Ú	linkcheckzCLook for any errors in the above output or in %(outdir)s/output.txtN)rFcCs8i|_tƒ|_i|_i|_tjdƒtƒ|_t	ƒ|_
dS)Ng@)Ú
hyperlinksÚsetÚ_goodÚ_brokenÚ_redirectedÚsocketÚsetdefaulttimeoutrÚ_wqueuerÚ_rqueue)rQr7r7r8Úinits
zCheckExternalLinksBuilder.initcCs.tjd|jjdftdddd„|jjDƒS)Nz%s.%s is deprecated.Úanchors_ignorerG)rHcSsg|]}tj|ƒ‘qSr7)ÚreÚcompile)Ú.0Úxr7r7r8ú
<listcomp>’sz<CheckExternalLinksBuilder.anchors_ignore.<locals>.<listcomp>)rIrJrRr/r!ÚconfigÚlinkcheck_anchors_ignore)rQr7r7r8ru‹s
z(CheckExternalLinksBuilder.anchors_ignorecCs.tjd|jjdftdddd„|jjDƒS)Nz%s.%s is deprecated.ÚauthrG)rHcSsg|]\}}tj|ƒ|f‘qSr7)rvrw)rxÚpatternÚ	auth_infor7r7r8rz›sz2CheckExternalLinksBuilder.auth.<locals>.<listcomp>)rIrJrRr/r!r{Úlinkcheck_auth)rQr7r7r8r}”szCheckExternalLinksBuilder.authcCs.tjd|jjdftdddd„|jjDƒS)Nz%s.%s is deprecated.Ú	to_ignorerG)rHcSsg|]}tj|ƒ‘qSr7)rvrw)rxryr7r7r8rz¥sz7CheckExternalLinksBuilder.to_ignore.<locals>.<listcomp>)rIrJrRr/r!r{Úlinkcheck_ignore)rQr7r7r8ržs
z#CheckExternalLinksBuilder.to_ignorecCs"tjd|jjdftdd|jS)Nz%s.%s is deprecated.ÚgoodrG)rH)rIrJrRr/r!rm)rQr7r7r8rƒ§s
zCheckExternalLinksBuilder.goodcCs"tjd|jjdftdd|jS)Nz%s.%s is deprecated.ÚbrokenrG)rH)rIrJrRr/r!rn)rQr7r7r8r„°s
z CheckExternalLinksBuilder.brokencCs"tjd|jjdftdd|jS)Nz%s.%s is deprecated.Ú
redirectedrG)rH)rIrJrRr/r!ro)rQr7r7r8r…¹s
z$CheckExternalLinksBuilder.redirectedcCs tjd|jjdftdddS)Nz%s.%s is deprecated.Úcheck_threadrG)rH)rIrJrRr/r!)rQr7r7r8r†Âsz&CheckExternalLinksBuilder.check_thread)r\rFcCs:tjd|jjdftddt|j|jddiƒ}|j|ƒS)Nz%s.%s is deprecated.Ú
limit_raterG)rH)	rIrJrRr/r!Ú HyperlinkAvailabilityCheckWorkerÚenvr{r‡)rQr\Zworkerr7r7r8r‡Ês

z$CheckExternalLinksBuilder.limit_ratecCs"tjd|jjdftdd|jS)Nz%s.%s is deprecated.ÚrqueuerG)rH)rIrJrRr/r!rs)rQr\r7r7r8rŠÔs
z CheckExternalLinksBuilder.rqueuecCs tjd|jjdftddgS)Nz%s.%s is deprecated.ÚworkersrG)rH)rIrJrRr/r!)rQr\r7r7r8r‹Üs
z!CheckExternalLinksBuilder.workerscCs"tjd|jjdftdd|jS)Nz%s.%s is deprecated.ÚwqueuerG)rH)rIrJrRr/r!rr)rQr\r7r7r8rŒäs
z CheckExternalLinksBuilder.wqueue)ÚresultrFcCs¸|jj|jdƒ}t||j|j|j|j|jd}|j	|ƒ|jdkrFdS|jdkr^|jdkr^dS|jrzt
jd|j|jdd|jdkrÂ|jrªt
jtd	ƒ|jd
|jƒnt
jtd	ƒ|jƒnò|jdkrüt
jtdƒ|jƒ|j
d|j||j|jƒn¸|jdkr&t
jtd
ƒ|j|jƒnŽ|jdkr²|jjsF|jjrjt
jtdƒ|j|j|j|jfdn"t
jtdƒ|jtd|jƒƒ|j
d|j||j|jd
|jƒn|jdkr¦y2dtfdtfdtfdtfdtfdœ|j\}}Wn tk
rdt}}YnX||d<|jjrTt
jd|jd|d|j|j|jfdn*t
j|dƒ|j|d|d|jƒƒ|j
d||j||j|jd|jƒntd|jƒ‚dS)N)Úfilenamer6r>r@r3ÚinfoÚ	uncheckedÚworkingÚoldz(%16s: line %4d) T)ZnonlÚignoredz
-ignored- z: Úlocalz
-local-   z
ok        r„zbroken link: %s (%s))Úlocationz
broken    z - r…Zpermanentlyz
with Foundzwith See OtherZtemporarily)i-i.i/i3i4zwith unknown codeÚtextz
redirect  z to zredirected zUnknown status %s.)r‰Údoc2pathr4Údictr6r>r@r3r?Úwrite_linkstatÚloggerrr(Úwrite_entryr)ÚappÚquietZwarningiserrorÚwarningr#r+r*r,ÚKeyErrorr{Úlinkcheck_allowed_redirectsÚ
ValueError)rQrrŽZlinkstatr–Úcolorr7r7r8Úprocess_resultìs\



 
"

z(CheckExternalLinksBuilder.process_result)Úwhatr4rŽÚliner3rFcCs|jjd||||fƒdS)Nz%s:%s: [%s] %s
)Útxt_outfileÚwrite)rQr¤r4rŽr¥r3r7r7r8r›#sz%CheckExternalLinksBuilder.write_entry)ÚdatarFcCs"|jjtj|ƒƒ|jjdƒdS)NÚ
)Újson_outfiler§ÚjsonÚdumps)rQr¨r7r7r8r™'sz(CheckExternalLinksBuilder.write_linkstatcCst|j|j|ƒ}tjdƒttj|jdƒdƒJ|_	ttj|jdƒdƒ(|_
x|j|jƒD]}|j
|ƒqXWWdQRXWdQRX|jrŒd|j_dS)NÚz
output.txtÚwzoutput.jsonrD)ÚHyperlinkAvailabilityCheckerr‰r{ršrÚopenrÚjoinZoutdirr¦rªÚcheckrkr£rnrœZ
statuscode)rQÚcheckerrr7r7r8Úfinish+s
"z CheckExternalLinksBuilder.finish)'r/r0r1rZrVr#ÚepilogrtÚpropertyr
rrurr
r}rrr2rƒrr„r5r…r†rrr:r‡rrŠr	r‹rŒr=r£r›r˜r™r´r7r7r7r8riws4	 
7ric@speZdZdeeeddœdd„Zddœdd„Zddœdd	„Ze	e
efee
ddfd
œdd„Ze
ed
œdd„ZdS)r¯N)r‰r{ÚbuilderrFcCs\||_||_||_i|_g|_dd„|jjDƒ|_|rH|j|_|j	|_
ntƒ|_tƒ|_
dS)NcSsg|]}tj|ƒ‘qSr7)rvrw)rxryr7r7r8rzDsz9HyperlinkAvailabilityChecker.__init__.<locals>.<listcomp>)
r·r{r‰Úrate_limitsr‹r‚rrsrŠrrrŒrr)rQr‰r{r·r7r7r8rO9s
z%HyperlinkAvailabilityChecker.__init__)rFcCsLxFt|jjƒD]6}t|j|j|j|j|j|jƒ}|j	ƒ|j
j|ƒqWdS)N)Úranger{Úlinkcheck_workersrˆr‰rŠrŒr¸r·Ústartr‹Úappend)rQZ_iÚthreadr7r7r8Úinvoke_threadsMs
z+HyperlinkAvailabilityChecker.invoke_threadscCs2|jjƒx"|jD]}|jjttdƒdƒqWdS)NF)rŒr±r‹Úputr9ÚCHECK_IMMEDIATELY)rQZ_workerr7r7r8Úshutdown_threadsUs
z-HyperlinkAvailabilityChecker.shutdown_threads)rkrFccs”|jƒd}xT|jƒD]H}|j|jƒrBt|j|j|jdddƒVq|jjt	t
|ƒdƒ|d7}qWd}x ||kr†|jjƒV|d7}qhW|j
ƒdS)Nrr“r­FrD)r¾ÚvaluesÚis_ignored_urir3r=r4r6rŒr¿r9rÀrŠÚgetrÁ)rQrkZtotal_linksr<Údoner7r7r8r²Zs
z"HyperlinkAvailabilityChecker.check)r3rFcst‡fdd„|jDƒƒS)Nc3s|]}|jˆƒVqdS)N)Úmatch)rxÚpat)r3r7r8ú	<genexpr>nsz>HyperlinkAvailabilityChecker.is_ignored_uri.<locals>.<genexpr>)Úanyr)rQr3r7)r3r8rÃmsz+HyperlinkAvailabilityChecker.is_ignored_uri)N)r/r0r1r"r rirOr¾rÁrr2r.rr=r²ÚboolrÃr7r7r7r8r¯8s
"r¯c	s^eZdZdZdeeeeeee	fe
ddœ‡fdd„
Zddœdd„Ze
eed	œd
d„Z‡ZS)
rˆz;A worker class for checking the availability of hyperlinks.N)r‰r{rŠrŒr¸r·rFcsž||_||_||_||_||_dd„|jjDƒ|_dd„|jjDƒ|_dd„|jj	Dƒ|_
|rx|j|_|j|_|j
|_
ntƒ|_i|_i|_
tƒjdddS)NcSsg|]}tj|ƒ‘qSr7)rvrw)rxryr7r7r8rz€sz=HyperlinkAvailabilityCheckWorker.__init__.<locals>.<listcomp>cSsg|]}tj|ƒ‘qSr7)rvrw)rxÚdocr7r7r8rz‚scSsg|]\}}tj|ƒ|f‘qSr7)rvrw)rxr~rr7r7r8rz„sT)Údaemon)r{r‰r¸rŠrŒr|ruÚlinkcheck_exclude_documentsÚdocuments_excluder€r}rmrnrorlrNrO)rQr‰r{rŠrŒr¸r·)rRr7r8rOts&
z)HyperlinkAvailabilityCheckWorker.__init__)rFc
s®i‰ˆjjrˆjjˆd<tdœ‡‡fdd„‰ttttfdœ‡‡‡‡‡‡fdd„‰tttdœ‡fdd	„‰tttttfd
œ‡‡‡fdd„}xˆjjƒ}y |\}‰ˆdkr¬Pˆ\‰}}Wn t	k
rØ|\}‰}}YnXˆdkräPt
ˆƒj}yˆj|j
}Wntk
rYnX|tjƒkrNtjtƒˆjjt|ˆƒd
ƒˆjjƒqŽ||ƒ\}}}	|dkr‚tjtdƒˆtdƒƒnˆjjtˆ|||||	ƒƒˆjjƒqŽWdS)NÚtimeout)rFcshtˆƒ}d|j|jfd|j|jfˆdg}x6|D].}|ˆjjkr2ttƒ}|jˆjj|ƒ|Sq2WiS)Nz%s://%sz%s://%s/Ú*)rÚschemeÚnetlocr{Úlinkcheck_request_headersr˜ÚDEFAULT_REQUEST_HEADERSÚupdate)ÚurlÚ
candidatesÚuÚheaders)rQr3r7r8Úget_request_headers™s
zAHyperlinkAvailabilityCheckWorker.run.<locals>.get_request_headersc'südˆkr:ˆjddƒ\}}x(ˆjD]}|j|ƒr d}Pq Wnˆ}d}y|jdƒWntk
rlt|ƒ}YnXx"ˆjD]\}}|jˆƒrvPqvWd}ˆƒˆd<yì|ròˆjjròt	j
|fdˆj|dœˆ—Ž}|jƒt|t
|ƒƒ}|sðttdƒ|ƒ‚n”y(t	j|fdˆj|dœˆ—Ž}|jƒWnjtttfk
r„}zFt|tƒrP|jjd	krP‚t	j
|fdˆj|dœˆ—Ž}|jƒWYdd}~XnXWnÔtk
r2}zŒ|jjd
kr®dS|jjd	krøˆj|jƒ}|dk	rêˆjjt|ˆƒdƒdSdt|ƒd
fS|jjdkrdt|ƒd
fSdt|ƒd
fSWYdd}~XnZtk
r\}zdt|ƒd
fSd}~Xn0Xt|ƒj}	yˆj|	=Wntk
rŠYnX|j j!dƒ|j!dƒkr¨dS|j }
|rÀ|
d|7}
ˆ||
ƒrÐdS|j"rî|j"dj}d|
|fSd|
d
fSdS)Nú#rDÚasciirÙT)Ústreamr{r}zAnchor '%s' not found)Úallow_redirectsr{r}i­i‘r‘ú - unauthorizedrFúrate-limitedr­r„i÷r“ú/r…)r‘rßr)ràr­r)r‘r­r)r‘r­réÿÿÿÿ)#ÚsplitrurÆÚencodeÚUnicodeErrorr%r}r{Úlinkcheck_anchorsr'rÄÚraise_for_statusrhrÚ	Exceptionr#Úheadrrrrar\Ústatus_coder‡rŒr¿r9r2rrÒr¸rŸrÖÚrstripÚhistory)Zreq_urlr]Zrexr~rr\rPÚerrr;rÒÚnew_urlr@)Úallowed_redirectrÚr<ÚkwargsrQr3r7r8Ú	check_uri¨s†








z7HyperlinkAvailabilityCheckWorker.run.<locals>.check_uri)rÖrîrFcs6x0ˆjjjƒD] \}}|j|ƒr|j|ƒrdSqWdS)NTF)r{r ÚitemsrÆ)rÖrîZfrom_urlZto_url)rQr7r8rïsz>HyperlinkAvailabilityCheckWorker.run.<locals>.allowed_redirect)r4rFcsrx4ˆjD]*}|j|ƒr|›d|j›d}d|dfSqWtˆƒdksLˆjdƒrPdSˆjdƒs tjˆƒrhdStjˆjj	|ƒƒ}tj
tj|ˆƒƒrdSd	ˆjˆ<dSnRˆˆj
kr®dSˆˆjkrÈd
ˆjˆdfSˆˆjkròdˆjˆdˆjˆdfSx.tˆjjƒD]}ˆƒ\}}}|d
krPqW|dkr:ˆj
jˆƒn.|d
krP|ˆjˆ<n|dkrh||fˆjˆ<|||fS)Nz	 matched z! from linkcheck_exclude_documentsr“rrÛúmailto:útel:rr­úhttp:úhttps:r‘r„r’r…rD)rÛrórô)rr­r)rõrö)rr­r)r‘r­r)r„r­r)r‘r’r)rÎrÆr~ÚlenÚ
startswithÚuri_rerÚdirnamer‰r—Úexistsr±rnrmror¹r{Úlinkcheck_retriesÚadd)r4Zdoc_matcherrÚsrcdirÚ_r>r@)rñrQr3r7r8r²s>









z3HyperlinkAvailabilityCheckWorker.run.<locals>.checkFzrate-limitedz-rate limited-   z | sleeping...)r{Úlinkcheck_timeoutrrr2r5rÊrŒrÄr¡rrÒr¸r;rŸÚtimeÚsleepÚQUEUE_POLL_SECSr¿r9Ú	task_doneršrr(rŠr=)
rQr²Z
check_requestr;r4r6rÒr>rr@r7)rïrñrÚr<rðrQr3r8Úrun”sB&`".




z$HyperlinkAvailabilityCheckWorker.run)r\rFc
Csd}|jjdƒ}|r†yt|ƒ}WnXtk
rxyt|ƒ}Wnttfk
rTYn Xtj|ƒ}|tjt	j
ƒjƒ}YnXtjƒ|}t
|jƒj}|dkr|jj}y|j|}Wntk
rÊt}Yn$X|j}	d|	}||krî|	|krî|}||krúdStjƒ|}t||ƒ|j|<|S)NzRetry-Afterg@)rÙrÄr:r¡rÚ	TypeErrorrÚ	timestampÚnowrÚutcÚ
total_secondsrrrÖrÒr{Úlinkcheck_rate_limit_timeoutr¸rŸÚ
DEFAULT_DELAYrBrA)
rQr\r;Úretry_afterrBZuntilrÒZ	max_delayZ
rate_limitZlast_wait_timer7r7r8r‡bs:


z+HyperlinkAvailabilityCheckWorker.limit_rate)N)r/r0r1rZr"r rrr2rArirOrrrr:r‡r[r7r7)rRr8rˆqs
(Orˆc@s$eZdZdZdZeddœdd„ZdS)ÚHyperlinkCollectorrji N)rðrFc
Ksðtt|jjƒ}|j}xf|jjtjƒD]T}d|kr2q$|d}|jj	d|ƒ}|rP|}t
|ƒ}t||jj
|ƒ}||kr$|||<q$Wxn|jjtjƒD]\}	|	djdƒ}|rŒd|krŒ|jj	d|ƒ}|rÀ|}t
|	ƒ}t||jj
|ƒ}||krŒ|||<qŒWdS)NZrefurizlinkcheck-process-urir×ú?z://)rrirœr·rkÚdocumentÚfindallrÚ	referenceZemit_firstresultr-r.r‰r4ÚimagerÄ)
rQrðr·rkZrefnoder3Znewurir6Zuri_infoZimgnoder7r7r8rs.zHyperlinkCollector.run)rj)r/r0r1ZbuildersZdefault_priorityr
rr7r7r7r8r‰sr)rœr3rFcCsHt|ƒ}|jdkrD|jrD|jjdƒ}|sDd|j›}t|j|dƒSdS)z¾Rewrite anchor name of the hyperlink to github.com

    The hyperlink anchors in github.com are dynamically generated.  This rewrites
    them before checking and makes them comparable.
    z
github.comz
user-content-)ÚfragmentN)rÚhostnamerrørÚ_replace)rœr3ÚparsedÚprefixedrr7r7r8Úrewrite_github_anchor­sr)rœr{rFcCsxŠt|jjjƒƒD]v\}}z\ytj|ƒ|jjtj|ƒ<Wn:tjk
rr}ztjt	dƒ|j
|jƒWYdd}~XnXWd|jjj|ƒXqWdS)zFCompile patterns in linkcheck_allowed_redirects to the regexp objects.z=Failed to compile regex in linkcheck_allowed_redirects: %r %sN)
Úlistr{r ròrvrwÚerrorršržr#r~ÚmsgÚpop)rœr{rÖr~Úexcr7r7r8Ú#compile_linkcheck_allowed_redirects¼s
"r)rœrFcCsÚ|jtƒ|jtƒ|jdgdƒ|jdgdƒ|jdidƒ|jdgdƒ|jdidƒ|jdddƒ|jdddtgƒ|jd	d
dƒ|jdddƒ|jd
dgdƒ|jdddƒ|jdƒ|jdtddddddœS)Nr‚rÍr r€rÓrürDrrºéræTr|z^!rgÀr@zlinkcheck-process-uriz
config-initedi )ÚpriorityÚbuiltin)ÚversionZparallel_read_safeZparallel_write_safe)	Zadd_builderriZadd_post_transformrZadd_config_valuer5Z	add_eventÚconnectr)rœr7r7r8ÚsetupÉs$


r%)brZr«rvrprrIrrÚemail.utilsrÚhtml.parserrÚosrÚqueuerrÚ	threadingr	Útypingr
rrr
rrrrrrrÚurllib.parserrrZdocutilsrZdocutils.nodesrr'rZrequests.exceptionsrrrZsphinx.applicationrZsphinx.builders.dummyrZ
sphinx.configr Zsphinx.deprecationr!Zsphinx.environmentr"Z
sphinx.localer#Z!sphinx.transforms.post_transformsr$Zsphinx.utilr%r&Zsphinx.util.consoler(r)r*r+r,Zsphinx.util.nodesr-Ú	getLoggerr/ršrwrùr.r9r=rAr:r2r5ZCheckRequestTyperÔrÀrrrKrLrÊrhrir¯rˆrrrr%r7r7r7r8Ú<module>sf4

	
B9$