コード例 #1
0
def add_class():
    tid = flask.session['id']
    tm = teachers_model.Teachers(tid)

    if request.method == 'GET':
        return render_template('add_class.html', error=None)

    elif request.method == 'POST':
        # first check that all unis are valid
        um = users_model.Users()
        for uni in request.form['unis'].split('\n'):
            uni = uni.strip('\r')
            # always reads at least one empty line from form
            if not uni:
                continue
            if not um.is_valid_uni(uni):
                invalid_uni = "Invalid UNI's entered, please recreate the class"
                return render_template('add_class.html', error=invalid_uni)

        course_name = request.form['classname']
        cid = tm.add_course(course_name)

        if cid == -1:
            coursename_exists = "There is already a course by this name that you teach"
            return render_template('add_class.html', error=coursename_exists)

        cm = courses_model.Courses(cid)


        for uni in request.form['unis'].split('\n'):
            uni = uni.strip('\r')
            cm.add_student(uni)

        return flask.redirect(flask.url_for('main_teacher'))
コード例 #2
0
    def test_a_teacher(self):

        imhere.app.testing = True
        imhere.app.secret_key = str(uuid.uuid4())
        self.app = imhere.app.test_client()

        teacher_instance = teachers_model.Teachers(TEACHER_ACCOUNT_ID)
        classname_1 = "COMS 4111"
        self.__class__.cid_1 = teacher_instance.add_course(classname_1)
        # course_instance_1 = courses_model.Courses(self.__class__.cid_1)
        #course_instance_1.add_student('xz2222')

        classname_2 = "COMS 4112"
        self.__class__.cid_2 = teacher_instance.add_course(classname_2)

        course_instance_2 = courses_model.Courses(self.__class__.cid_2)
        self.__class__.sid_2 = course_instance_2.add_student('xz2222')

        with imhere.app.test_client() as t_t:
            # log in with teacher account
            with t_t.session_transaction() as session_teacher:
                self.login(session_teacher, TEACHER_ACCOUNT,
                           TEACHER_ACCOUNT_ID)
                session_teacher['is_teacher'] = True
            rv = t_t.get('/teacher/')
            self.assertEqual(200, rv.status_code)
コード例 #3
0
def main_teacher():
    tid = flask.session['id']
    if request.method == 'GET':
        index = index_model.Index(tid)
        if (not index.is_teacher()):
            return render_template('error.html')
    tm = teachers_model.Teachers(tid)
    ssm = sessions_model.Sessions()
    if request.method == 'POST':
        if "close" in request.form.keys():
            cid = request.form["close"]
            ssm.open_session(cid)
            ssm.close_window()
        elif "open" in request.form.keys():
            cid = int(request.form["open"])
            new_seid = ssm.open_session(cid)
            ssm.open_window(new_seid)
            course = courses_model.Courses()
            students = course.get_students_sids(cid)
            for student in students:
                sm = students_model.Students(student['sid'])
                sm.insert_attendance_record(new_seid)
    courses = tm.get_courses_with_session()
    empty = True if len(courses) == 0 else False
    context = dict(data=courses)
    return render_template('main_teacher.html', empty=empty, **context)
コード例 #4
0
def main_teacher():
    tm = teachers_model.Teachers(flask.session['id'])

    if request.method == 'POST':
        cm = courses_model.Courses()
        if "close" in request.form.keys():
            cid = request.form["close"]
            cm.cid = cid
            cm.close_session(cm.get_active_session())
        elif "open" in request.form.keys():
            cid = request.form["open"]
            cm.cid = cid
            cm.open_session()

    courses = tm.get_courses_with_session()
    empty = True if len(courses) == 0 else False
    context = dict(data=courses)

    disable_rest_open_windows = False
    for item in context['data']:
        if item['active'] == 1:
            disable_rest_open_windows = True

    return render_template('main_teacher.html',
                           empty=empty,
                           disable_rest_open_windows=disable_rest_open_windows,
                           **context)
コード例 #5
0
ファイル: imhere.py プロジェクト: jeb2239/flask_test_heroku
def update_session(seid):
    sm = sessions_model.Sessions(g.conn, seid)
    tm = teachers_model.Teachers(g.conn, flask.session['id'])

    action = request.form['action']
    sid = request.form['sid'] if 'sid' in request.form.keys() else None

    stm = students_model.Students(g.conn, sid)

    if action == 'mark_present':
        stm.insert_attendance_record(seid)

    elif action == 'mark_absent':
        sm.remove_attendance_record(sid)

    elif action == 'approve':
        status = 1
        tm.update_change_request(int(status), int(seid), int(sid))
        stm.insert_attendance_record(seid)

    elif action == 'deny':
        status = 0
        tm.update_change_request(int(status), int(seid), int(sid))

    elif action == 'delete_session':
        sm.delete_session()
        return flask.redirect('/teacher/')

    session = sm.get_session()[0]
    attendance = sm.get_attendance_record()

    return render_template('session.html',
                           session=session,
                           attendance=attendance)
コード例 #6
0
ファイル: imhere.py プロジェクト: jeb2239/flask_test_heroku
def add_class():
    tm = teachers_model.Teachers(g.conn, flask.session['id'])

    if request.method == 'GET':
        return render_template('add_class.html')

    elif request.method == 'POST':
        # first check that all unis are valid
        um = users_model.Users(g.conn)
        for uni in request.form['unis'].split('\n'):
            uni = uni.strip('\r')
            # always reads at least one empty line from form
            if not uni:
                continue
            if not um.is_valid_uni(uni):
                return render_template('add_class.html', invalid_uni=True)

        # then create course and add students to course
        course_name = request.form['classname']
        cid = tm.add_course(course_name)
        cm = courses_model.Courses(g.conn, cid)

        for uni in request.form['unis'].split('\n'):
            uni = uni.strip('\r')
            cm.add_student(uni)

        return flask.redirect(flask.url_for('main_teacher'))
コード例 #7
0
def filled_db():
    imhere.app.secret_key = str(uuid.uuid4())
    
    um = users_model.Users()
    um.get_or_create_user(stu)
    um.get_or_create_user(newt)

    m = model.Model()
    ds = m.get_client()
        

    key = ds.key('student')
    entity = datastore.Entity(
        key=key)
    entity.update({
        'sid': stu['id'],
        'uni': 'cs4156'
    })
    ds.put(entity)

    key = ds.key('teacher')
    entity = datastore.Entity(
        key=key)
    entity.update({
        'tid': newt['id']
    })
    ds.put(entity)

    tm = teachers_model.Teachers(newt['id'])
    course_name = 'Writing'
    cid = tm.add_course(course_name)
    cm = courses_model.Courses(cid)
    cm.add_student('cs4156')
    yield cid
コード例 #8
0
def remove_class():
    tm = teachers_model.Teachers(flask.session['id'])

    # show potential courses to remove on get request
    if request.method == 'GET':
        courses = tm.get_courses()
        context = dict(data=courses)
        return render_template('remove_class.html', **context)

    # remove course by cid
    elif request.method == 'POST':
        cid = request.form['cid']
        tm.remove_course(cid)
        return flask.redirect(flask.url_for('main_teacher'))
コード例 #9
0
def test_add_course(db):
    douglas = teachers_model.Teachers(db, 4)

    assert len(douglas.get_courses()) == 1

    cid = douglas.add_course('Mining')

    query = 'SELECT MAX(cid) from courses'
    res = db.execute(query)
    blah = []
    for b in res:
        blah.append(b)
    assert cid == blah[0]['max']
    # assert cid == 5  # next available cid

    assert len(douglas.get_courses()) == 2
コード例 #10
0
def test_get_courses(db):
    douglas = teachers_model.Teachers(db, 4)

    courses_list = douglas.get_courses()

    assert len(courses_list) == 1
    assert type(courses_list) is list

    # len of 2 because we're selecting courses.cid and courses.name
    assert len(courses_list[0]) == 2
    assert type(courses_list[0]) is sqlalchemy.engine.RowProxy

    # check for each key that we selected
    rowproxy = courses_list[0]
    assert 'cid' in rowproxy
    assert 'name' in rowproxy
    assert 'notselected' not in rowproxy
コード例 #11
0
ファイル: imhere.py プロジェクト: jeb2239/flask_test_heroku
def main_teacher():
    tm = teachers_model.Teachers(g.conn, flask.session['id'])

    if request.method == 'POST':
        cm = courses_model.Courses(g.conn)
        if "close" in request.form.keys():
            cid = request.form["close"]
            cm.cid = cid
            cm.close_session(cm.get_active_session())
        elif "open" in request.form.keys():
            cid = request.form["open"]
            cm.cid = cid
            cm.open_session()

    courses = tm.get_courses_with_session()
    empty = True if len(courses) == 0 else False
    context = dict(data=courses)

    return render_template('main_teacher.html', empty=empty, **context)
コード例 #12
0
def test_remove_course(db):
    douglas = teachers_model.Teachers(db, 4)

    assert len(douglas.get_courses()) == 2

    # remove mining class
    query = 'SELECT MAX(cid) from courses'
    res = db.execute(query)
    blah = []
    for b in res:
        blah.append(b)
    mining_cid = blah[0]['max']

    douglas.remove_course(mining_cid)
    assert len(douglas.get_courses()) == 1

    # remove imaginary class
    douglas.remove_course(-1)
    assert len(douglas.get_courses()) == 1
コード例 #13
0
def test_get_courses_with_session(db):
    douglas = teachers_model.Teachers(db, 4)

    courses_list_with_session = douglas.get_courses_with_session()

    assert len(courses_list_with_session) == 1
    assert type(courses_list_with_session) is list

    # len of 4 because we're selecting courses.cid, name, active, secret
    assert len(courses_list_with_session[0]) == 4
    assert type(courses_list_with_session[0]) is sqlalchemy.engine.RowProxy

    # check for each key that we selected
    rowproxy = courses_list_with_session[0]
    assert 'cid' in rowproxy
    assert 'name' in rowproxy
    assert 'active' in rowproxy
    assert 'secret' in rowproxy

    assert ('active', 1) in rowproxy.items()
    assert ('secret', '0000') in rowproxy.items()
コード例 #14
0
ファイル: imhere.py プロジェクト: jeb2239/flask_test_heroku
def view_requests():
    tm = teachers_model.Teachers(g.conn, flask.session['id'])
    if request.method == 'GET':
        results = tm.get_change_requests()
        context = dict(data=results)
        return render_template('view_requests.html', **context)
    elif request.method == 'POST':
        if 'approve' in request.form.keys():
            iden = request.form['approve'].split()
            seid = int(iden[0])
            sid = int(iden[1])
            sm = students_model.Students(g.conn, sid)
            sm.insert_attendance_record(seid)
            tm.update_change_request(1, seid, sid)
        elif 'deny' in request.form.keys():
            iden = request.form['deny'].split()
            seid = int(iden[0])
            sid = int(iden[1])
            tm.update_change_request(-1, seid, sid)
        results = tm.get_change_requests()
        context = dict(data=results)
        return render_template('view_requests.html', **context)
コード例 #15
0
def teacher_view_excuses():
    #get courses
    tid = flask.session['id']
    teacher = teachers_model.Teachers(tid)
    courses_taught = teacher.get_courses() 

    #get sessions for selected course id and submitted excuses
    context = dict(data=[])
    if not courses_taught:
        return render_template("teacher_view_excuses.html",
                               courses_taught=courses_taught,
                               **context)

    if request.method == 'POST':
        cid = request.form['cid']
    else:
        cid = courses_taught[0]['cid']
    course = courses_model.Courses(cid)
    sessions = course.get_sessions()

    #get unis and excuse messages for all sessions
    sm = students_model.Students(1)
    results = []
    for s in sessions:
        excuses = arm.Attendance_Records().get_excuses_multi(seid=s['seid'])
        if excuses:
            for e in excuses:
                sm.sid = e['sid']
                e['uni'] = sm.get_uni()
            s['excuses'] = excuses
            results.append(s)
       
    context['data'] = results
    context['course_name'] = course.get_course_name()

    return render_template("teacher_view_excuses.html",
                           courses_taught=courses_taught,
                           **context)
コード例 #16
0
def view_class():
    tm = teachers_model.Teachers(flask.session['id'])
    if request.method == 'GET':
        flask.redirect(flask.url_for('main_teacher'))

    elif request.method == 'POST':
        cm = courses_model.Courses()

        if 'close' in request.form.keys():
            cid = request.form['close']
            cm.cid = cid
            cm.close_session(cm.get_active_session())
        elif 'open' in request.form.keys():
            cid = request.form['open']
            cm.cid = cid
            cm.open_session()
        else:
            cid = request.form['cid']
            cm.cid = cid

        res = 0
        uni = None
        if 'add_student' in request.form.keys():
            uni = request.form['add_student']
            res = cm.add_student(uni)
        elif 'remove_student' in request.form.keys():
            uni = request.form['remove_student']
            res = cm.remove_student(uni)

        course_name = cm.get_course_name()
        secret = cm.get_secret_code()

        # Get class timestamp
        timestamp = cm.get_timestamp()

        # Get class coordinate
        coordinate = cm.get_coordinate()

        num_sessions = cm.get_num_sessions()
        students = cm.get_students()
        students_with_ar = []
        for student in students:
            sm = students_model.Students(student['id'])
            student_uni = sm.get_uni()
            num_ar = sm.get_num_attendance_records(cid)
            num_late = sm.get_num_late_attendance_records(cid)
            students_with_ar.append([student, student_uni, num_ar, num_late])

        context = dict(students=students_with_ar)
        if timestamp:
            new_timestamp = timestamp+timedelta(hours=-4)
        else:
            new_timestamp = "NO TIME."


        courses = tm.get_courses_with_session()
        context_course = dict(data=courses)

        disable_rest_open_windows = False
        for item in context_course['data']:
            if item['active'] == 1:
                disable_rest_open_windows = True

        return render_template(
                'view_class.html',
                cid=cid,
                secret=secret,
                timestamp=new_timestamp,
                coordinate=coordinate,
                course_name=course_name,
                num_sessions=num_sessions,
                uni=uni,
                disable_rest_open_windows=disable_rest_open_windows,
                res=res,
                **context)