def attendance(): parents = Member.query.filter_by(member_type="parent").all() childs = Member.query.filter_by(member_type="child").all() if request.method == 'POST': date = datetime.now().strftime('%x') day = datetime.now().strftime('%A') parent_id = request.form.get("selected_parent") child_id = request.form.get("selected_child") parent = Attendance(parent_id, date, day) parent.present() child = Attendance(child_id, date, day) child.present() return render_template('attendance.html', parents=parents, childs=childs)
def add_student_to_class(index_id): if current_user.role != 'admin': flash('You are not authorized to perform this action', 'danger') return redirect(url_for('dashboard')) dashboard_data = get_dashboard() students = Students.query.all() if request.method == 'POST': # check if the student is inside the class index_dates = Indexes.query.get(index_id).dates found = False for attendance in index_dates[0].attendance: if attendance.studentId == int(request.form['name']): found = True break if found: flash('Student is already enrolled into this class', 'warning') return redirect(url_for('view_class_students', index_id=index_id)) else: # get the highest seat number seat_no = get_highest_seat_no(index_dates[0]) for index_date in index_dates: new_attendance = Attendance(indexDateId=index_date.id, studentId=request.form['name'], seatNo=seat_no) db.session.add(new_attendance) db.session.commit() flash('Student has successfully enroll into this class', 'success') return redirect(url_for('view_class_students', index_id=index_id)) return render_template('add_student_to_class.html', students=students, dashboard_data=dashboard_data)
def mark_attendance(id): class_id, user_id, date = id, current_user.user_id, datetime.date.today() response = { 'class_id': class_id, 'user_id': user_id, 'date': date, 'already_marked': False } def is_enrolled(): enroll = Enrollment.query.filter_by(user_id=user_id, class_id=id, dropped=False).all() if enroll: return True return False if not is_enrolled(): response['success'] = False return jsonify(response) if not Attendance.query.filter_by( class_id=class_id, user_id=user_id, date=date).all(): new_attendance = Attendance( class_id=id, user_id=current_user.user_id, date=datetime.date.today() ) db.session.add(new_attendance) db.session.commit() response['success'] = True else: response['success'] = True response['already_marked'] = True return jsonify(response)
async def attend(ctx, name: str): '''Allows a user to attend an upcoming event example: ?attend party ''' author = ctx.message.author.name avatar = ctx.message.author.avatar_url id = ctx.message.author.id try: count = session.query(Member).filter(Member.id == id).count() event = session.query(Event).filter(Event.name == name).first() # Verify This event exists if not event: await bot.say('This event does not exist') return # Create member if they do not exist in our database if count < 1: member = Member(id=id, name=author, avatar=avatar) session.add(member) attending = Attendance(member_id=id, event_id=event.id) session.add(attending) session.commit() await bot.say('Member {} is now attending event {}'.format( author, name)) except Exception as e: await bot.say('Could not complete your command') print(e)
def start_day(): students = Student.query.all() students_att = Attendance.query.filter_by(date_now=date.today()).all() # checks if not attendace list has been created for the day. if not students: flash('No students in the database yet', 'error') return redirect('/students') if not students_att: if students: # pushes all students into the attendance table, creating # a list for today's date. for student in students: record = Attendance(student) db.session.add(record) db.session.commit() return redirect('/student_login') else: # the day's list has not been created flash('Today\'s attendance hasn\'t been created yet.', 'error') return redirect('/') else: # the day's list already created flash('Today\'s attendance already created', 'error') return redirect('/')
def main(): host = User(username='******', studentID='100000000', email='*****@*****.**', image_file='profiles/Chris.jpg', password=dbpassword, device='Heroku') db.session.add(host) db.session.commit() test = User(username='******', studentID='100000001', email='*****@*****.**', image_file='profiles/default.PNG', password='******', device='None') db.session.add(test) db.session.commit() att = Attendance(username='******', studentID='100000000', teamnumber=97, teamcount=10, unit='01') db.session.add(att) db.session.commit() att = AttendLog(username='******', studentID='100000000') db.session.add(att) db.session.commit()
def events(): if request.method == "POST": my_data = json.loads(request.data.decode('utf-8')) name = my_data['eventDate'] print(name) event = Events( event_name=my_data['eventName'], event_date=my_data['eventDate'] ) try: db.session.add(event) # Need to commit event first so I can use the event_id to link two tables db.session.commit() attendees = [] for attendee in my_data['attendees']: attendees.append(Attendance( meetup_user_id=attendee['userId'], event_id=event.id, did_attend=attendee['didAttend'], did_rsvp=attendee['didRSVP'], title=attendee['title'], event_host=attendee['eventHost'], rsvp_date=attendee['rsvpDate'], date_joined_group=attendee['dateJoinedGroup'] )) print(attendees) print(event) db.session.bulk_save_objects(attendees) db.session.commit() except Exception as exception: print(exception) return jsonify(my_data) else: events = [] for event in Events.query.order_by(Events.event_date.desc()).all(): try: attendees = Attendance.query.filter( Attendance.event_id == event.id, Attendance.did_attend == True).all() rsvps = Attendance.query.filter(Attendance.event_id == event.id, Attendance.did_rsvp == True).all() attendees_who_rsvpd = Attendance.query.filter(Attendance.event_id == event.id, Attendance.did_rsvp == True, Attendance.did_attend == True).all() events.append({ # Needs to be string here beacuse when front end sends event id back to get attendance data # Database expects getting rows by matching id string, not number "id": event.id, "name": event.event_name, "date": event.event_date, "attendees": len(attendees), "rsvps": len(rsvps), "attendeesWhoRsvpd": len(attendees_who_rsvpd) }) except Exception as exception: print(exception) return "Could not get the event data" return jsonify(data=events)
def mark_attendance(): user_name = str(request.data) print("Mark attendance of " + user_name) check_user = User.query.filter_by(name=user_name).first() if check_user is not None: new_attendance = Attendance(check_user.userID, datetime.utcnow()) db_session.add(new_attendance) db_session.commit() return json.dumps({'status': 'OK'})
def upload_class(): if current_user.role != 'admin': flash('You are not authorized to perform this action', 'danger') return redirect(url_for('dashboard')) dashboard_data = get_dashboard() form = AdminAddFileForm() if form.validate_on_submit(): added = False file = form.fileInput.data file_string = str(file.read(), 'utf-8') class_dict = csv.DictReader(file_string.splitlines(), skipinitialspace=True) for class_details in class_dict: try: course_index = find_index(class_details['index']) if course_index is None: flash( f'Index {class_details["index"]} is not inside the database. Please add this course first', 'danger') return redirect(url_for('manage_class')) student = find_student(class_details['matricNo']) if student is None: flash( f'Student {class_details["matricNo"]} is not inside the database. Please add this student first', 'danger') return redirect(url_for('manage_class')) index_dates = get_all_index_dates(course_index.id) for index_date in index_dates: attendance = find_attendance(index_date.id, student.id) if attendance is None: added = True attendance = Attendance(indexDateId=index_date.id, studentId=student.id, seatNo=class_details['seatNo']) db.session.add(attendance) except: flash('CSV contains incorrect fields', 'danger') return redirect(url_for('manage_class')) if added: db.session.commit() flash('Class details have been added', 'success') else: flash('No class details was added', 'info') return redirect(url_for('manage_class')) return render_template('admin_add_file.html', form=form, dashboard_data=dashboard_data, legend='Upload Class')
def set_attendance(session_id: str, student: str, status: Optional[str]): session_id = int(session_id) session = Session.query.get(session_id) status = AttendanceStatus[status] student = User.query.filter_by(email=student).one() Attendance.query.filter_by(session_id=session_id, student=student).delete() if status is not None: db.session.add( Attendance(status=status, session_id=session_id, student=student) ) db.session.commit() return fetch_section(section_id=session.section_id)
def checkinstudent(coursecode): checkinstu = {} checkinstu['success'] = False checkinstu['error'] = 'Student not registered for the course' ccode = coursecode stuid = request.args.get('sid') flag = request.args.get('flag') addi = request.args.get('addi') course = Course.query.filter_by(code=ccode).first() if course is None: checkinstu['error'] = 'Course not exists' return jsonify(checkinstu) cid = course.cid link = StudentCourseLink.query.filter_by(cid=cid, sid=stuid).first() if link is None: return jsonify(checkinstu) #do checkin status = 'Yes' checkin_time = datetime.datetime.now(timezone('US/Pacific')) checkout_time = '' date = checkin_time.date() #date = date.astimezone(timezone('US/Pacific')) student = Student.query.filter_by(sid=stuid).first() if student is None: checkinstu['error'] = 'Student not exists' return jsonify(checkinstu) stu_name = student.sfirstname + ' ' + student.slastname stu_id = stuid course_code = ccode course_id = cid additional = '' if flag is not None and addi is not None: additional = flag + ': ' + addi newatt = Attendance(checkin_time, checkout_time, date, status, stu_name, stu_id, course_code, course_id, additional) try: exsiting = Attendance.query.filter_by(stu_id=stu_id, course_id=course_id, date=date).first() if exsiting is not None: db.session.delete(exsiting) db.session.commit() db.session.add(newatt) db.session.commit() checkinstu['success'] = True checkinstu['error'] = '' except: checkinstu['error'] = 'Server Error' return jsonify(checkinstu)
def changestatus(): if 'email' not in session: return redirect(url_for('signin')) user = User.query.filter_by(email=session['email']).first() if user is None: return redirect(url_for('signin')) else: form = ChangeStatusForm() courses = Course.query.filter_by(ins_id=user.uid).all() courseChoices = [] for course in courses: courseChoices.append( (course.code, course.code + '-' + course.cname)) form.course.choices = courseChoices studentChoices = [] studentLinks = StudentCourseLink.query.filter_by( cid=courses[0].cid).all() for link in studentLinks: stu = Student.query.filter_by(sid=link.sid).first() sname = stu.sfirstname + ' ' + stu.slastname studentChoices.append((link.sid, str(link.sid) + ' - ' + sname)) form.student.choices = studentChoices if request.method == 'POST': status = form.att.data stu_id = form.student.data date = form.time.data course_code = form.course.data course_id = Course.query.filter_by(code=course_code).first().cid stu2 = Student.query.filter_by(sid=int(stu_id)).first() sname2 = stu2.sfirstname + ' ' + stu2.slastname exsiting = Attendance.query.filter_by(stu_id=stu_id, course_id=course_id, date=date).first() checkin_time = '' checkout_time = '' if exsiting is not None: checkin_time = exsiting.checkin_time checkout_time = exsiting.checkout_time db.session.delete(exsiting) db.session.commit() additional = 'manually checked in' newatt = Attendance(checkin_time, checkout_time, date, status, sname2, stu_id, course_code, course_id, additional) db.session.add(newatt) db.session.commit() return render_template('changestatus.html', form=form)
def attendance_info(): uData = User.query.all() fname=[fn.firstName for fn in uData] lname=[ln.lastName for ln in uData] fullname=zip(fname,lname) if ('user' in session and session['user'] == params['admin_user']): if request.method == 'POST': name = request.form.get('username') date = request.form.get('date') message = request.form.get('message') entry = Attendance(userName=name,date=date,message=message) db.session.add(entry) db.session.commit() flash('Data Saved Successfully') return render_template('attendance.html',params=params,name=fullname)
def checkin(): if 'email' not in session: return redirect(url_for('signin')) user = User.query.filter_by(email=session['email']).first() if user is None: return redirect(url_for('signin')) form = CheckinForm() courses = Course.query.filter_by(ins_id=user.uid).all() courseChoices = [] for course in courses: courseChoices.append((course.code, course.code + '-' + course.cname)) form.course.choices = courseChoices if request.method == 'POST': course_code = form.course.data course = Course.query.filter_by(code=course_code).first() course_name = course.cname cid = course.cid studentLinks = StudentCourseLink.query.filter_by(cid=cid).all() for link in studentLinks: stu = Student.query.filter_by(sid=link.sid).first() stu_id = stu.sid stu_name = stu.sfirstname + ' ' + stu.slastname checkin_time = '' checkout_time = '' additional = '' status = 'No' date = datetime.datetime.now(timezone('US/Pacific')) date = date.date() exsiting = Attendance.query.filter_by(stu_id=stu_id, course_id=cid, date=date).first() if exsiting is not None: db.session.delete(exsiting) db.session.commit() newatt = Attendance(checkin_time, checkout_time, date, status, stu_name, stu_id, course_code, cid, additional) db.session.add(newatt) db.session.commit() context = buildqrjson(True, form.time.data, course_code, course_name) return render_template('qr.html', qrStr=context) return render_template('checkin.html', form=form)
def attendanceRecord(unit_id): cam = cv2.VideoCapture(0) rec = cv2.face.createLBPHFaceRecognizer() rec.load('trainer/trainingdata.yml') font = cv2.FONT_HERSHEY_COMPLEX start_time = time.time() while (True): date_string = time.strftime('%Y-%m-%d-%H:%M') ret, img = cam.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = faceDetect.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) id, conf = rec.predict(gray[y:y + h, x:x + w]) print('Predicted Id = ', id, ' ', conf) profile = getProfile(id) if (profile != None): cv2.putText(img, profile.first_name, (x, y + h + 20), font, 1, (0, 255, 0)) print(profile.first_name) now = time.time() if (now - start_time) < LESSON_TIME: if not LESSON_STUDENTS.get(profile.id, None): LESSON_STUDENTS[profile.id] = profile.first_name attendance = Attendance(unit_id=unit_id, student_id=profile.id) db_session.add(attendance) db_session.commit() else: print('Student [%s] attendance recorded' % profile.id) else: cv2.putText(img, 'New Student', (x - 10, y - 10), font, 1, (0, 255, 0)) image_path = "output/User." + str(id) + "\t" + date_string + ".png" print(image_path) cv2.imwrite(image_path, img[y:y + h, x:x + w]) cv2.imshow("face", img) if (cv2.waitKey(1) == ord('q')): break cam.release() cv2.destroyAllWindows()
def get_class(course_name, class_date): if request.method == 'POST': # check if the post request has the file part if 'file' not in request.files: flash('No file part') return redirect(request.url) file = request.files['file'] # if user does not select file, browser also # submit an empty part without filename if file.filename == '': flash('No selected file') return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) file.save(os.path.join(os.getcwd() + '/' + app.config['UPLOAD_FOLDER'], filename)) people_found = give_match(os.path.join(os.getcwd() + '/' + app.config['UPLOAD_FOLDER'], filename)) username = session.get('username') teacher = Teacher.query.filter_by(username=username).first() course = Course.query.filter_by(teacher=teacher).filter_by(course_name=course_name).first() the_class = Class.query.filter_by(course=course).filter_by(date=class_date).first() for people in people_found: people = people.strip() print(people) student = Student.query.filter_by(full_name=people).first() if student: attendance = Attendance(course.id, the_class.id, student.id, True) db.session.add(attendance) db.session.commit() else: print('Student not detected') return redirect(request.url) else: if session.get('role') == 'teacher': username = session.get('username') teacher = Teacher.query.filter_by(username=username).first() course = Course.query.filter_by(teacher=teacher).filter_by(course_name=course_name).first() if course: the_class = Class.query.filter_by(course=course).filter_by(date=class_date).first() attendance = the_class.attendance return render_template('class.html', course=course, the_class=the_class, attendances=attendance) else: return abort(403) else: return abort(403)
def addattend(): if request.method == 'POST': attend_time = datetime.now() mod_time = datetime.now() user = Users.query.filter_by(username=session['user']).first() course = Courses.query.filter_by(code=request.form['course']).first() section = Courses.query.filter_by( section=request.form['section']).first() key = request.form['key'] print('user {} present in {}', user.id, course.id, course.section, key) #need to validate what the student submits based on what is registered in Courses. how to error handle (try-catch) # build the attendance record and write to db attendee = Attendance(attend_time, mod_time, user.id, course.id, key) db.session.add(attendee) db.session.commit() return redirect(url_for('home'))
def processPhoto(): if request.method == 'GET': att_list = [] today = date.today() start_date = datetime(year=today.year, month=today.month, day=today.day, hour=0, minute=0, second=0, microsecond=0) end_date = datetime(year=today.year, month=today.month, day=today.day, hour=23, minute=59, second=59, microsecond=59) class_photos = Photo.query.filter( Photo.week == 1, Photo.timestamp >= start_date, Photo.timestamp <= end_date).all()[-1] image = class_photos.serialize() path = './app_storage/' + image['img_filename'] print(path) class_photo = face_recognition.load_image_file(path) face_encodings_class = face_recognition.face_encodings(class_photo, num_jitters=2) returned_students = Student.query.filter_by(student_section='G1') for student in returned_students: student = student.serialize() face_encoding_student = student['encodings'] face_encoding_student = literal_eval(face_encoding_student) face_encoding_student = np.asarray(face_encoding_student) results = face_recognition.compare_faces(face_encodings_class, face_encoding_student, tolerance=0.4) print(results) name = student['name'] if True in results: att_list.append({'name': name, 'attendance': 'present'}) stu_id = Student.query.filter_by( student_name=name).first().student_id if id is not None: new_attendance = Attendance(student_id=stu_id, present=1, timestamp=datetime.now()) db.session.add(new_attendance) db.session.commit() else: att_list.append({'name': name, 'attendance': 'absent'}) stu_id = Student.query.filter_by( student_name=name).first().student_id if id is not None: new_attendance = Attendance(student_id=stu_id, present=0, timestamp=datetime.now()) db.session.add(new_attendance) db.session.commit() return render_template('displayer.html', att_list=att_list)
def attendance_1(student_id, group_id): user = get_current_user() teacher = get_current_teacher() try: if not teacher: return redirect(url_for('home')) except AttributeError: return redirect(url_for('home')) if request.method == 'POST': query = Student.query.filter_by(attendance=True).first() query2 = Groups.query.filter_by(id=group_id).first() group = Groups.query.filter( or_(Groups.id == query.group1, Groups.id == query.group2, Groups.id == query.group3)).first() query_teacher = Teachers.query.filter_by(id=group.teacher_1).first() query_teacher1 = Teachers.query.filter_by(id=teacher.id).first() slesh = group.cost / 13 + query.charity boluv = slesh / 2 if query_teacher.salary is None: salery = boluv else: salery = query_teacher.salary + boluv if query.money is None: plus2 = -slesh else: plus2 = query.money - slesh get_date = datetime.now() if teacher.subject == 'Ingliz tili' or teacher.subject == 'Rus tili': get_homework = int(request.form.get('homework')) get_dictonary = int(request.form.get('dictionary')) get_class_activity = int(request.form.get('active')) plus1 = get_homework + get_dictonary + get_class_activity boluv2 = plus1 / 3 add = Attendance(group_id=group_id, student_id=student_id, teacher_id=teacher.id, darsga_tayyorgarligi=get_homework, lugat=get_dictonary, darsda_qatnashishi=get_class_activity, ortacha_baho=boluv2, present=get_date, fan=group.subject, apset=None) db.session.add(add) db.session.commit() print(teacher.subject) elif teacher.subject == 'Matematika' or teacher.subject == 'Tarix' or \ teacher.subject == 'Fizika' or teacher.subject == 'Ona tili va Adabiyot' \ or teacher.subject == 'Biologiya': get_homework2 = int(request.form.get('homework')) get_class_activity2 = int(request.form.get('active')) plus3 = get_homework2 + get_class_activity2 boluv3 = plus3 / 2 add2 = Attendance(group_id=group_id, student_id=student_id, teacher_id=teacher.id, darsga_tayyorgarligi=get_homework2, darsda_qatnashishi=get_class_activity2, ortacha_baho=boluv3, lugat=0, present=get_date, fan=group.subject, apset=None) db.session.add(add2) db.session.commit() print(teacher.subject) Student.query.filter_by(attendance=True).update({ 'money': plus2, 'attendance': False }) Teachers.query.filter_by(id=group.teacher_1).update({'salary': salery}) db.session.commit() query_charity = All_Charity_Sums.query.order_by('bank_charity').first() plus_charity = query_charity.bank_charity + query.charity All_Charity_Sums.query.update({'bank_charity': plus_charity}) db.session.commit() if query2.id == query_teacher1.group1: return redirect(url_for('my_group1')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group2')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group3')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group4')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group5')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group6')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group7')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group8')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group9')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group10')) groups = Groups.query.filter_by(teacher_1=teacher.id).all() for i in groups: student = Student.query.filter( or_(Student.group1 == i.id, Student.group2 == i.id, Student.group3 == i.id)) return render_template('Teacher/my groups.html', user=user, teacher=teacher, groups=groups, students=student) return render_template('Teacher/my groups.html', user=user, teacher=teacher, groups=groups)
def attendance_3(student_id, group_id): user = get_current_user() teacher = get_current_teacher() try: if not teacher: return redirect(url_for('home')) except AttributeError: return redirect(url_for('home')) if request.method == 'POST': query2 = Groups.query.filter_by(id=group_id).first() query = Student.query.filter_by(id=student_id).first() group = Groups.query.filter( or_(Groups.id == query.group1, Groups.id == query.group2, Groups.id == query.group3)).first() query_teacher1 = Teachers.query.filter_by(id=teacher.id).first() query_teacher = Teachers.query.filter_by(id=group.teacher_1).first() slesh = group.cost / 13 boluv = slesh / 2 salery = query_teacher.salary + boluv plus = query.money - slesh + query.charity get_date = datetime.now() Student.query.filter_by(id=student_id).update({'money': plus}) Teachers.query.filter_by(id=group.teacher_1).update({'salary': salery}) db.session.commit() add = Attendance(group_id=group.id, student_id=student_id, teacher_id=teacher.id, present=None, apset=get_date) db.session.add(add) db.session.commit() query_charity = All_Charity_Sums.query.order_by('id').first() plus_charity = query_charity.bank_charity + query.charity All_Charity_Sums.query.update({'bank_charity': plus_charity}) db.session.commit() if query2.id == query_teacher1.group1: return redirect(url_for('my_group1')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group2')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group3')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group4')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group5')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group6')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group7')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group8')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group9')) elif query2.id == query_teacher1.group1: return redirect(url_for('my_group10')) groups = Groups.query.filter_by(teacher_1=teacher.id).all() for i in groups: student = Student.query.filter( or_(Student.group1 == i.id, Student.group2 == i.id, Student.group3 == i.id)) return render_template('Teacher/my groups.html', user=user, teacher=teacher, groups=groups, students=student) return render_template('Teacher/my groups.html', user=user, teacher=teacher, groups=groups)
try: group = Group.objects.get(id=group_id) except DoesNotExist: raise ValidationError("Group Id is invalid: %s" % group_id) attendance_objs = [] for student_id, is_present in attendance_data.items(): if is_present not in VALID_ATTENDANCE_TYPES: raise ValidationError("Invalid attendance type : %s " %(attendance_data)) try: student = User.objects.get(id=student_id) except DoesNotExist, ex: raise DoesNotExist("Student id does not exist: %s" % student_id) attendance_objs.append(Attendance(student=student, present=int(is_present))) for parent_id in student.parent_ids: QueueRequests.enqueue(NOTIFICATION_QUEUE, {'id': parent_id, 'name': student.name}) try: Attendance.objects.insert(attendance_objs) except Exception, ex: logger.error("Error occurred while saving the attendance doc: %s, data: %s, group_id:%s" % (str(ex), attendance_data, group_id)) raise APIException("Error while saving data") return JSONResponse({"stat": "ok"}) class GroupView(APIView): #@authenticate_user
def update_records(request, lms_id): if request.method == 'POST': student = Student.objects.get(lmsId=lms_id) status = "" # Logging In s = requests.session() login_url = 'http://lms.bml.edu.in/login/index.php' dash_url = 'http://lms.bml.edu.in/local/dashboard/index.php' year = student.lmsId.split('.')[2][:2] print '-' * 103 print 'Name : ' + student.lmsId.split( '.')[0].title() + ' ' + student.lmsId.split('.')[1].title() print 'Year : ' + str(year) print 'Batch: ' + student.lmsId.split('.')[2][2:].upper() sem = 'Sem I' login = s.get(login_url) login_html = lxml.html.fromstring(login.content) hidden_inputs = login_html.xpath(r'//form//input[@type="hidden"]') form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs} form['username'] = student.lmsId form['password'] = decode(student.password) response = s.post(login_url, data=form) print '-' * 103 if response.url == dash_url: status = "Login Succees!" print status else: status = 'Could Not Login! Check Details!' print status return render(request, "attendance/error.html", {}) # Searching for attendance link res_html = lxml.html.fromstring(response.content) res_links = res_html.xpath('//a[@class="btn-block "]/@href') attendance_link = '' for i in range(len(res_links)): if 'http://lms.bml.edu.in/mod/attendance/myattendance.php?studentid' in res_links[ i]: attendance_link = res_links[i] # Extracting info from Attendance Page attendance_page = s.get(attendance_link) attendance_html = lxml.html.fromstring(attendance_page.content) subjects = attendance_html.xpath('//a[@class="panel-title"]/text()') total_classes = attendance_html.xpath( '//div[@class="attendance-report-wrapper"]/div[2]/table[1]/tbody[1]/tr[1]/td[1]/text()' ) present = attendance_html.xpath( '//div[@class="attendance-report-wrapper"]/div[2]/table[1]/tbody[1]/tr[1]/td[' '2]/text()') absent = attendance_html.xpath( '//div[@class="attendance-report-wrapper"]/div[2]/table[1]/tbody[1]/tr[1]/td[' '3]/text()') sem_subjects = [] sub_array = [] # Formatting Subjects for i in range(len(subjects)): sem_subjects += [i] num = -1 if "SEM VI" in subjects[i]: num = 6 print "Found 6 sem" + subjects[i] elif "SEM V" in subjects[i]: num = 5 elif "SEM IV" in subjects[i]: num = 4 elif "SEM III" in subjects[i]: num = 3 elif "SEM II" in subjects[i]: num = 2 elif "Sem II" in subjects[i]: num = 2 elif "SEM I" in subjects[i]: num = 1 elif "Sem I" in subjects[i]: num = 1 temp = subjects[i].split(':') if len(temp) > 1: try: subjects[i] = temp[2].strip()[:-12] except IndexError: subjects[i] = subjects[i].strip() else: subjects[i] = temp[0].split('-')[0] sub_array.append({'name': subjects[i], 'sem': num}) k = 0 subjects_array = [] for subject in sub_array: try: test = Subjects.objects.get(name=subject['name']) except Exception: test = Subjects(name=subject['name'], sem=subject['sem']) test.save() pass k += 1 subjects_array.append(test) # Printing Details print '-' * 103 print '{0:50}||{1:5}|{2:7}|{3:6}|{4:7}|{5:6}|{6:6}| Set ah? '.format( 'Course', 'Total', 'Present', 'Absent', ' %', 'For 80', 'For 75') print '-' * 103 for i in range(len(sem_subjects)): k = sem_subjects[i] if total_classes[k] != '0': perc = (float(present[k])) / float(total_classes[k]) * 100 else: perc = -1 comment = '' if perc >= 80: comment = '{0:6}|{1:6}| SET!'.format(' SET', ' SET') elif perc == -1: perc = 0 comment = '{0:6}|{1:6}| SET!'.format(' SET', ' SET') elif perc >= 75: classes80 = int(absent[k]) * 5 - int(total_classes[k]) comment = '{0:4d} |{1:6}| uh?'.format(classes80, ' SET') else: classes80 = int(absent[k]) * 5 - int(total_classes[k]) classes75 = int(absent[k]) * 4 - int(total_classes[k]) comment = '{0:4d} |{1:4d} | Dhadel!'.format( classes80, classes75) print u'{0:50}||{1:4d} |{2:5d} |{3:4d} |{4:6.2f}%|{5:15}'.format( subjects[k], int(total_classes[k]), int(present[k]), int(absent[k]), float(perc), comment) try: temp = Attendance.objects.filter( student__lmsId=student.lmsId).get( subject__name=subjects[k]) # print temp temp.present_class = present[k] temp.absent_class = absent[k] temp.total_class = total_classes[k] temp.for75 = int(absent[k]) * 4 - int(total_classes[k]) temp.for80 = int(absent[k]) * 5 - int(total_classes[k]) temp.save() except Exception: temp = Attendance( student=student, subject=subjects_array[k], present_class=present[k], absent_class=absent[k], total_class=total_classes[k], for75=int(absent[k]) * 4 - int(total_classes[k]), for80=int(absent[k]) * 5 - int(total_classes[k])) temp.save() print '-' * 103 student.last_updated = timezone.now() student.cur_sem = max(list_of_sems(student)) print student.name + " --------- " + str(student.cur_sem) student.save() print student.last_updated # Loggin Out page_html = lxml.html.fromstring(response.content) logout = page_html.xpath(r'//a[@title = "Log out"]/@href') response = s.post(logout[0]) if response.url == 'http://lms.bml.edu.in/': status = 'Logout Success!' print status else: status = 'Logout Failed!' print status print '-' * 103 return redirect('/attendance/' + student.lmsId + "/" + str(student.cur_sem) + "/#focus") return HttpResponse("Failure!")