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
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, )
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()
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