docs: def __put_dir(self, ftp, local_path, remote_path=None):
          """
          Helper function to perform copy operation to remote server
  
          :param ftp: SFTP handle to perform copy operation(s)
          :param local_path: Local path to copy to; can be file or directory
          :param remote_path: Remote path to copy to (default: None - Copies file or directory to
                              home directory directory on the remote server)
          """
          # Determine if local_path should be put into remote user directory
          if remote_path is None:
              remote_path = os.path.basename(local_path)
          remote_path += self.separator
  
          # Iterate over the local path and perform copy operations to remote server
          for current_path, directories, files in os.walk(local_path):
              # Create the remote directory (if needed)
              try:
                  ftp.listdir(remote_path)
              except IOError:
                  ftp.mkdir(remote_path)
  
              # Copy the files in the current directory to the remote path
              for filename in files:
                  ftp.put(os.path.join(current_path, filename), remote_path + filename)
              # Copy the directory in the current directory to the remote path
              for directory in directories:
                  self.__put_dir(ftp, os.path.join(current_path, directory), remote_path + directory)