def module_update_or_create(module): """ Create new resource or update resource of a certain course. :param module: Contains the necessary info of the new resource. :type module: dict(str,int) """ try: course = Course.objects.get(courseId=module['courseId']) except ObjectDoesNotExist: log_assistants(f'The course object with id: {module["courseId"]} does not exist!', 'Sync Agent') raise ObjectDoesNotExist(f'The course object with id: {module["courseId"]} does not exist!') object_type = module['type'] defaults = {'name': module['name'], 'course': course, 'version_time': timezone.now} kwargs = {'external_id': module['external_id'], 'defaults': defaults} if object_type == 'assign': _, created = course.assignment_set.update_or_create(**kwargs) elif object_type == 'quiz': _, created = course.quiz_set.update_or_create(**kwargs) elif object_type == 'choice': _, created = course.choice_set.update_or_create(**kwargs) else: kwargs.update({'target': module['target'], 'type': object_type, 'external': False}) _, created = course.resource_set.update_or_create(**kwargs)
def module_delete(module): """ Delete certain resource from a certain course. :param module: Contains the necessary info of the to be deleted course. :type module: dict """ course = Course.objects.get(courseId=module['courseId']) object_type = module['type'] try: kwargs = {'external_id': module['external_id']} if object_type == 'assign': assignment = course.assignment_set.get(**kwargs) name = assignment.name assignment.delete() elif object_type == 'quiz': quiz = course.quiz_set.get(**kwargs) name = quiz.name for agent in course.quizcompletedfeedback_set.filter(quiz=quiz): agent.delete() quiz.delete() elif object_type == 'choice': choice = course.choice_set.get(**kwargs) name = choice.name choice.delete() else: kwargs = {'target': module['target']} content = course.resource_set.get(**kwargs) name = content.name content.delete() except ObjectDoesNotExist: log_assistants('Sync agent tried to delete an object not present in the database.', 'Sync Agent') return
def user_assigned(user): """ Check if a user is assigned the editteacher or manager role and if so, add them to the database. :param user: information about the user. :type user: dict(str, str) """ if user['role'] == 'editingteacher' or user['role'] == 'manager': try: course = Course.objects.get(courseId=user['course_id']) except ObjectDoesNotExist: log_assistants('Course does not exist.', 'Sync_Agent') raise ObjectDoesNotExist('Course does not exist.') user_exists = User.objects.filter(moodle_id=user['id']).exists() if user_exists: userdb = User.objects.get(moodle_id=user['id']) if not userdb.role_set.filter(course_id=course, role_type=user['role']).exists(): Role.objects.create(user_id=userdb, course_id=course, role_type=user['role']) else: userdb = User(username=user['username'], moodle_id=user['id'], email=user['email'], first_name=user['firstname'], last_name=user['lastname'], is_staff=True, version_time=timezone.now()) userdb.set_password("Test123!") userdb.save() teacher_group = Group.objects.get(name='Teachers') userdb.groups.add(teacher_group) Role.objects.create(user_id=userdb, course_id=course, role_type=user['role'])