U
    luf  ã                   @   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eee eeef eeeef f edœdd„Zdd	ddddddgZdS )z 0MQ Error classes and functions.é    )ÚEINTR)ÚOptionalÚTupleÚUnionc                   @   s   e Zd ZdZdS )ÚZMQBaseErrorz.Base exception class for 0MQ errors in Python.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú-/tmp/pip-unpacked-wheel-h6ekxre8/zmq/error.pyr   
   s   r   c                   @   sX   e Zd ZU dZdZee ed< dee ee dœdd„Z	edœdd	„Z
edœd
d„ZdS )ÚZMQErrorzã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.
    NÚerrno)r   Úmsgc                 C   sh   ddl m}m} |dkr|ƒ }t|tƒrJ|| _|dkrB||ƒ| _qd|| _n|dkr^t|ƒ| _n|| _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                   @   s   e Zd ZdZdS )ÚZMQBindErrorznAn error for ``Socket.bind_to_random_port()``.

    See Also
    --------
    .Socket.bind_to_random_port
    Nr   r   r   r   r   r    C   s   r    c                   @   s   e Zd ZdZdS )ÚNotDonez°Raised 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   s   r!   c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )ÚContextTerminatedz6Wrapper for zmq.ETERM

    .. versionadded:: 13.0
    Úignoredc                    s   ddl m} tƒ  |¡ d S )Nr   )ÚETERM)Úzmqr$   Úsuperr   )r   r   r   r$   ©r   r   r   r   [   s    zContextTerminated.__init__)r#   r#   ©r   r	   r
   r   r   Ú__classcell__r   r   r'   r   r"   U   s   r"   c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )ÚAgainz7Wrapper for zmq.EAGAIN

    .. versionadded:: 13.0
    r#   c                    s   ddl m} tƒ  |¡ d S )Nr   )ÚEAGAIN)r%   r+   r&   r   )r   r   r   r+   r'   r   r   r   g   s    zAgain.__init__)r#   r#   r(   r   r   r'   r   r*   a   s   r*   c                       s2   e Zd ZdZeZd‡ fdd„	Z‡ fdd„Z‡  ZS )ÚInterruptedSystemCallz¥Wrapper 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'   r   r,   m   s   r,   NTc                 C   s„   | dkr€|dkr"ddl m} |ƒ }|dkr2|s2dS ddlm}m} |tkrTt|ƒ‚n,||krft|ƒ‚n||krxt|ƒ‚nt	|ƒ‚dS )zhinternal utility for checking zmq return condition

    and raising the appropriate Exception class
    éÿÿÿÿNr   )r   )r+   r$   )
r   r   r%   r+   r$   r   r,   r*   r"   r   )Úrcr   Zerror_without_errnor   r+   r$   r   r   r   Ú	_check_rc€   s    


r0   c                   @   s6   e Zd ZdZdZdeedœ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 krddlm} |ƒ a || _|| _t | _d S )Nr   )Úzmq_version)Ú_zmq_versionr%   r4   r   r3   Úversion)r   r3   r   r4   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   r3   r6   r   r   r   r   r   ±   s
    ýzZMQVersionError.__str__)r2   )	r   r	   r
   r   r3   r   r   r   r   r   r   r   r   r1   œ   s
   
r1   r2   )Úmin_version_infor   c                 C   sD   t dkrddlm} |ƒ a t | k r@d dd„ | D ƒ¡}t||ƒ‚dS )zÇCheck 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   r7   )Ú.0Úvr   r   r   Ú	<genexpr>É   s     z!_check_version.<locals>.<genexpr>)Ú_zmq_version_infor%   r:   Újoinr1   )r9   r   r:   r3   r   r   r   Ú_check_version¹   s    rA   )NT)r2   )r   r   r   Útypingr   r   r   Ú	Exceptionr   r   r    r!   r"   r*   ÚInterruptedErrorr,   r0   r?   r5   ÚNotImplementedErrorr1   r   r   rA   Ú__all__r   r   r   r   Ú<module>   s6   5		
 þ"þø