Rewrote gasthausbox_to_inn to make use of the GasthausboxValidator.
authorphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Mon, 17 Mar 2014 20:15:57 +0000 (20:15 +0000)
committerphilipp <philipp@7aebc617-e5e2-0310-91dc-80fb5f6d2477>
Mon, 17 Mar 2014 20:15:57 +0000 (20:15 +0000)
git-svn-id: http://www.winterrodeln.org/svn/wrpylib/trunk@1938 7aebc617-e5e2-0310-91dc-80fb5f6d2477

wrpylib/wrmwmarkup.py

index 7571ac1251da707439cd29da14e4bbd339e74b7f..aa2b51b76f2de498e7632233358f1dd1e61a403b 100644 (file)
@@ -207,34 +207,22 @@ class GasthausboxValidator(wrpylib.wrvalidators.GasthausboxDictValidator):
 
 def gasthausbox_to_inn(wikitext, inn=None):
     """Converts a inn wiki page containing a {{Gasthausbox}} to an inn.
-    raises a formencode.Invalid exception if an error occurs.
+    inn may be an instance of WrInnCache or an "empty" class (default).
+    raises a formencode.Invalid exception if the format is not OK or the Gasthausbox is not found.
     :return: (start, end, inn) tuple."""
-    if inn is None:
-        class Inn(object): pass
-        inn = Inn()
-
-    # Match Gasthausbox
+    # find Gasthausbox
     start, end = wrpylib.mwmarkup.find_template(wikitext, u'Gasthausbox')
     if start is None: raise formencode.Invalid(u"No 'Gasthausbox' found", wikitext, None)
-    template_title, properties = wrpylib.mwmarkup.split_template(wikitext[start:end])
-
-    # Process properties
-    for key, value in properties.iteritems():
-        if   key == u'Position': inn.position_latitude, inn.position_longitude = _conv(wrpylib.wrvalidators.GeoNone().to_python, value, key) # '47.583333 N 15.75 E'
-        elif key == u'Höhe': inn.position_elevation = _conv(wrpylib.wrvalidators.UnsignedNone().to_python, value, key)
-        elif key == u'Betreiber': inn.operator = _conv(wrpylib.wrvalidators.UnicodeNone().to_python, value, key)
-        elif key == u'Sitzplätze': inn.seats = _conv(wrpylib.wrvalidators.UnsignedNone().to_python, value, key)
-        elif key == u'Übernachtung': inn.overnight, inn.overnight_comment = _conv(wrpylib.wrvalidators.BoolUnicodeTupleValidator().to_python, value, key)
-        elif key == u'Rauchfrei': inn.nonsmoker_area, inn.smoker_area = _conv(wrpylib.wrvalidators.GermanTristateTuple().to_python, value, key)
-        elif key == u'Rodelverleih': inn.sled_rental, inn.sled_rental_comment = _conv(wrpylib.wrvalidators.BoolUnicodeTupleValidator().to_python, value, key)
-        elif key == u'Handyempfang': inn.mobile_provider = _conv(wrpylib.wrvalidators.ValueCommentListNeinLoopNone().to_python, value, key)
-        elif key == u'Homepage': inn.homepage = _conv(wrpylib.wrvalidators.UrlNeinNone().to_python, value, key)
-        elif key == u'E-Mail': inn.email_list = _conv(wrpylib.wrvalidators.EmailCommentListNeinLoopNone(allow_masked_email=True).to_python, value, key)
-        elif key == u'Telefon': inn.phone_list = _conv(wrpylib.wrvalidators.PhoneCommentListNeinLoopNone(comments_are_optional=True).to_python, value, key)
-        elif key == u'Bild': inn.image = _conv(wrpylib.wrvalidators.UnicodeNone().to_python, value, key)
-        elif key == u'Rodelbahnen': inn.sledding_list = _conv(wrpylib.wrvalidators.WikiPageListLoopNone().to_python, value, key)
-        else: raise formencode.Invalid(u"Unbekannte Eigenschaft der Gasthausbox: '%s' (mit Wert '%s')" % (key, value), value, None)
-    return start, end, inn
+
+    # convert to inn
+    if inn is None:
+        state = None
+    else:
+        class State(object):
+            pass
+        state = State()
+        state.inn = inn
+    return start, end, GasthausboxValidator().to_python(wikitext[start:end], state)
 
 
 def inn_to_gasthausbox(inn):