ó
i
\c           @` sT   d  Z  d d l m Z m Z m Z d d l m Z m Z d   Z e d d  Z
 d S(   s   
Commonly useful converters.
i    (   t   absolute_importt   divisiont   print_functioni   (   t   NOTHINGt   Factoryc         ` s     f d   } | S(   s÷   
    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(   t   None(   t   val(   t	   converter(    sD   /data/av2000/b2b/venv/lib/python2.7/site-packages/attr/converters.pyt   optional_converter   s    (    (   R   R   (    (   R   sD   /data/av2000/b2b/venv/lib/python2.7/site-packages/attr/converters.pyt   optional
   s    c         ` sµ     t  k r' | d k r' t d   n    t  k	 rN | d k	 rN t d   n  | d k	 ri t |    n  t   t  r˘   j r t d   n    f d   } n   f d   } | S(   sİ  
    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
    s(   Must pass either `default` or `factory`.s5   Must pass either `default` or `factory` but not both.s1   `takes_self` is not supported by default_if_none.c         ` s   |  d  k	 r |  S  j   S(   N(   R   t   factory(   R   (   t   default(    sD   /data/av2000/b2b/venv/lib/python2.7/site-packages/attr/converters.pyt   default_if_none_converter@   s    c         ` s   |  d  k	 r |  S  S(   N(   R   (   R   (   R   (    sD   /data/av2000/b2b/venv/lib/python2.7/site-packages/attr/converters.pyR   H   s    N(   R   R   t	   TypeErrorR   t
   isinstancet
   takes_selft
   ValueError(   R   R
   R   (    (   R   sD   /data/av2000/b2b/venv/lib/python2.7/site-packages/attr/converters.pyt   default_if_none   s    	N(   t   __doc__t
   __future__R    R   R   t   _makeR   R   R	   R   R   (    (    (    sD   /data/av2000/b2b/venv/lib/python2.7/site-packages/attr/converters.pyt   <module>   s   	