U
    c                     @   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.8/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   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         Z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 ))Z
annotation)replaceinspectZ	Parameterempty).0Zparamr   r   r   
<listcomp>7   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   | 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&   methodZsigZactualokr   r   r   verify_interface>   s*    



   r0   c                   @   s   e Zd ZeedddZdS )_DeprecatedValue)r
   messagec                 C   s   || _ || _|| _d S N)r
   r2   warning_class)selfr
   r2   r4   r   r   r   __init__W   s    z_DeprecatedValue.__init__N)r   r   r   objectstrr6   r   r   r   r   r1   V   s   r1   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)superr6   r   __dict__)r5   r:   	__class__r   r   r6   ^   s    z _ModuleWithDeprecations.__init__)attrr   c                 C   s4   t | j|}t|tr0tj|j|jdd |j}|S N   )
stacklevel)	r+   r<   r   r1   warningswarnr2   r4   r
   r5   rA   objr   r   r   __getattr__b   s
    
z#_ModuleWithDeprecations.__getattr__N)rA   r
   r   c                 C   s   t | j|| d S r3   )setattrr<   )r5   rA   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 rB   )	r+   r<   r   r1   rE   rF   r2   r4   delattrrG   r   r   r   __delattr__l   s    
z#_ModuleWithDeprecations.__delattr__r   c                 C   s   dgt | j S r;   )dirr<   r5   r   r   r   __dir__s   s    z_ModuleWithDeprecations.__dir__)r   r   r   types
ModuleTyper6   r8   r7   rI   rK   rM   typingSequencerQ   __classcell__r   r   r?   r   r9   ]   s
   r9   )r
   module_namer2   r4   r	   r   c                 C   sJ   t j| }t|ts&t| t j|< }t| ||}|d k	rFt||| |S r3   )sysmodulesr   r9   r1   rJ   )r
   rW   r2   r4   r	   r:   Zdvr   r   r   
deprecatedw   s    

rZ   )funcr   c                    s.   d  t td fdd}t|S )Nz
_cached_{})instancec                    s0   t |  }|k	r|S | }t|  | |S r3   )r+   rJ   )r\   cacheresultZcached_namer[   sentinelr   r   inner   s    zcached_property.<locals>.inner)r   r7   property)r[   ra   r   r_   r   cached_property   s    
rc   c                   @   s(   e Zd ZedddZedddZdS )EnumrN   c                 C   s    d| j j d| j d| jdS )N<.z: >)r@   r   _name__value_rP   r   r   r   __repr__   s    zEnum.__repr__c                 C   s   | j j d| j S )Nrf   )r@   r   rh   rP   r   r   r   __str__   s    zEnum.__str__N)r   r   r   r8   rj   rk   r   r   r   r   rd      s   rd   )N)N)'r,   enumr   rX   rR   rT   rE   UserWarningr   ZPersistentlyDeprecated2019ZDeprecatedIn35ZDeprecatedIn36ZDeprecatedIn37ZDeprecatedIn38r8   r   r   r   intZOptionalr   	Exceptionr   r#   r%   ABCMetar7   boolr0   r1   rS   r9   ZTypeWarningrZ   Callablerb   rc   rd   r   r   r   r   <module>   sH   
   