diff options
| author | Daniel Schadt <kingdread@gmx.de> | 2026-09-30 00:26:39 +0200 |
|---|---|---|
| committer | Daniel Schadt <kingdread@gmx.de> | 2026-09-30 00:26:39 +0200 |
| commit | ffa4b71706d6d855978cd833cc8bed13171127ce (patch) | |
| tree | 8690575104ae67847d6424816700375a264c9bc3 | |
| parent | 68a5f39211ebafec3ea97ad1fc558ca35ed2d5a5 (diff) | |
| download | fietsboek-ffa4b71706d6d855978cd833cc8bed13171127ce.tar.gz fietsboek-ffa4b71706d6d855978cd833cc8bed13171127ce.tar.bz2 fietsboek-ffa4b71706d6d855978cd833cc8bed13171127ce.zip | |
add routes for climb images
| -rw-r--r-- | fietsboek/routes.py | 11 | ||||
| -rw-r--r-- | fietsboek/views/detail.py | 40 |
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", ] |
