
    Ef              	       .   d Z ddlmZ ddlmZmZmZ  G d de      Z G d de      Z	 G d d	e      Z
 G d
 de      Z G d de	      Z G d de	      Z G d de	e      ZddZdada G d de      Z	 ddeee   eeef   eeeef   f   defdZg dZy)z 0MQ Error classes and functions.    )EINTR)OptionalTupleUnionc                       e Zd ZdZy)ZMQBaseErrorz.Base exception class for 0MQ errors in Python.N__name__
__module____qualname____doc__     +/usr/lib/python3/dist-packages/zmq/error.pyr   r   
   s    8r   r   c                   \    e Zd ZU dZdZee   ed<   d	dee   dee   fdZ	defdZ
defdZy)
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                     ddl m}m} | |       }t        |t              r|| _        | ||      | _        y|| _        y|t        |      | _        y|| _        y)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   s        r   __init__zZMQError.__init__   sR     	4=KEeS!DJ{ ( #{ #E
 #r   returnc                     | j                   S N)r   r   s    r   __str__zZMQError.__str__<   s    }}r   c                 L    | j                   j                   dt        |        dS )Nz('z'))	__class__r
   r   r!   s    r   __repr__zZMQError.__repr__?   s$    ..))*"SYKr::r   )NN)r
   r   r   r   r   r   r   __annotations__r   r   r"   r%   r   r   r   r   r      sK    	  E8C=$hsm $# $@ ;# ;r   r   c                       e Zd ZdZy)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                       e Zd ZdZy)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   r+   c                   $     e Zd ZdZd fd	Z xZS )ContextTerminatedz6Wrapper for zmq.ETERM

    .. versionadded:: 13.0
    c                 0    ddl m} t        |   |       y )Nr   )ETERM)zmqr/   superr   )r   r   r   r/   r$   s       r   r   zContextTerminated.__init__[   s    r   ignoredr3   r
   r   r   r   r   __classcell__r$   s   @r   r-   r-   U   s    
   r   r-   c                   $     e Zd ZdZd fd	Z xZS )Againz7Wrapper for zmq.EAGAIN

    .. versionadded:: 13.0
    c                 0    ddl m} t        |   |       y )Nr   )EAGAIN)r0   r:   r1   r   )r   r   r   r:   r$   s       r   r   zAgain.__init__g   s     r   r2   r4   r6   s   @r   r8   r8   a   s    
! !r   r8   c                   2     e Zd ZdZeZd fd	Z fdZ x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
    c                 ,    t         |   t               y r    )r1   r   r   )r   r   r   r$   s      r   r   zInterruptedSystemCall.__init__x   s    r   c                 *    t         |          }|dz   S )NzB: This call should have been retried. Please report this to pyzmq.)r1   r"   )r   sr$   s     r   r"   zInterruptedSystemCall.__str__{   s    GOWWWr   r2   )	r
   r   r   r   r   r   r   r"   r5   r6   s   @r   r<   r<   m   s      E X Xr   r<   Nc                     | dk(  r^|ddl m}  |       }|dk(  r|syddlm}m} |t
        k(  rt        |      ||k(  rt        |      ||k(  rt        |      t        |      y)zhinternal utility for checking zmq return condition

    and raising the appropriate Exception class
    Nr   )r   )r:   r/   )
r   r   r0   r:   r/   r   r<   r8   r-   r   )rcr   error_without_errnor   r:   r/   s         r   	_check_rcrD      sn    
 
Rx=-KEA:1%E>'..f_,e^#E**5/!! r   c                   2    e Zd ZdZdZddedefdZd Zd Zy)	ZMQVersionErrorzgRaised when a feature is not provided by the linked version of libzmq.

    .. versionadded:: 14.2
    Nmin_versionr   c                 \    t         ddlm}  |       a || _        || _        t         | _        y )Nr   )zmq_version)_zmq_versionr0   rI   r   rG   version)r   rG   r   rI   s       r   r   zZMQVersionError.__init__   s(    '&=L&#r   c                     dt        |       z  S )NzZMQVersionError('%s')r   r!   s    r   r%   zZMQVersionError.__repr__   s    &T22r   c                 d    dj                  | j                  | j                  | j                        S )Nz!{} requires libzmq >= {}, have {})formatr   rG   rK   r!   s    r   r"   zZMQVersionError.__str__   s,    299HHLL
 	
r   Feature)	r
   r   r   r   rG   r   r   r%   r"   r   r   r   rF   rF      s+    
 K$C $c $3
r   rF   min_version_infor   c                     t         ddlm}  |       a t         | k  r$dj                  d | D              }t	        ||      y)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              3   2   K   | ]  }t        |        y wr    rM   ).0vs     r   	<genexpr>z!_check_version.<locals>.<genexpr>   s     @!s1v@s   )_zmq_version_infor0   rT   joinrF   )rR   r   rT   rG   s       r   _check_versionr\      sF      (,.++hh@/?@@k3// ,r   )r   r(   r   r+   r-   r<   r8   rF   )NTrP   )r   r   r   typingr   r   r   	Exceptionr   r   r(   r+   r-   r8   InterruptedErrorr<   rD   rZ   rJ   NotImplementedErrorrF   r   r   r\   __all__r   r   r   <module>rb      s    &
  ) )99 92;| 2;j< l 	  	 	!H 	!XH&6 X&"0  
) 
> 0E#Jc3hsC}9MMN0	0(	r   