python (3.12.0)
ϑeR- 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 ZdZdZdZdZdZddZd Z d Z
d Zd
Zd Z
d Zd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)
async_chatzThis 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_bufferincomingr
producer_fifor
dispatcher__init__)selfsockmaps I/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/support/asynchat.pyr zasync_chat.__init__J s7
#W$$T45r c t d Nzmust be implemented in subclassNotImplementedErrorr datas r collect_incoming_dataz async_chat.collect_incoming_dataX !"CDDr 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% HHT]]#MM!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)
isinstancestruse_encodingbytesencodingint
ValueError
terminator)r terms r set_terminatorzasync_chat.set_terminatorf sT
dC T%6%6t}}-D c
"taxLMMr 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 rt | j }| j }|s$| j | j d| _
nt |t r|}||k r8| j | j d| _
| j |z
| _ n4| j | j d | | j |d | _
d| _ | j! nt | }| 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 ry y # t $ r Y y t $ r | j Y y w xY w)Nr r )recvac_in_buffer_sizeBlockingIOErrorOSErrorhandle_errorr'