<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    ñ‰.`ß  ã               @   sp   d Z ddlmZmZmZ ddlmZ ddlmZm	Z	m
Z
 esLddlZddlZddd	gZd
d„ Zedfdd	„ZdS )z
Commonly useful converters.
é    )Úabsolute_importÚdivisionÚprint_functioné   )ÚPY2)ÚNOTHINGÚFactoryÚpipeNr	   ÚoptionalÚdefault_if_nonec          	      sž   ‡ fdd„}t sšd}yt ˆ ¡}W n ttfk
r:   Y nX |ršt|j ¡ ƒ}|rz|d jtj	j
k	rztj|d j |jd< |jtjj
k	rštj|j |jd< |S )aO  
    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.

    :param callable converter: the converter that is used for non-``None``
        values.

    .. versionadded:: 17.1.0
    c                s   | d krd S ˆ | ƒS )N© )Úval)Ú	converterr   ú@/opt/alt/python37/lib/python3.7/site-packages/attr/converters.pyÚoptional_converter%   s    z$optional.<locals>.optional_converterNr   r   Úreturn)r   ÚinspectÚ	signatureÚ
ValueErrorÚ	TypeErrorÚlistÚ
parametersÚvaluesÚ
annotationÚ	ParameterÚemptyÚtypingÚOptionalÚ__annotations__Úreturn_annotationÚ	Signature)r   r   ÚsigÚparamsr   )r   r   r
      s     c                sv   ˆ t kr|dkrtdƒ‚ˆ t k	r0|dk	r0tdƒ‚|dk	r@t|ƒ‰ tˆ tƒrfˆ jrXtdƒ‚‡ fdd„}n‡ fdd„}|S )aš  
    A converter that allows to replace ``None`` values by *default* or the
    result of *factory*.

    :param default: Value to be used if ``None`` is passed. Passing an instance
       of `attr.Factory` is supported, however the ``takes_self`` option
       is *not*.
    :param callable factory: A callable that takes no parameters whose result
       is used if ``None`` is passed.

    :raises TypeError: If **neither** *default* or *factory* is passed.
    :raises TypeError: If **both** *default* and *factory* are passed.
    :raises ValueError: If an instance of `attr.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                s   | d k	r| S ˆ   ¡ S )N)Úfactory)r   )Údefaultr   r   Údefault_if_none_convertera   s    z2default_if_none.<locals>.default_if_none_converterc                s   | d k	r| S ˆ S )Nr   )r   )r$   r   r   r%   i   s    )r   r   r   Ú
isinstanceZ
takes_selfr   )r$   r#   r%   r   )r$   r   r   >   s    
)Ú__doc__Ú
__future__r   r   r   Ú_compatr   Ú_maker   r   r	   r   r   Ú__all__r
   r   r   r   r   r   Ú<module>   s   '