§
    Ètºf²  ã                   óR   — d Z ddlZddlmZ ddlmZmZmZ g d¢Zd„ Z	edfd„Z
d	„ ZdS )
z
Commonly useful converters.
é    Né   )Ú_AnnotationExtractor)ÚNOTHINGÚFactoryÚpipe)Údefault_if_noneÚoptionalr   Úto_boolc                 óð   ‡ — ˆ fd„}t          ‰ ¦  «        }|                     ¦   «         }|rt          j        |         |j        d<   |                     ¦   «         }|rt          j        |         |j        d<   |S )a_  
    A converter that allows an attribute to be optional. An optional attribute
    is one which can be set to `None`.

    Type annotations will be inferred from the wrapped converter's, if it has
    any.

    Args:
        converter (typing.Callable):
            the converter that is used for non-`None` values.

    .. versionadded:: 17.1.0
    c                 ó"   •— | €d S  ‰| ¦  «        S ©N© )ÚvalÚ	converters    €úN/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/attr/converters.pyÚoptional_converterz$optional.<locals>.optional_converter%   s   ø€ Øˆ;Ø�4Øˆy˜‰~Œ~Ðó    r   Úreturn)r   Úget_first_param_typeÚtypingÚOptionalÚ__annotations__Úget_return_type)r   r   ÚxtrÚtÚrts   `    r   r	   r	      s�   ø€ ðð ð ð ð õ
 ˜yÑ
)Ô
)€Cà× Ò Ñ"Ô"€AØð GÝ4:´OÀAÔ4FÐÔ*¨5Ñ1à	×	Ò	Ñ	Ô	€BØ	ð KÝ7=´ÀrÔ7JÐÔ*¨8Ñ4àÐr   c                 ó
  ‡ — ‰ t           u r|€d}t          |¦  «        ‚‰ t           ur|�d}t          |¦  «        ‚|�t          |¦  «        Š t          ‰ t          ¦  «        r‰ j        rd}t          |¦  «        ‚ˆ fd„}nˆ fd„}|S )aÞ  
    A converter that allows to replace `None` values by *default* or the result
    of *factory*.

    Args:
        default:
            Value to be used if `None` is passed. Passing an instance of
            `attrs.Factory` is supported, however the ``takes_self`` option is
            *not*.

        factory (typing.Callable):
            A callable that takes no parameters whose result is used if `None`
            is passed.

    Raises:
        TypeError: If **neither** *default* or *factory* is passed.

        TypeError: If **both** *default* and *factory* are passed.

        ValueError:
            If an instance of `attrs.Factory` is passed with
            ``takes_self=True``.

    .. versionadded:: 18.2.0
    Nz(Must pass either `default` or `factory`.z5Must pass either `default` or `factory` but not both.z1`takes_self` is not supported by default_if_none.c                 ó4   •— | �| S ‰                      ¦   «         S r   )Úfactory©r   Údefaults    €r   Údefault_if_none_converterz2default_if_none.<locals>.default_if_none_convertera   s   ø€ ØˆØ�
à—?’?Ñ$Ô$Ð$r   c                 ó   •— | �| S ‰S r   r   r    s    €r   r"   z2default_if_none.<locals>.default_if_none_converteri   s   ø€ ØˆØ�
àˆNr   )r   Ú	TypeErrorr   Ú
isinstanceÚ
takes_selfÚ
ValueError)r!   r   Úmsgr"   s   `   r   r   r   7   sÆ   ø€ ð4 •'ÐÐ˜g˜oØ8ˆÝ˜‰nŒnÐà•gÐÐ 'Ð"5ØEˆÝ˜‰nŒnÐàÐÝ˜'Ñ"Ô"ˆå�'�7Ñ#Ô#ð ØÔð 	"ØEˆCÝ˜S‘/”/Ð!ð	%ð 	%ð 	%ð 	%ð 	%ð 	%ð	ð 	ð 	ð 	ð 	ð %Ð$r   c                 ó”   — t          | t          ¦  «        r|                      ¦   «         } | dv rdS | dv rdS d| ›�}t          |¦  «        ‚)aÔ  
    Convert "boolean" strings (for example, from environment variables) to real
    booleans.

    Values mapping to `True`:

    - ``True``
    - ``"true"`` / ``"t"``
    - ``"yes"`` / ``"y"``
    - ``"on"``
    - ``"1"``
    - ``1``

    Values mapping to `False`:

    - ``False``
    - ``"false"`` / ``"f"``
    - ``"no"`` / ``"n"``
    - ``"off"``
    - ``"0"``
    - ``0``

    Raises:
        ValueError: For any other value.

    .. versionadded:: 21.3.0
    )TÚtruer   ÚyesÚyÚonÚ1r   T)FÚfalseÚfÚnoÚnÚoffÚ0r   FzCannot convert value to bool: )r%   ÚstrÚlowerr'   )r   r(   s     r   r
   r
   r   s^   € õ8 �#•sÑÔð Ø�iŠi‰kŒkˆà
Ð;Ð;Ð;ØˆtØ
Ð=Ð=Ð=Øˆuà
2¨3Ð
2Ð
2€CÝ
�S‰/Œ/Ðr   )Ú__doc__r   Ú_compatr   Ú_maker   r   r   Ú__all__r	   r   r
   r   r   r   ú<module>r;      s    ððð ð
 €€€à )Ð )Ð )Ð )Ð )Ð )Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ðð ð €ðð ð ðB $¨Tð 8%ð 8%ð 8%ð 8%ðv%ð %ð %ð %ð %r   