mercurial/thirdparty/attr/setters.py
changeset 49643 e1c586b9a43c
equal deleted inserted replaced
49642:7e6f3c69c0fb 49643:e1c586b9a43c
       
     1 # SPDX-License-Identifier: MIT
       
     2 
       
     3 """
       
     4 Commonly used hooks for on_setattr.
       
     5 """
       
     6 
       
     7 
       
     8 from . import _config
       
     9 from .exceptions import FrozenAttributeError
       
    10 
       
    11 
       
    12 def pipe(*setters):
       
    13     """
       
    14     Run all *setters* and return the return value of the last one.
       
    15 
       
    16     .. versionadded:: 20.1.0
       
    17     """
       
    18 
       
    19     def wrapped_pipe(instance, attrib, new_value):
       
    20         rv = new_value
       
    21 
       
    22         for setter in setters:
       
    23             rv = setter(instance, attrib, rv)
       
    24 
       
    25         return rv
       
    26 
       
    27     return wrapped_pipe
       
    28 
       
    29 
       
    30 def frozen(_, __, ___):
       
    31     """
       
    32     Prevent an attribute to be modified.
       
    33 
       
    34     .. versionadded:: 20.1.0
       
    35     """
       
    36     raise FrozenAttributeError()
       
    37 
       
    38 
       
    39 def validate(instance, attrib, new_value):
       
    40     """
       
    41     Run *attrib*'s validator on *new_value* if it has one.
       
    42 
       
    43     .. versionadded:: 20.1.0
       
    44     """
       
    45     if _config._run_validators is False:
       
    46         return new_value
       
    47 
       
    48     v = attrib.validator
       
    49     if not v:
       
    50         return new_value
       
    51 
       
    52     v(instance, attrib, new_value)
       
    53 
       
    54     return new_value
       
    55 
       
    56 
       
    57 def convert(instance, attrib, new_value):
       
    58     """
       
    59     Run *attrib*'s converter -- if it has one --  on *new_value* and return the
       
    60     result.
       
    61 
       
    62     .. versionadded:: 20.1.0
       
    63     """
       
    64     c = attrib.converter
       
    65     if c:
       
    66         return c(new_value)
       
    67 
       
    68     return new_value
       
    69 
       
    70 
       
    71 # Sentinel for disabling class-wide *on_setattr* hooks for certain attributes.
       
    72 # autodata stopped working, so the docstring is inlined in the API docs.
       
    73 NO_OP = object()