Map mediawiki password field in mwdb.py.
[philipp/winterrodeln/wrpylib.git] / wrpylib / wrvalidators.py
index c73675069ab4b4d3f6d929ba897d66a830303705..c827d5e48f5a2400f92e1133158518b95232eec3 100644 (file)
@@ -1,5 +1,4 @@
 #!/usr/bin/python3.4
-# -*- coding: utf-8 -*-
 # $Id$
 # $HeadURL$
 """
@@ -305,7 +304,7 @@ opt_tristate_german_converter = FromToConverter(opt_tristate_german_from_str, op
 # -------------------------------
 
 def opt_tristate_german_comment_from_str(value):
-    """Ja, Nein or Vielleicht, optionally with comment in parenthesis."""
+    """Ja, Nein or Teilweise, optionally with comment in parenthesis."""
     return value_comment_from_str(value, opt_tristate_german_from_str, opt_str_from_str, True)
 
 
@@ -336,6 +335,14 @@ def url_to_str(value):
 # ---------------------
 
 def webauskunft_from_str(value):
+    """Converts a URL or 'Nein' to a tuple
+    'http://www.example.com/' -> (True, 'http://www.example.com/')
+    'Nein' -> (False, None)
+    '' -> (None, None)
+
+    :param value: URL or 'Nein'
+    :return: tuple
+    """
     return opt_no_german_from_str(value, url_from_str)
 
 
@@ -351,11 +358,11 @@ webauskunft_converter = FromToConverter(webauskunft_from_str, webauskunft_to_str
 
 def wikipage_from_str(value):
     """Validates wiki page name like '[[Birgitzer Alm]]'.
-    The page is not checked for existance.
+    The page is not checked for existence.
     An empty string is an error.
     '[[Birgitzer Alm]]' => '[[Birgitzer Alm]]'
     """
-    if not value.startswith('[[') or not value.endswith(']]'):
+    if re.match(r'\[\[[^\[\]]+\]\]$', value) is None:
         raise ValueError('No valid wiki page name "{}"'.format(value))
     return value
 
@@ -700,8 +707,8 @@ def wikibox_to_template(value, name, converter_dict):
 
 def template_from_str(value, name):
     wikicode = mwparserfromhell.parse(value)
-    template_list = wikicode.filter_templates(name)
-    if len(name) == 0:
+    template_list = wikicode.filter_templates(recursive=False, matches=lambda t: t.name.strip() == name)
+    if len(template_list) == 0:
         raise ValueError('No "{}" template was found'.format(name))
     if len(template_list) > 1:
         raise ValueError('{} "{}" templates were found'.format(len(template_list), name))
@@ -756,7 +763,7 @@ def rodelbahnbox_from_template(template):
 
 
 def rodelbahnbox_to_template(value):
-    return wikibox_to_template(value, RODELBAHNBOX_DICT, RODELBAHNBOX_TEMPLATE_NAME)
+    return wikibox_to_template(value, RODELBAHNBOX_TEMPLATE_NAME, RODELBAHNBOX_DICT)
 
 
 def rodelbahnbox_from_str(value):