def admin(): admin = validate_admin() # change back to admin view admin.proxy = admin.stuid session.commit() homeworks = get_homework() categories = session.query(Category).all() users = get_users() guests = [] admins = [] for user in users: if user.type == "guest": guests.append(user) elif user.type == "admin": admins.append(user) gradebook, max_scores = get_gradebook() return render_template("admin/index.html", homeworks=homeworks, guests=guests, admins=admins, categories=categories, gradebook=gradebook, max_scores=max_scores, options=options)
def users(): return json.dumps({'success': 'success', 'results': query.get_users()})
def get_gradebook(): """ helper function that gets the gradebook """ user = validate_user() if user.type == "admin": homeworks = get_homework() else: homeworks = get_homeworks_before() # get all the grades, put them into a gradebook gradebook, max_scores = {}, {} for user in get_users(): if user.type == "student": gradebook[user] = {} for homework in homeworks: grades = session.query(Grade).filter_by(hw_id=homework.id).all() scores = [] for g in grades: if g.student not in gradebook: continue gradebook[g.student][homework.id] = g try: scores.append(float(g.score)) except: pass if homework.max_score is not None: max_scores[homework.id] = homework.max_score elif scores: max_scores[homework.id] = max(scores) else: max_scores[homework.id] = None gradebook = gradebook.items() gradebook.sort(key=lambda entry: convert_to_last_name(entry[0].name)) categories = session.query(Category).all() # calculate total scores by category, taking into account excused assignments for student, grades in gradebook: earned = {c: [] for c in categories} possible = {c: [] for c in categories} for hw in homeworks: if max_scores[hw.id] is None or max_scores[hw.id] == 0: continue possible[hw.category].append(max_scores[hw.id]) if hw.id in grades: if grades[ hw. id].excused: # if student was excused from assignment possible[hw.category].remove( max_scores[hw.id]) # don't count it against else: try: earned[hw.category].append(float(grades[hw.id].score)) except: earned[hw.category].append(0) else: earned[hw.category].append(0) # add grades to gradebook grades["overall"] = 0. for category, poss in possible.iteritems(): if len(poss) == 0: grades[category.name] = "0 / 0" continue # sort scores by benefit to grade if dropped e, p = sum(earned[category]), sum(poss) if len(poss) > category.drops + 1: grades_sorted = sorted(zip(earned[category], poss), key=lambda x: -(e - x[0]) / (p - x[1])) grades_sorted = grades_sorted[category.drops:] out = zip(*grades_sorted) else: out = earned[category], poss grades[category.name] = "%0.1f / %0.1f" % (sum(out[0]), sum( out[1])) if sum(out[1]) > 0: grades["overall"] += category.weight * sum(out[0]) / sum( out[1]) return gradebook, max_scores
def get_gradebook(): """ helper function that gets the gradebook """ user = validate_user() if user.type == "admin": homeworks = get_homework() else: homeworks = get_homeworks_before() # get all the grades, put them into a gradebook gradebook, max_scores = {}, {} for user in get_users(): if user.type == "student": gradebook[user] = {} for homework in homeworks: grades = session.query(Grade).filter_by(hw_id = homework.id).all() scores = [] for g in grades: if g.student not in gradebook: continue gradebook[g.student][homework.id] = g try: scores.append(float(g.score)) except: pass if homework.max_score is not None: max_scores[homework.id] = homework.max_score elif scores: max_scores[homework.id] = max(scores) else: max_scores[homework.id] = None gradebook = gradebook.items() gradebook.sort(key=lambda entry: convert_to_last_name(entry[0].name)) categories = session.query(Category).all() # calculate total scores by category, taking into account excused assignments for student, grades in gradebook: earned = {c: [] for c in categories} possible = {c: [] for c in categories} for hw in homeworks: if max_scores[hw.id] is None or max_scores[hw.id] == 0: continue possible[hw.category].append(max_scores[hw.id]) if hw.id in grades: if grades[hw.id].excused: # if student was excused from assignment possible[hw.category].remove(max_scores[hw.id]) # don't count it against else: try: earned[hw.category].append(float(grades[hw.id].score)) except: earned[hw.category].append(0) else: earned[hw.category].append(0) # add grades to gradebook grades["overall"] = 0. for category, poss in possible.iteritems(): if len(poss) == 0: grades[category.name] = "0 / 0" continue # sort scores by benefit to grade if dropped e, p = sum(earned[category]), sum(poss) if len(poss) > category.drops + 1: grades_sorted = sorted(zip(earned[category], poss), key=lambda x: -(e-x[0])/(p-x[1])) grades_sorted = grades_sorted[category.drops:] out = zip(*grades_sorted) else: out = earned[category], poss grades[category.name] = "%0.1f / %0.1f" % (sum(out[0]), sum(out[1])) if sum(out[1]) > 0: grades["overall"] += category.weight * sum(out[0]) / sum(out[1]) return gradebook, max_scores
import sendmail import queries import json engine = create_engine( 'postgresql+psycopg2://postgres:postgres@localhost:5432/project1') conn = engine.connect() conn.execute( text("LISTEN election_updates").execution_options(autocommit=True)) print("Waiting for notifications on channels 'election_updates'") while 1: if select.select([conn.connection], [], [], 5) == ([], [], []): print("Timeout") else: conn.connection.poll() while conn.connection.notifies: notify = conn.connection.notifies.pop() print("Got NOTIFY:", notify.pid, notify.channel, notify.payload) data = json.loads(notify.payload) state = (data["state"]) pc_name = (data["pc_name"]) df = queries.get_users(state, pc_name) # print(str(notify.payload)) for email in list(df["email"]): sendmail.send_mail(email, "Update of election", str(notify.payload)) # f.write("Got NOTIFY:") # f.close()