code: def upload(self, local_fn: str, remote_fn: str = '',
               dont_overwrite: bool = False) -> None:
      if '*' in local_fn:
        for local_subfn in glob.glob(local_fn):
          self.upload(local_subfn)
        return
      if '
        self.log("skipping backup file {local_fn}")
        return
      if not self.sftp:
        self.sftp = u.call_with_retries(self.ssh_client.open_sftp,
                                        'self.ssh_client.open_sftp')
      def maybe_fix_mode(local_fn_, remote_fn_):
        mode = oct(os.stat(local_fn_)[stat.ST_MODE])[-3:]
        if '7' in mode:
          self.log(f"Making {remote_fn_} executable with mode {mode}")
          self._run_raw(f"chmod {mode} {remote_fn_}")
      def _put_dir(source, target):
        def _safe_mkdir(path, mode=511, ignore_existing=True):
          try:
            self.sftp.mkdir(path, mode)
          except IOError:
            if ignore_existing:
              pass
            else:
              raise
        assert os.path.isdir(source)
        _safe_mkdir(target)
        for item in os.listdir(source):
          if os.path.isfile(os.path.join(source, item)):
            self.sftp.put(os.path.join(source, item), os.path.join(target, item))
            maybe_fix_mode(os.path.join(source, item), os.path.join(target, item))
          else:
            _safe_mkdir(f'{target}/{item}')
            _put_dir(f'{source}/{item}', f'{target}/{item}')
      if not remote_fn:
        remote_fn = os.path.basename(local_fn)
      self.log('uploading ' + local_fn + ' to ' + remote_fn)
      remote_fn = remote_fn.replace('~', self.homedir)
      if '/' in remote_fn:
        remote_dir = os.path.dirname(remote_fn)
        assert self.exists(
          remote_dir), f"Remote dir {remote_dir} doesn't exist"
      if dont_overwrite and self.exists(remote_fn):
        self.log("Remote file %s exists, skipping" % (remote_fn,))
        return
      assert os.path.exists(local_fn), f"{local_fn} not found"
      if os.path.isdir(local_fn):
        _put_dir(local_fn, remote_fn)
      else:
        assert os.path.isfile(local_fn), "%s is not a file" % (local_fn,)
        if self.exists(remote_fn) and self.isdir(remote_fn):
          remote_fn = remote_fn + '/' + os.path.basename(local_fn)
        self.sftp.put(localpath=local_fn, remotepath=remote_fn)
        maybe_fix_mode(local_fn, remote_fn)