-def wikipage_to_wrsleddingcache1_2(wiki_page):
- """Converts a sledding route wiki page (wradmin.model.page_table)
- to a sledding route wrsleddingcache database record (version 1.2) (wradmin.model.wrsleddingcache1_2_table)."""
- sl = model.WrSleddingCache1_2()
- sl.page_id = wiki_page.page_id
- sl.page_title = to_title(wiki_page.page_title)
-
- # Match Rodelbahnbox
- wikitext = wiki_page.old_text
- regexp = re.compile(u"\{\{(Rodelbahnbox[^\}]*)\}\}", re.DOTALL)
- match = regexp.search(wikitext)
- if not match:
- raise Exception(u"No 'Rodelbahnbox' found")
- box = match.group(1)
-
- # Process Rodelbahnbox
- for property in box.split('|'):
- property = property.strip()
- if property == u'Rodelbahnbox': continue
- key_value = property.split('=')
- if len(key_value) != 2:
- raise Exception(u"Property '%s' has unexpected format" % key_value)
- key = key_value[0].strip()
- value = key_value[1].strip()
- if key == u'Rodelbahnnummer': pass
- elif key == u'Länge': sl.length = conv(to_unsigned, value, u'Länge')
- elif key == u'Gehzeit': sl.walktime = conv(to_unsigned, value, u'Gehzeit')
- elif key == u'Höhe oben': sl.height_top = conv(to_unsigned, value, u'Höhe oben')
- elif key == u'Höhe unten': sl.height_bottom = conv(to_unsigned, value, u'Höhe unten')
- elif key == u'Aufstieg getrennt': sl.walkup_separate = conv(to_bool, value, u'Aufstieg getrennt')
- elif key == u'Lift': sl.lift = conv(to_bool, value, u'Lift')
- elif key == u'Beleuchtung': sl.night_light = conv(to_bool, value, u'Beleuchtung')
- elif key == u'Rodelverleih': sl.sledge_rental = conv(to_bool, value, u'Rodelverleih')
- elif key == u'Öffentliche Anreise': sl.public_transport = conv(to_bool, value, u'Öffentliche Anreise')
- elif key == u'Bild': sl.image = value
- elif key == u'Position': (sl.position_latitude, sl.position_longitude) = conv(to_geo, value, u'Position') # '47.583333 N 15.75 E'
- elif key == u'Auskunft': sl.information = conv(to_phone_info, value, u'Auskunft')
- elif key == u'In Übersichtskarte': sl.show_in_overview = conv(to_bool, value, u'In Übersichtskarte')
- elif key == u'Aufnahmedatum': sl.creation_date = conv(to_date, value, u'Aufnahmedatum') # '2006-03-15'
- elif key == u'Lawinengefahr':
- if not value in [u'kaum', u'selten', u'gelegentlich', u'häufig']: raise formencode.Invalid(u"No valid value for 'Lawinengefahr': '%s'" % value, value, None)
- else: raise formencode.Invalid(u"Unbekannte Eigenschaft der Rodelbahnbox: '%s' (mit Wert '%s')" % (key, value), value, None)
- sl.under_construction = None
-
- # Match Forumlink (e.g. {{Forumlink|68}})
- match = re.search(u"\{\{Forumlink\|(\d+)\}\}", wikitext)
- if match: sl.forum_id = match.group(1)
-
- return sl
-
-
-def wikipage_to_wrsleddingcache(wiki_page):
- """Converts a sledding route wiki page (wradmin.model.page_table)
- to a sledding route wrsleddingcache database record (wradmin.model.wrsleddingcache_table).
- Raises a RuntimeError if the format is not OK
- sledding_wiki is a column of tabe "page".
- Returns the WrSleddingCache class"""
- sl = model.WrSleddingCache()
- sl.page_id = wiki_page.page_id
- sl.page_title = to_title(wiki_page.page_title)
- errors = [] # List of errors with localized messages
-
- # Match Rodelbahnbox
- wikitext = wiki_page.old_text
- regexp = re.compile(u"\{\{(Rodelbahnbox[^\}]*)\}\}", re.DOTALL)
- match = regexp.search(wikitext)
- if not match:
- raise RuntimeError(_(u"No 'Rodelbahnbox' found"))
- box = match.group(1)
-
- # Process Rodelbahnbox
- for property in box.split('|'):
- property = property.strip()
- if property == u'Rodelbahnbox': continue
- key_value = property.split('=')
- if len(key_value) != 2:
- raise RuntimeError(_(u"Property '%s' has unexpected format") % key_value)
- key = key_value[0].strip()
- value = key_value[1].strip()
- if key in [u'Rodelbahnnummer', u'Lift']:
- errors.append(_("Property '%s' is not supported anymore, see %s.") % (key, 'http://www.winterrodeln.org/wiki/Vorlage:Rodelbahnbox'))
- elif key == u'Position': (sl.position_latitude, sl.position_longitude) = conv(to_geo, value, u'Position') # '47.583333 N 15.75 E'
- elif key == u'Position oben': (sl.top_latitude, sl.top_longitude) = conv(to_geo, value, u'Position oben') # '47.583333 N 15.75 E'
-
-
-| Höhe oben = 1700
-| Position unten =
-| Höhe unten = 1200
-| Länge = 3500
-| Schwierigkeit = mittel
-| Lawinen = kaum
-| Betreiber = Max Mustermann
-| Öffentliche Anreise = Mittelmäßig
-| Gehzeit = 90
-| Aufstieg getrennt = Ja
-| Aufstiegshilfe = Gondel (unterer Teil)
-| Beleuchtungsanlage = Ja
-| Beleuchtungstage = 3 (Montag, Mittwoch, Freitag)
-| Rodelverleih = Ja (Talstation Serlesbahnan)
-| Gütesiegel = Tiroler Naturrodelbahn-Gütesiegel 2009 mittel
-| Webauskunft = http://www.nösslachhütte.at/page9.php
-| Telefonauskunft = +43-664-5487520 (Mitterer Alm)
-| Bild = Rodelbahn_Mitterer_Alm_04.jpg
-| In Übersichtskarte = Ja
-| Forumid = 33
-
- sa.Column("top_elevation", types.Integer),
- sa.Column("bottom_latitude", types.Float),
- sa.Column("bottom_longitude", types.Float),
- sa.Column("bottom_elevation", types.Integer),
- sa.Column("length", types.Integer),
- sa.Column("difficulty", types.Integer),
- sa.Column("avalanches", types.Integer),
- sa.Column("operator", types.Unicode(255)),
- sa.Column("public_transport", types.Integer),
- sa.Column("walkup_time", types.Integer),
- sa.Column("walkup_separate", types.Float),
- sa.Column("walkup_separate_comment", types.Unicode(255)),
- sa.Column("lift", types.Boolean),
- sa.Column("lift_details", types.Unicode(255)),
- sa.Column("night_light", types.Float),
- sa.Column("night_light_days", types.Integer),
- sa.Column("night_light_days_comment", types.Unicode(255)),
- sa.Column("sled_rental", types.Boolean),
- sa.Column("cachet", types.Unicode(255)),
- sa.Column("information_web", types.Unicode(255)),
- sa.Column("information_phone", types.Unicode(255)),
- sa.Column("image", types.Unicode(255)),
- sa.Column("show_in_overview", types.Boolean),
- sa.Column("forum_id", types.Integer),
- sa.Column("under_construction", types.Boolean),
- )
-
-
-
-
-
-
-
- elif key == u'Bild': sl.image = value
-
- elif key == u'Länge': sl.length = conv(to_unsigned, value, u'Länge')
- elif key == u'Gehzeit': sl.walktime = conv(to_unsigned, value, u'Gehzeit')
- elif key == u'Höhe oben': sl.height_top = conv(to_unsigned, value, u'Höhe oben')
- elif key == u'Höhe unten': sl.height_bottom = conv(to_unsigned, value, u'Höhe unten')
- elif key == u'Aufstieg getrennt':
- tristate = conv(to_tristate, value, u'Aufstieg getrennt')
- if tristate == (True, False): sl.walkup_separate = 1.0
- elif tristate == (True, True): sl.walkup_separate = 0.5
- elif tristate == (False, True): sl.walkup_separate = 0.0
- elif key == u'Aufstiegshilfe':
- valuecommentlist = conv(to_valuecommentlist, value, u'Aufstiegshilfe')
- lift = len(valuecommentlist) > 0
- for value, comment in valuecommentlist:
- if value == u'Nein':
- if len(valuecommentlist) != 1: raise formencode.Invalid('"Nein" kann mit keiner anderen Aufstiegshilfe kombiniert werden.', value, None)
- lift = False
- elif not value in [u'Sessellift', u'Gondel', u'Linienbus', u'Taxi', u'Sonstige']:
- raise formencode.Invalid(u'"%s" ist keine gültige Aufstiegshilfe.' % value, value, None)
- sl.lift = lift
- sl.lift_detail = model.validators.ValueCommentList().from_python(valuecommentlist)
- elif key == u'Beleuchtung': sl.night_light = conv(to_bool, value, u'Beleuchtung')
- elif key == u'Rodelverleih': sl.sledge_rental = conv(to_bool, value, u'Rodelverleih')
- elif key == u'Öffentliche Anreise': sl.public_transport = conv(to_bool, value, u'Öffentliche Anreise')
- elif key == u'Auskunft': sl.information = conv(to_phone_info, value, u'Auskunft')
- elif key == u'In Übersichtskarte': sl.show_in_overview = conv(to_bool, value, u'In Übersichtskarte')
- elif key == u'Aufnahmedatum': sl.creation_date = conv(to_date, value, u'Aufnahmedatum') # '2006-03-15'
- elif key == u'Lawinengefahr':
- if not value in [u'kaum', u'selten', u'gelegentlich', u'häufig']: raise formencode.Invalid(u"No valid value for 'Lawinengefahr': '%s'" % value, value, None)
- else: raise formencode.Invalid(u"Unbekannte Eigenschaft der Rodelbahnbox: '%s' (mit Wert '%s')" % (key, value), value, None)
- sl.under_construction = None
-
- # Match Forumlink (e.g. {{Forumlink|68}})
- match = re.search(u"\{\{Forumlink\|(\d+)\}\}", wikitext)
- if match: sl.forum_id = match.group(1)
-
- return sl
-
-