U
    cc                     @   sF  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZG dd deZeZ	eZ
eZeZeZeeddddZeeddddZd"eeje ed	d
dZG dd deZejejdddZdde jeedddZG dd dZG dd dejZd#eeeej e! eje edddZ"ej#e$dddZ%G d d! d!ej&Z&dS )$    Nc                   @   s   e Zd ZdS )CryptographyDeprecationWarningN__name__
__module____qualname__ r   r   6/tmp/pip-unpacked-wheel-4layejjw/cryptography/utils.pyr      s   r   )namevaluereturnc                 C   s   t |tstd| d S )Nz{} must be bytes)
isinstancebytes	TypeErrorformatr	   r
   r   r   r   _check_bytes   s    
r   c                 C   s4   zt | W n" tk
r.   td| Y nX d S )Nz{} must be bytes-like)
memoryviewr   r   r   r   r   r   _check_byteslike$   s    r   )integerlengthr   c                 C   s    |  |p|  d d pddS )N         big)to_bytes
bit_length)r   r   r   r   r   int_to_bytes+   s     r   c                   @   s   e Zd ZdS )InterfaceNotImplementedNr   r   r   r   r   r   1   s   r   )	signaturer   c                 C   s   t dd | j D S )Nc                 S   s   g | ]}|j tjjd qS ))
annotation)replaceinspect	Parameterempty).0paramr   r   r   
<listcomp>7   s   z$strip_annotation.<locals>.<listcomp>)r!   	Signature
parametersvalues)r   r   r   r   strip_annotation5   s
    r*   F)check_annotations)ifaceklassr+   c                C   s   | j D ]}t||s$td||tt| |tjr8qt	t| |}t	t||}|rf||k}nt
|t
|k}|std||||qd S )Nz{} is missing a {!r} methodzK{}.{}'s signature differs from the expected. Expected: {!r}. Received: {!r})__abstractmethods__hasattrr   r   r   getattrabcabstractpropertyr!   r   r*   )r,   r-   r+   methodsigactualokr   r   r   verify_interface>   s*    



   r7   c                   @   s   e Zd ZeedddZdS )_DeprecatedValue)r
   messagec                 C   s   || _ || _|| _d S N)r
   r9   warning_class)selfr
   r9   r;   r   r   r   __init__W   s    z_DeprecatedValue.__init__N)r   r   r   objectstrr=   r   r   r   r   r8   V   s   r8   c                       sj   e Zd Zejd fddZeedddZeeddd	d
Z	eddddZ
eje dddZ  ZS )_ModuleWithDeprecations)modulec                    s   t  |j || jd< d S N_module)superr=   r   __dict__)r<   rA   	__class__r   r   r=   ^   s    z _ModuleWithDeprecations.__init__)attrr   c                 C   s4   t | j|}t|tr0tj|j|jdd |j}|S N   )
stacklevel)	r0   rC   r   r8   warningswarnr9   r;   r
   r<   rH   objr   r   r   __getattr__b   s
    
z#_ModuleWithDeprecations.__getattr__N)rH   r
   r   c                 C   s   t | j|| d S r:   )setattrrC   )r<   rH   r
   r   r   r   __setattr__i   s    z#_ModuleWithDeprecations.__setattr__c                 C   s:   t | j|}t|tr*tj|j|jdd t| j| d S rI   )	r0   rC   r   r8   rL   rM   r9   r;   delattrrN   r   r   r   __delattr__l   s    
z#_ModuleWithDeprecations.__delattr__r   c                 C   s   dgt | j S rB   )dirrC   r<   r   r   r   __dir__s   s    z_ModuleWithDeprecations.__dir__)r   r   r   types
ModuleTyper=   r?   r>   rP   rR   rT   typingSequencerX   __classcell__r   r   rF   r   r@   ]   s
   r@   )r
   module_namer9   r;   r	   r   c                 C   sJ   t j| }t|ts&t| t j|< }t| ||}|d k	rFt||| |S r:   )sysmodulesr   r@   r8   rQ   )r
   r^   r9   r;   r	   rA   Zdvr   r   r   
deprecatedw   s    

ra   )funcr   c                    s.   d  t td fdd}t|S )Nz
_cached_{})instancec                    s0   t |  }|k	r|S | }t|  | |S r:   )r0   rQ   )rc   cacheresultZcached_namerb   sentinelr   r   inner   s    zcached_property.<locals>.inner)r   r>   property)rb   rh   r   rf   r   cached_property   s    
rj   c                   @   s(   e Zd ZedddZedddZdS )EnumrU   c                 C   s    d| j j d| j d| jdS )N<.z: >)rG   r   _name__value_rW   r   r   r   __repr__   s    zEnum.__repr__c                 C   s   | j j d| j S )Nrm   )rG   r   ro   rW   r   r   r   __str__   s    zEnum.__str__N)r   r   r   r?   rq   rr   r   r   r   r   rk      s   rk   )N)N)'r1   enumr!   r_   rY   r[   rL   UserWarningr   ZPersistentlyDeprecated2019ZDeprecatedIn35ZDeprecatedIn36ZDeprecatedIn37ZDeprecatedIn38r?   r   r   r   intOptionalr   	Exceptionr   r'   r*   ABCMetar>   boolr7   r8   rZ   r@   TypeWarningra   Callableri   rj   rk   r   r   r   r   <module>   sH   
   