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
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)