§
    dŠtj  ã                   óV   — d Z ddlZddlmZ ddlmZ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Ú	ConverterÚFactoryÚpipe)Údefault_if_noneÚoptionalr   Úto_boolc                 ót  ‡ — t          ‰ t          ¦  «        rˆ fd„}nˆ fd„}t          ‰ ¦  «        }|                     ¦   «         }|rt          j        |         |j        d<   |                     ¦   «         }|rt          j        |         |j        d<   t          ‰ t          ¦  «        rt          |dd¬¦  «        S |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ÚinstÚfieldÚ	converters      €úM/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/attr/converters.pyÚoptional_converterz$optional.<locals>.optional_converter&   s!   ø€ Øˆ{Ø�tØ�9˜S $¨Ñ.Ô.Ð.ó    c                 ó"   •— | €d S  ‰| ¦  «        S r   r   )r   r   s    €r   r   z$optional.<locals>.optional_converter-   s   ø€ Øˆ{Ø�tØ�9˜S‘>”>Ð!r   r   ÚreturnT)Ú
takes_selfÚtakes_field)Ú
isinstancer   r   Úget_first_param_typeÚtypingÚOptionalÚ__annotations__Úget_return_type)r   r   ÚxtrÚtÚrts   `    r   r
   r
      sê   ø€ õ �)�YÑ'Ô'ð "ð	/ð 	/ð 	/ð 	/ð 	/ð 	/ð	"ð 	"ð 	"ð 	"ð 	"õ
 ˜yÑ
)Ô
)€Cà× Ò Ñ"Ô"€AØð GÝ4:´OÀAÔ4FÐÔ*¨5Ñ1à	×	Ò	Ñ	Ô	€BØ	ð KÝ7=´ÀrÔ7JÐÔ*¨8Ñ4å�)�YÑ'Ô'ð PÝÐ+¸È$ÐOÑOÔOÐOàÐ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_converterl   s   ø€ ØˆØ�
à—?’?Ñ$Ô$Ð$r   c                 ó   •— | �| S ‰S r   r   r'   s    €r   r)   z2default_if_none.<locals>.default_if_none_convertert   s   ø€ ØˆØ�
àˆNr   )r   Ú	TypeErrorr   r   r   Ú
ValueError)r(   r&   Úmsgr)   s   `   r   r	   r	   B   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   }   s^   € õ8 �#•sÑÔð Ø�iŠi‰kŒkˆà
Ð;Ð;Ð;ØˆtØ
Ð=Ð=Ð=Øˆuà
2¨3Ð
2Ð
2€CÝ
�S‰/Œ/Ðr   )Ú__doc__r   Ú_compatr   Ú_maker   r   r   r   Ú__all__r
   r	   r   r   r   r   ú<module>r@      s¦   ððð ð €€€à )Ð )Ð )Ð )Ð )Ð )Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4ðð ð €ð*ð *ð *ðZ $¨Tð 8%ð 8%ð 8%ð 8%ðv%ð %ð %ð %ð %r   