B
    b
,c  ã               @   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   ú(lib/python3.7/site-packages/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
    N)r   r   r	   r
   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
    N)r   r   r	   r
   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$   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 )N)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   Ús)r   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   )Zrcr   Zerror_without_errnor   r&   r!   r   r   r   Ú	_check_rc€   s    


r*   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"   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-   r0   )r   r   r   r   r   ±   s    zZMQVersionError.__str__)r,   )	r   r   r	   r
   r-   r   r   r   r   r   r   r   r   r+   œ   s
   
r+   r,   )Ú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 )N)r   )Ú.0Úvr   r   r   ú	<genexpr>É   s    z!_check_version.<locals>.<genexpr>)Ú_zmq_version_infor"   r3   Újoinr+   )r2   r   r3   r-   r   r   r   Ú_check_version¹   s    r:   )NT)r,   )r
   r   r   Útypingr   r   r   Ú	Exceptionr   r   r   r   r   r%   ÚInterruptedErrorr'   r*   r8   r/   ÚNotImplementedErrorr+   r   r   r:   Ú__all__r   r   r   r   Ú<module>   s,   5		
2