Skip to content

Commit

Permalink
Only cache error pages for 1 second
Browse files Browse the repository at this point in the history
  • Loading branch information
ahosgood committed Jan 8, 2024
1 parent cfbb245 commit 9664fb9
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 29 deletions.
31 changes: 9 additions & 22 deletions app/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
import logging
from datetime import datetime

from app.lib import cache
from app.lib.context_processor import (
get_wagtail_image,
get_wagtail_media,
get_wagtail_page,
is_standalone,
now_iso_8601,
)
from app.lib.template_filters import (
article_supertitle,
article_type,
Expand All @@ -11,7 +17,6 @@
slugify,
tna_html,
)
from app.wagtail.api import image_details, media_details, page_details
from config import Config
from flask import Flask
from jinja2 import ChoiceLoader, PackageLoader
Expand Down Expand Up @@ -44,28 +49,10 @@ def create_app(config_class=Config):
app.add_template_filter(brand_icon_from_url)
app.add_template_filter(headings_list)

# app.add_cms_processor(headings_list)

@app.context_processor
def cms_processor():
def get_wagtail_image(image_id):
image_data = image_details(image_id)
return image_data

def get_wagtail_page(page_id):
page_data = page_details(page_id)
return page_data

def get_wagtail_media(media_id):
media_data = media_details(media_id)
return media_data

def now_iso_8601():
now = datetime.now()
now_date = now.strftime("%Y-%m-%dT%H:%M:%SZ")
return now_date

def context_processor():
return dict(
is_standalone=is_standalone,
get_wagtail_image=get_wagtail_image,
get_wagtail_page=get_wagtail_page,
get_wagtail_media=get_wagtail_media,
Expand Down
29 changes: 29 additions & 0 deletions app/lib/context_processor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from datetime import datetime

from app.wagtail.api import image_details, media_details, page_details
from flask import request


def is_standalone():
return "standalone" in request.args


def get_wagtail_image(image_id):
image_data = image_details(image_id)
return image_data


def get_wagtail_page(page_id):
page_data = page_details(page_id)
return page_data


def get_wagtail_media(media_id):
media_data = media_details(media_id)
return media_data


def now_iso_8601():
now = datetime.now()
now_date = now.strftime("%Y-%m-%dT%H:%M:%SZ")
return now_date
24 changes: 24 additions & 0 deletions app/templates/base.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{% extends 'layouts/base.html' %}

{%- from 'components/breadcrumbs/macro.html' import tnaBreadcrumbs -%}
{%- from 'components/button/macro.html' import tnaButton -%}
{%- from 'components/cookie-banner/macro.html' import tnaCookieBanner -%}
{%- from 'components/header/macro.html' import tnaHeader -%}
{%- from 'components/footer/macro.html' import tnaFooter -%}
Expand Down Expand Up @@ -32,6 +33,24 @@
{% endblock %}

{% block header %}
{% if is_standalone() %}
<nav class="tna-background-contrast">
<div class="tna-container tna-!--padding-vertical-s">
<div class="tna-column tna-column--full">
<div class="tna-button-group tna-button-group--full">
{{ tnaButton({
'text': 'Explore the collection',
'href': '/explore-the-collection'
}) }}
{{ tnaButton({
'text': 'Search',
'href': '/search'
}) }}
</div>
</div>
</div>
</nav>
{% else %}
<!-- {{ tnaPhaseBanner({
'phase': 'prototype',
'message': 'This is not a real service.',
Expand Down Expand Up @@ -66,9 +85,11 @@
},
'navigation': navigationItems
}) }}
{% endif %}
{% endblock %}

{% block beforeContent %}
{% if not is_standalone() %}
{% if breadcrumbs and breadcrumbs | length > 0 %}
<div class="tna-container">
<div class="tna-column tna-column--full">
Expand All @@ -78,9 +99,11 @@
</div>
</div>
{% endif %}
{% endif %}
{% endblock %}

{% block footer %}
{% if not is_standalone() %}
{{ tnaFooter({
'social': [
{
Expand Down Expand Up @@ -211,6 +234,7 @@
}
]
}) }}
{% endif %}
{% endblock %}

{% block bodyEnd %}
Expand Down
38 changes: 31 additions & 7 deletions app/wagtail/routes.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from app.lib import cache, cache_key_prefix
from app.wagtail import bp
from app.wagtail.render import render_content_page
from flask import current_app, render_template, request
from config import cache_config
from flask import current_app, make_response, render_template, request
from flask_caching import CachedResponse

from .api import page_details_by_uri, page_preview

Expand All @@ -21,11 +23,22 @@ def index():
page_data = page_details_by_uri("/")
except ConnectionError:
current_app.logger.error("ConnectionError for home page")
return render_template("errors/api.html"), 502
return CachedResponse(
response=make_response(render_template("errors/api.html"), 502),
timeout=1,
)
except Exception:
current_app.logger.error("An exception occurred on home page")
return render_template("errors/page-not-found.html"), 404
return render_content_page(page_data)
return CachedResponse(
response=make_response(
render_template("errors/page-not-found.html"), 404
),
timeout=1,
)
return CachedResponse(
response=make_response(render_content_page(page_data)),
timeout=cache_config["CACHE_DEFAULT_TIMEOUT"],
)


@bp.route("/<path:path>/")
Expand All @@ -35,8 +48,19 @@ def explore_page(path):
page_data = page_details_by_uri(path)
except ConnectionError:
current_app.logger.error(f"ConnectionError for {path}")
return render_template("errors/api.html"), 502
return CachedResponse(
response=make_response(render_template("errors/api.html"), 502),
timeout=1,
)
except Exception:
current_app.logger.error(f"An exception occurred on {path}")
return render_template("errors/page-not-found.html"), 404
return render_content_page(page_data)
return CachedResponse(
response=make_response(
render_template("errors/page-not-found.html"), 404
),
timeout=1,
)
return CachedResponse(
response=make_response(render_content_page(page_data)),
timeout=cache_config["CACHE_DEFAULT_TIMEOUT"],
)

0 comments on commit 9664fb9

Please sign in to comment.