
    f                        d Z ddlmZ ddlZddlmZmZ ddlZddlZddl	m
Z
 ddlmZ  G d de
      Zdd	Z	 	 	 	 dd
Ze	 d	 	 	 	 	 dd       Ze	 d	 	 	 	 	 dd       Z	 d	 	 	 	 	 ddZddgZy)zJModule holding utility and convenience functions for zmq event monitoring.    )annotationsN)	Awaitableoverload)	TypedDict)_check_versionc                  ,    e Zd ZU ded<   ded<   ded<   y)_MonitorMessageinteventvaluebytesendpointN)__name__
__module____qualname____annotations__     L/var/www/cvtools/html/venv/lib/python3.12/site-packages/zmq/utils/monitor.pyr	   r	      s    JJOr   r	   c                    t        |       dk7  st        | d         dk7  rt        d|        t        j                  d| d         \  }}t	        j
                  |      t	        j
                  |      | d   d}|S )a  decode zmq_monitor event messages.

    Parameters
    ----------
    msg : list(bytes)
        zmq multipart message that has arrived on a monitor PAIR socket.

        First frame is::

            16 bit event id
            32 bit event value
            no padding

        Second frame is the endpoint as a bytestring

    Returns
    -------
    event : dict
        event description as dict with the keys `event`, `value`, and `endpoint`.
       r      zInvalid event message format: z=hi   )r   r   r   )lenRuntimeErrorstructunpackzmqEvent)msgevent_idr   r   s       r   parse_monitor_messager"      sv    * 3x1}CFq(;C5ABBmmE3q62OHe8$5!FE
 Lr   c                8   K   |  d{   }t        |      S 7 w)zyLike parse_monitor_msg, but awaitable

    Given awaitable message, return awaitable for the parsed monitor message.
    N)r"   )awaitable_msgr    s     r   _parse_monitor_msg_asyncr%   7   s       
C %% s   c                     y Nr   socketflagss     r   recv_monitor_messager+   D   s     "%r   c                     y r'   r   r(   s     r   r+   r+   K   s     r   c                    t        dd       | j                  |      }t        |t              rt	        |      S t        |      S )u  Receive and decode the given raw message from the monitoring socket and return a dict.

    Requires libzmq ≥ 4.0

    The returned dict will have the following entries:
      event : int
        the event id as described in `libzmq.zmq_socket_monitor`
      value : int
        the event value associated with the event, see `libzmq.zmq_socket_monitor`
      endpoint : str
        the affected endpoint

    .. versionchanged:: 23.1
        Support for async sockets added.
        When called with a async socket,
        returns an awaitable for the monitor message.

    Parameters
    ----------
    socket : zmq.Socket
        The PAIR socket (created by other.get_monitor_socket()) on which to recv the message
    flags : int
        standard zmq recv flags

    Returns
    -------
    event : dict
        event description as dict with the keys `event`, `value`, and `endpoint`.
    )   r   zlibzmq event API)r   recv_multipart
isinstancer   r%   r"   )r)   r*   r    s      r   r+   r+   R   sD    D 6-.



&C #y!',, !%%r   r"   r+   )r    zlist[bytes]returnr	   )r$   zAwaitable[list[bytes]]r1   r	   )r   )r)   zzmq.asyncio.Socketr*   r
   r1   zAwaitable[_MonitorMessage])r)   zzmq.Socket[bytes]r*   r
   r1   r	   )r)   z
zmq.Socketr*   r
   r1   z,_MonitorMessage | Awaitable[_MonitorMessage])__doc__
__future__r   r   typingr   r   r   zmq.asynciozmq._typingr   	zmq.errorr   r	   r"   r%   r+   __all__r   r   r   <module>r9      s    P
 #  & 
  ! $i @
&)
&
& 
 %%%  % 
% 
   
 ,&,&,& 2,&^ #$:
;r   