mercurial/thirdparty/attr/converters.py
author Matt Harbison <matt_harbison@yahoo.com>
Mon, 13 Jun 2022 11:06:33 -0400
changeset 49317 709e5f7eec1f
parent 34397 765eb17a7eb8
child 49643 e1c586b9a43c
permissions -rw-r--r--
windows: prevent bytes from being passed to registry APIs There was a TortoiseHg bug report in this area[1], and from inspection, it looks like passing `b""` as `valname` would fail to convert to unicode. The underlying API allows both `""` and `NULL` to return the default value for the key. [1] https://foss.heptapod.net/mercurial/tortoisehg/thg/-/issues/5803

"""
Commonly useful converters.
"""

from __future__ import absolute_import, division, print_function


def optional(converter):
    """
    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
    """

    def optional_converter(val):
        if val is None:
            return None
        return converter(val)

    return optional_converter