Spamworldpro Mini Shell
Spamworldpro


Server : Apache/2.4.52 (Ubuntu)
System : Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
User : www-data ( 33)
PHP Version : 8.1.2-1ubuntu2.21
Disable Function : NONE
Directory :  /lib/python3/dist-packages/twisted/web/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //lib/python3/dist-packages/twisted/web/__pycache__/wsgi.cpython-310.pyc
o

�b�U�@s�dZddlmZddlmZddlmZddlmZddl	m
Z
ddlmZddl
mZdd	lmZdd
lmZddlmZeeurKdd
�Zdd�Zndd
�Zdd�ZGdd�d�ZGdd�d�ZGdd�d�Zee�Gdd�d��ZdgZdS)zo
An implementation of
U{Python Web Server Gateway Interface v1.0.1<http://www.python.org/dev/peps/pep-3333/>}.
�)�Sequence)�exc_info)�warn)�implementer)�blockingCallFromThread)�Logger)�Failure)�INTERNAL_SERVER_ERROR)�	IResource)�NOT_DONE_YETcCst|t�r|S|�d�S)z�
        Convert C{string} to an ISO-8859-1 byte string, if it is not already.

        @type string: C{str}/C{bytes} or C{unicode}
        @rtype: C{str}/C{bytes}

        @raise UnicodeEncodeError: If C{string} contains non-ISO-8859-1 chars.
        �
iso-8859-1)�
isinstance�str�encode��string�r�2/usr/lib/python3/dist-packages/twisted/web/wsgi.py�_wsgiString*s
	
rcCs|S)z�
        Return C{string} as is; a WSGI string is a byte string in Python 2.

        @type string: C{str}/C{bytes}
        @rtype: C{str}/C{bytes}
        rrrrr�_wsgiStringToBytes8srcCs$t|t�r
|�d��d�S|�d�S)as
        Convert C{string} to a WSGI "bytes-as-unicode" string.

        If it's a byte string, decode as ISO-8859-1. If it's a Unicode string,
        round-trip it to bytes and back using ISO-8859-1 as the encoding.

        @type string: C{str} or C{bytes}
        @rtype: C{str}

        @raise UnicodeEncodeError: If C{string} contains non-ISO-8859-1 chars.
        r)r
rr�decoderrrrrDs

cCs
|�d�S)z�
        Convert C{string} from a WSGI "bytes-as-unicode" string to an
        ISO-8859-1 byte string.

        @type string: C{str}
        @rtype: C{bytes}

        @raise UnicodeEncodeError: If C{string} contains non-ISO-8859-1 chars.
        r)rrrrrrUs

c@s.eZdZdZe�Zdd�Zdd�Zdd�ZdS)	�_ErrorStreama�
    File-like object instances of which are used as the value for the
    C{'wsgi.errors'} key in the C{environ} dictionary passed to the application
    object.

    This simply passes writes on to L{logging<twisted.logger>} system as
    error events from the C{'wsgi'} system.  In the future, it may be desirable
    to expose more information in the events it logs, such as the application
    object which generated the message.
    cCs^t|t�s"tturtd|t|�jftd�ntd|t|�jf��|jj	|dd|fd�dS)aG
        Generate an event for the logging system with the given bytes as the
        message.

        This is called in a WSGI application thread, not the I/O thread.

        @type data: str

        @raise TypeError: On Python 3, if C{data} is not a native string. On
            Python 2 a warning will be issued.
        z+write() argument should be str, not %r (%s)��categoryz)write() argument must be str, not %r (%s)�wsgiT)�system�isError�messageN)
r
r�bytesr�type�__name__�UnicodeWarning�	TypeError�_log�error)�self�datarrr�writeps
����z_ErrorStream.writecCs|�d�|��dS)a�
        Join the given lines and pass them to C{write} to be handled in the
        usual way.

        This is called in a WSGI application thread, not the I/O thread.

        @param iovec: A C{list} of C{'\n'}-terminated C{str} which will be
            logged.

        @raise TypeError: On Python 3, if C{iovec} contains any non-native
            strings. On Python 2 a warning will be issued.
        �N)r'�join)r%�iovecrrr�
writelines�s
z_ErrorStream.writelinescCsdS)z�
        Nothing is buffered, so flushing does nothing.  This method is required
        to exist by PEP 333, though.

        This is called in a WSGI application thread, not the I/O thread.
        Nr�r%rrr�flush�sz_ErrorStream.flushN)	r �
__module__�__qualname__�__doc__rr#r'r+r-rrrrrbsrc@s>eZdZdZdd�Zd
dd�Zd
dd�Zd
d	d
�Zdd�ZdS)�_InputStreama�
    File-like object instances of which are used as the value for the
    C{'wsgi.input'} key in the C{environ} dictionary passed to the application
    object.

    This only exists to make the handling of C{readline(-1)} consistent across
    different possible underlying file-like object implementations.  The other
    supported methods pass through directly to the wrapped object.
    cCs
||_dS)zt
        Initialize the instance.

        This is called in the I/O thread, not a WSGI application thread.
        N)�_wrapped)r%�inputrrr�__init__��
z_InputStream.__init__NcC�|dur	|j��S|j�|�S)z�
        Pass through to the underlying C{read}.

        This is called in a WSGI application thread, not the I/O thread.
        N)r2�read�r%�sizerrrr7��
z_InputStream.readcCs&|dks|dur
|j��S|j�|�S)z�
        Pass through to the underlying C{readline}, with a size of C{-1} replaced
        with a size of L{None}.

        This is called in a WSGI application thread, not the I/O thread.
        ���N)r2�readliner8rrrr<�s	
z_InputStream.readlinecCr6)z�
        Pass through to the underlying C{readlines}.

        This is called in a WSGI application thread, not the I/O thread.
        N)r2�	readlinesr8rrrr=�r:z_InputStream.readlinescCs
t|j�S)z�
        Pass through to the underlying C{__iter__}.

        This is called in a WSGI application thread, not the I/O thread.
        )�iterr2r,rrr�__iter__�r5z_InputStream.__iter__�N)	r r.r/r0r4r7r<r=r?rrrrr1�s




r1c@sTeZdZdZdZe�Zdd�Zdd�Zddd	�Z	d
d�Z
dd
�Zdd�Zdd�Z
dS)�
_WSGIResponsea$
    Helper for L{WSGIResource} which drives the WSGI application using a
    threadpool and hooks it up to the L{http.Request}.

    @ivar started: A L{bool} indicating whether or not the response status and
        headers have been written to the request yet.  This may only be read or
        written in the WSGI application thread.

    @ivar reactor: An L{IReactorThreads} provider which is used to call methods
        on the request in the I/O thread.

    @ivar threadpool: A L{ThreadPool} which is used to call the WSGI
        application object in a non-I/O thread.

    @ivar application: The WSGI application object.

    @ivar request: The L{http.Request} upon which the WSGI environment is
        based and to which the application's output will be sent.

    @ivar environ: The WSGI environment L{dict}.

    @ivar status: The HTTP response status L{str} supplied to the WSGI
        I{start_response} callable by the application.

    @ivar headers: A list of HTTP response headers supplied to the WSGI
        I{start_response} callable by the application.

    @ivar _requestFinished: A flag which indicates whether it is possible to
        generate more response data or not.  This is L{False} until
        L{http.Request.notifyFinish} tells us the request is done,
        then L{True}.
    FcCs�d|_||_||_||_||_|j���|j�|jr$dd�	|j�}nd}|j
r2dd�	|j
�}nd}|j�dd�}t
|�dkrDd}n|d}t|j�t|��j�t|�t|�t|�t|�d�pbd�t|�d�pjd�t|���tt|��j��t|j�d	�
|_d|j_|j��D]!\}	}
d
t|	����dd�}	d
�	dd�|
D���dd�|j|	<q�|j�d|��r�dp�ddddt �t!|j"�d��dS)NF�/��?�scontent-typer(scontent-length)
�REQUEST_METHOD�REMOTE_ADDR�SCRIPT_NAME�	PATH_INFO�QUERY_STRING�CONTENT_TYPE�CONTENT_LENGTH�SERVER_NAME�SERVER_PORT�SERVER_PROTOCOL�HTTP_�-�_�,css�|]}t|�VqdSr@)r)�.0�vrrr�	<genexpr>9s�z)_WSGIResponse.__init__.<locals>.<genexpr>�
� )rEr�https�httpT)zwsgi.versionzwsgi.url_schemez
wsgi.run_oncezwsgi.multithreadzwsgi.multiprocesszwsgi.errorsz
wsgi.input)#�started�reactor�
threadpool�application�request�notifyFinish�addBoth�	_finished�prepathr)�postpath�uri�split�lenr�method�getClientAddress�host�	getHeader�getRequestHostnamer�getHost�port�clientproto�environ�defaultContentType�requestHeaders�getAllRawHeaders�upper�replace�update�isSecurerr1�content)r%r\r]r^r_�
scriptName�pathInfo�parts�queryString�name�valuesrrrr4	sV
����z_WSGIResponse.__init__cCs
d|_dS)zc
        Record the end of the response generation for the request being
        serviced.
        TN)�_requestFinished)r%�ignoredrrrrbWs
z_WSGIResponse._finishedNcCs(|jr|dur|d�|d��t|t�s td�|t|�j���t|t�r&nt|t	�r9t
d|t|�jftd�ntd|t|�jf��|D]D}t|t�rNnt|t	�rat
d|t|�jftd�ntd	|t|�jf��t
|�dkrytd
|����|D]}t|t�s�td|����q{qF||_||_|jS)z�
        The WSGI I{start_response} callable.  The given values are saved until
        they are needed to generate the response.

        This will be called in a non-I/O thread.
        NrE�z!status must be str, not {!r} ({})z%headers should be a list, not %r (%s)rz#headers must be a list, not %r (%s)z0header should be a (str, str) tuple, not %r (%s)z.header must be a (str, str) tuple, not %r (%s)z'header must be a (str, str) tuple, not z%header must be (str, str) tuple, not )r[�with_tracebackr
rr"�formatrr �listrr�RuntimeWarning�tuplerg�status�headersr')r%r�r��excInfo�header�elemrrr�
startResponse^s^

��
	
����

����
��z_WSGIResponse.startResponsecs0��fdd�}zt�j|�j�Wd�_Sd�_w)a
        The WSGI I{write} callable returned by the I{start_response} callable.
        The given bytes will be written to the response body, possibly flushing
        the status and headers first.

        This will be called in a non-I/O thread.
        cs|s����j���dSr@)�_sendResponseHeadersr_r'�r[�r&r%rr�	wsgiWrite�sz&_WSGIResponse.write.<locals>.wsgiWriteT)rr\r[)r%r&r�rr�rr'�s!z_WSGIResponse.writecCsd|j�dd�\}}t|�}|j�|t|��|jD]\}}|��dvr/|jj�	t|�t|��qdS)a,
        Set the response code and response headers on the request object, but
        do not flush them.  The caller is responsible for doing a write in
        order for anything to actually be written out in response to the
        request.

        This must be called in the I/O thread.
        NrE)�server�date)
r�rf�intr_�setResponseCoderr��lower�responseHeaders�addRawHeader)r%�coderr}�valuerrrr��s	���z"_WSGIResponse._sendResponseHeaderscCs|j�|j�dS)zo
        Start the WSGI application in the threadpool.

        This must be called in the I/O thread.
        N)r]�callInThread�runr,rrr�start�sz_WSGIResponse.startcs�z(���j�j�}|D]}|r��|��jrnqt|dd�}|dur'|�WntyD�fdd�}�jj|�j	gt
��R�Ynw�fdd�}�j�|�j	�d�_	dS)z�
        Call the WSGI application object, iterate it, and handle its output.

        This must be called in a non-I/O thread (ie, a WSGI application
        thread).
        �closeNcsD�jjdt|||�d�|r�j��dS�j�t��j��dS)NzWSGI application error)�failure)r#r�rr_�loseConnectionr�r	�finish)r[rr��	tracebackr,rr�	wsgiError�s�z$_WSGIResponse.run.<locals>.wsgiErrorcs$�js|s	����j��dSdSr@)rr�r_r�r�r,rr�
wsgiFinishs
�z%_WSGIResponse.run.<locals>.wsgiFinishT)r^rpr�r'r�getattr�
BaseExceptionr\�callFromThreadr[r)r%�appIteratorr�r�r�r�rr,rr��s&
��
�
z_WSGIResponse.runr@)r r.r/r0rrr#r4rbr�r'r�r�r�rrrrrA�s!N
F+rAc@s4eZdZdZdZdd�Zdd�Zdd�Zd	d
�ZdS)�WSGIResourcea�
    An L{IResource} implementation which delegates responsibility for all
    resources hierarchically inferior to it to a WSGI application.

    @ivar _reactor: An L{IReactorThreads} provider which will be passed on to
        L{_WSGIResponse} to schedule calls in the I/O thread.

    @ivar _threadpool: A L{ThreadPool} which will be passed on to
        L{_WSGIResponse} to run the WSGI application object.

    @ivar _application: The WSGI application object.
    TcCs||_||_||_dSr@)�_reactor�_threadpool�_application)r%r\r]r^rrrr4(s
zWSGIResource.__init__cCs t|j|j|j|�}|��tS)a�
        Turn the request into the appropriate C{environ} C{dict} suitable to be
        passed to the WSGI application object and then pass it on.

        The WSGI application object is given almost complete control of the
        rendering process.  C{NOT_DONE_YET} will always be returned in order
        and response completion will be dictated by the application object, as
        will the status, headers, and the response body.
        )rAr�r�r�r�r)r%r_�responserrr�render-s

�zWSGIResource.rendercC�td��)z�
        Reject attempts to retrieve a child resource.  All path segments beyond
        the one which refers to this resource are handled by the WSGI
        application object.
        z/Cannot get IResource children from WSGIResource��RuntimeError)r%r}r_rrr�getChildWithDefault=�z WSGIResource.getChildWithDefaultcCr�)z�
        Reject attempts to add a child resource to this resource.  The WSGI
        application object handles all path segments beneath this resource, so
        L{IResource} children can never be found.
        z0Cannot put IResource children under WSGIResourcer�)r%�path�childrrr�putChildEr�zWSGIResource.putChildN)	r r.r/r0�isLeafr4r�r�r�rrrrr�sr�N)r0�collections.abcr�sysr�warningsr�zope.interfacer�twisted.internet.threadsr�twisted.loggerr�twisted.python.failurer�twisted.web.httpr	�twisted.web.resourcer
�twisted.web.serverrrrrrrr1rAr��__all__rrrr�<module>s0

C?3
8

Spamworldpro Mini