code: def _get_task_descriptor_info(self, courseid, taskid):
          
          if not id_checker(courseid):
              raise InvalidNameException("Course with invalid name: " + courseid)
          if not id_checker(taskid):
              raise InvalidNameException("Task with invalid name: " + taskid)
  
          task_fs = self.get_task_fs(courseid, taskid)
          for ext, task_file_manager in self._task_file_managers.items():
              if task_fs.exists("task."+ext):
                  return "task." + ext, task_file_manager
  
          raise TaskNotFoundException()
docs: :param courseid: the course id of the course
          :param taskid: the task id of the task
          :raise InvalidNameException, TaskNotFoundException
          :return: a tuple, containing:
              (descriptor filename,
               task file manager for the descriptor)