def view_catalog(board_id): threads = BoardCatalog().retrieve(board_id) board_name = db.session.query(Board).filter( Board.id == board_id).one().name render_for_catalog(threads) return render_template("catalog.html", threads=threads, board_id=board_id, board_name=board_name)
def _get_threads(self): firehose_limit = app.config["FIREHOSE_LENGTH"] raw_threads = db.session.query(Thread).order_by( desc(Thread.last_updated)).limit(firehose_limit).all() threads = BoardCatalog()._to_json(raw_threads) for thread in threads: db_thread = db.session.query(Thread).get(thread["id"]) thread["board"] = db_thread.board return threads
def catalog(board_id): threads = BoardCatalog().retrieve(board_id) board = db.session.query(Board).get(board_id) board_name = board.name render_for_catalog(threads) return render_template("catalog.html", threads=threads, board=board, board_name=board_name)
def _get_threads(self): firehose_cache_key = "firehose-threads" cache_connection = cache.Cache() cached_threads = cache_connection.get(firehose_cache_key) if cached_threads: deserialized_threads = json.loads(cached_threads) for thread in deserialized_threads: thread["last_updated"] = datetime.datetime.utcfromtimestamp( thread["last_updated"]) return deserialized_threads firehose_limit = app.config["FIREHOSE_LENGTH"] raw_threads = db.session.query(Thread).order_by( desc(Thread.last_updated)).limit(firehose_limit).all() threads = BoardCatalog()._to_json(raw_threads) for thread in threads: db_thread = db.session.query(Thread).get(thread["id"]) thread["board"] = db_thread.board cache_friendly = json.dumps(threads, default=_datetime_handler) cache_connection.set(firehose_cache_key, cache_friendly) return threads
def catalog(board_id): current_theme = session.get("theme") or app.config.get( "DEFAULT_THEME") or "stock" response_cache_key = "board-%d-%d-%s-render" % ( board_id, get_slip_bitmask(), current_theme) cache_connection = cache.Cache() cached_response_body = cache_connection.get(response_cache_key) etag_value = "%s-%f" % (response_cache_key, time.time()) etag_cache_key = "%s-etag" % response_cache_key if cached_response_body: etag_header = request.headers.get("If-None-Match") current_etag = cache_connection.get(etag_cache_key) if etag_header: parsed_etag = parse_etags(etag_header) if parsed_etag.contains_weak(current_etag): return make_response("", 304) cached_response = make_response(cached_response_body) cached_response.set_etag(current_etag, weak=True) cached_response.headers["Cache-Control"] = "public,must-revalidate" return cached_response threads = BoardCatalog().retrieve(board_id) board = db.session.query(Board).get(board_id) board_name = board.name render_for_catalog(threads) tag_styles = get_tags(threads) catalog_data = {} catalog_data["tag_styles"] = tag_styles for thread in threads: del thread["last_updated"] catalog_data["threads"] = threads extra_data = {} if app.config.get("CAPTCHA_METHOD") == "CAPTCHOULI": extra_data = renderer.captchouli_to_json(captchouli.request_captcha()) template = renderer.render_catalog(catalog_data, board_name, board_id, extra_data) uncached_response = make_response(template) uncached_response.set_etag(etag_value, weak=True) uncached_response.headers["Cache-Control"] = "public,must-revalidate" cache_connection.set(response_cache_key, template) cache_connection.set(etag_cache_key, etag_value) return uncached_response
def catalog(board_id): current_theme = session.get("theme") or app.config.get( "DEFAULT_THEME") or "stock" response_cache_key = "board-%d-%d-%s-render" % ( board_id, get_slip_bitmask(), current_theme) cache_connection = cache.Cache() cached_response_body = cache_connection.get(response_cache_key) etag_value = "%s-%f" % (response_cache_key, time.time()) etag_cache_key = "%s-etag" % response_cache_key if cached_response_body: etag_header = request.headers.get("If-None-Match") current_etag = cache_connection.get(etag_cache_key) if etag_header: parsed_etag = parse_etags(etag_header) if parsed_etag.contains_weak(current_etag): return make_response("", 304) cached_response = make_response(cached_response_body) cached_response.set_etag(current_etag, weak=True) cached_response.headers["Cache-Control"] = "public,must-revalidate" return cached_response threads = BoardCatalog().retrieve(board_id) board = db.session.query(Board).get(board_id) board_name = board.name render_for_catalog(threads) tag_styles = get_tags(threads) template = render_template("catalog.html", threads=threads, board=board, board_name=board_name, tag_styles=tag_styles) uncached_response = make_response(template) uncached_response.set_etag(etag_value, weak=True) uncached_response.headers["Cache-Control"] = "public,must-revalidate" cache_connection.set(response_cache_key, template) cache_connection.set(etag_cache_key, etag_value) return uncached_response
def _get_threads(self): raw_threads = db.session.query(Thread).order_by(desc(Thread.last_updated)).limit(10).all() threads = BoardCatalog()._to_json(raw_threads) return threads