
    g_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y)    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                 j    || _         || _        || _        || _        t        t
        |   ||||       y )N)functiondeprecated_in
removed_indetailssuperr   __init__)selfr   r   r   r   	__class__s        @/var/www/openai/venv/lib/python3.12/site-packages/deprecation.pyr   zDeprecatedWarning.__init__5   s<     !*$/-0:G	E    c                    t        j                  t              }| j                  |d<   | j                  rd| j                  z  |d<   | j
                  r;dj                  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     '', MMj"-0B0B"BE,??;BB:VZVeVegkKl4rvCG?? TE)""DOOT\\BC!E(O<<$t||3E)(+02 	3r   ) )__name__
__module____qualname____doc__r   r&   __classcell__)r   s   @r   r   r   "   s    $	E3r   r   c                       e Zd ZdZd Zy)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__^   sZ    '', MMj??i<<$t||3E)!&( 	)r   N)r(   r)   r*   r+   r&    r   r   r	   r	   T   s    	)r   r	   c                 b     t        d      d}dt        t              rt        j                         k\  rdnVd}nS|rOt	        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.
    zCCannot set removed_in to a value without also setting deprecated_inFTc                 2    r j                   xs d}rdz  nd
r$dj                  t        
t              rdnd
      ndrdz  ndd} dj                  di |}d}|j	                  d	d      }t        |      dkD  r8t        j                  |d         |d<   |j                  |d	       t        d
k7  rd}|j                  ||       |j                  |d       dj                  |       _         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   sR    !,C+C!("3"3]",g7k4F)*, T,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   sB   !)!1!1!7R .;EM) NX 7==jQ[]aFbdhl>HJ]_'.EGOB8E!? !88>!HAF!H C -224;K;!# "*Q!@A ""3- $u,C s$45sF+!ww{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#::<:%!N M	!--8#w}}Z'@@!N!W]]=%AA M }n56KJ JV r   c                 B     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        D ]8  }|j                  t        k(  st        dt        |j                               S # 1 sw Y   HxY w)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_!!(+((B 2 'G#55$c'//246 6 '
 	 21s   A==B)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  /3* /3d)* ), EI\~r   