B
    *U•\k  ã               @   sB   d Z ddlmZmZmZ ddlmZmZ dd„ Zedfdd	„Z	dS )
z
Commonly useful converters.
é    )Úabsolute_importÚdivisionÚprint_functioné   )ÚNOTHINGÚFactoryc                s   ‡ fdd„}|S )z÷
    A converter that allows an attribute to be optional. An optional attribute
    is one which can be set to ``None``.

    :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   ú.lib/python3.7/site-packages/attr/converters.pyÚoptional_converter   s    z$optional.<locals>.optional_converterr   )r
   r   r   )r
   r   Úoptional
   s    r   Nc                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 :class:`attr.Factory` is supported, however the ``takes_self`` option
       is *not*.
    :param callable factory: A callable that takes not 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 :class:`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_converter@   s    z2default_if_none.<locals>.default_if_none_converterc                s   | d k	r| S ˆ S )Nr   )r	   )r   r   r   r   H   s    )r   Ú	TypeErrorr   Ú
isinstanceZ
takes_selfÚ
ValueError)r   r   r   r   )r   r   Údefault_if_none   s    
r   )
Ú__doc__Z
__future__r   r   r   Ú_maker   r   r   r   r   r   r   r   Ú<module>   s   