From: Philipp Spitzer Date: Wed, 13 Oct 2021 21:36:29 +0000 (+0200) Subject: Now rendering JSON map stored in the wiki. X-Git-Url: https://git.toastfreeware.priv.at/philipp/winterrodeln/wradmin.git/commitdiff_plain/8640dc6683d139c73b4cc39bd5bce7c5ff69c7bc Now rendering JSON map stored in the wiki. --- diff --git a/wradmin/controllers/rodelbahn.py b/wradmin/controllers/rodelbahn.py index cd75bbe..017da74 100644 --- a/wradmin/controllers/rodelbahn.py +++ b/wradmin/controllers/rodelbahn.py @@ -1,6 +1,6 @@ import json import subprocess -import urllib.request +import urllib.request, urllib.error from collections import OrderedDict from typing import Optional, Tuple, List @@ -51,10 +51,20 @@ class RodelbahnController: abort(404) h = PylonsHelper() sledrun_json_url = h.sledrun_json_url(sledrun.page_title) - sledrun_json_page = urllib.request.urlopen(sledrun_json_url) + sledrun_json_page = urllib.request.urlopen(sledrun_json_url) # might raise urllib.error.HTTPError sledrun_json_str = sledrun_json_page.read() sledrun_json = json.loads(sledrun_json_str) + sledrun_map_json = None + sledrun_map_url = h.sledrun_map_url(sledrun.page_title) + try: + sledrun_map_page = urllib.request.urlopen(sledrun_map_url) + sledrun_map_str = sledrun_map_page.read() + sledrun_map_json = json.loads(sledrun_map_str) + except urllib.error.HTTPError as e: + if e.code != 404: # accept "not found" as map not being present + raise + def markdown_to_mediawiki(markdown: str) -> str: return subprocess.check_output(['pandoc', '--to', 'mediawiki'], input=markdown, encoding='utf-8') @@ -150,7 +160,8 @@ class RodelbahnController: rodelbahnbox = rodelbahnbox_to_str(sledrun_rbb_json) return render_template('rodelbahn_view_wikitext.html', sledrun=sledrun, sledrun_json=sledrun_json, rodelbahnbox=rodelbahnbox, description=description, night_light=night_light, - sled_rental_description=sled_rental_description, operator=betreiber()) + sled_rental_description=sled_rental_description, operator=betreiber(), + sledrun_map_json=sledrun_map_json) def json_edit(self, sledrun_id): q = db.session.query(WrSledrunCache) diff --git a/wradmin/template_helper.py b/wradmin/template_helper.py index b9c1dda..f0e9ac0 100644 --- a/wradmin/template_helper.py +++ b/wradmin/template_helper.py @@ -1,9 +1,10 @@ -from typing import List +from typing import List, Dict from urllib.parse import quote_plus from flask import url_for, current_app import wrpylib.wrvalidators from wrpylib.mwmarkup import create_template +from wrpylib.wrmwmarkup import create_wrmap from wrpylib.wrvalidators import LonLat, lonlat_to_str @@ -38,12 +39,30 @@ class PylonsHelper: url += '&action=raw' return url - def sledrun_json_url(self, page_title, raw: bool = True): - url = f'{self.mediawiki_index_url()}?title={quote_plus(page_title)}/Rodelbahn.json' + def sledrun_json_title(self, page_title: str) -> str: + return f'{page_title}/Rodelbahn.json' + + def sledrun_json_url(self, page_title, raw: bool = True) -> str: + json_page_title = self.sledrun_json_title(page_title) + url = f'{self.mediawiki_index_url()}?title={quote_plus(json_page_title)}' if raw: url += '&action=raw' return url + def sledrun_map_title(self, page_title: str) -> str: + return f'{page_title}/Landkarte.json' + + def sledrun_map_url(self, page_title, raw: bool = True) -> str: + map_page_title = self.sledrun_map_title(page_title) + url = f'{self.mediawiki_index_url()}?title={quote_plus(map_page_title)}' + if raw: + url += '&action=raw' + print(url) + return url + + def create_wrmap(self, geojson: Dict) -> str: + return create_wrmap(geojson) + def google_maps(self, latitude, longitude): """Builds an URL like http://maps.google.at/maps?q=47.200607,11.260007""" return "https://maps.google.at/maps?q=%.6f,%.6f" % (latitude, longitude) diff --git a/wradmin/templates/rodelbahn_view_wikitext.html b/wradmin/templates/rodelbahn_view_wikitext.html index e340b3c..55d24e2 100644 --- a/wradmin/templates/rodelbahn_view_wikitext.html +++ b/wradmin/templates/rodelbahn_view_wikitext.html @@ -42,65 +42,12 @@ == Landkarte == -{%- filter forceescape %} - - -47.257628 N 10.688077 E -47.255415 N 10.738377 E - - -47.257962 N 10.688081 E -47.258005 N 10.688402 E -47.257590 N 10.688706 E -47.257189 N 10.689888 E -47.256868 N 10.689642 E -47.255072 N 10.691495 E -47.254187 N 10.692994 E -47.252399 N 10.694954 E -47.252205 N 10.696199 E -47.252398 N 10.698193 E -47.251425 N 10.695816 E -47.251646 N 10.700060 E -47.252280 N 10.701494 E -47.252711 N 10.701935 E -47.253288 N 10.704018 E -47.253649 N 10.704199 E -47.253892 N 10.705659 E -47.254662 N 10.707657 E -47.255164 N 10.708073 E -47.255730 N 10.708088 E -47.256003 N 10.708921 E -47.255401 N 10.710403 E -47.256161 N 10.713536 E -47.256524 N 10.713556 E -47.256291 N 10.715532 E -47.257742 N 10.720200 E -47.257928 N 10.722706 E -47.258556 N 10.724411 E -47.258508 N 10.724764 E -47.257824 N 10.724747 E -47.255990 N 10.722698 E -47.255682 N 10.724402 E -47.254975 N 10.725161 E -47.254403 N 10.725299 E -47.253625 N 10.726169 E -47.252756 N 10.729158 E -47.253270 N 10.729620 E -47.254430 N 10.734014 E -47.255339 N 10.735147 E -47.255382 N 10.735946 E -47.255177 N 10.736435 E -47.255478 N 10.738000 E - - - -47.241962 N 10.721678 E -47.248786 N 10.693678 E - - - -{% endfilter %}{% raw %}{{Landkarte Legende}}
{{GoogleMaps Hinweis}}{% endraw %} - +{% if sledrun_map_json is none -%} +''leider ist derzeit keine [[Winterrodeln:Landkarte|Landkarte]] zu dieser Rodelbahn vorhanden'' +{%- else -%} +{{ h.create_wrmap(sledrun_map_json) }} +{% raw %}{{Landkarte Legende}}
{{GoogleMaps Hinweis}}{% endraw %} +{% endif %} == Anreise mit öffentlichen Verkehrsmitteln == {% if 'public_transport_description' in sledrun_json %}{{ sledrun_json['public_transport_description'] }}