diff options
author | Daniel Schadt <kingdread@gmx.de> | 2025-04-21 01:16:15 +0200 |
---|---|---|
committer | Daniel Schadt <kingdread@gmx.de> | 2025-04-21 01:16:15 +0200 |
commit | 531176879ebc421c01d4232b9d4df67c2add6119 (patch) | |
tree | 221d13504892ca1f250e65b3d6a5da5f19b7218b | |
parent | 80ba8dac5f215a2bc7228cd3f3362f94b89e7ca6 (diff) | |
download | fietsboek-531176879ebc421c01d4232b9d4df67c2add6119.tar.gz fietsboek-531176879ebc421c01d4232b9d4df67c2add6119.tar.bz2 fietsboek-531176879ebc421c01d4232b9d4df67c2add6119.zip |
use configured tile layers for trackmap
-rw-r--r-- | fietsboek/actions.py | 4 | ||||
-rw-r--r-- | fietsboek/config.py | 20 | ||||
-rw-r--r-- | fietsboek/trackmap.py | 5 | ||||
-rw-r--r-- | fietsboek/views/detail.py | 4 | ||||
-rw-r--r-- | fietsboek/views/upload.py | 1 | ||||
-rw-r--r-- | tests/playwright/conftest.py | 1 |
6 files changed, 30 insertions, 5 deletions
diff --git a/fietsboek/actions.py b/fietsboek/actions.py index 0457648..3fc1a44 100644 --- a/fietsboek/actions.py +++ b/fietsboek/actions.py @@ -21,6 +21,7 @@ from sqlalchemy.orm.session import Session from . import email, models, trackmap, util from . import transformers as mod_transformers +from .config import TileLayerConfig from .data import DataManager, TrackDataDir from .models.track import TrackType, Visibility from .models.user import TokenType @@ -33,6 +34,7 @@ def add_track( dbsession: Session, data_manager: DataManager, tile_requester: TileRequester, + layer: TileLayerConfig, owner: models.User, title: str, date: datetime.datetime, @@ -108,7 +110,7 @@ def add_track( dbsession.add(track.cache) LOGGER.debug("Building preview image for %s", track.id) - preview_image = trackmap.render(gpx, tile_requester) + preview_image = trackmap.render(gpx, layer, tile_requester) image_io = io.BytesIO() preview_image.save(image_io, "PNG") manager.set_preview(image_io.getvalue()) diff --git a/fietsboek/config.py b/fietsboek/config.py index af946b4..637dd17 100644 --- a/fietsboek/config.py +++ b/fietsboek/config.py @@ -19,6 +19,7 @@ import re import typing import urllib.parse from enum import Enum +from itertools import chain import pydantic from pydantic import ( @@ -277,6 +278,25 @@ class Config(BaseModel): hasher.update(what_for.encode("utf-8")) return hasher.hexdigest() + def public_tile_layers(self) -> list[TileLayerConfig]: + """Returns all tile layer configs that are public. + + :return: A list of public :class:`TileLayerConfig`s. + """ + from .views.tileproxy import DEFAULT_TILE_LAYERS, extract_tile_layers + return [ + source + for source in chain( + ( + default_layer + for default_layer in DEFAULT_TILE_LAYERS + if default_layer.layer_id in self.default_tile_layers + ), + extract_tile_layers(self), + ) + if source.access == LayerAccess.PUBLIC + ] + def parse(config: dict) -> Config: """Parses the configuration into a :class:`Config`. diff --git a/fietsboek/trackmap.py b/fietsboek/trackmap.py index a9fc439..e8e21aa 100644 --- a/fietsboek/trackmap.py +++ b/fietsboek/trackmap.py @@ -94,6 +94,5 @@ class TrackMapRenderer: draw.line(coords, fill=self.color, width=self.line_width, joint="curve") -def render(track: GPX, requester: TileRequester) -> Image: - from .views.tileproxy import DEFAULT_TILE_LAYERS - return TrackMapRenderer(track, requester, (300, 300), DEFAULT_TILE_LAYERS[0]).render() +def render(track: GPX, layer: TileLayerConfig, requester: TileRequester) -> Image: + return TrackMapRenderer(track, requester, (300, 300), layer).render() diff --git a/fietsboek/views/detail.py b/fietsboek/views/detail.py index 0b42cdc..c5e18b4 100644 --- a/fietsboek/views/detail.py +++ b/fietsboek/views/detail.py @@ -18,6 +18,7 @@ from pyramid.response import FileResponse, Response from pyramid.view import view_config from sqlalchemy import select +from . import tileproxy from .tileproxy import ITileRequester from .. import models, trackmap, util from ..models.track import Track, TrackWithMetadata @@ -239,9 +240,10 @@ def track_map(request: Request): pass loader: ITileRequester = request.registry.getUtility(ITileRequester) + layer = request.config.public_tile_layers()[0] gpx = gpxpy.parse(manager.decompress_gpx()) - image = trackmap.render(gpx, loader) + image = trackmap.render(gpx, layer, loader) imageio = io.BytesIO() image.save(imageio, "png") diff --git a/fietsboek/views/upload.py b/fietsboek/views/upload.py index 42dc59f..06efb04 100644 --- a/fietsboek/views/upload.py +++ b/fietsboek/views/upload.py @@ -167,6 +167,7 @@ def do_finish_upload(request): request.dbsession, request.data_manager, request.registry.getUtility(ITileRequester), + request.config.public_tile_layers()[0], owner=request.identity, title=request.params["title"], visibility=Visibility[request.params["visibility"]], diff --git a/tests/playwright/conftest.py b/tests/playwright/conftest.py index 205626d..ce977b8 100644 --- a/tests/playwright/conftest.py +++ b/tests/playwright/conftest.py @@ -113,6 +113,7 @@ class Helper: """ if user is None: user = self.john_doe() + config = Config.parse(self.app_settings) with self.dbaccess: user = self.dbaccess.merge(user) track = actions.add_track( |