def get_parent(self, **kwargs): """ Return the object that spawned this content migration. :rtype: :class:`canvasapi.group.Account`, or :class:`canvasapi.course.Course`, or :class:`canvasapi.course.Group`, or :class:`canvasapi.course.User` """ from canvasapi.account import Account from canvasapi.course import Course from canvasapi.group import Group from canvasapi.user import User response = self._requester.request( "GET", "{}s/{}".format(self._parent_type, self._parent_id), _kwargs=combine_kwargs(**kwargs), ) if self._parent_type == "group": return Group(self._requester, response.json()) elif self._parent_type == "course": return Course(self._requester, response.json()) elif self._parent_type == "account": return Account(self._requester, response.json()) elif self._parent_type == "user": return User(self._requester, response.json())
def delete_user(self, user): """ Delete a user record from a Canvas root account. If a user is associated with multiple root accounts (in a multi-tenant instance of Canvas), this action will NOT remove them from the other accounts. WARNING: This API will allow a user to remove themselves from the account. If they do this, they won't be able to make API calls or log into Canvas at that account. :calls: `DELETE /api/v1/accounts/:account_id/users/:user_id \ <https://canvas.instructure.com/doc/api/accounts.html#method.accounts.remove_user>`_ :param user: The user object or ID to delete. :type user: :class:`canvasapi.user.User` or int :rtype: :class:`canvasapi.user.User` """ from canvasapi.user import User user_id = obj_or_id(user, "user", (User, )) response = self._requester.request( 'DELETE', 'accounts/{}/users/{}'.format(self.id, user_id)) return User(self._requester, response.json())
def get_user(self, user_id, id_type=None): """ Retrieve a user by their ID. `id_type` denotes which endpoint to try as there are several different IDs that can pull the same user record from Canvas. Refer to API documentation's `User <https://canvas.instructure.com/doc/api/users.html#User>`_ example to see the ID types a user can be retrieved with. :calls: `GET /users/:id \ <https://canvas.instructure.com/doc/api/users.html#method.users.api_show>`_ :param user_id: The user's ID. :type user_id: str :param id_type: The ID type. :type id_type: str :rtype: :class:`canvasapi.user.User` """ if id_type: uri = 'users/%s:%s' % (id_type, user_id) else: uri = 'users/%s' % (user_id) response = self.__requester.request('GET', uri) return User(self.__requester, response.json())
def get_user(self, user, id_type=None, **kwargs): """ Retrieve a user by their ID. `id_type` denotes which endpoint to try as there are several different IDs that can pull the same user record from Canvas. Refer to API documentation's `User <https://canvas.instructure.com/doc/api/users.html#User>`_ example to see the ID types a user can be retrieved with. :calls: `GET /api/v1/users/:id \ <https://canvas.instructure.com/doc/api/users.html#method.users.api_show>`_ :param user: The user's object or ID. :type user: :class:`canvasapi.user.User` or int :param id_type: The ID type. :type id_type: str :rtype: :class:`canvasapi.user.User` """ if id_type: uri = "users/{}:{}".format(id_type, user) elif user == "self": uri = "users/self" else: user_id = obj_or_id(user, "user", (User, )) uri = "users/{}".format(user_id) response = self.__requester.request("GET", uri, _kwargs=combine_kwargs(**kwargs)) return User(self.__requester, response.json())
def get_user(self, user_id, user_id_type=None): """ Retrieve a user by their ID. `user_id_type` denotes which endpoint to try as there are several different ids that can pull the same user record from Canvas. :calls: `GET /api/v1/courses/:course_id/users/:id \ <https://canvas.instructure.com/doc/api/users.html#method.users.api_show>`_ :param user_id: The ID of the user to retrieve. :type user_id: int :param user_id_type: The type of the ID to search for. :type user_id_type: str :rtype: :class:`canvasapi.user.User` """ from canvasapi.user import User if user_id_type: uri = 'courses/%s/users/%s:%s' % (self.id, user_id_type, user_id) else: uri = 'courses/%s/users/%s' % (self.id, user_id) response = self._requester.request( 'GET', uri ) return User(self._requester, response.json())
def remove_user(self, user): """ Leave a group if allowed. :calls: `DELETE /api/v1/groups/:group_id/users/:user_id \ <https://canvas.instructure.com/doc/api/groups.html#method.group_memberships.destroy>`_ :param user: The user object or ID to remove from the group. :type user: :class:`canvasapi.user.User` or int :rtype: :class:`canvasapi.user.User` """ from canvasapi.user import User user_id = obj_or_id(user, "user", (User, )) response = self._requester.request( "DELETE", "groups/{}/users/{}".format(self.id, user_id)) return User(self._requester, response.json())
def get_quiz_submission(self, quiz_submission, **kwargs): """ Get a single quiz submission. :calls: `GET /api/v1/courses/:course_id/quizzes/:quiz_id/submissions/:id \ <https://canvas.instructure.com/doc/api/quiz_submissions.html#method.quizzes/quiz_submissions_api.show>`_ :param quiz_submission: The object or ID of the quiz submission to retrieve. :type quiz_submission: int, string, :class:`canvasapi.quiz.QuizSubmission` :rtype: :class:`canvasapi.quiz.QuizSubmission` """ quiz_submission_id = obj_or_id(quiz_submission, "quiz_submission", (QuizSubmission, )) response = self._requester.request( "GET", "courses/{}/quizzes/{}/submissions/{}".format( self.course_id, self.id, quiz_submission_id), _kwargs=combine_kwargs(**kwargs), ) response_json = response.json()["quiz_submissions"][0] response_json.update({"course_id": self.course_id}) if len(response.json().get("quizzes", [])) > 0: response_json.update( {"quiz": Quiz(self._requester, response.json()["quizzes"][0])}) if len(response.json().get("submissions", [])) > 0: response_json.update({ "submission": Submission(self._requester, response.json()["submissions"][0]) }) if len(response.json().get("users", [])) > 0: response_json.update( {"user": User(self._requester, response.json()["users"][0])}) return QuizSubmission(self._requester, response_json)
def create_user(self, pseudonym, **kwargs): """ Create and return a new user and pseudonym for an account. :calls: `POST /api/v1/accounts/:account_id/users \ <https://canvas.instructure.com/doc/api/users.html#method.users.create>`_ :param pseudonym: The pseudonym of the account. :type pseudonym: dict :rtype: :class:`canvasapi.user.User` """ from canvasapi.user import User if isinstance(pseudonym, dict) and 'unique_id' in pseudonym: kwargs['pseudonym'] = pseudonym else: raise RequiredFieldMissing( "Dictionary with key 'unique_id' is required.") response = self._requester.request('POST', 'accounts/{}/users'.format(self.id), _kwargs=combine_kwargs(**kwargs)) return User(self._requester, response.json())