def add_to_wishlist(course, title): try: item = Wishlist(email=g.user.email, course=course, title=title) db.session.add(item) db.session.commit() return jsonify(prepare_json_response(message="OK", success=True)) except: db.session.rollback() return jsonify(prepare_json_response(message="FAILURE", success=False))
def delete_from_wishlist(course, title): try: item = db.session.query(Wishlist).filter_by(email=g.user.email, course=course, title=title) if item: item.delete() db.session.commit() return jsonify(prepare_json_response(message="OK", success=True)) except: db.session.rollback() return jsonify(prepare_json_response(message="FAILURE", success=False))
def get_wishlist(): q = (db.session.query(Wishlist).filter_by(email=g.user.email).order_by( Wishlist.course)) payload = [a.serialize for a in q.all()] data = {'results': payload} return jsonify(prepare_json_response(message="OK", success=True, data=data))
def new_user(): if request.method == 'OPTIONS': return None email = request.json.get('email') password = request.json.get('password') first_name = request.json.get('firstName') last_name = request.json.get('lastName') account_type = request.json.get('accountType') if (email is None or password is None or first_name is None or last_name is None or account_type is None): abort(400) if User.query.filter_by(email=email).first() is not None: abort(400, 'Email already in use.') user = User(email=email, first_name=first_name, last_name=last_name, account_type=account_type) user.hash_password(password) db.session.add(user) db.session.commit() user.generate_auth_token(app.config['TOKEN_MAX_AGE']) return jsonify( prepare_json_response( message="OK", success=True, data=user.serialize ) )
def by_subject_no_stream(subject): q = (db.session.query(Courses).filter( (Courses.subject.ilike(subject))).order_by(Courses.catalog_nbr)) payload = [a.serialize for a in q.all()] data = {'results': payload} return jsonify(prepare_json_response(message="OK", success=True, data=data))
def auto_schedule(): data = { 'results': automated(g.user), 'starting_quarter': g.user.starting_quarter } return jsonify(prepare_json_response(message="OK", success=True, data=data))
def verify(): return jsonify( prepare_json_response( message=None, success=True ) )
def all_subjects(stream): sq = (db.session.query(TermCourses.course_id).filter_by(stream=stream)) q = (db.session.query(Courses.subject).filter(Courses.id.in_(sq)).order_by( Courses.subject)) payload = [{'subject': a.subject} for a in q.distinct()] data = {'results': payload} return jsonify(prepare_json_response(message="OK", success=True, data=data))
def get_user(): return jsonify( prepare_json_response( message="OK", success=True, data=g.user.serialize ) )
def delete_account(email): db.session.query(User).filter_by(email=email).delete() return jsonify( prepare_json_response( message="OK", success=True ) )
def token(): token = g.user.generate_auth_token(app.config['TOKEN_MAX_AGE']) return jsonify( prepare_json_response( message=None, success=True, data=g.user.serialize ) )
def by_subject(subject, stream): sq = (db.session.query(TermCourses.course_id).filter_by(stream=stream)) q = (db.session.query(Courses).filter( Courses.id.in_(sq) & (Courses.subject.ilike(subject))).order_by(Courses.catalog_nbr)) payload = [a.serialize for a in q.all()] data = {'results': payload} return jsonify(prepare_json_response(message="OK", success=True, data=data))
def forbidden401(error): """ Renders 401 response :returns: JSON :rtype: flask.Response """ return jsonify( prepare_json_response(message="Error 401: Unauthorized", success=False, data=error.description)), 401
def forbidden400(error): """ Renders 400 response :returns: JSON :rtype: flask.Response """ return jsonify( prepare_json_response(message="Error 400: Bad request", success=False, data=error.description)), 400
def by_learning_domain_number(learning_domain, number, stream): sq = (db.session.query(TermCourses.course_id).filter_by(stream=stream)) q = (db.session.query(Courses).filter( Courses.id.in_(sq) & (Courses.learning_domain == learning_domain) & (Courses.catalog_nbr.like(number + '%'))).order_by( Courses.subject, Courses.catalog_nbr)) payload = [a.serialize for a in q.all()] data = {'results': payload} return jsonify(prepare_json_response(message="OK", success=True, data=data))
def token(): if request.method == 'OPTIONS': return None token = g.user.generate_auth_token(app.config['TOKEN_MAX_AGE']) return jsonify( prepare_json_response( message=None, success=True, data=g.user.serialize ) )
def search_courses(query): query = query.strip() data = {} for idx, category in enumerate(courses.get()): for course in category.keys(): if query in course and data.get(course) is None: course_data = courses.child(str(idx)).child(course).get() data[course] = course_data return jsonify(prepare_json_response(message="OK", success=True, data=data))
def by_class(subject, number, stream): base_url = ( 'https://offices.depaul.edu/_layouts/DUC.SR.ClassSvc/DUClassSvc.ashx' '?action=getclasses&strm=%s&subject=%s&catalog_nbr=%s') url = base_url % (stream, subject.upper(), number) payload = requests.get(url).json() for p in payload: ratings = Professors.get_ratings(p['first_name'], p['last_name']) p.update(ratings) data = {'results': payload} return jsonify(prepare_json_response(message="OK", success=True, data=data))
def help(): func_list = [] for rule in app.url_map.iter_rules(): if rule.endpoint != "static": methods = rule.methods methods.discard("OPTIONS") methods.discard("HEAD") func_list.append('%s - %s' % (rule.rule, ' '.join(methods))) return jsonify( prepare_json_response(message="All URL endpoints", success=True, data=sorted(func_list)))
def internal_server_error(error): """ Renders 500 response :returns: JSON :rtype: flask.Response """ if not error.description: error.description = "Error 500: Internal server error" return jsonify( prepare_json_response(message=error.description, success=False, data=None)), 405
def not_found(error): """ Renders 405 response :returns: JSON :rtype: flask.Response """ if not error.description: error.description = "Error 405: Method not allowed" return jsonify( prepare_json_response(message=error.description, success=False, data=None)), 405
def forbidden(error): """ Renders 403 response :returns: JSON :rtype: flask.Response """ if not error.description: error.description = "Error 403: Forbidden" return jsonify( prepare_json_response(message=error.description, success=False, data=None)), 403
def help(): """ Returns a list of available URLs. :returns: A JSON response object :rtype: flask.Response """ # func_list = {} func_list = [] for rule in app.url_map.iter_rules(): if rule.endpoint != "static": func_list.append(rule.rule) return jsonify( prepare_json_response(message="All URL endpoints", success=True, data=func_list))
def get_accounts(): q = (db.session.query(User) .filter(User.account_type != 2) .order_by(User.first_name, User.last_name)) payload = [a.serialize for a in q.all()] data = { 'columns': payload[0].keys() if payload else [], 'rows': payload if payload else [] } return jsonify( prepare_json_response( message="OK", success=True, data=data ) )
def update_user(): if request.method == 'OPTIONS': return None email = request.json.get('email') first_name = request.json.get('first_name') last_name = request.json.get('last_name') undergraduate_degree = request.json.get('undergraduate_degree') graduate_degree = request.json.get('graduate_degree') automation = request.json.get('automation') graduate_degree_concentration = request.json.get( 'graduate_degree_concentration') elective = request.json.get('elective') number_credit_hours = request.json.get('number_credit_hours') starting_quarter = request.json.get('starting_quarter') disallow_online = request.json.get('disallow_online') not_null = [email, first_name, last_name] if any(n is None for n in not_null): abort(400) g.user.email = email g.user.first_name = first_name g.user.last_name = last_name g.user.undergraduate_degree = undergraduate_degree g.user.graduate_degree = graduate_degree g.user.automation = automation g.user.graduate_degree_concentration = graduate_degree_concentration g.user.elective = elective g.user.number_credit_hours = number_credit_hours g.user.starting_quarter = starting_quarter g.user.disallow_online = disallow_online db.session.commit() return jsonify( prepare_json_response( message="OK", success=True, data=g.user.serialize ) )
def get_fastpath_list(CourseID, num_courses): concentration_courses = courses.child(CourseID) data = concentration_courses.get() lis = [] reqs = sorted(data.keys()) print("reqs are:", reqs) while len(reqs) > len(lis): for course in reqs: # Note: course has whitespace if course not in lis: try: # WIP, preprocessing prereq_str = data[course]["Prereq"] prereq_str = prereq_str.replace(":", "").replace(".", "") prereq_str = prereq_str.replace("PREREQUISITE(S)", "") prereq_str = prereq_str.replace("Prerequisite(s)", "") prereq_str = prereq_str.replace("or consent of instructor", "").strip() # perform parse step tree = parse(prereq_str) # no parse error occurred, so string is in lang, so if eval_tree(course, tree, lis, reqs): print("success for", course, prereq_str, lis) lis.append(course) except Exception: # print("Adding, but error on", course, prereq_str, lis, reqs) lis.append(course) lis = [{ course: courses.child(CourseID).child(course).get() } for course in lis] num_courses_int = int(num_courses) split_path = [ lis[i:i + num_courses_int] for i in range(0, len(lis), num_courses_int) ] print split_path return jsonify( prepare_json_response(message="OK", success=True, data=split_path))
def update_user(): if request.method == 'OPTIONS': return None email = request.json.get('email') first_name = request.json.get('firstName') last_name = request.json.get('lastName') if email is None or first_name is None or last_name is None: abort(400) g.user.email = email g.user.first_name = first_name g.user.last_name = last_name db.session.commit() return jsonify( prepare_json_response( message="OK", success=True, data=g.user.serialize ) )
def index(): return jsonify( prepare_json_response( message="Don't know where to go? Query /help for more information.", success=True, data=None))
def get_concentration_courses(CourseID): concentration_courses = courses.child(CourseID) data = concentration_courses.get() return jsonify(prepare_json_response(message="OK", success=True, data=data))
def all_terms(): q = (db.session.query(Terms).order_by(Terms.stream)) payload = [a.serialize for a in q.all()] data = {'results': payload} return jsonify(prepare_json_response(message="OK", success=True, data=data))