Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
supervisor / __pycache__ / http.cpython-38.pyc
Size: Mime:
U

*Å]™zã@sìddlZddlZddlZddlZddlZddlZddlZddlZzddlZWne	k
rhddl
ZYnXddlmZddlm
Z
ddlmZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlmZddlmZGd
d„dƒZGdd„dƒZGdd„dƒZGdd„dƒZGdd„dƒZGdd„dejƒZ Gdd„dej!ƒZ"Gdd„dejƒZ#Gdd„de#ƒZ$Gdd „d e#ƒZ%Gd!d"„d"ƒZ&Gd#d$„d$ƒZ'Gd%d&„d&ƒZ(d'd(„Z)Gd)d*„d*ƒZ*Gd+d,„d,ƒZ+Gd-d.„d.eƒZ,dS)/éN)Úurllib)Úsha1)Úas_bytes)Ú	as_string)Úasyncore_25)Ú	http_date)Úhttp_server)Ú	producers)Úfilesys)Údefault_handler)Úauth_handlerc@seZdZdS)ÚNOT_DONE_YETN)Ú__name__Ú
__module__Ú__qualname__©rrú./build/lib/supervisor/http.pyr
sr
c@s"eZdZdZddd„Zdd„ZdS)Údeferring_chunked_producera'A producer that implements the 'chunked' transfer coding for HTTP/1.1.
    Here is a sample usage:
            request['Transfer-Encoding'] = 'chunked'
            request.push (
                    producers.chunked_producer (your_producer)
                    )
            request.done()
    NcCs||_||_d|_dS©N皙™™™™¹?)ÚproducerÚfootersÚdelay)ÚselfrrrrrÚ__init__)sz#deferring_chunked_producer.__init__cCsp|jrh|j ¡}|tkrtS|r@dt|ƒ}t|ƒd|dSd|_|jrbd dg|j¡dSdSndSdS)Nz%xs
ó0s

s0

ó)rÚmorer
ÚlenrrÚjoin)rÚdataÚsrrrr.s
zdeferring_chunked_producer.more)N©rrrÚ__doc__rrrrrrrs	
rc@s eZdZdZdd„Zdd„ZdS)Údeferring_composite_producerz$combine a fifo of producers into onecCs||_d|_dSr)r	r)rr	rrrrAsz%deferring_composite_producer.__init__cCsBt|jƒr>|jd}| ¡}|tkr(tS|r0|S|j d¡qdS)Nrr)rr	rr
Úpop)rÚpÚdrrrrEs

z!deferring_composite_producer.moreNr"rrrrr$?sr$c@s"eZdZdZddd„Zdd„ZdS)	Údeferring_globbing_producerzÌ
    'glob' the output from a producer into a particular buffer size.
    helps reduce the number of calls to send().  [this appears to
    gain about 30% performance on requests to a single channel]
    écCs||_d|_||_d|_dS)Nrr)rÚbufferÚbuffer_sizer)rrr+rrrrZsz$deferring_globbing_producer.__init__cCszt|jƒ|jkrj|j ¡}|tkr&tS|rjz|j||_Wqhtk
rbt|jƒt|ƒ|_YqhXqqjq|j}d|_|S©Nr)rr*r+rrr
Ú	TypeErrorr)rr Úrrrrr`s
z deferring_globbing_producer.moreN)r)r"rrrrr(Ss
r(c@s eZdZdZdd„Zdd„ZdS)Údeferring_hooked_producerz¨
    A producer that will call <function> when it empties,.
    with an argument of the number of bytes produced.  Useful
    for logging/instrumentation purposes.
    cCs||_||_d|_d|_dS)Nrr)rÚfunctionÚbytesr)rrr0rrrrxsz"deferring_hooked_producer.__init__cCsR|jrJ|j ¡}|tkrtS|s4d|_| |j¡n|jt|ƒ7_|SdSdSr,)rrr
r0r1r)rÚresultrrrr~s
zdeferring_hooked_producer.moreNr"rrrrr/qsr/c@s0eZdZdZdd„Zdd„Zdd„Zdd	„Zd
S)Údeferring_http_requesta The medusa http_request class uses the default set of producers in
    medusa.producers.  We can't use these because they don't know anything
    about deferred responses, so we override various methods here.  This was
    added to support tail -f like behavior on the logtail handler c	OsNt tj|j¡}| ¡}d}d}d}|jdkrT|dkrNd|krDd}qRd|d<qºd}nf|jdkr¬|d	krld}qºd|krºd
|krŽ|d
dksªd}qº|jr¦d|d
<d}d}qºd}n|jdkrºd}t | 	¡¡}|rÔd	|d<|rôt
t|jƒƒ}t||gƒ}n|j 
d|¡t|jƒ}t||jƒ}|r&t|ƒ}|j |¡d|j_|rJ|j ¡dS)
z­ I didn't want to override this, but there's no way around
        it in order to support deferreds - CM

        finalize this transaction - send output to the http channelréz1.0z
keep-alivezContent-Lengthz
Keep-AliveZ
Connectionz1.1ÚclosezTransfer-EncodingZchunkedN)rZ
get_headerZ
CONNECTIONÚheaderÚlowerÚversionZuse_chunkedr	Zsimple_producerZbuild_reply_headerrr$ZoutgoingÚinsertr/Úlogr(ÚchannelZpush_with_producerÚcurrent_requestÚclose_when_done)	rÚargÚkwÚ
connectionZclose_itZwrap_in_chunkingZglobbingZoutgoing_headerZoutgoing_producerrrrÚdone“s\




ÿÿ
ÿzdeferring_http_request.donec	Cs\|jjr"|jjd}|jjd}nd}d}|jjj |d|| t ¡¡|j|j|f¡dS)z‰ We need to override this because UNIX domain sockets return
        an empty string for the addr rather than a (host, port) combination rr4Z	localhostz%d - - [%s] "%s" %d %d
N)	r;ÚaddrÚserverÚloggerr:Zlog_date_stringÚtimeÚrequestZ
reply_code)rr1ÚhostÚportrrrr:æs
ûþzdeferring_http_request.logcCs´i}ddddœ}t ¡}| ¡\}}}}|r4||}|rR|ddkrR|dd…}q4d|krdt |¡}|rt|dd…}|jj}|j ¡|d	<t	|j
ƒ|d
<|j|d<|j|d<d
|j
|d<|jj|d<d|d<d||d<tj tj ||d¡¡|d<|r||d<d|d<|jjr*|jjd|d<nd|d<|jD]v}	|	 dd¡\}
}|
 ¡}
| ¡}|
|kr||r|||| |
¡<n0dd |
 d¡¡ ¡}
|r8|
|kr8|||
<q8|S)NZCONTENT_LENGTHZCONTENT_TYPEZCONNECTION_TYPE)zcontent-lengthzcontent-typer@rú/r4ú%ZREQUEST_METHODÚSERVER_PORTÚSERVER_NAMEZSERVER_SOFTWAREzHTTP/ZSERVER_PROTOCOLzchannel.creation_timeÚZSCRIPT_NAMEZ	PATH_INFOZPATH_TRANSLATEDZQUERY_STRINGzCGI/1.1ZGATEWAY_INTERFACEZREMOTE_ADDRz	127.0.0.1ú:zHTTP_%sÚ_ú-)ÚosÚgetcwdÚ	split_urirÚunquoter;rCÚcommandÚupperÚstrrHÚserver_nameZSERVER_IDENTr8Z
creation_timeÚpathÚnormpathrrBr6Úsplitr7ÚstripÚget)rÚenvZ
header2envZworkdirrYÚparamsÚqueryÚfragmentrCr6ÚkeyÚvaluerrrÚcgi_environmentúsXþ


ÿ


z&deferring_http_request.cgi_environmentcCsÂdddœ}| ¡}| d¡dks.| d¡dkr4d}nd	}d
|kr\|d
 ¡}t |¡\}}n|d ¡}|d}|d
ks„|||krŠ|}n|d|}d||f}|dd
…dkr¾|d
d…}|S)z• Functionality that medusa's http request doesn't have; set an
        attribute named 'server_url' on the request based on the Host: header
        Z80Z443)ÚhttpÚhttpsZHTTPS)ZonZONZSERVER_PORT_SECUREÚ1rfreZ	HTTP_HOSTrLrKNrNz%s://%séÿÿÿÿrI)rdr]r\rZ	splitport)rZdefault_portÚenvironZprotocolrGÚhostnamerHZ
server_urlrrrÚget_server_url/s&
ÿz%deferring_http_request.get_server_urlN)rrrr#rAr:rdrkrrrrr3s
S5r3c@s2eZdZdZdZdZd
dd„Zdd„Zdd	„ZdS)Údeferring_http_channelirNcCsL|dkrt ¡}|jr@||j}||jks2|dkr<||_dSdStj |¡S)NrTF)rErÚlast_writable_checkrÚhttp_channelÚwritable)rZnowÚelapsedrrrroUs
zdeferring_http_channel.writablecCsªt|jƒr |j ¡}|dkr8|js4|j ¡| ¡dSt|tƒr^|j ¡|j|7_dS| ¡}|t	krz|j
|_
dS|r”|j||_d|_
dS|j ¡qdSqdS)z Implement deferreds NF)rZ
producer_fifoÚfirstZ
ac_out_bufferr%r5Ú
isinstancer1rr
r)rr&r rrrÚ
refill_bufferds*




z$deferring_http_channel.refill_buffercCs¸|jr|j ¡n t|jƒ}d|_| d¡}|rH|dsH|dd…}q.|sX| ¡dS|d}t |¡\}}}t |dd…¡}t 	|¡\}}d|krº|r°t 
|¡d|}n
t 
|¡}t||||||ƒ}	|j 
¡|jj 
¡|dkr| dt|ƒd	¡|	 d
¡dS|jjD]’}
|
 |	¡rz|	|_|
 |	¡Wnd|jj 
¡t ¡\\}}}
}}}|j d||||
fd	¡z|	 d¡WnYnXYnXdSq|	 d
¡dS)z™ We only override this to use 'deferring_http_request' class
        instead of the normal http_request class; it sucks to need to override
        this rz
rr4NrJú?zBad HTTP request: %sÚerroréz'Server Error: %s, %s: file: %s line: %siôé”)r<Úfound_terminatorrZ	in_bufferr[r=rZ
crack_requestZjoin_headersZ
splitqueryrTr3Zrequest_counterZ	incrementrCÚtotal_requestsÚlog_infoÚreprruÚhandlersÚmatchÚhandle_requestÚ
exceptionsÚasyncoreZcompact_traceback)rr6ÚlinesrFrUÚurir8ZrpathZrqueryr.ÚhÚfileZfunÚlineÚtÚvZtbinforrrrx„s`


ÿ


ÿ
ÿý
z'deferring_http_channel.found_terminator)N)	rrrZac_out_buffer_sizerrmrorsrxrrrrrlLs
 rlc@s.eZdZeZdZdd„Zdd„Zd	dd„ZdS)
Úsupervisor_http_serverNcCs^ddlm}|s| tj¡}| |¡}||_tj |¡| 	|¡g|_
| d¡| ¡dS)zj Override __init__ to do logger setup earlier so it can
        go to our logger object instead of stdout r©rDN)
Úsupervisor.medusarDZfile_loggerÚsysÚstdoutZunresolving_loggerr€Ú
dispatcherrZ
set_socketr|ZsetblockingZset_reuse_addr)rÚsockÚ
logger_objectrDrrrÚprebindØs


zsupervisor_http_server.prebindcCsrddlm}ddlm}| d¡|ƒ|_|ƒ|_|ƒ|_|ƒ|_|ƒ|_	| 
d|t t ¡¡|j
|jf¡dS)Nr)Úcounter)ÚVERSION_STRINGéz2Medusa (V%s) started at %s
	Hostname: %s
	Port:%s
)Zsupervisor.medusa.counterr‘Zsupervisor.medusa.http_serverr’ZlistenZ
total_clientsryrZ	bytes_outZbytes_inrzrEÚctimerXrH)rr‘r’rrrÚpostbindës"
üýÿzsupervisor_http_server.postbindÚinfocCs,d}t|ddƒdk	r|j}|j ||¡dS)NrMÚip)Úgetattrr—rDr:)rÚmessageÚtyper—rrrrzszsupervisor_http_server.log_info)r–)	rrrrlZ
channel_classr—rr•rzrrrrrˆÔs
rˆc@seZdZdZdd„ZdS)Úsupervisor_af_inet_http_serverz+ AF_INET version of supervisor HTTP server cCsÊ||_||_t tjtj¡}| ||¡| ||f¡|s€| dd¡t ¡}zt 	|¡}Wn"tj
k
r~td|ƒ‚YnXzt |¡d|_
Wn(tj
k
r¼| dd¡||_
YnX| ¡dS)NzComputing default hostnameZwarningzØCould not determine IP address for hostname %s, please try setting an explicit IP address in the "port" setting of your [inet_http_server] section.  For example, instead of "port = 9001", try "port = 127.0.0.1:9001."rzCannot do reverse lookup)r—rHÚsocketÚAF_INETÚSOCK_STREAMrÚbindrzZgethostnameZ
gethostbynameruÚ
ValueErrorZ
gethostbyaddrrXr•)rr—rHrrŽrjrrrrs,üÿ
z'supervisor_af_inet_http_server.__init__N)rrrr#rrrrrr›	sr›c@s eZdZdZdd„Zdd„ZdS)Úsupervisor_af_unix_http_serverz+ AF_UNIX version of supervisor HTTP server c
CsÆ||_||_d|t ¡f}zt |¡Wntk
r>YnXt tjtj¡}z6| 	|¡t 
||¡zt ||¡Wnxtk
rò| |¡}|r¤t 
tj¡‚d|}tj |¡zt |¡WnYnX| ¡t d¡YW¢žq@Yn”Xzt ||d|d¡Wnbtk
rp}	zB|	jdtjkr^d}t||t|ƒt t ¡¡dfƒ‚n‚W5d}	~	XYnX| ||¡W¢q´W5zt |¡Wntk
r®YnXXq@d|_|  ¡dS)Nz%s.%dzUnlinking stale socket %s
g333333Ó?rr4zŸNot permitted to chown %s to uid/gid %s; adjust "sockchown" value in config file or on command line to values that the current user (%s) can successfully chownz<unix domain socket>)!r—rHrQÚgetpidÚunlinkÚOSErrorrœÚAF_UNIXržrŸÚchmodÚlinkÚ	checkusedruÚerrnoZ
EADDRINUSEr‹ÚstderrÚwriter5rEÚsleepÚchownÚargsZEPERMr r{ÚpwdÚgetpwuidÚgeteuidrrXr•)
rÚ
socketnameÚ	sockchmodÚ	sockchownrZtempnamerŽZusedÚmsgZwhyrrrr*s`


ÿÿþ

z'supervisor_af_unix_http_server.__init__cCs`t tjtj¡}z.| |¡| tdƒ¡| d¡| ¡Wntjk
rVYdSXdSdS)NzGET / HTTP/1.0

r4FT)	rœr¥ržZconnectÚsendrZrecvr5ru)rr²r!rrrr¨qs

z(supervisor_af_unix_http_server.checkusedN)rrrr#rr¨rrrrr¡'sGr¡c@sDeZdZdd„Zdd„Zdd„Zdd„Zd	d
„Zdd„Zd
d„Z	dS)Útail_f_producercCs>t |¡|_||_d|_| ¡| ¡}||kr:|||_dSr)ÚweakrefÚrefrFÚfilenamerÚ_openÚ_fsizeÚsz)rrFrºÚheadr½rrrr~sztail_f_producer.__init__cCs| ¡dS©N)Ú_close©rrrrÚ__del__ˆsztail_f_producer.__del__c	Cs~| ¡z| ¡}Wnttfk
r.YdSX||j}|dkrLd|_dS|dkrz|j |d¡|j |¡}||_|StS)Nrrz==> File truncated <==
é)	Ú_followr¼r¤r r½r„ÚseekÚreadr
)rZnewszZbytes_addedr1rrrr‹s
ztail_f_producer.morecCs0t|jdƒ|_t |j ¡¡tj|_d|_	dS)NÚrbr)
Úopenrºr„rQÚfstatÚfilenoÚstatÚST_INOÚinor½rÁrrrr»sztail_f_producer._opencCs|j ¡dSr¿)r„r5rÁrrrrÀ¢sztail_f_producer._closec	CsPzt |j¡tj}Wnttfk
r0YdSX|j|krL| ¡| ¡dSr¿)	rQrËrºrÌr¤r rÍrÀr»)rrÍrrrrÄ¥s
ztail_f_producer._followcCst |j ¡¡tjSr¿)rQrÉr„rÊrËÚST_SIZErÁrrrr¼°sztail_f_producer._fsizeN)
rrrrrÂrr»rÀrÄr¼rrrrr·}s
r·c@s,eZdZdZdZdd„Zdd„Zdd„Zd	S)
Úlogtail_handlerzLogtail HTTP Request Handlerz/logtailcCs
||_dSr¿©Úsupervisord©rrÑrrrr·szlogtail_handler.__init__cCs|j |j¡Sr¿©r‚Ú
startswithrY©rrFrrrr}ºszlogtail_handler.matchcCst|jdkr| d¡dS| ¡\}}}}d|kr:t |¡}|rX|ddkrX|dd…}q:| dd¡\}}z| dd¡\}}Wntk
r˜|}d}YnXddlm}	|	|ƒ\}
}|j	j
 |
¡}|dkrÖ| d	¡dS|j |¡}|dkrø| d	¡dSt
|jd
|dƒ}
|
dks"tj |
¡s0| d¡dSt |
¡tj}t |¡|d<d
|d<| t||
dƒ¡| ¡dS)NÚGETrvrJrrIr4rŒ)Úsplit_namespecrwz
%s_logfileéšú
Last-Modifiedútext/plain;charset=utf-8úContent-Typer“)rUrurSrrTr[r Zsupervisor.optionsr×rÑZprocess_groupsr]Z	processesr˜ÚconfigrQrYÚexistsrËÚST_MTIMErÚbuild_http_dateÚpushr·rA)rrFrYr_r`raZprocess_name_and_channelZprocess_namer;r×Z
group_nameÚgroupZprocessÚlogfileÚmtimerrrr~½sB






zlogtail_handler.handle_requestN©rrrZIDENTrYrr}r~rrrrrϳs
rÏc@s,eZdZdZdZdd„Zdd„Zdd„Zd	S)
Úmainlogtail_handlerz!Main Logtail HTTP Request Handlerz/mainlogtailcCs
||_dSr¿rÐrÒrrrrøszmainlogtail_handler.__init__cCs|j |j¡Sr¿rÓrÕrrrr}ûszmainlogtail_handler.matchcCsˆ|jdkr| d¡dS|jjj}|dks6tj |¡sD| d¡dSt |¡tj	}t
 |¡|d<d|d<| t
||dƒ¡| ¡dS)NrÖrvrØrÙrÚrÛr“)rUrurÑÚoptionsrârQrYrÝrËrÞrrßràr·rA)rrFrârãrrrr~þs



z"mainlogtail_handler.handle_requestNrärrrrråôs
råc Cs:g}t|jƒ}|jD]}|d}|tjkrN|d|d}}t|||d}n@|tjkr‚|d}	|d}
|d}t|	|
||d}ntd|ƒ‚d	d
l	m
}d	dl	m}
d	dlm
}g}|jD]f\}}}z||f|Ž}Wn,t ¡}|j |¡td
|ƒ‚YnX| ||f¡|j d|¡q¼| d|
|ƒf¡|||ƒ}t|ƒ}t|ƒ}||ƒ}tj tj t¡¡}tj |d¡}t |¡}t |¡}|d}|d}|rà||i}t||ƒ}t||ƒ}t||ƒ}t||ƒ}t||ƒ}n|j  d|d¡| !|¡| !|¡| !|¡| !|¡| !|¡| ||f¡q|S)NÚfamilyrGrH)rr„r¦r­zCannot determine socket type %rr)Úsupervisor_xmlrpc_handler)ÚSystemNamespaceRPCInterface)Úsupervisor_ui_handlerzCould not make %s rpc interfacezRPC interface %r initializedÚsystemZuiÚusernameÚpasswordz:Server %r running without any HTTP authentication checkingZsection)"Ú
LogWrapperrDZserver_configsrœrr›r¥r¡r Zsupervisor.xmlrpcrèréZsupervisor.webrêZrpcinterface_factoriesÚ	tracebackÚ
format_excÚwarnÚappendr–rÏrårQrYÚabspathÚdirnameÚ__file__rr
Z
os_filesystemrÚsupervisor_auth_handlerZcriticalZinstall_handler) rærÑZserversÚwrapperrÜrçrGrHZhsr²r³r´rèrérêZ
subinterfacesÚnameÚfactoryr'ÚinstÚtbZ
xmlrpchandlerZtailhandlerZmaintailhandlerZ	uihandlerÚhereZtemplatedirZ
filesystemZdefaulthandlerrìríZusersrrrÚmake_http_serverss|

ÿ
ÿÿ






ÿÿ




rýc@s eZdZdZdd„Zdd„ZdS)rîz\Receives log messages from the Medusa servers and forwards
    them to the Supervisor loggercCs
||_dSr¿r‰)rrDrrrr_szLogWrapper.__init__cCs@| d¡r|dd…}d| ¡kr0|j |¡n|j |¡dS)z¼Medusa servers call this method.  There is no log level so
        we have to sniff the message.  We want "Server Error" messages
        from medusa.http_server logged as errors at least.Ú
Nrhru)Úendswithr7rDruZtrace)rrµrrrr:bs

zLogWrapper.logN)rrrr#rr:rrrrrî\srîc@seZdZdd„Zdd„ZdS)Úencrypted_dictionary_authorizercCs
||_dSr¿)Údict)rrrrrrnsz(encrypted_dictionary_authorizer.__init__cCsX|\}}||jkrP|j|}| d¡rFtt|ƒƒ ¡}|dd…|kS||kSndSdS)Nz{SHA}éF)rrÔrrZ	hexdigest)rZ	auth_inforìríZstored_passwordZ
password_hashrrrÚ	authorizeqs



z)encrypted_dictionary_authorizer.authorizeN)rrrrrrrrrrmsrc@seZdZddd„ZdS)röÚdefaultcCst ||||¡t|ƒ|_dSr¿)rrrZ
authorizer)rrZhandlerZrealmrrrr~sz supervisor_auth_handler.__init__N)r)rrrrrrrrrö}srö)-rQrËrEr‹rœr©r¸rïr¯ÚImportErrorZgetpassZsupervisor.compatrrrrrŠrr€rrr	r
rZsupervisor.medusa.auth_handlerrr
rr$r(r/Zhttp_requestr3rnrlrˆr›r¡r·rÏrårýrîrrörrrrÚ<module>sR @	5V6AI