%PDF- %PDF-
Direktori : /lib/python3.12/test/support/__pycache__/ |
Current File : //lib/python3.12/test/support/__pycache__/asynchat.cpython-312.pyc |
� ���fR- � �d � d Z ddlmZ ddlmZ G d� dej � Z G d� d� Zd� Zy ) 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. � )�deque)�asyncorec � � e Zd ZdZdZdZdZdZdd�Zd� Z d� Z d � Zd � Zd� Z d� Zd � Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zy)� 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 � � d| _ g | _ t � | _ t j j | ||� y �N� )�ac_in_buffer�incomingr � producer_fifor � dispatcher�__init__)�self�sock�maps �,/usr/lib/python3.12/test/support/asynchat.pyr zasync_chat.__init__J s7 � ���� �� � #�W������$�$�T�4��5r c � � t d� ��Nzmust be implemented in subclass��NotImplementedError�r �datas r �collect_incoming_dataz async_chat.collect_incoming_dataX � � �!�"C�D�Dr c �: � | j j |� y �N)r �appendr s r �_collect_incoming_dataz!async_chat._collect_incoming_data[ s � �� � ���T�"r c �Z � dj | j � }| j d d �= |S r )�joinr )r �ds r � _get_datazasync_chat._get_data^ s% � ��H�H�T�]�]�#���M�M�!���r c � � t d� �r r �r s r �found_terminatorzasync_chat.found_terminatorc r r c �� � t |t � r*| j rt || j � }|| _ yt |t � r|dk rt d� �|| _ y)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 �terms r �set_terminatorzasync_chat.set_terminatorf sT � � �d�C� �T�%6�%6���t�}�}�-�D� ��� ��c� "�t�a�x��L�M�M���r c � � | j S r )r. r$ s r �get_terminatorzasync_chat.get_terminatorq s � ����r c � � | j | j � }t |t � r&| j rt t | j � }| j |z | _ | j �r�t | j � }| j � }|s$| j | j � d| _ �n�t |t � r�|}||k r8| j | j � d| _ | j |z | _ �n4| j | j d | � | j |d | _ d| _ | j! � n�t |� }| j j# |� }|dk7 rK|dkD r| j | j d | � | j ||z d | _ | j! � ntt% | j |� }|r:||k7 r4| j | j d | � | j | d | _ y | j | j � d| _ | j r���y y # t $ r Y y t $ r | j � Y y w xY w)Nr r ���)�recv�ac_in_buffer_size�BlockingIOError�OSError�handle_errorr'