B
    QUc                 @   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   1lib/python3.7/site-packages/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   yt | W n" tk
r.   td| Y nX d S )Nz{} must be bytes-like)
memoryviewr   r   )r   r	   r   r   r   _check_byteslike$   s    r   )integerlengthr
   c             C   s    |  |p|  d d pddS )N         Zbig)to_bytes
bit_length)r   r   r   r   r   int_to_bytes+   s    r   c               @   s   e Zd ZdS )InterfaceNotImplementedN)r   r   r   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 ))Z
annotation)replaceinspectZ	Parameterempty).0Zparamr   r   r   
<listcomp>8   s   z$strip_annotation.<locals>.<listcomp>)r   	SignatureZ
parametersvalues)r   r   r   r   strip_annotation5   s    r#   F)check_annotations)ifaceklassr$   c            C   s   x| j D ]}t||s&td||tt| |tjr:qt	t| |}t	t||}|rh||k}nt
|t
|k}|std||||qW 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$   methodZsigZactualokr   r   r   verify_interface>   s    

r.   c               @   s   e Zd ZeedddZdS )_DeprecatedValue)r	   messagec             C   s   || _ || _|| _d S )N)r	   r0   warning_class)selfr	   r0   r1   r   r   r   __init__W   s    z_DeprecatedValue.__init__N)r   r   r   objectstrr3   r   r   r   r   r/   V   s   r/   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)superr3   r   __dict__)r2   r7   )	__class__r   r   r3   ^   s    z _ModuleWithDeprecations.__init__)attrr
   c             C   s4   t | j|}t|tr0tj|j|jdd |j}|S )N   )
stacklevel)	r)   r8   r   r/   warningswarnr0   r1   r	   )r2   r<   objr   r   r   __getattr__b   s
    
z#_ModuleWithDeprecations.__getattr__N)r<   r	   r
   c             C   s   t | j|| d S )N)setattrr8   )r2   r<   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 )Nr=   )r>   )	r)   r8   r   r/   r?   r@   r0   r1   delattr)r2   r<   rA   r   r   r   __delattr__l   s    
z#_ModuleWithDeprecations.__delattr__)r
   c             C   s   dgt | j S )Nr8   )dirr8   )r2   r   r   r   __dir__s   s    z_ModuleWithDeprecations.__dir__)r   r   r   types
ModuleTyper3   r5   r4   rB   rD   rF   typingSequencerH   __classcell__r   r   )r;   r   r6   ]   s
   r6   )r	   module_namer0   r1   r   r
   c             C   sJ   t j| }t|ts&t| t j|< }t| ||}|d k	rFt||| |S )N)sysmodulesr   r6   r/   rC   )r	   rN   r0   r1   r   r7   Zdvr   r   r   
deprecatedw   s    

rQ   )funcr
   c                s.   d  t td fdd}t|S )Nz
_cached_{})instancec                s0   t |  }|k	r|S | }t|  | |S )N)r)   rC   )rS   cacheresult)cached_namerR   sentinelr   r   inner   s    zcached_property.<locals>.inner)r   r4   property)rR   rX   r   )rV   rR   rW   r   cached_property   s    
rZ   c               @   s(   e Zd ZedddZedddZdS )Enum)r
   c             C   s    d| j j d| j d| jdS )N<.z: >)r;   r   _name__value_)r2   r   r   r   __repr__   s    zEnum.__repr__c             C   s   | j j d| j S )Nr]   )r;   r   r_   )r2   r   r   r   __str__   s    zEnum.__str__N)r   r   r   r5   ra   rb   r   r   r   r   r[      s   r[   )N)N)'r*   enumr   rO   rI   rK   r?   UserWarningr   ZPersistentlyDeprecated2019ZDeprecatedIn35ZDeprecatedIn36ZDeprecatedIn37ZDeprecatedIn38r5   r   r   r   intZOptionalr   	Exceptionr   r!   r#   ABCMetar4   boolr.   r/   rJ   r6   ZTypeWarningrQ   CallablerY   rZ   r[   r   r   r   r   <module>   s0   
