]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blobdiff - wradmin/template_helper.py
Further work on wikitext template for sledrun.
[philipp/winterrodeln/wradmin.git] / wradmin / template_helper.py
index a35b2348ebd4380ba418c7130db4a3a2d86d6538..b9c1dda9edaf10c0be36a833ba5554a60dc4fd45 100644 (file)
@@ -1,5 +1,10 @@
-from flask import url_for
+from typing import List
+from urllib.parse import quote_plus
+
+from flask import url_for, current_app
 import wrpylib.wrvalidators
+from wrpylib.mwmarkup import create_template
+from wrpylib.wrvalidators import LonLat, lonlat_to_str
 
 
 class PylonsHelper:
@@ -16,14 +21,29 @@ class PylonsHelper:
         """Creates a link to the specified page in the www.winterrodeln.org wiki"""
         if page_title is None:
             page_title = 'Hauptseite'
-        return 'https://www.winterrodeln.org/wiki/' + page_title
+        return current_app.config['MEDIAWIKI_WIKI'] + '/' + page_title
 
     def forum(self, forum=None):
         """Creates a link to the specified forum. If no id is given, a general link is created."""
         if forum is None:
-            return 'http://winterrodeln-forum.org/'
+            return 'https://winterrodeln-forum.org/'
         return 'https://winterrodeln-forum.org/viewforum.php?f={}'.format(forum)
 
+    def mediawiki_index_url(self):
+        return f'{current_app.config["MEDIAWIKI_ROOT"]}/index.php'
+
+    def sledrun_json_schema_url(self, raw: bool = True):
+        url = f'{self.mediawiki_index_url()}?title=Winterrodeln:Datenschema/Rodelbahn/V1.json'
+        if raw:
+            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'
+        if raw:
+            url += '&action=raw'
+        return url
+
     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)
@@ -42,3 +62,30 @@ class PylonsHelper:
 
     def public_transport(self, value):
         return wrpylib.wrvalidators.opt_public_transport_german_to_str(value)
+
+    def json_position(self, value: dict) -> str:
+        lon_lat = LonLat(value['longitude'], value['latitude'])
+        return lonlat_to_str(lon_lat)
+
+    def json_pos_ele_position(self, value: dict) -> str:
+        pos = value.get('position')
+        if pos is None:
+            return ''
+        return self.json_position(pos)
+
+    def json_pos_ele_elevation(self, value: dict) -> str:
+        return value.get('elevation', '')
+
+    def list_template(self, name: str, value: List[str]) -> str:
+        return str(create_template(name, value))
+
+    def json_template(self, value) -> str:
+        args = []
+        kwargs = {}
+        for p in value.get('parameter', []):
+            v = p.get('value', '')
+            if 'key' in p:
+                kwargs[p['key']] = v
+            else:
+                args.append(v)
+        return str(create_template(value['name'], args, kwargs))