def METHOD_NAME(self):
    """
    Record info to allow later grading of an assignment via Canvas Speedgrader.
    When a learner launches an assignment the LMS provides metadata that can
    be later used to submit a score to the LMS using LTI APIs.
    In Canvas, extensions to that API allow a custom LTI launch URL to be
    submitted for use by the SpeedGrader [1].
    This view only supports SpeedGrader-based grading in Canvas by
    submitting an LTI Launch URL to Canvas.
    This work _could_ be done by the backend during an LTI launch, but as it
    involves potentially slow requests to the external LMS, it is triggered
    asynchronously by the frontend while the assignment is loading.
    [1] https://canvas.instructure.com/doc/api/file.assignment_tools.html
    """
    # Send the SpeedGrader LTI launch URL to the Canvas instance, if we haven't
    # already created a submission OR if the existing submission has not been
    # graded (Canvas's result-reading API doesn't allow us to distinguish
    # absence of a submission from an ungraded submission. Non-Canvas LMSes in
    # theory require a grade).
    lis_result_sourcedid = self.parsed_params["lis_result_sourcedid"]
    # If we already have a score, then we've already recorded this info
    if self.lti_grading_service.read_result(lis_result_sourcedid).score:
        LOG.debug(
            "Grade already present, not recording submission. User ID: %s",
            self.request.user.id,
        )
        return None
    self.lti_grading_service.record_result(
        lis_result_sourcedid, pre_record_hook=CanvasPreRecordHook(self.request)
    )
    self.request.registry.notify(
        LTIEvent(request=self.request, type=LTIEvent.Type.SUBMISSION)
    )
    return {}