
    j_2                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZ dZg dZ	dZ
 G d de          Z G d	 d
e          Z	 	 ddZd ZdS )    N)version)datez2.1.0)
deprecatedmessage_locationfail_if_not_removedDeprecatedWarningUnsupportedWarningbottomc                   *     e Zd ZdZd fd	Zd Z xZS )r   aw  A warning class for deprecated methods

    This is a specialization of the built-in :class:`DeprecationWarning`,
    adding parameters that allow us to get information into the __str__
    that ends up being sent through the :mod:`warnings` system.
    The attributes aren't able to be retrieved after the warning gets
    raised and passed through the system as only the class--not the
    instance--and message are what gets preserved.

    :param function: The function being deprecated.
    :param deprecated_in: The version that ``function`` is deprecated in
    :param removed_in: The version or :class:`datetime.date` specifying
                       when ``function`` gets removed.
    :param details: Optional details about the deprecation. Most often
                    this will include directions on what to use instead
                    of the now deprecated code.
     c                     || _         || _        || _        || _        t	          t
          |                               ||||           d S )N)functiondeprecated_in
removed_indetailssuperr   __init__)selfr   r   r   r   	__class__s        V/DATA/AppData/hermes/projects/honcho/.venv/lib/python3.11/site-packages/deprecation.pyr   zDeprecatedWarning.__init__5   s]     !*$&&//-0:G	E 	E 	E 	E 	E    c                 p   t          j        t                    }| j        |d<   | j        rd| j        z  |d<   | j        r:d                    t          | j        t                    rdnd| j                  |d<   t          | j        | j        | j
        g          rd|d	<   | j
        rd
| j
        z  |d<   d|z  S )Nr   z	 as of %sr   z and will be removed {} {}oninremoved.period %sr   zH%(function)s is deprecated%(deprecated)s%(removed)s%(period)s%(details)s)collectionsdefaultdictstrr   r   r   format
isinstancer   anyr   r   partss     r   __str__zDeprecatedWarning.__str__@   s     ',, Mj 	C"-0B"BE,? 	T;BB:VZVegkKlKlCv44rvCG? T  TE)"DOT\BCC 	"!E(O< 	4$t|3E)(+02 	3r   )r   )__name__
__module____qualname____doc__r   r'   __classcell__)r   s   @r   r   r   "   s\         $	E 	E 	E 	E 	E 	E3 3 3 3 3 3 3r   r   c                       e Zd ZdZd ZdS )r	   a  A warning class for methods to be removed

    This is a subclass of :class:`~deprecation.DeprecatedWarning` and is used
    to output a proper message about a function being unsupported.
    Additionally, the :func:`~deprecation.fail_if_not_removed` decorator
    will handle this warning and cause any tests to fail if the system
    under test uses code that raises this warning.
    c                     t          j        t                    }| j        |d<   | j        |d<   | j        rd| j        z  |d<   d|z  S )Nr   r   r   r   z9%(function)s is unsupported as of %(removed)s.%(details)s)r   r    r!   r   r   r   r%   s     r   r'   zUnsupportedWarning.__str__^   sW    ',, Mj?i< 	4$t|3E)!&( 	)r   N)r(   r)   r*   r+   r'    r   r   r	   r	   T   s-         	) 	) 	) 	) 	)r   r	   r   c                 z     t          d          d}dt          t                    rt          j                    k    rdnUd}nR|rNt	          j        |          }r|t	          j                  k    rdn r|t	          j                   k    rd}nd}t          |g           fd}|S )a	  Decorate a function to signify its deprecation

    This function wraps a method that will soon be removed and does two things:
        * The docstring of the method will be modified to include a notice
          about deprecation, e.g., "Deprecated since 0.9.11. Use foo instead."
        * Raises a :class:`~deprecation.DeprecatedWarning`
          via the :mod:`warnings` module, which is a subclass of the built-in
          :class:`DeprecationWarning`. Note that built-in
          :class:`DeprecationWarning`s are ignored by default, so for users
          to be informed of said warnings they will need to enable them--see
          the :mod:`warnings` module documentation for more details.

    :param deprecated_in: The version at which the decorated method is
                          considered deprecated. This will usually be the
                          next version to be released when the decorator is
                          added. The default is **None**, which effectively
                          means immediate deprecation. If this is not
                          specified, then the `removed_in` and
                          `current_version` arguments are ignored.
    :param removed_in: The version or :class:`datetime.date` when the decorated
                       method will be removed. The default is **None**,
                       specifying that the function is not currently planned
                       to be removed.
                       Note: This parameter cannot be set to a value if
                       `deprecated_in=None`.
    :param current_version: The source of version information for the
                            currently running code. This will usually be
                            a `__version__` attribute on your library.
                            The default is `None`.
                            When `current_version=None` the automation to
                            determine if the wrapped function is actually
                            in a period of deprecation or time for removal
                            does not work, causing a
                            :class:`~deprecation.DeprecatedWarning`
                            to be raised in all cases.
    :param details: Extra details to be added to the method docstring and
                    warning. For example, the details may point users to
                    a replacement method, such as "Use the foo_bar
                    method instead". By default there are no details.
    NzCCannot set removed_in to a value without also setting deprecated_inFTc                 l    r
 j         pd}rdz  nd
r-d                    t          
t                    rdnd
          ndrdz  ndd} dj        di |}d}|                    d	d          }t          |          dk    r@t          j        |d                   |d<   |                    |d	           t          d
k    rd}|                    ||           |                    |d           d
                    |           _         t          j                    	
fd            }|S )Nr   r   z
   This will be removed {} {}.r   r   )r   r   r   z3.. deprecated::{deprecated_in}{removed_in}{details}   
top   z

c                      	r@rt           }nt          } |j                  }t          j        |t
          d            | i |S )N   )category
stacklevel)r	   r   r(   warningswarnDeprecationWarning)
argskwargsclsthe_warningr   r   r   is_unsupportedr   should_warns
       r   _innerz5deprecated.<locals>._function_wrapper.<locals>._inner   st     	,! ,,CC+C!c("3]",g7 7k4F)*, , , , 8T,V,,,r   r/   )r+   r"   r#   r   splitlentextwrapdedentinsertr   join	functoolswraps)r   existing_docstringr&   deprecation_notelocstring_listrC   r   r   rA   r   rB   s   `      r   _function_wrapperz%deprecated.<locals>._function_wrapper   s    9	4!)!1!7R .;BEM)) NX`6==jQ[]aFbFb>lddhl>HJ J J]_'.6EGOOB8 8E!? !88>!H !HAF!H !H C -224;;K;!## "*Q!@!@A ""3--- $u,,C s$4555sF+++!ww{33H		"	"	- 	- 	- 	- 	- 	- 	- 	- 	- 
#	"	- r   )	TypeErrorr#   r   todayr   parser$   )r   r   current_versionr   is_deprecatedrP   rA   rB   s   `` `  @@r   r   r   j   s!   X !7 = > > 	> MN
 *d## :<<:%%!NN MM	 !-88 	!#w}Z'@'@@@!NN 	!!W]=%A%AAA M }n566KJ J J J J J J J JV r   c                 F     t          j                    fd            }|S )a  Decorate a test method to track removal of deprecated code

    This decorator catches :class:`~deprecation.UnsupportedWarning`
    warnings that occur during testing and causes unittests to fail,
    making it easier to keep track of when code should be removed.

    :raises: :class:`AssertionError` if an
             :class:`~deprecation.UnsupportedWarning`
             is raised while running the test method.
    c                     t          j        d          5 }t          j        d            | i |}d d d            n# 1 swxY w Y   |D ]8}|j        t          k    r&t          dt          |j                            9|S )NT)recordalwaysz) uses a function that should be removed: )r:   catch_warningssimplefilterr8   r	   AssertionErrorr!   message)r=   r>   caught_warningsrvwarningmethods        r   
test_innerz'fail_if_not_removed.<locals>.test_inner  s    $D111 	)_!(+++(((B	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) ' 	6 	6G#555$ffc'/22246 6 6 6 	s   A  AA)rJ   rK   )ra   rb   s   ` r   r   r   	  s;     _V
 
 
 
 
 r   )NNNr   )r   rJ   rF   r:   	packagingr   datetimer   __version____all__r   r<   r   r	   r   r   r/   r   r   <module>rg      s                        6 6 6  /3 /3 /3 /3 /3* /3 /3 /3d) ) ) ) )* ) ) ), EI\ \ \ \~    r   