Edit File: asynchat.cpython-37.pyc
B ����r}�c@,������������������@���sD���d�Z�ddlZddlmZ�G�dd��dej�ZG�dd��d�Zdd ��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)�dequec���������������@���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/python37/lib64/python3.7/asynchat.pyr ���C���s����zasync_chat.__init__c�������������C���s���t�d��d�S�)Nzmust be implemented in subclass)�NotImplementedError)r����datar ���r ���r����collect_incoming_dataQ���s����z async_chat.collect_incoming_datac�������������C���s���|�j��|��d�S�)N)r����append)r���r���r ���r ���r����_collect_incoming_dataT���s����z!async_chat._collect_incoming_datac�������������C���s���d��|�j�}|�jd�d��=�|S�)Nr���)�joinr���)r����dr ���r ���r���� _get_dataW���s����zasync_chat._get_datac�������������C���s���t�d��d�S�)Nzmust be implemented in subclass)r���)r���r ���r ���r����found_terminator\���s����zasync_chat.found_terminatorc�������������C���sB���t�|t�r|�jrt||�j�}nt�|t�r8|dk�r8td��||�_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_terminator_���s ����zasync_chat.set_terminatorc�������������C���s���|�j�S�)N)r���)r���r ���r ���r����get_terminatorj���s����zasync_chat.get_terminatorc���������� ���C���s���y|���|�j�}W�n<�tk r$���d�S��tk rL�}�z|�����d�S�d�}~X�Y�nX�t|t�rj|�jrjtt|�j �}|�j |�|�_ �xV|�j �r�t|�j �}|����}|s�|�� |�j ��d|�_ qzt|t��r|}||k�r�|�� |�j ��d|�_ |�j|�|�_n2|�� |�j d�|����|�j |d���|�_ d|�_|�����qzt|�}|�j �|�}|dk�rr|dk�rT|�� |�j d�|����|�j ||�d���|�_ |�����qzt|�j |�}|�r�||k�r�|�� |�j d�|�����|�j |�d���|�_ P�qz|�� |�j ��d|�_ qzW�d�S�)Nr���r������)Zrecv�ac_in_buffer_size�BlockingIOError�OSError�handle_errorr���r���r���r���r���r����lenr!���r���r���r���r����find�find_prefix_at_end)r���r���ZwhyZlbr����nZterminator_len�indexr ���r ���r����handle_readr���sR���� zasync_chat.handle_readc�������������C���s���|������d�S�)N)� initiate_send)r���r ���r ���r����handle_write����s����zasync_chat.handle_writec�������������C���s���|������d�S�)N)�close)r���r ���r ���r����handle_close����s����zasync_chat.handle_closec�������������C���s|���t�|tttf�stdt|���|�j}t|�|krdx>tdt|�|�D�]}|�j � ||||�����qBW�n|�j � |��|�����d�S�)Nz#data argument must be byte-ish (%r)r���)r���r���� bytearray� memoryview� TypeError�type�ac_out_buffer_sizer'����ranger���r���r-���)r���r���Zsabs�ir ���r ���r����push����s���� zasync_chat.pushc�������������C���s���|�j��|��|�����d�S�)N)r���r���r-���)r���Zproducerr ���r ���r����push_with_producer����s����zasync_chat.push_with_producerc�������������C���s���dS�)z4predicate for inclusion in the readable for select()����r ���)r���r ���r ���r����readable����s����zasync_chat.readablec�������������C���s���|�j�p|�j�S�)z4predicate for inclusion in the writable for select())r���� connected)r���r ���r ���r����writable����s����zasync_chat.writablec�������������C���s���|�j��d��dS�)zAautomatically close this channel once the outgoing queue is emptyN)r���r���)r���r ���r ���r����close_when_done����s����zasync_chat.close_when_donec�������������C���s���x|�j��r|�j�r|�j�d�}|s>|�j�d=�|d�kr>|�����d�S�|�j}y|d�|��}W�n8�tk r����|���}|r~|�j��|��n|�j�d=�wY�nX�t|t�r�|�j r�t ||�j�}y|��|�}W�n�t k r����|�����d�S�X�|�r|t|�k�s�|t|�k��r ||d���|�j�d<�n|�j�d=�d�S�W�d�S�)Nr���)r���r<���r0���r5���r3����more� appendleftr���r���r���r���r����sendr%���r&���r'���)r����firstZobsr���Znum_sentr ���r ���r���r-�������s8���� zasync_chat.initiate_sendc�������������C���s ���d|�_�|�jd�d��=�|�j����d�S�)Nr���)r���r���r����clear)r���r ���r ���r����discard_buffers��s����zasync_chat.discard_buffers)NN)�__name__� __module__�__qualname__�__doc__r#���r5���r���r���r ���r���r���r���r���r ���r!���r,���r.���r0���r8���r9���r;���r=���r>���r-���rD���r ���r ���r ���r���r���4���s,��� H(r���c���������������@���s���e�Zd�Zddd�Zdd��ZdS�)�simple_producer����c�������������C���s���||�_�||�_d�S�)N)r����buffer_size)r���r���rK���r ���r ���r���r �����s����zsimple_producer.__init__c�������������C���sJ���t�|�j�|�jkr6|�jd�|�j��}|�j|�jd���|�_|S�|�j}d|�_|S�d�S�)Nr���)r'���r���rK���)r����resultr ���r ���r���r?�����s����zsimple_producer.moreN)rJ���)rE���rF���rG���r ���r?���r ���r ���r ���r���rI�����s��� rI���c�������������C���s4���t�|�d�}x"|r.|��|d�|���s.|d8�}qW�|S�)Nr:���)r'����endswith)ZhaystackZneedle�lr ���r ���r���r)���/��s����r)���)rH���r����collectionsr���r ���r���rI���r)���r ���r ���r ���r����<module>/���s����\