import json
import subprocess
-import urllib.request
+import urllib.request, urllib.error
from collections import OrderedDict
from typing import Optional, Tuple, List
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')
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)
-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
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)
== Landkarte ==
-{%- filter forceescape %}
-<wrmap lat="47.25495005" lon="10.713226985" zoom="14">
-
-<gasthaus name="Latschenhütte" wiki="Latschenhütte (Gasthaus)">47.257628 N 10.688077 E</gasthaus>
-<parkplatz>47.255415 N 10.738377 E</parkplatz>
-
-<rodelbahn>
-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
-</rodelbahn>
-
-<lift>
-47.241962 N 10.721678 E
-47.248786 N 10.693678 E
-</lift>
-
-</wrmap>
-{% endfilter %}{% raw %}{{Landkarte Legende}}<br/>{{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}}<br/>{{GoogleMaps Hinweis}}{% endraw %}
+{% endif %}
== Anreise mit öffentlichen Verkehrsmitteln ==
{% if 'public_transport_description' in sledrun_json %}{{ sledrun_json['public_transport_description'] }}