def METHOD_NAME(self, key):
    # The `str` cast may not appear to be needed, but without it we run
    # into issues when passing the environment to subprocess.  The main
    # issue is that in python2 `os.environ` (which is the initial source
    # of data for the environment) uses byte based strings, but this
    # project uses `unicode_literals`.  `subprocess` will raise an error
    # if the environment that it is passed has a mixture of byte and
    # unicode strings.
    # It is simplest to force everything to be `str` for the sake of
    # consistency.
    key = str(key)
    if sys.platform.startswith("win"):
        # Windows env var names are case insensitive but case preserving.
        # An implementation of PAR files on windows gets confused if
        # the env block contains keys with conflicting case, so make a
        # pass over the contents to remove any.
        # While this O(n) scan is technically expensive and gross, it
        # is practically not a problem because the volume of calls is
        # relatively low and the cost of manipulating the env is dwarfed
        # by the cost of spawning a process on windows.  In addition,
        # since the processes that we run are expensive anyway, this
        # overhead is not the worst thing to worry about.
        for k in list(self._dict.keys()):
            if str(k).lower() == key.lower():
                return k
    elif key in self._dict:
        return key
    return None