aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fietsboek/actions.py4
-rw-r--r--fietsboek/config.py20
-rw-r--r--fietsboek/trackmap.py5
-rw-r--r--fietsboek/views/detail.py4
-rw-r--r--fietsboek/views/upload.py1
-rw-r--r--tests/playwright/conftest.py1
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(