code: def _before_submission_insertion(self, task, inputdata, debug, obj):
          
          username = self._user_manager.session_username()
  
          if task.is_group_task() and not self._user_manager.has_staff_rights_on_course(task.get_course(), username):
              group = self._database.aggregations.find_one(
                  {"courseid": task.get_course_id(), "groups.students": username},
                  {"groups": {"$elemMatch": {"students": username}}})
  
              obj.update({"username": group["groups"][0]["students"]})
          else:
              obj.update({"username": [username]})
  
          lti_info = self._user_manager.session_lti_info()
          if lti_info is not None and task.get_course().lti_send_back_grade():
              outcome_service_url = lti_info["outcome_service_url"]
              outcome_result_id = lti_info["outcome_result_id"]
              outcome_consumer_key = lti_info["consumer_key"]
  
              # safety check
              if outcome_result_id is None or outcome_service_url is None:
                  self._logger.error("outcome_result_id or outcome_service_url is None, but grade needs to be sent back to TC! Ignoring.")
                  return
  
              obj.update({"outcome_service_url": outcome_service_url,
                          "outcome_result_id": outcome_result_id,
                          "outcome_consumer_key": outcome_consumer_key})
docs: Called before any new submission is inserted into the database. Allows you to modify obj, the new document that will be inserted into the
          database. Should be overridden in subclasses.
  
          :param task: Task related to the submission
          :param inputdata: input of the student
          :param debug: True, False or "ssh". See add_job.
          :param obj: the new document that will be inserted