o e@sddlZddlZddlZddlZzddlZWn ey#ddlZYnwddlm Z zzddlm Z WneyBddlm Z YnwWn eyOdZ Ynwddl m ZddlmZmZGdd d eZGd d d eZd aeZd dZdS)N)apache) mp_version)versionz< 3.2) __version__) WSGIGateway_ErrorsWrapperc@s:eZdZddZddZd ddZd dd Zd d d Zd S) InputWrappercCs ||_dSNreq)selfr r =/usr/lib/python3/dist-packages/trac/web/modpython_frontend.py__init__,s zInputWrapper.__init__cCsdSr r )r r r rclose/szInputWrapper.closecC |j|Sr )r readr sizer r rr2 zInputWrapper.readcCrr )r readlinerr r rr5rzInputWrapper.readlinecCrr )r readlines)r hintr r rr8rzInputWrapper.readlinesN)r)__name__ __module__ __qualname__rrrrrr r r rr*s   rc@sLeZdZeejdkZeejdkZddZ ddZ ddZ dd Z d S) ModPythonGatewayrc si}|td|d<t|d<d|vr|d|d<d|vr&|d|d<d|vr0|d|d <d |vr:|d |d <d |vrD|d |d <d|vrx|dd}|dddd}||sftd||f||d<tj |t |d|d<t ||ttfdd|_dS)N mod_pythonztrac.web.frontendztrac.web.versionTracEnvz trac.env_pathTracEnvParentDirztrac.env_parent_dirTracEnvIndexTemplateztrac.env_index_templateTracTemplateVarsztrac.template_vars TracLocalez trac.locale TracUriRoot/ REQUEST_URI?rz+TracUriRoot set to %s but request URL is %s SCRIPT_NAME PATH_INFOcs |Sr ) log_error)xr r r`s z+ModPythonGateway.__init__..)updater build_cgi_envrrstripsplit startswith ValueErrorurllibparseunquotelenrrrrr )r r optionsenvironroot_uri request_urir r rrAs8       zModPythonGateway.__init__cCs|jsJd|jsE|j\}}|_t|dd|j_|D](\}}|dkr1|jt|q|dkr<||j_q|jj ||qdSdS)NzResponse not startedzcontent-lengthz content-type) headers_set headers_sentintr statuslowerset_content_length content_type headers_outadd)r r@headersnamevaluer r r _send_headerscs    zModPythonGateway._send_headersc CsR|z |j|jWdSty(}zdt|vrWYd}~dSd}~wwNzclient closed connection)rIr sendfilerGIOErrorstr)r fileobjer r r _sendfileqs zModPythonGateway._sendfilec CsP|z |j|WdSty'}zdt|vrWYd}~dSd}~wwrJ)rIr writerLrM)r datarOr r r_writeys zModPythonGateway._writeN) rrrr mpm_queryAP_MPMQ_IS_THREADEDwsgi_multithreadAP_MPMQ_IS_FORKEDwsgi_multiprocessrrIrPrSr r r rr<s" rTcCstStrNda|}|d}|s!|dr!tj|dd}|s2|dr2tj|dd}|s@|jdr@|jd}|rGt |t t j dWdn1sXwYt dtt||}dd lm}||tjS) NFPYTHON_EGG_CACHErz .egg-cacher ztrac.webzTrac==%sr)dispatch_request) _first_lock_first get_optionsgetospathjoinsubprocess_env pkg_resourcesset_extraction_pathreloadsysmodulesrequireVERSIONr trac.web.mainrZrunrOK)r r8 egg_cachegatewayrZr r rhandlers*     ro)r_rcrf urllib.parser4 threading ImportErrordummy_threadingrrrrtracrri trac.web.wsgirrobjectrrr\Lockr[ror r r rs6       E