U #IGZ`@sdZddlmZmZmZddlmZmZmZm Z ddddd gZ e d d d d Gd dde Z ddZ e d d d d Gddde Zdd Ze d d d d Gddde ZddZe d d d d Gddde ZddZdS)z Commonly useful validators. )absolute_importdivisionprint_function) _AndValidatorand_attribattrsrin_ instance_ofoptionalprovidesFT)reprslotshashc@s"eZdZeZddZddZdS)_InstanceOfValidatorcCs4t||js0tdj|j|j|j|d||j|dS)P We use a callable class to be able to change the ``__repr__``. z?'{name}' must be {type!r} (got {value!r} that is a {actual!r}).)nametypeactualvalueN) isinstancer TypeErrorformatr __class__selfinstattrrr/validators.py__call__s z_InstanceOfValidator.__call__cCsdj|jdS)Nz)r)rrrrrr __repr__$sz_InstanceOfValidator.__repr__N)__name__ __module__ __qualname__rrr!r$rrrr rs rcCst|S)a A validator that raises a :exc:`TypeError` if the initializer is called with a wrong type for this particular attribute (checks are performed using :func:`isinstance` therefore it's also valid to pass a tuple of types). :param type: The type to check for. :type type: type or tuple of types :raises TypeError: With a human readable error message, the attribute (of type :class:`attr.Attribute`), the expected type, and the value it got. )rr"rrr r +s c@s"eZdZeZddZddZdS)_ProvidesValidatorcCs0|j|s,tdj|j|j|d||j|dS)rz<'{name}' must provide {interface!r} which {value!r} doesn't.)r interfacerN)r)Z providedByrrrrrrr r!?s z_ProvidesValidator.__call__cCsdj|jdS)Nz0r))rr)r#rrr r$Ksz_ProvidesValidator.__repr__N)r%r&r'rr)r!r$rrrr r(;s r(cCst|S)a A validator that raises a :exc:`TypeError` if the initializer is called with an object that does not provide the requested *interface* (checks are performed using ``interface.providedBy(value)`` (see `zope.interface `_). :param zope.interface.Interface interface: The interface to check for. :raises TypeError: With a human readable error message, the attribute (of type :class:`attr.Attribute`), the expected interface, and the value it got. )r(r*rrr r Rs c@s"eZdZeZddZddZdS)_OptionalValidatorcCs|dkr dS||||dS)N validatorrrrr r!fsz_OptionalValidator.__call__cCsdjt|jdS)Nz')Zwhat)rrr-r#rrr r$lsz_OptionalValidator.__repr__N)r%r&r'rr-r!r$rrrr r+bsr+cCst|trtt|St|S)a A validator that makes an attribute optional. An optional attribute is one which can be set to ``None`` in addition to satisfying the requirements of the sub-validator. :param validator: A validator (or a list of validators) that is used for non-``None`` values. :type validator: callable or :class:`list` of callables. .. versionadded:: 15.1.0 .. versionchanged:: 17.1.0 *validator* can be a list of validators. )rlistr+rr,rrr r ss  c@s"eZdZeZddZddZdS) _InValidatorcCs&||jkr"tdj|j|j|ddS)Nz/'{name}' must be in {options!r} (got {value!r}))roptionsr)r0 ValueErrorrrrrrr r!s z_InValidator.__call__cCsdj|jdS)Nz(r0)rr0r#rrr r$sz_InValidator.__repr__N)r%r&r'rr0r!r$rrrr r/sr/cCst|S)a A validator that raises a :exc:`ValueError` if the initializer is called with a value that does not belong in the options provided. The check is performed using ``value in options``. :param options: Allowed options. :type options: list, tuple, :class:`enum.Enum`, ... :raises ValueError: With a human readable error message, the attribute (of type :class:`attr.Attribute`), the expected options, and the value it got. .. versionadded:: 17.1.0 )r/r2rrr r sN)__doc__Z __future__rrr_makerrrr __all__objectrr r(r r+r r/r rrrr s(