403Webshell
Server IP : 65.1.209.187  /  Your IP : 216.73.216.144
Web Server : nginx/1.24.0
System : Linux ip-172-31-5-206 6.14.0-1015-aws #15~24.04.1-Ubuntu SMP Tue Sep 23 22:44:48 UTC 2025 x86_64
User :  ( 1001)
PHP Version : 8.3.6
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/aioredis/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/aioredis/__pycache__/pubsub.cpython-312.pyc
�

���]�6����ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	ddl
mZddlm
Z
gd�Ze�ZGd�d	e�ZGd
�d�ZGd�d
�ZGd�de�ZGd�d�Zy)�N�)�
AbcChannel)�_converters)�ChannelClosedError)�logger)�Channel�EndOfStream�Receiverc��eZdZdZdd�Zd�Zed��Zed��Zed��Z	ddd�d	�Z
dd
�Zddd�d�Zd�Z
d
�Zdd�Zy)rzWrapper around asyncio.Queue.Nc���|�-tjdk\rtjdt�t�|_tt|�|�|_	||_
y)N)���The loop argument is deprecated)�sys�version_info�warnings�warn�DeprecationWarning�
ClosableQueue�_queuer�type�_name�_is_pattern)�self�name�
is_pattern�loops    �1/usr/lib/python3/dist-packages/aioredis/pubsub.py�__init__zChannel.__init__sM����� 0� 0�F� :��M�M�;�,�
.�#�o��� ��d��,�T�2��
�%���c��dj|jj|j|j|j
j
��S)Nz'<{} name:{!r}, is_pattern:{}, qsize:{}>)�format�	__class__�__name__rrr�qsize�rs r�__repr__zChannel.__repr__#s@��8�?�?��N�N�#�#��J�J��(�(�$�+�+�*;�*;�*=�?�	?r c��|jS)zEncoded channel name/pattern.�rr&s rrzChannel.name(����z�z�r c��|jS�z0Set to True if channel is subscribed to pattern.�rr&s rrzChannel.is_pattern-������r c�0�|jjS)aReturns True until there are messages in channel or
        connection is subscribed to it.

        Can be used with ``while``:

        >>> ch = conn.pubsub_channels['chan:1']
        >>> while ch.is_active:
        ...     msg = await ch.get()   # may stuck for a long time

        �r�	exhaustedr&s r�	is_activezChannel.is_active2s���;�;�(�(�(�(r ��encoding�decoderc��LK�|�t|�sJ|��|jjr
t��|jj	��d{���}|t
ury|jr|\}}|�|j|�}|�||�}|jr|fS|S7�M�w)z�Coroutine that waits for and returns a message.

        :raises aioredis.ChannelClosedError: If channel is unsubscribed
            and has no messages.
        N)�callablerr1r�getr	r�decode)rr4r5�msg�dest_channels     rr8zChannel.get@s�������(�7�"3�<�W�<�3��;�;� � �$�&�&��K�K�O�O�%�%���+��
���� #��L�#����*�*�X�&�C����#�,�C������$�$��
�!&�s�AB$�B"�AB$c��`K�|j|tj���d{���S7��w)zShortcut to get JSON messages.r3N)r8�json�loads)rr4s  r�get_jsonzChannel.get_json[s#�����h�h��$�*�*�h�E�E�F�E�s�%.�,�.c�"�t|d�||��S)z�Same as get method but its native coroutine.

        Usage example:

        >>> async for msg in ch.iter():
        ...     print(msg)
        c��|jS�N�r2)�chs r�<lambda>zChannel.iter.<locals>.<lambda>hs
�����r �r2r4r5��_IterHelper�rr4r5s   r�iterzChannel.iter_s���4�%<�$,�#*�,�	,r c��K�|jsy|jj�sy|jj��d{���|jS7��w)z�Waits for message to become available in channel
        or channel is closed (unsubscribed).

        Possible usage:

        >>> while (await ch.wait_message()):
        ...     msg = await ch.get()
        FTN)r2r�empty�waitr&s r�wait_messagezChannel.wait_messagelsJ�����~�~���{�{� � �"���k�k��� � � ��~�~��	!�s�AA�A�	Ac�:�|jj|�yrB)r�put�r�datas  r�
put_nowaitzChannel.put_nowait~s��������r c�f�|jjs|jj�yy)z~Marks channel as inactive.

        Internal method, will be called from connection
        on `unsubscribe` command.
        N)r�closed�close�r�excs  rrVz
Channel.close�s&���{�{�!�!��K�K����"r rB)zutf-8)r$�
__module__�__qualname__�__doc__rr'�propertyrrr2r8r?rJrNrSrV�r rrrsx��'�&�?�
����� �� ��)��)�%)�$��6G� $�T�,��$� r rc�"�eZdZdZd�Zd�Zd�Zy)rH��_ch�
_is_active�_args�_kwc�<�||_||_||_||_yrBr_)rrDr2�args�kws     rrz_IterHelper.__init__�s�����#�����
���r c��|SrBr]r&s r�	__aiter__z_IterHelper.__aiter__�s���r c���K�|j|j�st�|jj|ji|j
���d{���}|�t�|S7��wrB)rar`�StopAsyncIterationr8rbrc)rr:s  r�	__anext__z_IterHelper.__anext__�sU�������t�x�x�(�$�$� �D�H�H�L�L�$�*�*�9����9�9���;�$�$��
�:�s�AA(�A&�A(N)r$rYrZ�	__slots__rrhrkr]r rrHrH�s��5�I���r rHc��eZdZdZdd�Zd�Zd�Zd�Zed��Z	ed��Z
ddd	�d
�Zd�Zed��Z
d
�Zddd	�d�Zdd�Zd�Zdd�Zy)r
a�Multi-producers, single-consumer Pub/Sub queue.

    Can be used in cases where a single consumer task
    must read messages from several different channels
    (where pattern subscriptions may not work well
    or channels can be added/removed dynamically).

    Example use case:

    >>> from aioredis.pubsub import Receiver
    >>> from aioredis.abc import AbcChannel
    >>> mpsc = Receiver()
    >>> async def reader(mpsc):
    ...     async for channel, msg in mpsc.iter():
    ...         assert isinstance(channel, AbcChannel)
    ...         print("Got {!r} in channel {!r}".format(msg, channel))
    >>> asyncio.ensure_future(reader(mpsc))
    >>> await redis.subscribe(mpsc.channel('channel:1'),
    ...                       mpsc.channel('channel:3'))
    ...                       mpsc.channel('channel:5'))
    >>> await redis.psubscribe(mpsc.pattern('hello'))
    >>> # publishing 'Hello world' into 'hello-channel'
    >>> # will print this message:
    Got b'Hello world' in channel b'hello-channel'
    >>> # when all is done:
    >>> await redis.unsubscribe('channel:1', 'channel:3', 'channel:5')
    >>> await redis.punsubscribe('hello')
    >>> mpsc.stop()
    >>> # any message received after stop() will be ignored.
    Nc��|�t|�s	Jd|f��|�tjdt�|�|j}t�|_i|_||_y)Nz!on_close must be None or callabler)	r7rrr�
check_stoprr�_refs�	_on_close)rr�on_closes   rrzReceiver.__init__�sd����8�H�#5�	;�/��8;�	;�5����M�M�;�,�
.������H�#�o�����
�!��r c��dj|jt|j�|jj��S)Nz-<Receiver is_active:{}, senders:{}, qsize:{}>)r"r2�lenrprr%r&s rr'zReceiver.__repr__�s2��?�������D�J�J�����9J�9J�9L�M�	Or c��tt|�|�}|df|jvr!t||d��}||j|df<|S|j|dfS)zvCreate a channel.

        Returns ``_Sender`` object implementing
        :class:`~aioredis.abc.AbcChannel`.
        F�r�rrrp�_Sender)rr�enc_namerDs    r�channelzReceiver.channel�se���t�D�z�*�4�0���e��D�J�J�.���x�$)�+�B�,.�D�J�J��%�(�)��I��z�z�8�U�+�,�,r c��tt|�|�}|df|jvrt||d��}||j|df<|j|dfS)z~Create a pattern channel.

        Returns ``_Sender`` object implementing
        :class:`~aioredis.abc.AbcChannel`.
        Trvrw)r�pattern�enc_patternrDs    rr|zReceiver.pattern�s`��"�$�w�-�0��9�����d�j�j�0���{�$(�*�B�.0�D�J�J��T�*�+��z�z�;��-�.�.r c��tj|jj�D�cic]}|js
|j
|��c}�Scc}w)zRead-only channels dict.��types�MappingProxyTyperp�valuesrr�rrDs  r�channelszReceiver.channels�sN���%�%�"&�*�*�"3�"3�"5�'"���=�=�
�G�G�R�K�'"�#�	#��'"�� Ac��tj|jj�D�cic]}|jr
|j
|��c}�Scc}w)zRead-only patterns dict.rr�s  r�patternszReceiver.patterns�sN���%�%�"&�*�*�"3�"3�"5�'���}�}�
�G�G�R�K�'��	��'r�r3c��^K�|�t|�sJ|��|jjr
t��|jj	��d{���}|t
ury|\}}|jr|\}}|�|j|�}|�||�}|jr||ffS||fS7�V�w)a�Wait for and return pub/sub message from one of channels.

        Return value is either:

        * tuple of two elements: channel & message;

        * tuple of three elements: pattern channel, (target channel & message);

        * or None in case Receiver is not active or has just been stopped.

        :raises aioredis.ChannelClosedError: If listener is stopped
            and all messages have been received.
        N)r7rr1rr8r	rr9)rr4r5�objrDr:�dest_chs       rr8zReceiver.get�s�����0��(�7�"3�<�W�<�3��;�;� � �$�&�&��K�K�O�O�%�%���+������C�
�=�=��L�G�S����*�*�X�&�C����#�,�C�
�=�=����~�%�%��3�w��&�s�AB-�B+�AB-c���K�|jj�sy|jjry|jj��d{���|jS7��w)z Blocks until new message appear.TFN)rrLrUrMr2r&s rrNzReceiver.wait_message#sN�����{�{� � �"���;�;�����k�k��� � � ��~�~��	!�s�AA%�A#�A%c��|jjrytd�|jj	�D��S)z5Returns True if listener has any active subscription.Fc3�4K�|]}|j���y�wrBrC)�.0rDs  r�	<genexpr>z%Receiver.is_active.<locals>.<genexpr>1s����>�B�2�<�<�>�s�)rr1�anyrpr�r&s rr2zReceiver.is_active,s2���;�;� � ���>�$�*�*�*;�*;�*=�>�>�>r c�8�|jj�y)z�Stop receiving messages.

        All new messages after this call will be ignored,
        so you must call unsubscribe before stopping this listener.
        N)rrVr&s r�stopz
Receiver.stop3s��	
�����r c�"�t|d�||��S)z�Returns async iterator.

        Usage example:

        >>> async for ch, msg in mpsc.iter():
        ...     print(ch, msg)
        c�0�|jjSrBr0)�rs rrEzReceiver.iter.<locals>.<lambda>Hs��1�8�8�3E�3E�/E�r rFrGrIs   rrJz
Receiver.iter?s���4�%E�$,�#*�,�	,r c�>�|js|j�yy)�TBDN)rpr�)rrzrXs   rrozReceiver.check_stopLs���z�z��I�I�K�r c��|jjrtjd||�y|jj	||f�y)Nz9Pub/Sub listener message after stop: sender: %r, data: %r)rrUr�warningrP)rrR�senders   r�_put_nowaitzReceiver._put_nowaitWs>���;�;����N�N�3�!�4�
)�
���������'r c��|jj|j|jf�|j	||��y)N�rX)rp�poprrrq)rr�rXs   r�_closezReceiver._close_s1���
�
������V�%6�%6�7�8����v�3��'r )NNrB)r$rYrZr[rr'rzr|r\r�r�r8rNr2r�rJror�r�r]r rr
r
�s����>
"�O�-�/��#��#�����%)�$�'�R��?��?�� $�T�,��(�(r r
c�h�eZdZdZd�Zd�Zed��Zed��Zed��Z	ddd�d	�Z
d
�Zdd�Zy)
rxzEWrite-Only Channel.

    Does not allow direct ``.get()`` calls.
    c�f�||_tt|�|�|_||_d|_y�NF)�	_receiverrrrr�_closed)r�receiverrrs    rrz_Sender.__init__js-��!��� ��d��,�T�2��
�%�����r c��dj|jj|j|j|j
�S)Nz,<{} name:{!r}, is_pattern:{}, receiver:{!r}>)r"r#r$rrr�r&s rr'z_Sender.__repr__ps7��=�D�D��N�N�#�#��J�J��(�(�$�.�.�:�	:r c��|jS)z Encoded channel name or pattern.r)r&s rrz_Sender.nameur*r c��|jSr,r-r&s rrz_Sender.is_patternzr.r c��|jSrB�r�r&s rr2z_Sender.is_actives���<�<��r Nr3c�� K�td���w)Nz.MPSC channel does not allow direct get() calls)�RuntimeErrorrIs   rr8z_Sender.get�s�����K�L�L�s�c�>�|jj||��y)N)r�)r�r�rQs  rrSz_Sender.put_nowait�s�����"�"�4��"�5r c�f�|jryd|_|jj||��y)NTr�)r�r�r�rWs  rrVz
_Sender.close�s,���<�<����������d���,r rB)
r$rYrZr[rr'r\rrr2r8rSrVr]r rrxrxdsd���
�:�
����� �� �� �� �%)�$�M�6�-r rxc�\�eZdZd�Zd�Zd�Zd�Zd�Zed��Z	ed��Z
d�Zd	�Zd
�Z
y)rc�v�tj�|_tj�|_d|_yr�)�collections�dequer�asyncio�Event�_eventr�r&s rrzClosableQueue.__init__�s&��!�'�'�)����m�m�o�����r c��K�|jsG|js;|jj��d{���|js
|js�;y7��w)NT)rr�r�rMr&s rrMzClosableQueue.wait�s@�����;�;�$�,�,��+�+�"�"�$�$�$��;�;�$�,�,��
%�s�6A�A�A�Ac��jK�|j��d{���|js*|jsJd|j|jf��|js|jrtS|jj	�}|js|j
j
�|S7���w)NzUnexpected queue state)rMrr�r	�popleftr��clear�r�items  rr8zClosableQueue.get�s������i�i�k����{�{�d�l�l�	A�$�d�k�k�4�<�<�-A�	A�*��{�{�t�|�|����{�{�"�"�$���{�{��K�K������	�s�B3�B1�BB3c��|jry|jj|�|jj	�yrB)r�r�appendr��setr�s  rrPzClosableQueue.put�s,���<�<�������4� ������r c�F�d|_|jj�y)z,Mark queue as closed and notify all waiters.TN)r�r�r�r&s rrVzClosableQueue.close�s����������r c��|jSrBr�r&s rrUzClosableQueue.closed�s���|�|�r c�8�|jxr
|jSrB)r�rr&s rr1zClosableQueue.exhausted�s���|�|�/�D�K�K��/r c��|jSrB)rr&s rrLzClosableQueue.empty�s���;�;��r c�,�t|j�SrB)rtrr&s rr%zClosableQueue.qsize�s���4�;�;��r c�l�|jrdnd}dj|t|j��S)NrU�openz<Queue {} size:{}>)r�r"rtr)rrUs  rr'zClosableQueue.__repr__�s+��!�\�\��v��#�*�*�6�3�t�{�{�3C�D�Dr N)r$rYrZrrMr8rPrVr\rUr1rLr%r'r]r rrr�sS���
�
	���
�����0��0�� �Er r)r�r=r�r�rr�abcr�utilr�errorsr�logr�__all__�objectr	rrHr
rxrr]r r�<module>r�sr�������
���&�����h��p �j�p �f��,@(�@(�F,-�j�,-�^2E�2Er 

Youez - 2016 - github.com/yon3zu
LinuXploit