
    F\h                        S r SSKJrJr  SSKrSSKrSSKJr  SSK	J
r
  Sr/ SQrS\-   r\
" 5       S	-   \R                  R                  5       S   -   r\S
-   \-   r " S S\5      r " S S\5      r " S S\5      rS r\\4S jr\S:X  af  \" SS\5       r\R2                  R5                  5       r\" S\S   S\S   S5        SSKr\R<                  " S5        \R?                  5         SSS5        gg! , (       d  f       g= f)a!  BaseHTTPServer that implements the Python WSGI protocol (PEP 3333)

This is both an example of how WSGI can be implemented, and a basis for running
simple web applications on a local machine, such as might be done when testing
or debugging an application.  It has not been reviewed for security issues,
however, and we strongly recommend that you use a "real" web server for
production use.

For example usage, see the 'if __name__=="__main__"' block at the end of the
module.  See also the BaseHTTPServer module docs for other API information.
    )BaseHTTPRequestHandler
HTTPServerN)SimpleHandler)python_implementationz0.2)
WSGIServerWSGIRequestHandlerdemo_appmake_serverWSGIServer// c                       \ rS rSr\rS rSrg)ServerHandler   c                      U R                   R                  U R                  R                  SS5      S   U R                  5        [
        R                  " U 5        g ! [
        R                  " U 5        f = f)Nr      r   )request_handlerlog_requeststatussplit
bytes_sentr   closeselfs    ,/usr/lib/python3.13/wsgiref/simple_server.pyr   ServerHandler.close    sY    	&  ,,!!#a(+T__ %M%s   AA A4 N)__name__
__module____qualname____firstlineno__software_versionserver_softwarer   __static_attributes__r       r   r   r      s    &O&r%   r   c                   4    \ rS rSrSrSrS rS rS rS r	Sr
g)	r   *   z7BaseHTTPServer that implements the Python WSGI protocolNc                 P    [         R                  " U 5        U R                  5         g)z.Override server_bind to store the server name.N)r   server_bindsetup_environr   s    r   r)   WSGIServer.server_bind0   s    t$r%   c                     0 =ol         U R                  US'   SUS'   [        U R                  5      US'   SUS'   SUS'   SUS'   g )	NSERVER_NAMEzCGI/1.1GATEWAY_INTERFACESERVER_PORT REMOTE_HOSTCONTENT_LENGTHSCRIPT_NAME)base_environserver_namestrserver_port)r   envs     r   r*   WSGIServer.setup_environ5   s\    "$$!--M#,  !1!12MM Mr%   c                     U R                   $ Napplicationr   s    r   get_appWSGIServer.get_app?   s    r%   c                     Xl         g r;   r<   )r   r=   s     r   set_appWSGIServer.set_appB   s    &r%   )r=   r4   )r   r   r    r!   __doc__r=   r)   r*   r>   rA   r$   r   r%   r   r   r   *   s    AK
  'r%   r   c                   0    \ rS rSrS\-   rS rS rS rSr	g)r   G   r   c                 r   U R                   R                  R                  5       nU R                  US'   U R                  US'   U R
                  US'   SU R                  ;   a  U R                  R                  SS5      u  p#OU R                  Sp2[        R                  R                  US5      US'   X1S	'   U R                  S
   US'   U R                  R                  S5      c  U R                  R                  5       US'   OU R                  S   US'   U R                  R                  S5      nU(       a  XAS'   U R                  R                  5        H`  u  pVUR!                  SS5      R#                  5       oVR%                  5       nXQ;   a  M;  SU-   U;   a  USU-   ==   SU-   -  ss'   MY  XaSU-   '   Mb     U$ )NSERVER_PROTOCOLSERVER_SOFTWAREREQUEST_METHOD?r   r0   z
iso-8859-1	PATH_INFOQUERY_STRINGr   REMOTE_ADDRzcontent-typeCONTENT_TYPEzcontent-lengthr2   -_HTTP_,)serverr4   copyrequest_versionserver_versioncommandpathr   urllibparseunquoteclient_addressheadersgetget_content_typeitemsreplaceupperstrip)r   r8   rX   querylengthkvs          r   get_environWSGIRequestHandler.get_environK   s   kk&&++-!%!5!5!%!4!4 $$))Q/JD2!<<//lCK#N!003M<<N+3"&,,"?"?"AC"&,,~">C!!"23$* !LL&&(DAiiC &&(AGGI!xqyCGAI#a%'!"GAI ) 
r%   c                 "    [         R                  $ r;   )sysstderrr   s    r   
get_stderrWSGIRequestHandler.get_stderrl   s    zzr%   c                    U R                   R                  S5      U l        [        U R                  5      S:  a'  SU l        SU l        SU l        U R                  S5        gU R                  5       (       d  g[        U R                   U R                  U R                  5       U R                  5       SS9nXl        UR                  U R                  R!                  5       5        g)zHandle a single HTTP requesti  i   r0   i  NF)multithread)rfilereadlineraw_requestlinelenrequestlinerU   rW   
send_errorparse_requestr   wfilerm   rh   r   runrS   r>   )r   handlers     r   handleWSGIRequestHandler.handleo   s      $zz2259t##$u,!D#%D DLOOC !!##JJ

DOO$5t7G7G7I
 #'DKK'')*r%   )rW   rs   rU   ru   N)
r   r   r    r!   __version__rV   rh   rm   r{   r$   r   r%   r   r   r   G   s    "[0NB+r%   r   c                    SSK Jn  U" 5       n[        SUS9  [        US9  [        U R	                  5       5      nU H  u  pV[        US[        U5      US9  M     U" SS/5        UR                  5       R                  S5      /$ )	Nr   )StringIOzHello world!)file=z200 OK)zContent-Typeztext/plain; charset=utf-8zutf-8)ior   printsortedr`   reprgetvalueencode)environstart_responser   stdouthrf   rg   s          r   r	   r	      su    ZF	.v&	vw}}AaDG&) 8JKLOO$$W-..r%   c                 <    U" X4U5      nUR                  U5        U$ )zACreate a new WSGI server listening on `host` and `port` for `app`)rA   )hostportappserver_classhandler_classrS   s         r   r
   r
      s#     4,6F
NN3Mr%   __main__r0   i@  zServing HTTP onr   r   z...zhttp://localhost:8000/xyz?abc) rC   http.serverr   r   rk   urllib.parserY   wsgiref.handlersr   platformr   r}   __all__rV   versionr   sys_versionr"   r   r   r   r	   r
   r   httpdsocketgetsocknamesar   
webbrowseropenhandle_requestr   r%   r   <module>r      s  
 ; 
  * *
I ,#%+ckk.?.?.A!.DD!C'+5 
&M 
&' ':;+/ ;+~	/ #-<N z	Rx	(E\\%%'A1u=78 
)	( 	(	(s   AC22
D 