Validates that the given directory contains the baton binaries required to use the runner.
        :param baton_binaries_directory: the directory to check
        :return: exception that describes the issue else `None` if no issues

def validate_baton_binaries_location(baton_binaries_directory: str) -> Optional[Exception]:
        """
        Validates that the given directory contains the baton binaries required to use the runner.
        :param baton_binaries_directory: the directory to check
        :return: exception that describes the issue else `None` if no issues
        """
        if os.path.isfile(baton_binaries_directory):
            return ValueError("The given baton binary directory (%s) is not a directory! Be sure to provide the path "
                              "to the directory containing the baton binaries, not the binary named `baton`")

        for baton_binary in BatonBinary:
            binary_location = os.path.join(baton_binaries_directory, baton_binary.value)
            if not (os.path.isfile(binary_location) and os.access(binary_location, os.X_OK)):
                return ValueError("The given baton binary directory (%s) did not contain all of the required binaries "
                                  "with executable permissions (%s)"
                                  % (baton_binaries_directory, [name.value for name in BatonBinary]))

        return None