/snap/core24/1643/usr/lib/python3.12/test/support/__pycache__
Edit: /snap/core24/1643/usr/lib/python3.12/test/support/__pycache__/asynchat.cpython-312.pyc (10733B)
ЦiR- 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 ,/usr/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' r( r) r* r+ r
lenr2 r r, r. r% findfind_prefix_at_end)r r lbr. nterminator_lenindexs r handle_readzasync_chat.handle_ready s> 99T334D dC T%6%6dmm,D --4 T&&'B,,.J**4+<+<=$'!J,6..t/@/@A(+D%&*oo&:DO..t/@/@!/DE(,(9(9!"(=D%&'DO))+ "%Z))..z:B;qy 2243D3DVe3LM(,(9(9%:N:O(PD% ))+ /t/@/@*ME B; 66t7H7H5&7QR040A0A5&'0JD- 2243D3DE,/)g s I I8I87I8c $ | j y r )
initiate_sendr$ s r handle_writezasync_chat.handle_write s r c $ | j y r )closer$ s r handle_closezasync_chat.handle_close s
r c h t |t t t f st dt | | j }t | |kD r=t dt | | D ]# }| j j ||||z % n| j j | | j y )Nz#data argument must be byte-ish (%r)r )r' r* bytearray
memoryview TypeErrortypeac_out_buffer_sizer: ranger r rC )r r sabsis r pushzasync_chat.push s $ : >?A J(
(&&t9t1c$i.
:""))$q4.9
:
%%d+r c Z | j j | | j y r )r r rC )r producers r push_with_producerzasync_chat.push_with_producer s" !!(+r c y)z4predicate for inclusion in the readable for select() r$ s r readablezasync_chat.readable s r c 8 | j xs
| j S )z4predicate for inclusion in the writable for select())r connectedr$ s r writablezasync_chat.writable s !!9$..&89r c : | j j d y)zAautomatically close this channel once the outgoing queue is emptyN)r r r$ s r close_when_donezasync_chat.close_when_done s !!$'r c | j r| j r| j d }|s | j d= || j y | j } |d | }t |t r"| j rt || j } | j | }|r<|t | k s|t | k r||d | j d<