def submitRegradeRequest(): if not is_logged_in(): return dict(success=False) if request.method == "GET": return dict(success=False) email = request.get_json().get("email") assignment = request.get_json().get("assignment") with connect_db() as db: status = db( "SELECT status FROM regrade_requests WHERE courseCode=%s AND email=%s AND assignment=%s", [get_course(), email, assignment], ).fetchone() if status: status = status[0] if status and status not in ("needs followup"): return dict(success=False) backup_id = request.get_json().get("backup_id") description = request.get_json().get("description") ta = request.form.get("ta") status = "requested" with connect_db() as db: db( """INSERT INTO regrade_requests ( courseCode, email, assignment, backup_id, description, assigned_to, status ) VALUES (%s, %s, %s, %s, %s, %s, %s)""", [ get_course(), email, assignment, backup_id, description, ta, status ], ) return dict(success=True)
def index(): if not is_logged_in(): return login() return html(""" Select course: <form method="post" action="/view_course"> <input placeholder="cs61a" name="course"> <input type="submit" value="Login"> </form>""")
def query(): try: if is_logged_in(): user = get_user() email = user["email"] target = request.args.get("target", None) if is_staff(get_course()): if target: email = target else: all_students = [] with connect_db() as db: lookup = db( "SELECT shortData FROM students WHERE courseCode=%s", [get_course()], ).fetchall() for row in lookup: parsed = json.loads(row[0]) all_students.append(parsed) return jsonify({ "success": True, "isStaff": True, "allStudents": all_students, "email": user["email"], "name": user["name"], "lastUpdated": last_updated(), }) with connect_db() as db: [short_data, data] = db( "SELECT shortData, data FROM students WHERE courseCode=%s AND email=%s", [get_course(), email], ).fetchone() [header ] = db("SELECT header FROM headers WHERE courseCode=%s", [get_course()]).fetchone() short_data = json.loads(short_data) data = json.loads(data) header = json.loads(header) return jsonify({ "success": True, "header": header, "data": data, "email": short_data["Email"], "name": short_data["Name"], "SID": short_data["SID"], "lastUpdated": last_updated(), }) else: return jsonify({"success": False, "retry": True}) except Exception: pass return jsonify({"success": False, "retry": False})
def canRequestRegrade(): if not is_logged_in(): return dict(canRegrade=False) email = request.args.get("email", "") assignment = request.args.get("name", "") with connect_db() as db: status = db( "SELECT status FROM regrade_requests WHERE courseCode=%s AND email=%s AND assignment=%s", [get_course(), email, assignment], ).fetchone() if status: status = status[0] return dict(canRegrade=(not status or status in ("needs followup")))
def view_course(course=None): if not course: course = request.form["course"] return redirect(url_for("canonical_view_course", course=course)) if not is_logged_in(): return login() email = get_user()["email"] if not is_admin(email, course): abort(403) with connect_db() as db: apps = db( "SELECT domain, app, status FROM hosted_apps WHERE course=(%s)", [course]).fetchall() return html(f""" <h2>Hosted Apps for {format_coursecode(course)}</h2> {"<p>".join(f"<code>{domain}</code> ({app}) - {status}" for domain, app, status in apps)} """)
def query(): try: if is_logged_in(): user = get_user() email = user["email"] target = request.args.get("target", None) admin = True if DEV else is_admin(course=get_course(), email=email) if is_staff(get_course()): if target: email = target else: show_all_students = has_access_to_all_grades() students = [] with connect_db() as db: lookup = db( "SELECT shortData FROM students WHERE courseCode=%s", [get_course()], ).fetchall() for row in lookup: parsed = json.loads(row[0]) if show_all_students or parsed.get("TA", "") in ( "", email, ): students.append(parsed) return jsonify({ "success": True, "isStaff": True, "isAdmin": admin, "canExportGrades": show_all_students, "allStudents": students, "email": user["email"], "name": user["name"], "lastUpdated": last_updated(), }) with connect_db() as db: [short_data, data] = db( "SELECT shortData, data FROM students WHERE courseCode=%s AND email=%s", [get_course(), email], ).fetchone() [header ] = db("SELECT header FROM headers WHERE courseCode=%s", [get_course()]).fetchone() short_data = json.loads(short_data) if not (email == user["email"] or admin or short_data.get( "TA", "") in ("", user["email"])): return jsonify({"success": False, "retry": False}) data = json.loads(data) header = json.loads(header) return jsonify({ "success": True, "header": header, "data": data, "email": short_data["Email"], "name": short_data["Name"], "SID": short_data["SID"], "ta": short_data.get("TA", ""), "lastUpdated": last_updated(), }) else: return jsonify({"success": False, "retry": True}) except Exception: pass return jsonify({"success": False, "retry": False})