o
    i                  	   @   s   d Z ddlmZ ddlmZmZmZ G dd deZG dd deZ	G dd	 d	eZ
G d
d deZG dd de	ZG dd de	ZG dd de	eZdddZdadaG dd deZ	ddeee eeef eeeef f defddZg dZdS ) z 0MQ Error classes and functions.    )EINTR)OptionalTupleUnionc                   @      e Zd ZdZdS )ZMQBaseErrorz.Base exception class for 0MQ errors in Python.N__name__
__module____qualname____doc__ r   r   D/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/zmq/error.pyr   
       r   c                   @   sZ   e Zd ZU dZdZee ed< ddee dee fddZ	defdd	Z
defd
dZdS )ZMQErrorzWrap an errno style error.

    Parameters
    ----------
    errno : int
        The ZMQ errno or None.  If None, then ``zmq_errno()`` is called and
        used.
    msg : string
        Description of the error or None.
    Nerrnomsgc                 C   sn   ddl m}m} |du r| }t|tr'|| _|du r"||| _dS || _dS |du r2t|| _dS || _dS )a  Wrap an errno style error.

        Parameters
        ----------
        errno : int
            The ZMQ errno or None.  If None, then ``zmq_errno()`` is called and
            used.
        msg : string
            Description of the error or None.
        r   )strerror	zmq_errnoN)zmq.backendr   r   
isinstanceintr   str)selfr   r   r   r   r   r   r   __init__   s   


zZMQError.__init__returnc                 C   s   | j S N)r   r   r   r   r   __str__<   s   zZMQError.__str__c                 C   s   | j j dt|  dS )Nz('z'))	__class__r	   r   r   r   r   r   __repr__?   s   zZMQError.__repr__)NN)r	   r
   r   r   r   r   r   __annotations__r   r   r   r    r   r   r   r   r      s   
  r   c                   @   r   )ZMQBindErrorznAn error for ``Socket.bind_to_random_port()``.

    See Also
    --------
    .Socket.bind_to_random_port
    Nr   r   r   r   r   r"   C   r   r"   c                   @   r   )NotDonezRaised when timeout is reached while waiting for 0MQ to finish with a Message

    See Also
    --------
    .MessageTracker.wait : object for tracking when ZeroMQ is done
    Nr   r   r   r   r   r#   L   r   r#   c                       "   e Zd ZdZd fdd	Z  ZS )ContextTerminatedz6Wrapper for zmq.ETERM

    .. versionadded:: 13.0
    ignoredc                       ddl m} t | d S )Nr   )ETERM)zmqr(   superr   )r   r   r   r(   r   r   r   r   [      zContextTerminated.__init__r&   r&   r	   r
   r   r   r   __classcell__r   r   r+   r   r%   U       r%   c                       r$   )Againz7Wrapper for zmq.EAGAIN

    .. versionadded:: 13.0
    r&   c                    r'   )Nr   )EAGAIN)r)   r2   r*   r   )r   r   r   r2   r+   r   r   r   g   r,   zAgain.__init__r-   r.   r   r   r+   r   r1   a   r0   r1   c                       s2   e Zd ZdZeZd fdd	Z fddZ  ZS )InterruptedSystemCallzWrapper for EINTR

    This exception should be caught internally in pyzmq
    to retry system calls, and not propagate to the user.

    .. versionadded:: 14.7
    r&   c                    s   t  t d S r   )r*   r   r   )r   r   r   r+   r   r   r   x   s   zInterruptedSystemCall.__init__c                    s   t   }|d S )NzB: This call should have been retried. Please report this to pyzmq.)r*   r   )r   sr+   r   r   r   {   s   
zInterruptedSystemCall.__str__r-   )	r	   r
   r   r   r   r   r   r   r/   r   r   r+   r   r3   m   s
    r3   NTc                 C   s~   | dkr=|du rddl m} | }|dkr|sdS ddlm}m} |tkr)t|||kr1t|||kr9t|t	|dS )zhinternal utility for checking zmq return condition

    and raising the appropriate Exception class
    Nr   )r   )r2   r(   )
r   r   r)   r2   r(   r   r3   r1   r%   r   )rcr   error_without_errnor   r2   r(   r   r   r   	_check_rc   s   r8   c                   @   s8   e Zd ZdZdZddedefddZdd	 Zd
d ZdS )ZMQVersionErrorzgRaised when a feature is not provided by the linked version of libzmq.

    .. versionadded:: 14.2
    NFeaturemin_versionr   c                 C   s0   t d u rddlm} | a || _|| _t | _d S )Nr   )zmq_version)_zmq_versionr)   r<   r   r;   version)r   r;   r   r<   r   r   r   r      s   
zZMQVersionError.__init__c                 C   s   dt |  S )NzZMQVersionError('%s')r   r   r   r   r   r       s   zZMQVersionError.__repr__c                 C   s   d | j| j| jS )Nz!{} requires libzmq >= {}, have {})formatr   r;   r>   r   r   r   r   r      s
   zZMQVersionError.__str__r:   )	r	   r
   r   r   r;   r   r   r    r   r   r   r   r   r9      s    
r9   r:   min_version_infor   c                 C   sD   t du rddlm} | a t | k r ddd | D }t||dS )zCheck for libzmq

    raises ZMQVersionError if current zmq version is not at least min_version

    min_version_info is a tuple of integers, and will be compared against zmq.zmq_version_info().
    Nr   )zmq_version_info.c                 s   s    | ]}t |V  qd S r   r?   ).0vr   r   r   	<genexpr>   s    z!_check_version.<locals>.<genexpr>)_zmq_version_infor)   rC   joinr9   )rB   r   rC   r;   r   r   r   _check_version   s   
rJ   )r   r"   r   r#   r%   r3   r1   r9   )NTrA   )r   r   r   typingr   r   r   	Exceptionr   r   r"   r#   r%   r1   InterruptedErrorr3   r8   rH   r=   NotImplementedErrorr9   r   r   rJ   __all__r   r   r   r   <module>   s*    5		
"
