def auth(username, pwd): tab = getTable(TABLE_NAME) pwd = hash_sha256(pwd) r = tab.find_one({'user': username, 'pwd': pwd}) if r: return str(r['_id']) return None
def getGradesByStudentId(student_id): sch = schedule.getSchedule() sch = [s for s in sch] ret = [] tab = getTable(TABLE_NAME) for s in sch: g = tab.find_one( { 'grade_list.student_id': str(student_id), 'class_id': s['class_id'], 'date.week': s['date']['week'], 'date.cod': s['date']['cod'], 'date.dow': s['date']['dow'], 'teacher': s['teacher'] }, {'grade_list.$': 1}) if g: grade = g['grade_list'][0]['grade'] teacher_name = teacher.getTeacherById(s['teacher'])['name'] ret.append({ 'date': s['date'], 'teacher': teacher_name, 'content': (s['content'] if ('content' in s) else ''), 'grade': grade }) return ret
def genReport(class_id): sch = schedule.getScheduleByClass(class_id) sch = [s for s in sch] schedule.sortByDate(sch) stu = students.getStudents(class_id)[0]['students'] stu = [s for s in stu] sid2idx = {s['student_id']: idx for idx, s in enumerate(stu)} grades = [] tab = getTable(TABLE_NAME) for s in sch: glist = tab.find_one( { 'class_id': s['class_id'], 'date.week': s['date']['week'], 'date.cod': s['date']['cod'], 'date.dow': s['date']['dow'], 'teacher': s['teacher'] }, {'grade_list': 1}) target = [None] * len(stu) if glist: for g in glist['grade_list']: if g['student_id'] in sid2idx: target[sid2idx[g['student_id']]] = g['grade'] else: print "{} not in class {}".format(g['student_id'], class_id) grades.append({ 'content': s['content'], 'grades': target, 'date': s['date'], }) return {'s': stu, 'g': grades}
def getClassList(): tab = getTable(TABLE_NAME) class_list = list() result = tab.find({}, ['name']) for mClass in result: class_list.append({'_id': str(mClass['_id']), 'name': mClass['name']}) return class_list
def bulkUpdate(): tab = getTable(TABLE_NAME) post = request.get_json() sch = schedule.getOneSchedule(post['schedule_id']) assert sch['teacher'] == ObjectId(session['teacher_id']) stu = students.getStudentIds(sch['class_id']) glist = [] for item in post['data']: sid = str(item['student_id']) assert sid in stu assert not (item['grade'] is None) v = float(item['grade']) assert v >= 0 and v <= 100 glist.append({'student_id': sid, 'grade': v}) tab.update( { 'class_id': sch['class_id'], 'date.week': sch['date']['week'], 'date.cod': sch['date']['cod'], 'date.dow': sch['date']['dow'], 'teacher': sch['teacher'] }, {'$set': { 'grade_list': glist }}, upsert=True)
def getClassList(): tab = getTable(TABLE_NAME) class_list = set() result = tab.find() for mClass in result: class_list.add(mClass['class_id']) class_list = list(class_list) return class_list
def getTeachers(): tab = getTable(TABLE_NAME) teacherList = [] for i in tab.find({}, ['user', 'name']): teacherList.append({ '_id': str(i['_id']), 'name': i['name'], 'user': i['user'] }) return teacherList
def bulkUpdate(): errorNum = 0 succeNum = 0 tab = getTable(TABLE_NAME) post = request.get_json() classes = {} class_id = ObjectId(post['class_id']) #put students with the same <class_id> into the same list for student in post['data']: student.pop('$$hashKey', None) assert (student['student_id']) assert (student['student_name']) student['student_id'] = str(student['student_id']) tab.update({'_id': class_id}, {"$set": {'students': post['data']}})
def bulkUpdate(): errorNum = 0 succeNum = 0 tab = getTable(TABLE_NAME) post = request.get_json() l = [] for s in post: l.append({ 'teacher': ObjectId(s['teacher']), 'date': s['date'], 'class_id': ObjectId(s['class_id']), 'content': s['content'] if ('content' in s) else '' }) ret = tab.insert_many(l) assert ret.acknowledged tab.remove() ret = tab.insert_many(l) assert ret.acknowledged
def update(): try: op = request.form['op'] tab = getTable(TABLE_NAME) if op == 'add': tab.insert({ 'name': request.form['name'], 'user': request.form['user'], 'pwd': hash_sha256(request.form['pwd']), }) elif op == 'del': tab.remove({'_id': ObjectId(request.form['id'])}) elif op == 'pwd': tab.update({'_id': ObjectId(request.form['id'])}, {'$set': { 'pwd': hash_sha256(request.form['pwd']) }}) except Exception, e: logging.exception(e)
def getGradesByScheduleId(schedule_id): tab = getTable(TABLE_NAME) sch = schedule.getOneSchedule(schedule_id) assert sch['teacher'] == ObjectId(session['teacher_id']) slist = [] for i in students.getStudents(sch['class_id'])[0]['students']: slist.append({ 'student_name': i['student_name'], 'student_id': i['student_id'] }) g = tab.find_one({ 'class_id': sch['class_id'], 'date.week': sch['date']['week'], 'date.cod': sch['date']['cod'], 'date.dow': sch['date']['dow'], 'teacher': sch['teacher'] }) if g: for item in g['grade_list']: sid = item['student_id'] for j in range(len(slist)): if slist[j]['student_id'] == sid: slist[j]['grade'] = item['grade'] return slist
def getSchedule(): tab = getTable(TABLE_NAME) return tab.find()
def getScheduleByClass(class_id): tab = getTable(TABLE_NAME) return tab.find({'class_id': ObjectId(class_id)})
def getOneSchedule(schedule_id): tab = getTable(TABLE_NAME) return tab.find_one({'_id': ObjectId(schedule_id)})
def removeSchByClassId(cid): tab = getTable(TABLE_NAME) tab.remove({'class_id': ObjectId(cid)})
def getStudents(class_id): tab = getTable(TABLE_NAME) return tab.find({'_id': ObjectId(class_id)})
def getTeacherById(teacher_id): tab = getTable(TABLE_NAME) return tab.find_one({'_id': ObjectId(teacher_id)}, ['user', 'name'])
def getAllstudents(): tab = getTable(TABLE_NAME) return tab.find()
def getScheduleForTeacher(teacher_id): tab = getTable(TABLE_NAME) return tab.find({'teacher': ObjectId(teacher_id)})
def del_class(): cid = request.form['id'] assert len(cid) > 0 schedule.removeSchByClassId(cid) tab = getTable(TABLE_NAME) tab.remove({'_id': ObjectId(cid)})
def new(): name = request.form['name'] assert len(name) > 0 tab = getTable(TABLE_NAME) tab.insert({'name': name, 'students': []})
def getStudentIds(class_id): tab = getTable(TABLE_NAME) l = [] for i in tab.find_one({'_id': ObjectId(class_id)})['students']: l.append(i['student_id']) return l