U
    luf+
                     @   sV   d Z ddlZddlmZmZ ddlmZ edZeee	e
f ZG dd dZdgZdS )	z-Mixin for mapping set/getattr to self.set/get    N)TypeVarUnion   )	constantsTc                   @   sr   e Zd ZeeddddZeeeddddZeedd	d
ZedddZ	eedddZ
eeddddZdS )AttributeSetterN)keyvaluereturnc                 C   s   || j krt| || dS | j D ]2}||j ksD|t|di kr&t| ||  dS q&| }ztt|}W n* tk
r   t| jj	 d| Y nX | 
||| dS )zset zmq options by attributeN__annotations__ has no such option: )__dict__object__setattr__	__class__mrogetattrupperr   AttributeError__name___set_attr_opt)selfr   r	   cls	upper_keyopt r   7/tmp/pip-unpacked-wheel-h6ekxre8/zmq/sugar/attrsettr.pyr      s    

zAttributeSetter.__setattr__)namer   r	   r
   c                 C   s   |  || dS )z@override if setattr should do something other than call self.setN)set)r   r   r   r	   r   r   r   r   &   s    zAttributeSetter._set_attr_opt)r   r
   c              
   C   s   |  }ztt|}W n, tk
rB   t| jj d| dY ndX ddlm} z| ||W S  |k
r } z(|j	t	j
t	jhkrt| dn W 5 d}~X Y nX dS )zget zmq options by attributer   Nr   )ZMQErrorz attribute is write-only)r   r   r   r   r   r   Zzmqr   _get_attr_opterrnoEINVALZEFAULT)r   r   r   r   r   er   r   r   __getattr__*   s     zAttributeSetter.__getattr__)r
   c                 C   s
   |  |S )z@override if getattr should do something other than call self.get)get)r   r   r   r   r   r   r    A   s    zAttributeSetter._get_attr_opt)r   r
   c                 C   s   t ddS zOverride in subclasszoverride in subclassNNotImplementedError)r   r   r   r   r   r%   E   s    zAttributeSetter.get)r   valr
   c                 C   s   t ddS r&   r'   )r   r   r)   r   r   r   r   I   s    zAttributeSetter.set)r   
__module____qualname__strOptValTr   intr   r$   r    r%   r   r   r   r   r   r      s   r   )__doc__r!   typingr   r    r   r   r,   bytesr.   r-   r   __all__r   r   r   r   <module>   s   ?