관리-도구
편집 파일: asynchat.cpython-310.pyc
o 6��f - � @ 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__)�selfZsock�map� r �//opt/alt/python310/lib64/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 Ztermr r r �set_terminatorg s zasync_chat.set_terminatorc C s | j S r )r* r! r r r �get_terminatorr s zasync_chat.get_terminatorc C s� z| � | j�}W n ty Y d S ty | �� Y d S w t|t�r.| jr.tt| j �}| j | | _ | j r�t| j �}| �� }|sL| � | j � d| _ n�t|t�r�|}||k rg| � | 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 � | _ d S | � | j � d| _ | j s7d S d S )Nr r ���)Zrecv�ac_in_buffer_size�BlockingIOError�OSError�handle_errorr# r$ r% r&