관리-도구
편집 파일: asynchat.cpython-311.pyc
� c��f2- � � � d Z ddlZddlmZ ddlmZ dZ eeed�� � G d� d ej � � Z G d � d� � Z d� ZdS ) 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)�_deprecatedznThe {name} module is deprecated and will be removed in Python {remove}. The recommended replacement is asyncio)� � )�removec � � e Zd ZdZdZdZdZdZdd�Zd� Z d� Z d � Zd � Zd� Z d� Zd � Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zd� Zd� 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 � � d| _ g | _ t � � | _ t j � | ||� � d S �N� )�ac_in_buffer�incomingr � producer_fifo�asyncore� dispatcher�__init__)�self�sock�maps �//opt/alt/python311/lib64/python3.11/asynchat.pyr zasync_chat.__init__J sB � ���� �� � #�W�W�����$�$�T�4��5�5�5�5�5r c � � t d� � ��Nzmust be implemented in subclass��NotImplementedError�r �datas r �collect_incoming_dataz async_chat.collect_incoming_dataX � � �!�"C�D�D�Dr c �: � | j � |� � d S �N)r �appendr s r �_collect_incoming_dataz!async_chat._collect_incoming_data[ s � �� ���T�"�"�"�"�"r c �N � d� | j � � }| j d d �= |S r )�joinr )r �ds r � _get_datazasync_chat._get_data^ s( � ��H�H�T�]�#�#���M�!�!�!���r c � � t d� � �r r �r s r �found_terminatorzasync_chat.found_terminatorc r r c �� � t |t � � r| j rt || j � � }n*t |t � � r|dk rt d� � �|| _ 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 �terms r �set_terminatorzasync_chat.set_terminatorf sj � � �d�C� � � N�T�%6� N���t�}�-�-�D�D� ��c� "� "� N�t�a�x�x��L�M�M�M�����r c � � | j S r )r2 r( s r �get_terminatorzasync_chat.get_terminatorq s � ���r c � � | � | j � � }n1# t $ r Y d S t $ r | � � � Y d S w xY wt |t � � r!| j rt t | j � � }| j |z | _ | j �r�t | j � � }| � � � }|s#| � | j � � d| _ �n�t |t � � r�|}||k r2| � | j � � d| _ | j |z | _ �nM| � | j d |� � � | j |d � | _ d| _ | � � � n�t |� � }| j � |� � }|dk rT|dk r"| � | j d |� � � | j ||z d � | _ | � � � nxt% | j |� � }|r@||k r8| � | j d | � � � | j | d � | _ d S | � | j � � d| _ | j ���d S d S )Nr r ���)�recv�ac_in_buffer_size�BlockingIOError�OSError�handle_errorr+ r, r- r. r/ r �lenr6 r r0 r2 r) �find�find_prefix_at_end)r r �lbr2 �n�terminator_len�indexs r �handle_readzasync_chat.handle_ready s� � � ��9�9�T�3�4�4�D�D��� � � ��F�F�� � � ��������F�F� ���� �d�C� � � -�T�%6� -���d�m�,�,�D� �-��4��� �� 3 0��T�&�'�'�B��,�,�.�.�J�� 0 0��*�*�4�+<�=�=�=�$'��!�!��J��,�,� , 0�����6�6��.�.�t�/@�A�A�A�(+�D�%�&*�o��&:�D�O�O��.�.�t�/@��!��/D�E�E�E�(,�(9�!�"�"�(=�D�%�&'�D�O��)�)�+�+�+�+� "%�Z�����)�.�.�z�:�:���B�;�;��q�y�y� �2�2�4�3D�V�e�V�3L�M�M�M�(,�(9�%��:N�:O�:O�(P�D�%� �)�)�+�+�+�+� /�t�/@�*�M�M�E�� 0� �B�;�;� �6�6�t�7H��5�&��7Q�R�R�R�04�0A�5�&�'�'�0J�D�-��� �2�2�4�3D�E�E�E�,/��)�g �� 3 0� 3 0� 3 0� 3 0� 3 0s � � A�A� Ac �. � | � � � d S r )� initiate_sendr( s r �handle_writezasync_chat.handle_write� s � ��������r c �. � | � � � d S r )�closer( s r �handle_closezasync_chat.handle_close� s � �� � �����r c � � t |t t t f� � st dt |� � � � �| j }t |� � |k rGt dt |� � |� � D ]'}| j � ||||z � � � �(n| j � |� � | � � � d S )Nz#data argument must be byte-ish (%r)r )r+ r. � bytearray� memoryview� TypeError�type�ac_out_buffer_sizer>