Exemple #1
0
def load_submissions(assignment: Assignment,
                     submissions: List[Dict]) -> List[Submission]:
    """
    Load a list of submissions for an assignment via the Canvas API.

    Parameters
    ----------
    assignment: Assignment
        An Assignment SDK object
    submissions: List[Dict]
        A list of JSON-like submission object in a form suitable for submission to the
        Canvas submission creation endpoint.

    Returns
    -------
    List[Submission]
        A list of Canvas SDK Submission objects representing the created submissions
    """
    logger.info("Creating %s submissions via Canvas API", len(submissions))

    result: List[Submission] = []
    for submission in submissions:
        result.append(assignment.submit(submission))

    logger.info("Successfully created %s submissions", len(submissions))

    return result
Exemple #2
0
    def submit_assignment(self, assignment, submission, **kwargs):
        """
        Makes a submission for an assignment.

        .. warning::
            .. deprecated:: 0.9.0
                Use :func:`canvasapi.assignment.Assignment.submit` instead.

        :calls: `POST /api/v1/sections/:section_id/assignments/:assignment_id/submissions \
        <https://canvas.instructure.com/doc/api/submissions.html#method.submissions.create>`_

        :param assignment: The object or ID of the assignment.
        :type assignment: :class:`canvasapi.assignment.Assignment` or int
        :param submission: The attributes of the submission.
        :type submission: dict

        :rtype: :class:`canvasapi.submission.Submission`
        """
        from canvasapi.assignment import Assignment

        warnings.warn(
            'Section.submit_assignment() is deprecated and will be removed '
            'in the future. Use Assignment.submit() instead.',
            DeprecationWarning
        )

        assignment_id = obj_or_id(assignment, "assignment", (Assignment,))
        assignment = Assignment(self._requester, {
            'course_id': self.course_id,
            'section_id': self.id,
            'id': assignment_id
        })
        return assignment.submit(submission, **kwargs)
def submit_assignment(assignment: Assignment):
    """Submit the supplied assignment

    :param assignment: assignment to be submitted
    :return: nothing return
    """
    # Begin submissions
    repo = Repo(".")
    logging.info("Repo Untracked Files: ")
    logging.info(repo.untracked_files)
    url = "https://github.com/devfulcrum/{}/commit/{}".format(
        os.path.basename(repo.working_dir), repo.head.commit.hexsha)
    # url = repo.remotes.origin.url[:-4] + "/commit/{}".format(
    #     repo.head.commit.hexsha
    # )  # you MUST push to the classroom org, even if CI/CD runs
    # elsewhere (you can push anytime before peer review begins)
    assignment.submit(
        dict(
            submission_type="online_url",
            url=url,
        ),
        comment=dict(text_comment=json.dumps(get_submission_comments(repo))),
    )
# Canvas API URL
API_URL = "https://canvas.upenn.edu/api/v1/"
# Canvas API key
API_KEY = config.API_KEY
#596 course id
COURSE_ID = 1488863

# Initialize a new Requester
requester = Requester(API_URL, API_KEY)

# Make an Assignment for this course and this assignment
assignment = Assignment(requester, {
    'course_id': COURSE_ID,
    'id': ASSIGNMENT_ID
})
# print(assignment.to_json())

#if you go into the plain REST api, you'll see the python library is combining two steps:
#   1) upload a file named whatever you named yours
#   2) submit the assignment using the id of canvas id for the uploaded file in 1
response = assignment.submit({
    'submission_type': 'online_upload',
}, filename)

print(response)
print("\n\n\nNothing eventful happened but you should always check the site")
canvas_page = "https://canvas.upenn.edu/courses/" + str(
    COURSE_ID) + "/assignments/" + str(ASSIGNMENT_ID)
print("Please check your submission at: \n" + canvas_page)