
    uYf(                     f    d Z ddlZddlZddlZddlmZ ddlmZ  G d de      Zd
dZ	d
dZ
d
d	Zy)a-  
Sphinx directive integration
============================

We usually need to document the life-cycle of functions and classes:
when they are created, modified or deprecated.

To do that, `Sphinx <http://www.sphinx-doc.org>`_ has a set
of `Paragraph-level markups <http://www.sphinx-doc.org/en/stable/markup/para.html>`_:

- ``versionadded``: to document the version of the project which added the described feature to the library,
- ``versionchanged``: to document changes of a feature,
- ``deprecated``: to document a deprecated feature.

The purpose of this module is to defined decorators which adds this Sphinx directives
to the docstring of your function and classes.

Of course, the ``@deprecated`` decorator will emit a deprecation warning
when the function/method is called or the class is constructed.
    N)ClassicAdapter)
deprecatedc                   B     e Zd ZdZdddedf fd	Z fdZ fdZ xZS )SphinxAdaptera  
    Sphinx adapter -- *for advanced usage only*

    This adapter override the :class:`~deprecated.classic.ClassicAdapter`
    in order to add the Sphinx directives to the end of the function/class docstring.
    Such a directive is a `Paragraph-level markup <http://www.sphinx-doc.org/en/stable/markup/para.html>`_

    - The directive can be one of "versionadded", "versionchanged" or "deprecated".
    - The version number is added if provided.
    - The reason message is obviously added in the directive block if not empty.
     NF   c                 j    |st        d      || _        || _        t        t        |   ||||       y)a  
        Construct a wrapper adapter.

        :type  directive: str
        :param directive:
            Sphinx directive: can be one of "versionadded", "versionchanged" or "deprecated".

        :type  reason: str
        :param reason:
            Reason message which documents the deprecation in your library (can be omitted).

        :type  version: str
        :param version:
            Version of your project which deprecates this feature.
            If you follow the `Semantic Versioning <https://semver.org/>`_,
            the version number has the format "MAJOR.MINOR.PATCH".

        :type  action: str
        :param action:
            A warning filter used to activate or not the deprecation warning.
            Can be one of "error", "ignore", "always", "default", "module", or "once".
            If ``None`` or empty, the the global filtering mechanism is used.
            See: `The Warnings Filter`_ in the Python documentation.

        :type  category: type
        :param category:
            The warning category to use for the deprecation warning.
            By default, the category class is :class:`~DeprecationWarning`,
            you can inherit this class to define your own deprecation warning category.

        :type  line_length: int
        :param line_length:
            Max line length of the directive text. If non nul, a long text is wrapped in several lines.
        z3'version' argument is required in Sphinx directives)reasonversionactioncategoryN)
ValueError	directiveline_lengthsuperr   __init__)selfr   r
   r   r   r   r   	__class__s          Q/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/deprecated/sphinx.pyr   zSphinxAdapter.__init__,   s>    V RSS"&mT+67SYdl+m    c           	         | j                   rdnd}|j                  | j                  | j                         g}| j                  dkD  r| j                  dz
  nd}t	        j
                  | j                        j                         }|j                         D ]L  }|r7|j                  t	        j                  ||dd      j                                <|j                  d       N |j                  xs d}|j                  d	
      xs dg}t        |      dkD  r't	        j
                  dj                  |dd             nd}|d   |z   }|r+t        j                   dd|t        j"                        dz   }nd}|dj                  d |D              z  }||_        | j                  dv r|S t$        t&        | S  |      S )z
        Add the Sphinx directive to your class or function.

        :param wrapped: Wrapped class or function.

        :return: the decorated class or function.
        z.. {directive}:: {version}z.. {directive}::)r   r      i   z   )widthinitial_indentsubsequent_indentr   T)keepends   Nr   z\n+$flagsz


c              3   >   K   | ]  }d j                  |        yw)z{}
N)format).0lines     r   	<genexpr>z)SphinxAdapter.__call__.<locals>.<genexpr>   s     GTV]]40Gs   >   versionaddedversionchanged)r   r"   r   r   textwrapdedentr
   strip
splitlinesextendfillappend__doc__lenjoinresubDOTALLr   r   __call__)
r   wrappedfmt	div_linesr   r
   	paragraph	docstringlinesr   s
            r   r5   zSphinxAdapter.__call__^   s    /3ll*@RZZ$..$,,ZOP	(,(8(81(<  1$'-335**, 	%I  MM!#',*/	
 !jl   $	% OO)r	$$d$3;t;>u:>HOOBGGE!"I$67r	!Hy(	wIRYYG&PI I 	RWWGYGGG	#>>??N]D27;;r   c                 ~    t         t        |   ||      }t        j                  dd|t        j
                        }|S )a  
        Get the deprecation warning message (without Sphinx cross-referencing syntax) for the user.

        :param wrapped: Wrapped class or function.

        :param instance: The object to which the wrapped function was bound when it was called.

        :return: The warning message.

        .. versionadded:: 1.2.12
           Strip Sphinx cross-referencing syntax from warning message.

        z*(?: : [a-zA-Z]+ )? : [a-zA-Z]+ : (`[^`]*`)z\1r   )r   r   get_deprecated_msgr2   r3   X)r   r6   instancemsgr   s       r   r=   z SphinxAdapter.get_deprecated_msg   s;     M4;GXN ffBE3VXVZVZ[
r   )	__name__
__module____qualname__r/   DeprecationWarningr   r5   r=   __classcell__)r   s   @r   r   r      s0    
 #0nd-<^ r   r   c                 $    t        d| ||      }|S )a2  
    This decorator can be used to insert a "versionadded" directive
    in your function/class docstring in order to documents the
    version of the project which adds this new functionality in your library.

    :param str reason:
        Reason message which documents the addition in your library (can be omitted).

    :param str version:
        Version of your project which adds this feature.
        If you follow the `Semantic Versioning <https://semver.org/>`_,
        the version number has the format "MAJOR.MINOR.PATCH", and,
        in the case of a new functionality, the "PATCH" component should be "0".

    :type  line_length: int
    :param line_length:
        Max line length of the directive text. If non nul, a long text is wrapped in several lines.

    :return: the decorated function.
    r&   r
   r   r   r   r
   r   r   adapters       r   r&   r&      s!    * 	G Nr   c                 $    t        d| ||      }|S )a  
    This decorator can be used to insert a "versionchanged" directive
    in your function/class docstring in order to documents the
    version of the project which modifies this functionality in your library.

    :param str reason:
        Reason message which documents the modification in your library (can be omitted).

    :param str version:
        Version of your project which modifies this feature.
        If you follow the `Semantic Versioning <https://semver.org/>`_,
        the version number has the format "MAJOR.MINOR.PATCH".

    :type  line_length: int
    :param line_length:
        Max line length of the directive text. If non nul, a long text is wrapped in several lines.

    :return: the decorated function.
    r'   rG   rH   rI   s       r   r'   r'      s!    ( 	G Nr   c                     |j                  dd      }|j                  dt              }| |d<   ||d<   ||d<   t        d||d|S )	ax  
    This decorator can be used to insert a "deprecated" directive
    in your function/class docstring in order to documents the
    version of the project which deprecates this functionality in your library.

    :param str reason:
        Reason message which documents the deprecation in your library (can be omitted).

    :param str version:
        Version of your project which deprecates this feature.
        If you follow the `Semantic Versioning <https://semver.org/>`_,
        the version number has the format "MAJOR.MINOR.PATCH".

    :type  line_length: int
    :param line_length:
        Max line length of the directive text. If non nul, a long text is wrapped in several lines.

    Keyword arguments can be:

    -   "action":
        A warning filter used to activate or not the deprecation warning.
        Can be one of "error", "ignore", "always", "default", "module", or "once".
        If ``None``, empty or missing, the the global filtering mechanism is used.

    -   "category":
        The warning category to use for the deprecation warning.
        By default, the category class is :class:`~DeprecationWarning`,
        you can inherit this class to define your own deprecation warning category.

    :return: a decorator used to deprecate a function.

    .. versionchanged:: 1.2.13
       Change the signature of the decorator to reflect the valid use cases.
    r   r   adapter_clsr
   r   r   )r   rM    )popr   _classic_deprecated)r
   r   r   kwargsr   rM   s         r   r   r      sX    F 

;5I**]M:KF8F9'F=VVvVVr   )r   r   r   )r/   r2   r(   wraptdeprecated.classicr   r   rP   r   r&   r'   rN   r   r   <module>rT      s:   ( 
   - @AN AH<:(Wr   