예제 #1
0
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))
예제 #2
0
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))
예제 #3
0
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))
예제 #4
0
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
        )
    )
예제 #5
0
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))
예제 #6
0
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))
예제 #7
0
def verify():
    return jsonify(
        prepare_json_response(
            message=None,
            success=True
        )
    )
예제 #8
0
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))
예제 #9
0
def get_user():
    return jsonify(
        prepare_json_response(
            message="OK",
            success=True,
            data=g.user.serialize
        )
    )
예제 #10
0
def delete_account(email):
    db.session.query(User).filter_by(email=email).delete()
    return jsonify(
        prepare_json_response(
            message="OK",
            success=True
        )
    )
예제 #11
0
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
        )
    )
예제 #12
0
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
예제 #15
0
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))
예제 #16
0
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
        )
    )
예제 #17
0
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))
예제 #18
0
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))
예제 #19
0
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)))
예제 #20
0
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
예제 #21
0
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
예제 #22
0
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
예제 #23
0
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))
예제 #24
0
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
        )
    )
예제 #25
0
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
        )
    )
예제 #26
0
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))
예제 #27
0
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
        )
    )
예제 #28
0
def index():
    return jsonify(
        prepare_json_response(
            message="Don't know where to go? Query /help for more information.",
            success=True,
            data=None))
예제 #29
0
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))
예제 #30
0
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))