from itertools import takewhile, dropwhile
from typing import Optional, Any
-from mwparserfromhell.nodes import Template, Text, Tag
+from mwparserfromhell.nodes import Template, Text, Tag, Wikilink, ExternalLink
from mwparserfromhell.wikicode import Wikicode
+def optional_set(haystack: dict, key: str, value: Optional[Any]):
+ """Sets the key to value in haystack only if value is not None"""
+ if value is not None:
+ haystack[key] = value
+
+
+def wikilink_to_json(value: Wikilink) -> dict:
+ wl = {'title': str(value.title)}
+ if value.text is not None:
+ wl['text'] = str(value.text)
+ return wl
+
+
+def external_link_to_json(value: ExternalLink) -> dict:
+ link = {'url': str(value.url)}
+ if value.title is not None:
+ link['text'] = str(value.title)
+ return link
+
+
+def template_to_json(value: Template) -> dict:
+ parameter = []
+ for p in value.params:
+ parameter.append({'value': str(p)})
+ return {
+ 'name': str(value.name),
+ 'parameter': parameter
+ }
+
+
def get_sledrun_description(sledrun: Wikicode) -> Optional[str]:
"""Get description from sledrun"""
for v in sledrun.get_sections(levels=[2], matches='Allgemeines', include_headings=False):