code: def temporary_file(root_dir=None, cleanup=True, suffix='', permissions=None, binary_mode=True):
    
    mode = 'w+b' if binary_mode else 'w+'  # tempfile's default is 'w+b'
    with tempfile.NamedTemporaryFile(suffix=suffix, dir=root_dir, delete=False, mode=mode) as fd:
      try:
        if permissions is not None:
          os.chmod(fd.name, permissions)
        yield fd
      finally:
        if cleanup:
          safe_delete(fd.name)
docs: A with-context that creates a temporary file and returns a writeable file descriptor to it.
  
      You may specify the following keyword args:
      :param str root_dir: The parent directory to create the temporary file.
      :param bool cleanup: Whether or not to clean up the temporary file.
      :param str suffix: If suffix is specified, the file name will end with that suffix.
                         Otherwise there will be no suffix.
                         mkstemp() does not put a dot between the file name and the suffix;
                         if you need one, put it at the beginning of suffix.
                         See :py:class:`tempfile.NamedTemporaryFile`.
      :param int permissions: If provided, sets the file to use these permissions.
      :param bool binary_mode: Whether file opens in binary or text mode.