]> ToastFreeware Gitweb - philipp/winterrodeln/wrpylib.git/blobdiff - wrpylib/wrmwmarkup.py
Create "Buttonleiste" with key_value_template.
[philipp/winterrodeln/wrpylib.git] / wrpylib / wrmwmarkup.py
index 8fc36472dbd3ef3e66b078d622b667bab43e2cfc..16ce286228021bc7d57113ffe072edfc180b9a7a 100644 (file)
@@ -1,10 +1,9 @@
 """This module contains winterrodeln specific functions that are processing the MediaWiki markup.
 """
 import re
-import subprocess
 import xml.etree.ElementTree
 import collections
-from typing import Tuple, Optional, List, OrderedDict, Union, Dict
+from typing import Tuple, Optional, List, OrderedDict, Union, Dict, Any
 
 import jinja2
 from mwparserfromhell.nodes import Template, Wikilink
@@ -12,12 +11,13 @@ from mwparserfromhell.nodes import Template, Wikilink
 import wrpylib.wrvalidators
 import wrpylib.mwmarkup
 import wrpylib.wrmwdb
+from wrpylib.lib_sledrun_wikitext_from_json import strip_eol
 from wrpylib.wrvalidators import LonLat, opt_lonlat_from_str, opt_lonlat_to_str, opt_uint_from_str, opt_uint_to_str, \
     opt_str_opt_comment_enum_to_str, lift_german_to_str, webauskunft_to_str, cachet_german_to_str, \
     opt_phone_comment_enum_to_str, lift_german_from_str, GASTHAUSBOX_DICT, opt_difficulty_german_from_str, \
-    opt_avalanches_german_from_str, nightlightdays_from_str, opt_public_transport_german_from_str, \
+    opt_avalanches_german_from_str, opt_public_transport_german_from_str, \
     opt_tristate_german_comment_from_str, rodelbahnbox_to_str, lonlat_to_str, opt_no_or_str_to_str, \
-    opt_no_or_str_from_str
+    opt_no_or_str_from_str, opt_tristate_german_from_str
 
 
 def split_lon_lat(value: Optional[LonLat]) -> Union[LonLat, Tuple[None, None]]:
@@ -340,7 +340,7 @@ def create_wrmap(geojson: Dict) -> str:
                 last_json_feature.tail = '\n\n'
             feature_xml.text = '\n' + create_wrmap_coordinates(geo['coordinates']) + '\n'
         last_json_feature = feature_xml
-        feature_xml.attrib = json_feature['properties']
+        feature_xml.attrib = json_feature['properties'].copy()
         del feature_xml.attrib['type']
 
     if last_json_feature is not None:
@@ -377,6 +377,11 @@ class Jinja2Tools:
     def list_template(self, name: str, value: List[str]) -> str:
         return str(wrpylib.mwmarkup.create_template(name, value))
 
+    def key_value_template(self, name: str, value: Dict[str, Any], keep_empty: bool = False) -> str:
+        value = {k: str(v) for k, v in value.items()
+                 if keep_empty or (v is not None and not isinstance(v, jinja2.Undefined) and str(v).strip() != '')}
+        return str(wrpylib.mwmarkup.create_template(name, [], value))
+
     def json_template(self, value) -> str:
         args = []
         kwargs = {}
@@ -395,7 +400,7 @@ def create_sledrun_wiki(sledrun_json: Dict, map_json: Optional[Dict], impression
         autoescape=jinja2.select_autoescape(),
     )
     env.filters["german_bool"] = german_bool
-    template = env.get_template("sledrun_wiki.txt")
+    template = env.get_template("sledrun_wikitext.txt")
 
     def position_to_lon_lat(value: Optional[dict]) -> Optional[LonLat]:
         if value is not None:
@@ -421,7 +426,7 @@ def create_sledrun_wiki(sledrun_json: Dict, map_json: Optional[Dict], impression
         ws = sledrun_json.get('walkup_supports')
         if ws is None:
             return None
-        return [(w['type'], w.get('comment')) for w in ws]
+        return [(w['type'], w.get('note')) for w in ws]
 
     def rodelverleih() -> Optional[List[Tuple[str, Optional[str]]]]:
         v = sledrun_json.get('sled_rental')
@@ -430,7 +435,7 @@ def create_sledrun_wiki(sledrun_json: Dict, map_json: Optional[Dict], impression
         w = []
         for x in v:
             n = x.get('name')
-            c = x.get('comment')
+            c = x.get('note')
             p = x.get('wr_page')
             if p is not None:
                 n = Jinja2Tools().json_wr_page(p)
@@ -481,9 +486,10 @@ def create_sledrun_wiki(sledrun_json: Dict, map_json: Optional[Dict], impression
         ('Aufstieg getrennt', opt_tristate_german_comment_from_str(sledrun_json.get('walkup_separate', ''))),
         ('Gehzeit', sledrun_json.get('walkup_time')),
         ('Aufstiegshilfe', aufstiegshilfe()),
-        ('Beleuchtungsanlage', opt_tristate_german_comment_from_str(sledrun_json.get('nightlight_possible', ''))),
+        ('Beleuchtungsanlage', (opt_tristate_german_from_str(sledrun_json.get('nightlight_possible', '')),
+                                sledrun_json.get('nightlight_possible_note'))),
         ('Beleuchtungstage', (sledrun_json.get('nightlight_weekdays_count'),
-                              sledrun_json.get('nightlight_weekdays_comment'))),
+                              sledrun_json.get('nightlight_weekdays_note'))),
         ('Rodelverleih', rodelverleih()),
         ('Gütesiegel', cachet()),
         ('Webauskunft', webauskunft()),
@@ -495,7 +501,8 @@ def create_sledrun_wiki(sledrun_json: Dict, map_json: Optional[Dict], impression
 
     rodelbahnbox = rodelbahnbox_to_str(sledrun_rbb_json)
 
-    return template.render(sledrun_json=sledrun_json,
+    text = template.render(sledrun_json=sledrun_json,
                            rodelbahnbox=rodelbahnbox,
                            map_json=map_json, impressions_title=impressions_title,
                            h=Jinja2Tools(), **sledrun_json)
+    return strip_eol(text)