aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2026-09-30 00:26:39 +0200
committerDaniel Schadt <kingdread@gmx.de>2026-09-30 00:26:39 +0200
commitffa4b71706d6d855978cd833cc8bed13171127ce (patch)
tree8690575104ae67847d6424816700375a264c9bc3
parent68a5f39211ebafec3ea97ad1fc558ca35ed2d5a5 (diff)
downloadfietsboek-ffa4b71706d6d855978cd833cc8bed13171127ce.tar.gz
fietsboek-ffa4b71706d6d855978cd833cc8bed13171127ce.tar.bz2
fietsboek-ffa4b71706d6d855978cd833cc8bed13171127ce.zip
add routes for climb images
-rw-r--r--fietsboek/routes.py11
-rw-r--r--fietsboek/views/detail.py40
2 files changed, 51 insertions, 0 deletions
diff --git a/fietsboek/routes.py b/fietsboek/routes.py
index 7042415..bf8db1a 100644
--- a/fietsboek/routes.py
+++ b/fietsboek/routes.py
@@ -57,6 +57,17 @@ def includeme(config):
factory="fietsboek.models.Track.factory",
)
+ config.add_route(
+ "climb-preview",
+ "/climb/{climb_id}/preview",
+ factory="fietsboek.models.Climb.factory",
+ )
+ config.add_route(
+ "climb-profile",
+ "/climb/{climb_id}/profile",
+ factory="fietsboek.models.Climb.factory",
+ )
+
config.add_route("journey-list", "/journey/")
config.add_route(
"journey-map",
diff --git a/fietsboek/views/detail.py b/fietsboek/views/detail.py
index ca3a0af..8ce6718 100644
--- a/fietsboek/views/detail.py
+++ b/fietsboek/views/detail.py
@@ -298,6 +298,44 @@ def track_pdf(request: Request):
return response
+@view_config(route_name="climb-preview", permission="track.view")
+def climb_preview(request: Request):
+ """Endpoint to return the climb's preview image.
+
+ :param request: The pyramid request.
+ :return: The HTTP response.
+ """
+ climb: models.Climb = request.context
+ response = Response(climb.image, content_type="image/png")
+ return response
+
+
+@view_config(route_name="climb-profile", permission="track.view")
+def climb_profile(request: Request):
+ """Endpoint to return the climb's profile image.
+
+ :param request: The pyramid request.
+ :return: The HTTP response.
+ """
+ climb: models.Climb = request.context
+ accepted = request.accept_encoding.acceptable_offers(["gzip", "identity"])
+ for encoding, _qvalue in accepted:
+ if encoding == "gzip":
+ response = Response(
+ climb.profile,
+ content_type="image/svg+xml",
+ content_encoding="gzip",
+ )
+ break
+ if encoding == "identity":
+ data = gzip.decompress(climb.profile)
+ response = Response(data, content_type="image/svg+xml")
+ break
+ else:
+ return HTTPNotAcceptable("No data with acceptable encoding found")
+ return response
+
+
__all__ = [
"details",
"gpx",
@@ -308,4 +346,6 @@ __all__ = [
"add_comment",
"track_map",
"track_pdf",
+ "climb_preview",
+ "climb_profile",
]