U
    kuf                     @  sx   d dl mZ d dlZd dlZd dlZd dlZddddddddd	d
ZddddddddZe	 Z
dddddZdS )    )annotationsN)sourcestrzt.AnyintNone)msgcategory
stacklevelr   returnc                C  s   t j| |||d dS )zLike warnings.warn(), but category and stacklevel are required.

    You pretty much never want the default stacklevel of 1, so this helps
    encourage setting it explicitly.)r   r	   r   N)warningswarn)r   r   r	   r    r   </tmp/pip-unpacked-wheel-utpcgctl/traitlets/utils/warnings.pyr   	   s    r   )methodclsmethod_namer   r
   c              
   C  s   |j  d| d| }t|D ]}||jkr |} q8q |jddd }||f}t|s^dS z$t| pld}t| d p~d}	W n< t	t
fk
r }
 zt|d|
  tdd	 W 5 d}
~
X Y nX t|t||	 dS )
zShow deprecation warning about a magic method definition.

    Uses warn_explicit to bind warning to method definition instead of triggering code,
    which isn't relevant.
    .z! is deprecated in traitlets 4.1:    r   Nz	<unknown>z
(inspection failed) %s   )r	   )__name__inspectgetmro__dict__
__module__splitshould_warngetsourcefilegetsourcelinesOSError	TypeErrorr   DeprecationWarningr   warn_explicit)r   r   r   r   Zwarn_msgparentpackage_namekeyfnamelinenoer   r   r   deprecated_method   s&    

r(   bool)r$   r
   c                 C  s:   t jd}|r|dkrdS | tkr2t|  dS dS dS )zZAdd our own checks for too many deprecation warnings.

    Limit to once per package.
    ZTRAITLETS_ALL_DEPRECATIONS0TFN)osenvironget_deprecations_shownadd)r$   Zenv_flagr   r   r   r   3   s    
r   )
__future__r   r   r+   typingtr   r   r(   setr.   r   r   r   r   r   <module>   s   