Skip to content

Commit a6dce93

Browse files
authored
Merge pull request #98 from Point72/tkp/cc
Swap static files to have 7 day cache control header set, fixes #91
2 parents 527ec9f + 320f1e7 commit a6dce93

File tree

3 files changed

+20
-3
lines changed

3 files changed

+20
-3
lines changed

csp_gateway/server/web/app.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html
1313
from fastapi.openapi.utils import get_openapi
1414
from fastapi.responses import FileResponse, HTMLResponse, RedirectResponse
15-
from fastapi.staticfiles import StaticFiles
1615
from fastapi.templating import Jinja2Templates
1716
from pydantic import BaseModel
1817
from starlette.middleware.cors import CORSMiddleware
@@ -40,6 +39,7 @@
4039
add_state_api_available_channels,
4140
add_state_routes,
4241
)
42+
from .static import CacheControlledStaticFiles
4343

4444
# from uvicorn.supervisors import Multiprocess
4545

@@ -208,14 +208,14 @@ def add_static_files(self) -> None:
208208
# Mount static files
209209
self.app.mount(
210210
"/static",
211-
StaticFiles(directory=static_files_dir, check_dir=False, html=True),
211+
CacheControlledStaticFiles(directory=static_files_dir, check_dir=False, html=True),
212212
name="frontend",
213213
)
214214

215215
# Mount images
216216
self.app.mount(
217217
"/img",
218-
StaticFiles(directory=images_files_dir, check_dir=False, html=True),
218+
CacheControlledStaticFiles(directory=images_files_dir, check_dir=False, html=True),
219219
name="img",
220220
)
221221

csp_gateway/server/web/static.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from starlette.responses import Response
2+
from starlette.staticfiles import StaticFiles
3+
from starlette.types import Scope
4+
5+
__all__ = ("CacheControlledStaticFiles",)
6+
7+
8+
class CacheControlledStaticFiles(StaticFiles):
9+
async def get_response(self, path: str, scope: Scope) -> Response:
10+
response = await super().get_response(path, scope)
11+
response.headers["Cache-Control"] = "public, max-age=604800"
12+
return response

csp_gateway/tests/server/web/test_webserver.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ def test_unknown_404(self, rest_client: TestClient):
9999
assert response.status_code == 404
100100
assert response.json() == {"detail": "Not Found"}
101101

102+
def test_static_cachecontrol(self, rest_client: TestClient):
103+
response = rest_client.get("/static/favicon.png")
104+
assert response.status_code == 200
105+
assert response.headers["Cache-Control"] == "public, max-age=604800"
106+
102107
######################
103108
# Core Functionality #
104109
def test_log_viewer(self, rest_client: TestClient):

0 commit comments

Comments
 (0)