File: //lib/python3.10/__pycache__/asynchat.cpython-310.pyc
o
    E�h -  �                   @   s^   d Z ddlZddlmZ ddlmZ ededd� G dd	� d	ej�ZG d
d� d�Z	dd
� 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�   e Zd ZdZdZdZdZdZd(dd�Zdd	� Z	d
d� Z
dd
� Zdd� Zdd� 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()i   r   zlatin-1Nc                 C   s(   d| _ g | _t� | _tj�| ||� d S �N�    )�ac_in_buffer�incomingr   �
producer_fifo�asyncore�
dispatcher�__init__)�self�sock�map� r   �/usr/lib/python3.10/asynchat.pyr   K   s   zasync_chat.__init__c                 C   �   t d���Nzmust be implemented in subclass��NotImplementedError�r   �datar   r   r   �collect_incoming_dataY   �   z async_chat.collect_incoming_datac                 C   s   | j �|� d S �N)r
   �appendr   r   r   r   �_collect_incoming_data\   s   z!async_chat._collect_incoming_datac                 C   s   d� | j�}| jd d �= |S r   )�joinr
   )r   �dr   r   r   �	_get_data_   s   zasync_chat._get_datac                 C   r   r   r   �r   r   r   r   �found_terminatord   r   zasync_chat.found_terminatorc                 C   sB   t |t�r| jrt|| j�}n
t |t�r|dk rtd��|| _dS )zdSet the input delimiter.
        Can be a fixed string of any length, an integer, or None.
        r   z-the number of received bytes must be positiveN)�
isinstance�str�use_encoding�bytes�encoding�int�
ValueError�
terminator)r   �termr   r   r   �set_terminatorg   s
   
zasync_chat.set_terminatorc                 C   s   | j S r   )r+   r"