diff options
| author | Daniel Schadt <kingdread@gmx.de> | 2026-09-30 17:31:40 +0200 |
|---|---|---|
| committer | Daniel Schadt <kingdread@gmx.de> | 2026-09-30 17:31:40 +0200 |
| commit | 731cc2aeaed97dde06091f2600f6ffeacbf3eed3 (patch) | |
| tree | ce7c372d39c01011d93eac81a2cd465cbb981010 | |
| parent | 4653773ae29b75c07cec5b53a655d2c29a2bc135 (diff) | |
| download | fietsboek-731cc2aeaed97dde06091f2600f6ffeacbf3eed3.tar.gz fietsboek-731cc2aeaed97dde06091f2600f6ffeacbf3eed3.tar.bz2 fietsboek-731cc2aeaed97dde06091f2600f6ffeacbf3eed3.zip | |
add a button to re-extract climbs
| -rw-r--r-- | fietsboek/routes.py | 3 | ||||
| -rw-r--r-- | fietsboek/templates/details.jinja2 | 6 | ||||
| -rw-r--r-- | fietsboek/views/detail.py | 24 |
3 files changed, 32 insertions, 1 deletions
diff --git a/fietsboek/routes.py b/fietsboek/routes.py index bf8db1a..2e1a171 100644 --- a/fietsboek/routes.py +++ b/fietsboek/routes.py @@ -41,6 +41,9 @@ def includeme(config): "delete-track", "/track/{track_id}/delete", factory="fietsboek.models.Track.factory" ) config.add_route( + "reclimb-track", "/track/{track_id}/reclimb", factory="fietsboek.models.Track.factory" + ) + config.add_route( "add-comment", "/track/{track_id}/comment", factory="fietsboek.models.Track.factory" ) config.add_route( diff --git a/fietsboek/templates/details.jinja2 b/fietsboek/templates/details.jinja2 index 0bbcd44..a800998 100644 --- a/fietsboek/templates/details.jinja2 +++ b/fietsboek/templates/details.jinja2 @@ -36,8 +36,14 @@ <div class="btn-group" role="group"> <a class="btn btn-success ui-element" href="{{ request.route_path('edit', track_id=track.id) }}"><i class="bi-pencil-square"></i> {{ _("page.details.edit") }}</a> <button type="button" class="btn btn-info ui-element" id="showShareLink" data-bs-toggle="modal" data-bs-target="#shareLinkModal"><i class="bi-share"></i> {{ _("page.details.share") }}</button> + <button type="submit" class="btn btn-info ui-element" form="reclimbForm"><i class="bi bi-graph-up-arrow"></i> {{ _("page.details.reclimb") }}</button> <button type="button" class="btn btn-danger ui-element" id="deleteLink" data-bs-toggle="modal" data-bs-target="#deleteModal"><i class="bi bi-trash"></i> {{ _("page.details.delete") }}</button> </div> + + <form id="reclimbForm" method="POST" action="{{ request.route_path('reclimb-track', track_id=track.id) }}"> + {{ util.hidden_csrf_input() }} + </form> + <div class="modal fade" id="shareLinkModal" tabindex="-1" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> diff --git a/fietsboek/views/detail.py b/fietsboek/views/detail.py index 9454b94..46e9f5f 100644 --- a/fietsboek/views/detail.py +++ b/fietsboek/views/detail.py @@ -5,6 +5,7 @@ import gzip import io import logging from html.parser import HTMLParser +from threading import Thread from markupsafe import Markup from pyramid.httpexceptions import ( @@ -18,7 +19,7 @@ from pyramid.response import FileResponse, Response from pyramid.view import view_config from sqlalchemy import select -from .. import models, pdf, trackmap, util +from .. import actions, models, pdf, trackmap, util from ..models.track import Track, TrackWithMetadata from .tileproxy import ITileRequester @@ -195,6 +196,27 @@ def delete_track(request): return HTTPFound(request.route_url("home")) +@view_config(route_name="reclimb-track", request_method="POST", permission="track.edit") +def reclimb_track(request): + track = request.context + track_id = track.id + loader: ITileRequester = request.registry.getUtility(ITileRequester) + layer = request.config.public_tile_layers()[0] + def _extract_climbs(): + LOGGER.debug("Starting climb extraction for track %d", track_id) + request.redis.set(f"bg-tasks:track-{track_id}", 1) + session = request.registry["dbsession_factory"]() + track = session.get(Track, track_id) + with session: + actions.extract_climbs(session, track, loader, layer) + session.commit() + request.redis.delete(f"bg-tasks:track-{track_id}") + LOGGER.debug("Climb extraction done") + Thread(name=f"reclimb-{track_id}", target=_extract_climbs).start() + + return HTTPFound(request.route_url("details", track_id=track_id)) + + @view_config(route_name="badge", http_cache=3600) def badge(request): """Returns the image data associated with a badge. |
