def item_detail(current_user, item_type, item): """Display item and students who are learning that item""" user_id = current_user.public_id item_object = Item.query.filter_by(item_id=item, user_id=user_id).first() student_items = StudentItem.query.filter_by( item_id=item).options(db.joinedload('students')).all() learned_student_list = [] unlearned_student_list =[] item_detail = {} for student in student_items: if student.Learned == False: student = { 'student_id': student.students.student_id, 'name': student.students.name } unlearned_student_list.append(student) else: student = { 'student_id': student.students.student_id, 'name': student.students.name } learned_student_list.append(student) item_object = { 'item_id': item_object.item_id, 'item': item_object.item, 'date': item_object.date_added, 'itemType': item_object.item_type } item_detail['unlearnedStudentList'] = unlearned_student_list item_detail['learnedStudentList'] = learned_student_list item_detail['item'] = item_object return jsonify(item_detail)
def get_items(current_user, item_type): start = time.time() user_id = current_user.public_id items = StudentItem.query.filter_by(user_id=user_id).filter_by(item_type=item_type).options( db.joinedload('items')).filter_by(user_id=user_id).filter_by(item_type=item_type).options( db.joinedload('students')).filter_by(user_id=user_id).all() item_list =[] items_dict = {} for item in items: if not items_dict.get(item.items.item_id): items_dict[item.items.item_id] = {"item": item.items.item, "itemId": item.items.item_id, "itemType": item.item_type, "unlearnedCount": 0, "learnedCount": 0, "unlearnedStudents": [], "learnedStudents": [], "totalCount": 0} prefix = "un" if item.Learned == False else "" key = "{}learned".format(prefix) items_dict[item.items.item_id][key + "Count"] += 1 items_dict[item.items.item_id]["totalCount"] += 1 items_dict[item.items.item_id][key + "Students"].append(item.students.name) end = time.time() elapsed_time = end - start return jsonify(items_dict)
def get_student_reading_leels(current_user): user_id = current_user.public_id reading_levels = ReadingLevel.query.filter_by(user_id=user_id).options( db.joinedload('students')).filter_by(user_id=user_id).all() reading_level_dict = {} for entry in reading_levels: if entry.reading_level not in reading_level_dict: reading_level_dict[entry.reading_level] = [entry.students.name] else: reading_level_dict[entry.reading_level].append(entry.students.name) return jsonify(reading_level_dict)
def student_detail(current_user, student_id): """Show student detail""" start = time.time() user_id = current_user.public_id averages = get_class_averages(user_id) student_items = Item.query.filter(Item.custom.is_(False)).all() student = Student.query.filter_by( student_id=student_id, user_id=user_id).options(db.joinedload('studentgroups')).options(db.joinedload('readinglevels')).all() student_items = StudentItem.query.filter_by( student_id=student_id).options(db.joinedload('items')).all() student_dict = {} items = StudentItem.query.filter_by(user_id=user_id, student_id=student_id).options(db.joinedload('items')).all() item_dict = get_student_detail_item_dict(items) student_dict['classAverages'] = get_class_averages(user_id) student_dict['wordList'] = item_dict.get("wordList") student_dict['letterList'] = item_dict.get("letterList") student_dict['soundList'] = item_dict.get("soundList") student_dict['unlearnedWordList'] = item_dict.get("unlearnedWordList") student_dict['unlearnedLetterList'] = item_dict.get("unlearnedLetterList") student_dict['unlearnedSoundList'] = item_dict.get("unlearnedSoundList") student_dict['wordCount'] = item_dict.get("wordCount") student_dict['letterCount'] = item_dict.get("letterCount") student_dict['soundCount'] = item_dict.get("soundCount") student_dict['unlearnedWordCount'] = item_dict.get("unlearnedWordCount") student_dict['unlearnedLetterCount'] = item_dict.get("unlearnedLetterCount") student_dict['unlearnedSoundCount'] = item_dict.get("unlearnedSoundCount") student_dict['totalWordCount'] = item_dict.get("totalWordCount") student_dict['totalLetterCount'] = item_dict.get("totalLetterCount") student_dict['totalSoundCount'] = item_dict.get("totalSoundCount") student_dict['student_id'] = student[0].student_id, student_dict['name'] = student[0].name student_dict['readingLevel'] = get_all_student_reading_levels(student[0])[0] student_dict['lastReadingUpdate'] = get_all_student_reading_levels(student[0])[1] student_dict['group'] = get_student_group(student[0], user_id) end = time.time() elapsed_time = end - start print('getting student detail took', elapsed_time) return jsonify(student_dict)
def get_all_groups(current_user): """get all groups and students in each group""" user_id = current_user.public_id groups = Group.query.filter_by(user_id=user_id).all() group_dict = {} for group in groups: group_dict[group.group_id] = {'name': group.group_name, 'students': []} student_groups = StudentGroup.query.filter_by(user_id=user_id).options(db.joinedload('groups')).options(db.joinedload('students')).all() for entry in student_groups: if entry.groups.group_id in group_dict: group_dict[entry.groups.group_id]['students'].append(entry.students.name) return jsonify(group_dict)
def get_student_item_test(current_user, item_type, student): """get list of student test results, word_counts and chart_data""" user_id = current_user.public_id student_id = student student_items = StudentItem.query.filter_by( user_id=user_id, student_id=student_id, item_type=item_type).options(db.joinedload('items')).options(db.joinedload('students')).all() student_tests = StudentTestResult.query.filter_by( student_id=student_id, user_id=user_id, test_type=item_type).all() item_counts = get_item_counts(student_items) student_test_list = get_student_item_test_list(student_tests) learned_items_list = get_learned_items_list(student_items) item_counts = get_item_counts(student_items) test_data = {'itemCounts': item_counts, 'studentTestList':student_test_list, 'learnedItemList': learned_items_list } return test_data
def get_unassigned_students_item(current_user, item): """gets students are not assigned to item""" user_id = current_user.public_id students = StudentItem.query.filter_by( item_id=item, user_id=user_id).options(db.joinedload('students')).all() student_ids = [] for student in students: student_ids.append(student.student_id) unassigned_students = Student.query.filter_by(user_id=user_id).filter(Student.student_id.notin_(student_ids)).all() student_list = [] for student in unassigned_students: student = { 'student_id': student.student_id, 'student': student.name } student_list.append(student) return jsonify([student_list])
def update_incorrect_items(student_id, incorrect_items, test_type, user_id): """updates incorrect letters in db, called by create_student_test""" student_item_list = StudentItem.query.filter_by(student_id=student_id, user_id=user_id, item_type=test_type).options(db.joinedload('items')).filter( Item.item.in_(incorrect_items)).all() for item in student_item_list: if item.items.item in incorrect_items: item.incorrect_count = StudentItem.incorrect_count + 1 db.session.commit() return "incorrect items"
def get_students(current_user): start = time.time() user_id = current_user.public_id students = Student.query.filter_by(user_id=user_id).options( db.joinedload('studentitems')).options(db.joinedload('studenttestresults')).options(db.joinedload('studentgroups')).options(db.joinedload('readinglevels')).all() student_dict = {} for student in students: student_dict[student.student_id] = { 'studentId': student.student_id, 'name': student.name, 'wordCount': 0, 'totalWordCount': 0, 'unlearnedWordCount': 0, 'wordList':[], 'unlearnedWordList': [], 'lastWordTest': "", 'letterCount': 0, 'unlearnedLetterCount': 0, 'totalLetterCount': 0, 'letterList':[], 'unlearnedLetterList': [], 'lastLetterTest': "", 'soundCount': 0, 'unlearnedSoundCount': 0, 'soundList': [], 'unlearnedSoundList': [], 'totalSoundCount': 0, 'lastSoundTest': "", 'readingLevel': "", 'lastReadingLevelUpdate': "", 'group': "" } tests = get_student_test_dates(student) wordTest = tests.get('lastWordTest') if wordTest == None: wordTest = "" letterTest = tests.get('lastLetterTest') if letterTest == None: letterTest = "" soundTest = tests.get('lastSoundTest') if soundTest == None: soundTest = "" student_dict[student.student_id]['lastWordTest'] = wordTest student_dict[student.student_id]['lastLetterTest'] = letterTest student_dict[student.student_id]['lastSoundTest'] = soundTest student_dict[student.student_id]['group'] = get_student_group(student, user_id) student_dict[student.student_id]['readingLevel'] = get_all_student_reading_levels(student)[0] student_dict[student.student_id]['lastReadingLevelUpdate'] = get_all_student_reading_levels(student)[1] items = StudentItem.query.filter_by(user_id=user_id, student_id=student.student_id).options(db.joinedload('items')).all() item_dict = get_student_item_dict(items) student_dict[student.student_id]['wordList'] = item_dict.get("wordList") student_dict[student.student_id]['letterList'] = item_dict.get("letterList") student_dict[student.student_id]['soundList'] = item_dict.get("soundList") student_dict[student.student_id]['unlearnedWordList'] = item_dict.get("unlearnedWordList") student_dict[student.student_id]['unlearnedLetterList'] = item_dict.get("unlearnedLetterList") student_dict[student.student_id]['unlearnedSoundList'] = item_dict.get("unlearnedSoundList") student_dict[student.student_id]['wordCount'] = item_dict.get("wordCount") student_dict[student.student_id]['letterCount'] = item_dict.get("letterCount") student_dict[student.student_id]['soundCount'] = item_dict.get("soundCount") student_dict[student.student_id]['unlearnedWordCount'] = item_dict.get("unlearnedWordCount") student_dict[student.student_id]['unlearnedLetterCount'] = item_dict.get("unlearnedLetterCount") student_dict[student.student_id]['unlearnedSoundCount'] = item_dict.get("unlearnedSoundCount") student_dict[student.student_id]['totalWordCount'] = item_dict.get("totalWordCount") student_dict[student.student_id]['totalLetterCount'] = item_dict.get("totalLetterCount") student_dict[student.student_id]['totalSoundCount'] = item_dict.get("totalSoundCount") end = time.time() elapsed_time = end - start print('getting all students took', elapsed_time) return jsonify(student_dict)
def group_detail(current_user, group): """Display group and students in that group""" user_id = current_user.public_id group_object = Group.query.filter_by(group_name=group, user_id=user_id).first() group_id = group_object.group_id group_notes = GroupNote.query.filter_by(group_id=group_id, user_id=user_id).all() student_group = StudentGroup.query.filter_by( group_id=group_id, user_id=user_id).options(db.joinedload('students')).all() notes = [{'note': note.note, 'date': note.date_added} for note in group_notes] words_list = [] letters_list = [] sounds_list = [] if student_group: student_names = [] student_ids =[] for student in student_group: student_names.append(student.students.name) student_ids.append(student.student_id) reading_levels ={} for student in student_ids: student_reading_level = ReadingLevel.query.filter_by(user_id=user_id, student_id=student).options(db.joinedload('students')).first() if student_reading_level: reading_levels[student_reading_level.students.name] = student_reading_level.reading_level student_words = StudentItem.query.filter(StudentItem.Learned.is_(False)).filter_by(user_id=user_id, student_id=student, item_type="words").options(db.joinedload('students')).options(db.joinedload('items')).all() student_word_list = [] for word in student_words: student_word_list.append(word.items.item) words_list.append(student_list) student_letters = StudentItem.query.filter(StudentItem.Learned.is_(False)).filter_by(user_id=user_id, student_id=student, item_type="letters").options(db.joinedload('students')).options(db.joinedload('items')).all() student_letter_list = [] for letter in student_letters: student_letter_list.append(letter.items.item) letter_list.append(student_letter_list) student_sounds = StudentItem.query.filter(StudentItem.Learned.is_(False)).filter_by(user_id=user_id, student_id=student, item_type="sounds").options(db.joinedload('students')).options(db.joinedload('items')).all() student_sound_list = [] for sound in student_sounds: student_sound_list.append(sound.items.item) sound_list.append(student_sound_list) word_result = set(words_list[0]) for word in words_list[1:]: word_result.intersection_update(word) letter_result = set(letters_list[0]) for letter in letters_list[1:]: letter_result.intersection_update(letter) sound_result = set(sounds_list[0]) for sound in sounds_list[1:]: sound_result.intersection_update(sound) group_data = { 'name': group, 'students': student_names, 'words' : list(word_result), 'letters': list(letter_result), 'sounds': list(sound_result), 'readingLevels': reading_levels, 'notes': notes } return jsonify(group_data) else: return jsonify({"message":"no students yet"})