Пример #1
0
def search():
    global local_search_cache
    try:
        search_key = str(flask.request.query_string, "utf-8")
        if not search_key:
            return util.create_compressed_response(
                models.DataWrapper(data=[]).json())
        if search_key in local_search_cache:
            enrollment_data = enrollment.get_enrollment_info(
                flask.request.args.to_dict(), local_search_cache[search_key])
            return util.create_compressed_response(enrollment_data.json())

        datastore_cache = util.datastore_get("Listing",
                                             search_key,
                                             time=config.LISTING_EXPIRE_TIME)
        if datastore_cache:
            print("USING SAVED")
            saved_listing = models.DataWrapper.parse_raw(
                datastore_cache.get("data"))
            local_search_cache[search_key] = saved_listing
            enrollment_data = enrollment.get_enrollment_info(
                flask.request.args.to_dict(), saved_listing)
            return util.create_compressed_response(enrollment_data.json())

        course_data = course.CourseData()
        data = course_data.get_all_courses(flask.request.args.to_dict())
        local_search_cache[search_key] = data
        util.datastore_set("Listing", search_key, data.json())
        return util.create_compressed_response(data.json())
    except util.WebsocRateLimitError:
        # Try again with cached results
        datastore_cache = util.datastore_get("Listing",
                                             search_key,
                                             time=config.IGNORE_TIME)
        if datastore_cache:
            print("BLOCKED, USING SAVED")
            saved_listing = models.DataWrapper.parse_raw(
                datastore_cache.get("data"))
            local_search_cache[search_key] = saved_listing
            return util.create_compressed_response(saved_listing.json())
        return flask.jsonify(success=False,
                             error="Websoc Rate Limit Error"), 429
Пример #2
0
def index():
    global local_form_cache
    if not local_form_cache:
        form_info = util.datastore_get("Form", "form", config.IGNORE_TIME)
        local_form_cache = models.SearchForm.parse_raw(form_info.get("data"))
    return flask.render_template(
        "index.html",
        terms=local_form_cache.terms,
        general_eds=local_form_cache.general_eds,
        departments=local_form_cache.departments,
    )
Пример #3
0
 def __init__(self):
     self.time_reg = re.compile(
         r"(\d{1,2}):(\d{2})\s*-\s*(\d{1,2}):(\d{2})(p|pm)?")
     caches = util.datastore_get("Cache", "caches")
     if caches:
         caches = Caches.parse_raw(caches["data"])
         self.grade_data = grade.GradeData(caches.grade_cache)
         self.rating_data = rating.RatingData(caches.rating_cache)
     else:
         self.grade_data = grade.GradeData()
         self.rating_data = rating.RatingData()
Пример #4
0
def load_schedule():
    username = flask.request.args.get("username")
    schedule = util.datastore_get("Schedule", username)
    if schedule:
        data = schedule["data"]
        # Handle old format of saved schedules
        if isinstance(data, str):
            return flask.jsonify(success=True, data=data)
        # Handle new format of saved schedules
        else:
            return flask.jsonify(success=True, data=data.get("data"))
    return flask.jsonify(success=False, error="Schedule not found"), 400