The order of XML attributes is now retained.
[philipp/winterrodeln/wrpylib.git] / tests / test_wrmwmarkup.py
1 import collections
2 import textwrap
3 import unittest
4 import mwparserfromhell
5 import wrpylib.wrvalidators
6 import wrpylib.wrmwmarkup
7 from wrpylib.wrvalidators import LonLat
8 from wrpylib.wrmwmarkup import sledrun_from_rodelbahnbox, sledrun_to_rodelbahnbox, \
9     inn_from_gasthausbox, inn_to_gasthausbox, lonlat_ele_from_template, latlon_ele_to_template
10
11
12 class TestSledrun(unittest.TestCase):
13     def test_sledrun_from_rodelbahnbox(self):
14         class Sledrun:
15             pass
16         rodelbahnbox = collections.OrderedDict([
17             ('Position', LonLat(9.986508, 47.30982)),
18             ('Position oben', None),
19             ('Höhe oben', 1244),
20             ('Position unten', LonLat(8.506047, 46.20210)),
21             ('Höhe unten', None),
22             ('Länge', 5045),
23             ('Schwierigkeit', 3),
24             ('Lawinen', 2),
25             ('Betreiber', 'SchneeFunFit'),
26             ('Öffentliche Anreise', 2),
27             ('Aufstieg möglich', True),
28             ('Aufstieg getrennt', (0.0, None)),
29             ('Gehzeit', 105),
30             ('Aufstiegshilfe', [('Sessellift', 'gratis'), ('Bus', None)]),
31             ('Beleuchtungsanlage', (0.0, 'in Planung für 2020')),
32             ('Beleuchtungstage', (None, None)),
33             ('Rodelverleih', []),
34             ('Gütesiegel', []),
35             ('Webauskunft', (True, 'http://example.com/schneelage')),
36             ('Telefonauskunft', [('+43-664-1808482', 'Bergkristallhütte')]),
37             ('Bild', 'Rodelbahn Bergkristallhütte 2009-03-03.jpg'),
38             ('In Übersichtskarte', True),
39             ('Forumid', 72)])
40         sledrun = Sledrun()
41         sledrun_from_rodelbahnbox(rodelbahnbox, sledrun)
42         self.assertEqual(47.30982, sledrun.position_latitude)
43         self.assertEqual(9.986508, sledrun.position_longitude)
44         self.assertEqual(None, sledrun.top_latitude)
45         self.assertEqual(None, sledrun.top_longitude)
46         self.assertEqual(1244, sledrun.top_elevation)
47         self.assertEqual(46.20210, sledrun.bottom_latitude)
48         self.assertEqual(8.506047, sledrun.bottom_longitude)
49         self.assertEqual(None, sledrun.bottom_elevation)
50         self.assertEqual(5045, sledrun.length)
51         self.assertEqual(3, sledrun.difficulty)
52         self.assertEqual(2, sledrun.avalanches)
53         self.assertEqual('SchneeFunFit', sledrun.operator)
54         self.assertEqual(2, sledrun.public_transport)
55         self.assertEqual(True, sledrun.walkup_possible)
56         self.assertEqual(105, sledrun.walkup_time)
57         self.assertEqual(0.0, sledrun.walkup_separate)
58         self.assertEqual(None, sledrun.walkup_separate_comment)
59         self.assertEqual(True, sledrun.lift)
60         self.assertEqual('Sessellift (gratis); Bus', sledrun.lift_details)
61         self.assertEqual(0.0, sledrun.night_light)
62         self.assertEqual('in Planung für 2020', sledrun.night_light_comment)
63         self.assertEqual(None, sledrun.night_light_days)
64         self.assertEqual(None, sledrun.night_light_days_comment)
65         self.assertEqual(False, sledrun.sled_rental)
66         self.assertEqual('Nein', sledrun.sled_rental_comment)
67         self.assertEqual('Nein', sledrun.cachet)
68         self.assertEqual('http://example.com/schneelage', sledrun.information_web)
69         self.assertEqual('+43-664-1808482 (Bergkristallhütte)', sledrun.information_phone)
70         self.assertEqual('Rodelbahn Bergkristallhütte 2009-03-03.jpg', sledrun.image)
71         self.assertEqual(True, sledrun.show_in_overview)
72         self.assertEqual(72, sledrun.forum_id)
73
74     def test_sledrun_to_rodelbahnbox(self):
75         class Sledrun:
76             pass
77         sledrun = Sledrun()
78         sledrun.position_longitude = 13.5
79         sledrun.position_latitude = 50.7
80         sledrun.top_longitude = 12.2
81         sledrun.top_latitude = 49.8
82         sledrun.top_elevation = 3456
83         sledrun.bottom_longitude = 9.89
84         sledrun.bottom_latitude = 51.2
85         sledrun.bottom_elevation = 2075
86         sledrun.length = 9644
87         sledrun.difficulty = 3
88         sledrun.avalanches = 2
89         sledrun.operator = 'McRodel'
90         sledrun.public_transport = 3
91         sledrun.walkup_possible = True
92         sledrun.walkup_time = 77
93         sledrun.walkup_separate = 0.5
94         sledrun.walkup_separate_comment = 'Nur unterer Teil'
95         sledrun.lift = True
96         sledrun.lift_details = 'Sessellift'
97         sledrun.night_light = 1.0
98         sledrun.night_light_comment = 'Schlecht beleuchtet'
99         sledrun.night_light_days = 6
100         sledrun.night_light_days_comment = 'Mo-Sa'
101         sledrun.sled_rental = True
102         sledrun.sled_rental_comment = 'In der Hütte'
103         sledrun.cachet = 'Tiroler Rodelbahngütesielgel mittelschwer 2010'
104         sledrun.information_web = 'http://example.com'
105         sledrun.information_phone = '+4364412345678'
106         sledrun.image = 'Sicht_von_unten.jpg'
107         sledrun.show_in_overview = True
108         sledrun.forum_id = 65
109         rodelbahnbox = sledrun_to_rodelbahnbox(sledrun)
110         self.assertEqual(rodelbahnbox['Position'], LonLat(lon=13.5, lat=50.7))
111         self.assertEqual(rodelbahnbox['Position oben'], LonLat(12.2, 49.8))
112         self.assertEqual(rodelbahnbox['Höhe oben'], 3456)
113         self.assertEqual(rodelbahnbox['Position unten'], LonLat(9.89, 51.2))
114         self.assertEqual(rodelbahnbox['Höhe unten'], 2075)
115         self.assertEqual(rodelbahnbox['Länge'], 9644)
116         self.assertEqual(rodelbahnbox['Schwierigkeit'], 3)
117         self.assertEqual(rodelbahnbox['Lawinen'], 2)
118         self.assertEqual(rodelbahnbox['Betreiber'], 'McRodel')
119         self.assertEqual(rodelbahnbox['Öffentliche Anreise'], 3)
120         self.assertEqual(rodelbahnbox['Aufstieg möglich'], True)
121         self.assertEqual(rodelbahnbox['Aufstieg getrennt'], (0.5, 'Nur unterer Teil'))
122         self.assertEqual(rodelbahnbox['Gehzeit'], 77)
123         self.assertEqual(rodelbahnbox['Aufstiegshilfe'], [('Sessellift', None)])
124         self.assertEqual(rodelbahnbox['Beleuchtungsanlage'], (1.0, 'Schlecht beleuchtet'))
125         self.assertEqual(rodelbahnbox['Beleuchtungstage'], (6, 'Mo-Sa'))
126         self.assertEqual(rodelbahnbox['Rodelverleih'], (True, 'In der Hütte'))
127         self.assertEqual(rodelbahnbox['Gütesiegel'], 'Tiroler Rodelbahngütesielgel mittelschwer 2010')
128         self.assertEqual(rodelbahnbox['Webauskunft'], 'http://example.com')
129         self.assertEqual(rodelbahnbox['Bild'], 'Sicht_von_unten.jpg')
130         self.assertEqual(rodelbahnbox['In Übersichtskarte'], True)
131         self.assertEqual(rodelbahnbox['Forumid'], 65)
132
133
134 class TestInn(unittest.TestCase):
135     def test_inn_from_gasthausbox(self):
136         class Inn:
137             pass
138         gasthausbox = collections.OrderedDict()
139         gasthausbox['Position'] = LonLat(11.015883, 9.876000)
140         gasthausbox['Höhe'] = 2145
141         gasthausbox['Betreiber'] = 'Max Mustermann'
142         gasthausbox['Sitzplätze'] = 30
143         gasthausbox['Übernachtung'] = (True, '2 Zimmer')
144         gasthausbox['Rauchfrei'] = 0.5
145         gasthausbox['Rodelverleih'] = (True, '6 Euro')
146         gasthausbox['Handyempfang'] = [('A1', None), ('Drei', 'schlecht')]
147         gasthausbox['Homepage'] = (True, 'http://www.graf-ferdinand.at/')
148         gasthausbox['E-Mail'] = [(('max.mustermann@graf-ferdinand.at', False), None), (('ich@example.com', True), 'privat')]
149         gasthausbox['Telefon'] = [('+43-5039-21666', None), ('+43-686-4134880', 'Sommer')]
150         gasthausbox['Bild'] = 'Gasthaus_Graf_Ferdinand_Haus_01.jpg'
151         gasthausbox['Rodelbahnen'] = ['[[Finstertaler Speicher]]', '[[Birgitzer Alm]]']
152         inn = Inn()
153         inn_from_gasthausbox(gasthausbox, inn)
154         self.assertEqual(inn.position_latitude, 9.876000)
155         self.assertEqual(inn.position_longitude, 11.015883)
156         self.assertEqual(inn.position_elevation, 2145)
157         self.assertEqual(inn.operator, 'Max Mustermann')
158         self.assertEqual(inn.seats, 30)
159         self.assertEqual(inn.overnight, True)
160         self.assertEqual(inn.overnight_comment, '2 Zimmer')
161         self.assertEqual(inn.smoker_area, True)
162         self.assertEqual(inn.nonsmoker_area, True)
163         self.assertEqual(inn.sled_rental, True)
164         self.assertEqual(inn.sled_rental_comment, '6 Euro')
165         self.assertEqual(inn.mobile_provider, 'A1; Drei (schlecht)')
166         self.assertEqual(inn.homepage, 'http://www.graf-ferdinand.at/')
167         self.assertEqual(inn.email_list, 'max.mustermann@graf-ferdinand.at; ich(at)example.com (privat)')
168         self.assertEqual(inn.phone_list, '+43-5039-21666; +43-686-4134880 (Sommer)')
169         self.assertEqual(inn.image, 'Gasthaus_Graf_Ferdinand_Haus_01.jpg')
170         self.assertEqual(inn.sledding_list, '[[Finstertaler Speicher]]; [[Birgitzer Alm]]')
171
172     def test_inn_to_gasthausbox(self):
173         class Inn:
174             pass
175         inn = Inn()
176         inn.position_latitude = 9.876000
177         inn.position_longitude = 11.015883
178         inn.position_elevation = 2145
179         inn.operator = 'Max Mustermann'
180         inn.seats = 30
181         inn.overnight = True
182         inn.overnight_comment = '2 Zimmer'
183         inn.smoker_area = True
184         inn.nonsmoker_area = True
185         inn.sled_rental = True
186         inn.sled_rental_comment = '6 Euro'
187         inn.mobile_provider = 'A1; Drei (schlecht)'
188         inn.homepage = 'http://www.graf-ferdinand.at/'
189         inn.email_list = 'max.mustermann@graf-ferdinand.at; ich(at)example.com (privat)'
190         inn.phone_list = '+43-5039-21666; +43-686-4134880 (Sommer)'
191         inn.image = 'Gasthaus_Graf_Ferdinand_Haus_01.jpg'
192         inn.sledding_list = '[[Finstertaler Speicher]]; [[Birgitzer Alm]]'
193         gasthausbox = inn_to_gasthausbox(inn)
194         self.assertEqual(gasthausbox['Position'], LonLat(11.015883, 9.876000))
195         self.assertEqual(gasthausbox['Höhe'], 2145)
196         self.assertEqual(gasthausbox['Betreiber'], 'Max Mustermann')
197         self.assertEqual(gasthausbox['Sitzplätze'], 30)
198         self.assertEqual(gasthausbox['Übernachtung'], (True, '2 Zimmer'))
199         self.assertEqual(gasthausbox['Rauchfrei'], 0.5)
200         self.assertEqual(gasthausbox['Rodelverleih'], (True, '6 Euro'))
201         self.assertEqual(gasthausbox['Handyempfang'], [('A1', None), ('Drei', 'schlecht')])
202         self.assertEqual(gasthausbox['Homepage'], (True, 'http://www.graf-ferdinand.at/'))
203         self.assertEqual(gasthausbox['E-Mail'], [(('max.mustermann@graf-ferdinand.at', False), None), (('ich@example.com', True), 'privat')])
204         self.assertEqual(gasthausbox['Telefon'], [('+43-5039-21666', None), ('+43-686-4134880', 'Sommer')])
205         self.assertEqual(gasthausbox['Bild'], 'Gasthaus_Graf_Ferdinand_Haus_01.jpg')
206         self.assertEqual(gasthausbox['Rodelbahnen'], ['[[Finstertaler Speicher]]', '[[Birgitzer Alm]]'])
207
208     def test_inn_from_gasthausbox_no(self):
209         class Inn:
210             pass
211         gasthausbox = collections.OrderedDict()
212         gasthausbox['Position'] = None
213         gasthausbox['Höhe'] = None
214         gasthausbox['Betreiber'] = None
215         gasthausbox['Sitzplätze'] = None
216         gasthausbox['Übernachtung'] = (False, None)
217         gasthausbox['Rauchfrei'] = 0.0
218         gasthausbox['Rodelverleih'] = (False, None)
219         gasthausbox['Handyempfang'] = []
220         gasthausbox['Homepage'] = (False, None)
221         gasthausbox['E-Mail'] = []
222         gasthausbox['Telefon'] = []
223         gasthausbox['Bild'] = None
224         gasthausbox['Rodelbahnen'] = []
225         inn = Inn()
226         inn_from_gasthausbox(gasthausbox, inn)
227         self.assertEqual(inn.position_latitude, None)
228         self.assertEqual(inn.position_longitude, None)
229         self.assertEqual(inn.position_elevation, None)
230         self.assertEqual(inn.operator, None)
231         self.assertEqual(inn.seats, None)
232         self.assertEqual(inn.overnight, False)
233         self.assertEqual(inn.overnight_comment, None)
234         self.assertEqual(inn.smoker_area, True)
235         self.assertEqual(inn.nonsmoker_area, False)
236         self.assertEqual(inn.sled_rental, False)
237         self.assertEqual(inn.sled_rental_comment, None)
238         self.assertEqual(inn.mobile_provider, 'Nein')
239         self.assertEqual(inn.homepage, 'Nein')
240         self.assertEqual(inn.email_list, 'Nein')
241         self.assertEqual(inn.phone_list, 'Nein')
242         self.assertEqual(inn.image, None)
243         self.assertEqual(inn.sledding_list, 'Nein')
244
245     def test_inn_to_gasthausbox_no(self):
246         class Inn:
247             pass
248         inn = Inn()
249         inn.position_latitude = None
250         inn.position_longitude = None
251         inn.position_elevation = None
252         inn.operator = None
253         inn.seats = None
254         inn.overnight = False
255         inn.overnight_comment = None
256         inn.smoker_area = True
257         inn.nonsmoker_area = False
258         inn.sled_rental = False
259         inn.sled_rental_comment = None
260         inn.mobile_provider = 'Nein'
261         inn.homepage = 'Nein'
262         inn.email_list = 'Nein'
263         inn.phone_list = 'Nein'
264         inn.image = None
265         inn.sledding_list = 'Nein'
266         gasthausbox = inn_to_gasthausbox(inn)
267         self.assertEqual(gasthausbox['Position'], None)
268         self.assertEqual(gasthausbox['Höhe'], None)
269         self.assertEqual(gasthausbox['Betreiber'], None)
270         self.assertEqual(gasthausbox['Sitzplätze'], None)
271         self.assertEqual(gasthausbox['Übernachtung'], (False, None))
272         self.assertEqual(gasthausbox['Rauchfrei'], 0.0)
273         self.assertEqual(gasthausbox['Rodelverleih'], (False, None))
274         self.assertEqual(gasthausbox['Handyempfang'], [])
275         self.assertEqual(gasthausbox['Homepage'], (False, None))
276         self.assertEqual(gasthausbox['E-Mail'], [])
277         self.assertEqual(gasthausbox['Telefon'], [])
278         self.assertEqual(gasthausbox['Bild'], None)
279         self.assertEqual(gasthausbox['Rodelbahnen'], [])
280
281     def test_inn_from_gasthausbox_none(self):
282         class Inn:
283             pass
284         gasthausbox = collections.OrderedDict()
285         gasthausbox['Position'] = None
286         gasthausbox['Höhe'] = None
287         gasthausbox['Betreiber'] = None
288         gasthausbox['Sitzplätze'] = None
289         gasthausbox['Übernachtung'] = (None, None)
290         gasthausbox['Rauchfrei'] = None
291         gasthausbox['Rodelverleih'] = (None, None)
292         gasthausbox['Handyempfang'] = None
293         gasthausbox['Homepage'] = (None, None)
294         gasthausbox['E-Mail'] = None
295         gasthausbox['Telefon'] = None
296         gasthausbox['Bild'] = None
297         gasthausbox['Rodelbahnen'] = None
298         inn = Inn()
299         inn_from_gasthausbox(gasthausbox, inn)
300         self.assertEqual(inn.position_latitude, None)
301         self.assertEqual(inn.position_longitude, None)
302         self.assertEqual(inn.position_elevation, None)
303         self.assertEqual(inn.operator, None)
304         self.assertEqual(inn.seats, None)
305         self.assertEqual(inn.overnight, None)
306         self.assertEqual(inn.overnight_comment, None)
307         self.assertEqual(inn.smoker_area, None)
308         self.assertEqual(inn.nonsmoker_area, None)
309         self.assertEqual(inn.sled_rental, None)
310         self.assertEqual(inn.sled_rental_comment, None)
311         self.assertEqual(inn.mobile_provider, None)
312         self.assertEqual(inn.homepage, None)
313         self.assertEqual(inn.email_list, None)
314         self.assertEqual(inn.phone_list, None)
315         self.assertEqual(inn.image, None)
316         self.assertEqual(inn.sledding_list, None)
317
318     def test_inn_to_gasthausbox_none(self):
319         class Inn:
320             pass
321         inn = Inn()
322         inn.position_latitude = None
323         inn.position_longitude = None
324         inn.position_elevation = None
325         inn.operator = None
326         inn.seats = None
327         inn.overnight = None
328         inn.overnight_comment = None
329         inn.smoker_area = None
330         inn.nonsmoker_area = None
331         inn.sled_rental = None
332         inn.sled_rental_comment = None
333         inn.mobile_provider = None
334         inn.homepage = None
335         inn.email_list = None
336         inn.phone_list = None
337         inn.image = None
338         inn.sledding_list = None
339         gasthausbox = inn_to_gasthausbox(inn)
340         self.assertEqual(gasthausbox['Position'], None)
341         self.assertEqual(gasthausbox['Höhe'], None)
342         self.assertEqual(gasthausbox['Betreiber'], None)
343         self.assertEqual(gasthausbox['Sitzplätze'], None)
344         self.assertEqual(gasthausbox['Übernachtung'], (None, None))
345         self.assertEqual(gasthausbox['Rauchfrei'], None)
346         self.assertEqual(gasthausbox['Rodelverleih'], (None, None))
347         self.assertEqual(gasthausbox['Handyempfang'], None)
348         self.assertEqual(gasthausbox['Homepage'], (None, None))
349         self.assertEqual(gasthausbox['E-Mail'], None)
350         self.assertEqual(gasthausbox['Telefon'], None)
351         self.assertEqual(gasthausbox['Bild'], None)
352         self.assertEqual(gasthausbox['Rodelbahnen'], None)
353
354
355 class TestLonlatEle(unittest.TestCase):
356     def test_lonlat_ele_from_template(self):
357         template = mwparserfromhell.parse('{{Position oben|46.942239 N 11.468819 E|1866}}').filter_templates()[0]
358         lonlat, ele = lonlat_ele_from_template(template)
359         self.assertEqual(LonLat(11.468819, 46.942239), lonlat)
360         self.assertEqual(1866, ele)
361
362     def test_latlon_ele_to_template(self):
363         template = latlon_ele_to_template((LonLat(11.468819, 46.942239), 1866), 'Position oben')
364         self.assertEqual('{{Position oben|46.942239 N 11.468819 E|1866}}', template)
365
366
367 class TestWrMap(unittest.TestCase):
368     def test_parse_wrmap(self):
369         wikitext = '''
370         <wrmap lat="47.2417134" lon="11.21408895" zoom="14" width="700" height="400">
371         <gasthaus name="Rosskogelhütte" wiki="Rosskogelhütte">47.240689 11.190454</gasthaus>
372         <parkplatz>47.245789 11.238971</parkplatz>
373         <haltestelle name="Oberperfuss Rangger Köpfl Lift">47.245711 11.238283</haltestelle>
374         <rodelbahn>
375             47.238587 11.203360
376             47.244951 11.230868
377             47.245470 11.237853
378         </rodelbahn>
379         </wrmap>
380         '''
381         json = wrpylib.wrmwmarkup.parse_wrmap(wikitext)
382         self.assertEqual(json['properties']['lon'], 11.21408895)
383         self.assertEqual(json['properties']['lat'], 47.2417134)
384         self.assertEqual(json['properties']['zoom'], 14)
385         self.assertEqual(json['properties']['width'], 700)
386         self.assertEqual(json['properties']['height'], 400)
387         self.assertEqual(json['features'][0]['properties']['type'], 'gasthaus')
388         self.assertEqual(json['features'][0]['properties']['name'], 'Rosskogelhütte')
389         self.assertEqual(json['features'][0]['properties']['wiki'], 'Rosskogelhütte')
390         self.assertEqual(json['features'][0]['geometry']['coordinates'], [11.190454, 47.240689])
391         self.assertEqual(json['features'][1]['properties']['type'], 'parkplatz')
392         self.assertEqual(json['features'][1]['geometry']['coordinates'], [11.238971, 47.245789])
393         self.assertEqual(json['features'][2]['properties']['type'], 'haltestelle')
394         self.assertEqual(json['features'][2]['properties']['name'], 'Oberperfuss Rangger Köpfl Lift')
395         self.assertEqual(json['features'][2]['geometry']['coordinates'], [11.238283, 47.245711])
396         self.assertEqual(json['features'][3]['properties']['type'], 'rodelbahn')
397         self.assertEqual(json['features'][3]['geometry']['coordinates'], [
398             [11.203360, 47.238587],
399             [11.230868, 47.244951],
400             [11.237853, 47.245470]])
401
402     def test_create_wrmap(self):
403         geojson = {
404             'type': 'FeatureCollection',
405             'features':
406                 [{
407                     'type': 'Feature',
408                     'geometry': {
409                         'type': 'Point',
410                         'coordinates': [11.190454, 47.240689]},
411                     'properties': {'type': 'gasthaus', 'name': 'Rosskogelhütte', 'wiki': 'Rosskogelhütte'}
412                 }, {
413                     'type': 'Feature',
414                     'geometry': {
415                         'type': 'Point',
416                         'coordinates': [11.238971, 47.245789]},
417                     'properties': {'type': 'parkplatz'}
418                 }, {
419                     'type': 'Feature',
420                     'geometry': {
421                         'type': 'Point',
422                         'coordinates': [11.238283, 47.245711]},
423                     'properties': {'type': 'haltestelle', 'name': 'Oberperfuss Rangger Köpfl Lift'}
424                 }, {
425                     'type': 'Feature',
426                     'geometry': {
427                         'type': 'LineString',
428                         'coordinates': [
429                             [11.203360, 47.238587],
430                             [11.230868, 47.244951],
431                             [11.237853, 47.245470]]},
432                     'properties': {'type': 'rodelbahn'}
433                 }],
434             'properties': {
435                 'lon': 11.21408895,
436                 'lat': 47.2417134,
437                 'zoom': 14,
438                 'width': 700,
439                 'height': 400}
440         }
441
442         wikitext = wrpylib.wrmwmarkup.create_wrmap(geojson)
443         self.assertEqual(wikitext, textwrap.dedent('''\
444         <wrmap lon="11.214089" lat="47.241713" zoom="14" width="700" height="400">
445
446         <gasthaus name="Rosskogelhütte" wiki="Rosskogelhütte">47.240689 N 11.190454 E</gasthaus>
447         <parkplatz>47.245789 N 11.238971 E</parkplatz>
448         <haltestelle name="Oberperfuss Rangger Köpfl Lift">47.245711 N 11.238283 E</haltestelle>
449
450         <rodelbahn>
451         47.238587 N 11.203360 E
452         47.244951 N 11.230868 E
453         47.245470 N 11.237853 E
454         </rodelbahn>
455
456         </wrmap>'''))