diff options
author | Daniel Schadt <kingdread@gmx.de> | 2025-04-22 22:49:23 +0200 |
---|---|---|
committer | Daniel Schadt <kingdread@gmx.de> | 2025-04-22 22:49:23 +0200 |
commit | eb5d296021b5857682bb45cb7144531e08ed8ec4 (patch) | |
tree | 804a5bcbbe746aef905a862b9f8c86f8560aafad | |
parent | a11195917b2a98c62773d0e8bda2ddbc87ba5df4 (diff) | |
download | fietsboek-eb5d296021b5857682bb45cb7144531e08ed8ec4.tar.gz fietsboek-eb5d296021b5857682bb45cb7144531e08ed8ec4.tar.bz2 fietsboek-eb5d296021b5857682bb45cb7144531e08ed8ec4.zip |
build track previews in fietscron
-rw-r--r-- | fietsboek/scripts/fietscron.py | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/fietsboek/scripts/fietscron.py b/fietsboek/scripts/fietscron.py index 7687e12..621821b 100644 --- a/fietsboek/scripts/fietscron.py +++ b/fietsboek/scripts/fietscron.py @@ -6,6 +6,7 @@ import logging.config from pathlib import Path import click +import gpxpy import pyramid.paster import redis as mod_redis from redis import Redis @@ -14,10 +15,11 @@ from sqlalchemy.engine import Engine from sqlalchemy.orm import Session from .. import config as mod_config -from .. import hittekaart, models +from .. import hittekaart, models, trackmap from ..config import Config from ..data import DataManager from ..models.user import TOKEN_LIFETIME +from ..views.tileproxy import TileRequester from . import config_option LOGGER = logging.getLogger(__name__) @@ -33,6 +35,7 @@ def cli(config): \b * Deletes pending uploads that are older than 24 hours. * Rebuilds the cache for missing tracks. + * Builds preview images for tracks. * (optional) Runs ``hittekaart`` to generate heatmaps """ logging.config.fileConfig(config) @@ -47,14 +50,15 @@ def cli(config): return engine = create_engine(config.sqlalchemy_url) + redis = mod_redis.from_url(config.redis_url) LOGGER.debug("Starting maintenance tasks") remove_old_uploads(engine) remove_old_tokens(engine) rebuild_cache(engine, data_manager) + build_previews(engine, data_manager, redis, config) if config.hittekaart_autogenerate: - redis = mod_redis.from_url(config.redis_url) run_hittekaart(engine, data_manager, redis, config) @@ -95,6 +99,31 @@ def rebuild_cache(engine: Engine, data_manager: DataManager): session.commit() +def build_previews( + engine: Engine, + data_manager: DataManager, + redis: Redis, + config: mod_config.Config, +): + """Builds track preview images if they are missing.""" + LOGGER.info("Building track preview images") + session = Session(engine) + tile_requester = TileRequester(redis) + layer = config.public_tile_layers()[0] + tracks = select(models.Track) + for track in session.execute(tracks).scalars(): + track_dir = data_manager.open(track.id) + if track_dir.preview_path().exists(): + continue + + LOGGER.debug("Building preview for %s", track.id) + gpx = gpxpy.parse(track_dir.decompress_gpx()) + preview = trackmap.render(gpx, layer, tile_requester) + with track_dir.lock(): + with open(track_dir.preview_path(), "wb") as preview_file: + preview.save(preview_file, "PNG") + + def run_hittekaart(engine: Engine, data_manager: DataManager, redis: Redis, config: Config): """Run outstanding hittekaart requests.""" # The logic here is as follows: |