
    Dfo(                     h   d dl Z d dlZd dlZddlmZ ddlmZ 	 d dlmZ n# e	$ r	 d dl
mZ Y nw xY w	 d dlmZmZmZ n# e	$ r d dlmZ d dlmZmZ Y nw xY w	 d d	lmZ d d
lmZ n# e	$ r d dlZd d
lmZ Y nw xY wdgZddZdaddZd Z G d de          Z G d d          Z G d d          ZdS )    N   )utils)webapi)BytesIO)
HTTPServerSimpleHTTPRequestHandlerBaseHTTPRequestHandler)r   )r   r	   )parse)unquote	runsimplez0.0.0.0i  c                     ddl }ddlddlddl G fddt                     G fdd|j        t                    }t          d|z              || |                                           dS )a'  
      Runs a simple HTTP server hosting WSGI app `func`. The directory `static/`
      is hosted statically.

      Based on [WsgiServer][ws] from [Colin Stewart][cs].

    [ws]: http://www.owlfish.com/software/wsgiutils/documentation/wsgi-server-api.html
    [cs]: http://www.owlfish.com/
    r   Nc                   >    e Zd Z fdZeZeZeZd ZddZd Z	dS )runbasic.<locals>.WSGIHandlerc                    t          j         d| j        z            \  }}}}}}i ddddd| j        dt          j        dd	d
dddd| j        d| j        d|d|d| j                            dd          d| j                            dd          d| j        d         d| j	        j
        d         dt          | j	        j
        d	                   d| j        }| j                                        D ]3\  }}	|	|d|                    dd                                          z  <   4d| _        g | _        	 | j	                            || j                  }
	 	 |
D ]}|r|                     |           	 t+          |
d          r|
                                 n*# t+          |
d          r|
                                 w w xY wnD# j        $ r+}|j        d         j        j        fv rY d }~d S Y d }~nd }~wj        $ r Y d S w xY wn4#  t9                                          t<          j                   Y nxY w| j        s|                     d           d S ) Nzhttp://dummyhost%szwsgi.version)r   r   zwsgi.url_schemehttpz
wsgi.inputwsgi.errorszwsgi.multithreadr   zwsgi.multiprocessr   zwsgi.run_onceREQUEST_METHODREQUEST_URI	PATH_INFOQUERY_STRINGCONTENT_TYPEzContent-Type CONTENT_LENGTHzContent-LengthREMOTE_ADDRSERVER_NAMESERVER_PORTSERVER_PROTOCOLzHTTP_%s-_closefile ) urlparsepathrfilesysstderrcommandheadersgetclient_addressserverserver_addressstrrequest_versionitemsreplaceupperwsgi_sent_headerswsgi_headersappwsgi_start_responsewsgi_write_datahasattrr!   errorargsECONNABORTEDEPIPEtimeoutprint
format_excwebdebug)selfprotocolhostr&   
parametersqueryfragmentenvhttp_header
http_valueresultdata
socket_errerrnosocket	tracebacks                =/var/www/media/lib/python3.11/site-packages/web/httpserver.pyrun_wsgi_appz*runbasic.<locals>.WSGIHandler.run_wsgi_app2   s*   @H@Q$ty0A A=HdD*eX
!6 dj sz	
 #A $Q   !$, ty T   0 0 D D !$,"2"23CR"H"H t215 t{9!<  s4;#=a#@AA!" "4#7#C( ,0<+=+=+?+? T T'ZISI 3 3C = = C C E EEFF &'D" "D>d.FGG+$* ; ;D# ; $ 4 4T : : :; #6733 +"LLNNN #6733 +"LLNNNN+|   !q)e.@%+-NNN ONNNN~   FF>i**,,39======) *$$S)))FsZ   > H  F" =%G "'G		G H 
HG=2H 8H =H
H HH /Ic                     | j                             d          rt          j        |            d S |                                  d S )N/static/)r&   
startswithr   do_GETrT   rD   s    rS   rX   z$runbasic.<locals>.WSGIHandler.do_GETp   sI    y##J// $(/55555!!#####    Nc                 N    | j         rt          d          ||f| _        | j        S )Nz5Headers already sent and start_response called again!)r5   	Exceptionr6   r9   )rD   response_statusresponse_headersexc_infos       rS   r8   z1runbasic.<locals>.WSGIHandler.wsgi_start_responsev   s4    % Y WXXX!02B CD''rZ   c                    | j         s| j        \  }}|d |                    d                   }||                    d          dz   d          }|                     t	          |          |           |D ]\  }}|                     ||           |                                  d| _         | j                            |           d S )Nr$   r   )	r5   r6   findsend_responseintsend_headerend_headerswfilewrite)rD   rN   statusr+   status_code
status_msgheadervalues           rS   r9   z-runbasic.<locals>.WSGIHandler.wsgi_write_data}   s    ) 	+"&"3$%7v{{3'7'7%78#FKK$4$4q$8$:$:;
""3{#3#3Z@@@%, 4 4MFE$$VU3333  """)*&JT"""""rZ   N)
__name__
__module____qualname__rT   do_POSTdo_PUT	do_DELETErX   r8   r9   )rP   rQ   rR   s   rS   WSGIHandlerr   1   s|        8	 8	 8	 8	 8	 8	 8	t  		$ 	$ 	$	( 	( 	( 	(	# 	# 	# 	# 	#rZ   rt   c                       e Zd Z fdZdS )runbasic.<locals>.WSGIServerc                 f    t           j                             | |           || _        d| _        d S )Nr   )r   __init__r7   serverShuttingDown)rD   funcr/   rt   s      rS   rx   z%runbasic.<locals>.WSGIServer.__init__   s3    !**4MMMDH&'D###rZ   N)rn   ro   rp   rx   )rt   s   rS   
WSGIServerrv      s.        	( 	( 	( 	( 	( 	( 	(rZ   r{   http://%s:%d/)	SocketServerrQ   rP   rR   r   ThreadingMixInr   r@   serve_forever)rz   r/   r}   r{   rt   rP   rQ   rR   s       @@@@rS   runbasicr      s     MMMLLLX# X# X# X# X# X# X# X# X#. X# X# X#t( ( ( ( ( ( (\0* ( ( ( 
/N
*+++Jt^$$2244444rZ   c                    t          |           } t          |           } t          ||           ad|d         v rt	          d|z             n1t          j        rt	          d|z             nt	          d|z             	 t                                           dS # t          t          f$ r t          	                                 daY dS w xY w)z
    Runs [CherryPy][cp] WSGI server hosting WSGI app `func`.
    The directory `static/` is hosted statically.

    [cp]: http://www.cherrypy.org
    /r   z%szhttps://%s:%d/r|   N)
StaticMiddlewareLogMiddlewarer{   r.   r@   ssl_adapterstartKeyboardInterrupt
SystemExitstop)rz   r/   s     rS   r   r      s     D!!DD--F
nQd^#$$$$ 	4"^34444/N2333z*   s   >B ,C	C	c                     ddl m} |                    | |d          }t          j                            d           |_        |S )zCreates CherryPy WSGI server listening at `server_address` to serve `wsgi_app`.
    This function can be overwritten to customize the webserver or use a different webserver.
    r   )wsgi	localhost)server_namejava)cherootr   Serverr(   platformrW   nodelay)r/   wsgi_appr   r.   s       rS   r{   r{      sU     [[{[KKF00  FN MrZ   c                   8    e Zd ZdZd Zd
dZd Zd Zd Zd Z	d	S )	StaticAppz*WSGI application for serving static files.c                 `    g | _         || _        || _        t          j                    | _        d S rm   )r+   environstart_responseosgetcwd	directory)rD   r   r   s      rS   rx   zStaticApp.__init__   s)    ,rZ   r   c                 T    t          t          |                    dz   |z   | _        d S )Nr$   )r0   rc   rh   )rD   rh   msgs      rS   rb   zStaticApp.send_response   s%    #f++&&,s2rZ   c                 >    | j                             ||f           d S rm   )r+   append)rD   namerl   s      rS   rd   zStaticApp.send_header   s"    T5M*****rZ   c                     d S rm    rY   s    rS   re   zStaticApp.end_headers       rZ   c                      d S rm   r   )as    rS   log_messagezStaticApp.log_message   r   rZ   c              #     K   | j         }|                    dd          | _        |                    dd          |                    dd          f| _        |                    dd          | _        t                      | _        	 |                     | j                  }dt          j        	                    |          z  }|                    d          }| 
                    d	|           ||k    r8|                     d
d           |                     | j        | j                   d S n# t          $ r Y nw xY w|                                 }|                     | j        | j                   |r6d}	 |                    |          }|sn|V  |                                 d S | j                                        }|V  d S )Nr   r   r   r   REMOTE_PORTr   z"%s"HTTP_IF_NONE_MATCHETagi0  zNot Modifiedi @  )r   r,   r&   r-   r*   r   rf   translate_pathr   getmtimerd   rb   r   rh   r+   OSError	send_headreadr!   getvalue)	rD   r   r&   etagclient_etagf
block_sizebufrl   s	            rS   __iter__zStaticApp.__iter__   s     ,KKR00	KKs++KKs++
 {{#3S99YY

	&&ty11DBG,,T222D!++&:;;KVT***{""""3777##DK>>> #  	 	 	D	 NNDK666 
	"JffZ(( 				
 GGIIIIIJ''))EKKKKKs   B#D+ +
D87D8N)r   )
rn   ro   rp   __doc__rx   rb   rd   re   r   r   r   rZ   rS   r   r      sy        44% % %3 3 3 3+ + +    % % % % %rZ   r   c                   &    e Zd ZdZddZd Zd ZdS )r   z)WSGI middleware for serving static files.rV   c                 "    || _         || _        d S rm   )r7   prefix)rD   r7   r   s      rS   rx   zStaticMiddleware.__init__  s    rZ   c                     |                     dd          }|                     |          }|                    | j                  rt	          ||          S |                     ||          S )Nr   r   )r,   normpathrW   r   r   r7   )rD   r   r   r&   s       rS   __call__zStaticMiddleware.__call__  s`    {{;++}}T""??4;'' 	5Wn55588G^444rZ   c                 |    t          j        t          |                    }|                    d          r|dz  }|S )Nr   )	posixpathr   r   endswith)rD   r&   path2s      rS   r   zStaticMiddleware.normpath  s:    "74==11== 	SLErZ   N)rV   )rn   ro   rp   r   rx   r   r   r   rZ   rS   r   r     sL        33   5 5 5    rZ   r   c                   $    e Zd ZdZd Zd Zd ZdS )r   z'WSGI middleware for logging the status.c                     || _         d| _        t                       G fdd          }t           |            d d           j        | _        d S )Nz%s - - [%s] "%s %s %s" - %sc                       e Zd Z fdZdS )*LogMiddleware.__init__.<locals>.FakeSocketc                     S rm   r   )rD   r   r   s     rS   makefilez3LogMiddleware.__init__.<locals>.FakeSocket.makefile"  s    rZ   N)rn   ro   rp   r   )r   s   rS   
FakeSocketr   !  s.              rZ   r   )r7   formatr   r	   log_date_time_string)rD   r7   r   r   s      @rS   rx   zLogMiddleware.__init__  sy    3II	 	 	 	 	 	 	 	 	 	
 %;JLL$%
 %

 	!!!rZ   c                 B      fd}                      |          S )Nc                 H     | |g|R  }                     |            |S rm   )log)rh   r^   r<   outr   rD   r   s       rS   xstart_responsez/LogMiddleware.__call__.<locals>.xstart_response+  s6     .)9ADAAACHHVW%%%JrZ   )r7   )rD   r   r   r   s   ``` rS   r   zLogMiddleware.__call__*  s>    	 	 	 	 	 	 	
 xx111rZ   c                    |                     dt          j                  }|                     dd          }|                     dd          }|                     dd          }|                     dd          d|                     d	d          }|                                 }| j        ||||||fz  }	t          t          j        |	          |
           d S )Nr   r   r    ACTUAL_SERVER_PROTOCOLr   r   r   :r   r"   )r,   rB   rC   r   r   r@   r   safestr)
rD   rh   r   outfilereqrE   methodrF   timer   s
             rS   r   zLogMiddleware.log2  s    ++mSY77kk+s++;;7==-s33KKs++++KKs+++

 ((**kT463GGemC  w//////rZ   N)rn   ro   rp   r   rx   r   r   r   rZ   rS   r   r     sG        11  2 2 20 0 0 0 0rZ   r   )r   )r   r   r(   r   r   r   rB   ior   ImportErrorStringIOhttp.serverr   r   r	   SimpleHTTPServerBaseHTTPServerurllibr
   r%   urllib.parser   __all__r   r.   r   r{   r   r   r   r   rZ   rS   <module>r      sD   				     



            ! ! ! !        !BXXXXXXXXXXX B B B999999AAAAAAAAAAB(((((($$$$$$$   OOO -u5 u5 u5 u5t 
   8
 
 
; ; ; ; ;( ; ; ;|       .'0 '0 '0 '0 '0 '0 '0 '0 '0 '0s-   ! //
> AAA% %A76A7