
    Mh                     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      O/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/attr/converters.pyoptional_converterz$optional.<locals>.optional_converter&   s!    {t9S$...    c                 "    | d S  |           S r   r   )r   r   s    r   r   z$optional.<locals>.optional_converter-   s    {t9S>>!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:OA4F*51					B	 K7=r7J*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 'go8nng'"5Enn'""'7##  	"EC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 iikk
;;;t
===u
23
2
2C
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   