Your IP : 18.219.239.111


Current Path : /opt/alt/python310/lib64/python3.10/__pycache__/
Upload File :
Current File : //opt/alt/python310/lib64/python3.10/__pycache__/asynchat.cpython-310.opt-1.pyc

o

6��f-�@s^dZddlZddlmZddlmZededd�Gdd	�d	ej�ZGd
d�d�Z	dd
�Z
dS)a�A class supporting chat-style (command/response) protocols.

This class adds support for 'chat' style protocols - where one side
sends a 'command', and the other sends a response (examples would be
the common internet protocols - smtp, nntp, ftp, etc..).

The handle_read() method looks at the input stream for the current
'terminator' (usually '\r\n' for single-line responses, '\r\n.\r\n'
for multi-line output), calling self.found_terminator() on its
receipt.

for example:
Say you build an async nntp client using this class.  At the start
of the connection, you'll have self.terminator set to '\r\n', in
order to process the single-line greeting.  Just before issuing a
'LIST' command you'll set it to '\r\n.\r\n'.  The output of the LIST
command will be accumulated (using your own 'collect_incoming_data'
method) up to the terminator, and then control will be returned to
you - by calling your self.found_terminator() method.
�N)�deque)�warnzlThe asynchat module is deprecated and will be removed in Python 3.12. The recommended replacement is asyncio�)�
stacklevelc@s�eZdZdZdZdZdZdZd(dd�Zdd	�Z	d
d�Z
dd
�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�ZdS))�
async_chatz�This is an abstract class.  You must derive from this class, and add
    the two methods collect_incoming_data() and found_terminator()irzlatin-1NcCs(d|_g|_t�|_tj�|||�dS�N�)�ac_in_buffer�incomingr�
producer_fifo�asyncore�
dispatcher�__init__)�selfZsock�map�r�//opt/alt/python310/lib64/python3.10/asynchat.pyrKszasync_chat.__init__cC�td���Nzmust be implemented in subclass��NotImplementedError�r�datarrr�collect_incoming_dataY�z async_chat.collect_incoming_datacCs|j�|�dS�N)r
�appendrrrr�_collect_incoming_data\sz!async_chat._collect_incoming_datacCsd�|j�}|jdd�=|Sr)�joinr
)r�drrr�	_get_data_szasync_chat._get_datacCrrr�rrrr�found_terminatordrzasync_chat.found_terminatorcCsBt|t�r|jrt||j�}n
t|t�r|dkrtd��||_dS)zdSet the input delimiter.

        Can be a fixed string of any length, an integer, or None.
        rz-the number of received bytes must be positiveN)�
isinstance�str�use_encoding�bytes�encoding�int�
ValueError�
terminator)rZtermrrr�set_terminatorgs

zasync_chat.set_terminatorcCs|jSr)r*r!rrr�get_terminatorrszasync_chat.get_terminatorcCs�z|�|j�}WntyYdSty|��YdSwt|t�r.|jr.tt|j	�}|j
||_
|j
r�t|j
�}|��}|sL|�
|j
�d|_
n�t|t�r�|}||krg|�
|j
�d|_
|j||_np|�
|j
d|��|j
|d�|_
d|_|��nVt|�}|j
�|�}|dkr�|dkr�|�
|j
d|��|j
||d�|_
|��n+t|j
|�}|r�||kr�|�
|j
d|��|j
|d�|_
dS|�
|j
�d|_
|j
s7dSdS)Nrr���)Zrecv�ac_in_buffer_size�BlockingIOError�OSError�handle_errorr#r$r%r&r'r	�lenr,rr(r*r"�find�find_prefix_at_end)rrZlbr*�nZterminator_len�indexrrr�handle_readzsV�


	
�zasync_chat.handle_readcC�|��dSr)�
initiate_sendr!rrr�handle_write��zasync_chat.handle_writecCr8r)�closer!rrr�handle_close�r;zasync_chat.handle_closecCsxt|tttf�stdt|���|j}t|�|kr0tdt|�|�D]}|j	�
||||��q n|j	�
|�|��dS)Nz#data argument must be byte-ish (%r)r)r#r&�	bytearray�
memoryview�	TypeError�type�ac_out_buffer_sizer2�rangerrr9)rrZsabs�irrr�push�s��zasync_chat.pushcCs|j�|�|��dSr)rrr9)rZproducerrrr�push_with_producer�szasync_chat.push_with_producercCsdS)z4predicate for inclusion in the readable for select()�rr!rrr�readable�szasync_chat.readablecCs|jp|jS)z4predicate for inclusion in the writable for select())r�	connectedr!rrr�writable�szasync_chat.writablecCs|j�d�dS)zAautomatically close this channel once the outgoing queue is emptyN)rrr!rrr�close_when_done�szasync_chat.close_when_donecCs|jr�|jr�|jd}|s|jd=|dur|��dS|j}z|d|�}Wnty@|��}|r:|j�|�n|jd=Yqwt|t�rO|j	rOt
||j�}z|�|�}Wnt
yd|��YdSw|r�|t|�kss|t|�kr~||d�|jd<dS|jd=dSdSdS)Nr)rrIr=rBr@�more�
appendleftr#r$r%r&r'�sendr0r1r2)r�firstZobsrZnum_sentrrrr9�s@
����zasync_chat.initiate_sendcCs d|_|jdd�=|j��dSr)r	r
r�clearr!rrr�discard_buffersszasync_chat.discard_buffers)NN)�__name__�
__module__�__qualname__�__doc__r.rBr%r'rrrr r"r+r,r7r:r=rErFrHrJrKr9rQrrrrr<s.
H(rc@seZdZddd�Zdd�ZdS)�simple_producer�cCs||_||_dSr)r�buffer_size)rrrXrrrrs
zsimple_producer.__init__cCsFt|j�|jkr|jd|j�}|j|jd�|_|S|j}d|_|Sr)r2rrX)r�resultrrrrLszsimple_producer.moreN)rW)rRrSrTrrLrrrrrVs
rVcCsDt|�d}|r |�|d|��s |d8}|r |�|d|��r|S)NrG)r2�endswith)ZhaystackZneedle�lrrrr47s
�r4)rUr�collectionsr�warningsr�DeprecationWarningr
rrVr4rrrr�<module>s�\ 

?>