1 from typing import TypedDict, List, Literal, NotRequired, Required, NewType
3 Difficulty = Literal["leicht", "mittel", "schwer"]
4 Avalanches = Literal["kaum", "selten", "gelegentlich", "häufig"]
5 WalkupSeparate = Literal["Ja", "Nein", "Teilweise"]
6 WalkupSupportType = Literal["Sessellift", "Gondel", "Linienbus", "Taxi", "Sonstige"]
7 NightlightPossible = Literal["Ja", "Teilweise", "Nein"]
8 Weekday = Literal["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]
9 DayType = Literal['work_day']
10 PublicTransportQuality = Literal["Sehr gut", "Gut", "Mittelmäßig", "Schlecht", "Nein", "Ja"]
13 Phone = NewType('Phone', str)
14 OpeningHours = NewType('OpeningHours', str)
15 Elevation = NewType('Elevation', int)
16 Datetime = NewType('Datetime', str)
19 class Address(TypedDict):
20 country: NotRequired[str]
21 postcode: NotRequired[str]
22 city: NotRequired[str]
23 street: NotRequired[str]
24 housenumber: NotRequired[str]
27 class WalkupSupport(TypedDict):
28 type: Required[WalkupSupportType]
29 note: NotRequired[str]
32 class Weblink(TypedDict):
34 text: NotRequired[str]
37 class WrPage(TypedDict):
39 text: NotRequired[str]
42 class Position(TypedDict):
43 longitude: Required[float]
44 latitude: Required[float]
47 class PositionElevation(TypedDict):
48 position: NotRequired[Position]
49 elevation: NotRequired[Elevation]
52 class MediaWikiTemplateParameter(TypedDict):
57 class MediaWikiTemplate(TypedDict):
58 name: NotRequired[str]
59 parameter: NotRequired[List[MediaWikiTemplateParameter]]
62 class InfoPhone(TypedDict):
63 phone: Required[Phone]
65 note: NotRequired[str]
68 class TirolerNaturrodelbahnGütesiegel(TypedDict):
69 name: NotRequired[str]
70 organization: NotRequired[str]
71 first_issued: NotRequired[int]
72 valid_from: NotRequired[int]
73 valid_until: NotRequired[int]
74 forum_id: NotRequired[int]
75 thread_id: NotRequired[int]
76 stätte_id: NotRequired[int]
79 class SledRental(TypedDict):
80 name: NotRequired[str]
81 note: NotRequired[str]
82 wr_page: NotRequired[WrPage]
83 weblink: NotRequired[Weblink]
84 phone: NotRequired[Phone]
85 location: NotRequired[str]
86 address: NotRequired[Address]
87 opening_hours: NotRequired[OpeningHours]
88 direct: NotRequired[bool]
91 class Gastronomy(TypedDict):
92 name: NotRequired[str]
93 note: NotRequired[str]
94 wr_page: NotRequired[WrPage]
95 weblink: NotRequired[Weblink]
96 direct: NotRequired[bool]
99 class Departure(TypedDict):
100 direction: NotRequired[str]
101 datetime: NotRequired[Datetime]
104 class Arrival(TypedDict):
105 direction: NotRequired[str]
106 datetime: NotRequired[Datetime]
109 class PublicTransportSchedule(TypedDict):
110 day_type: NotRequired[DayType]
111 begin: NotRequired[Datetime]
112 minutes: NotRequired[int]
113 departure: NotRequired[List[Departure]]
114 arrival: NotRequired[List[Arrival]]
116 class PublicTransportStopLine(TypedDict):
117 vao_line_id: NotRequired[str]
118 line: NotRequired[str]
119 category: NotRequired[str]
120 operator: NotRequired[str]
121 schedules: NotRequired[List[PublicTransportSchedule]]
124 class PublicTransportStop(TypedDict):
125 name: NotRequired[str]
126 municipality: NotRequired[str]
127 name_local: NotRequired[str]
128 position: NotRequired[PositionElevation]
129 monitor_template: NotRequired[MediaWikiTemplate]
130 route_arrival_template: NotRequired[MediaWikiTemplate]
131 route_departure_template: NotRequired[MediaWikiTemplate]
132 note: NotRequired[str]
133 ifopt_stop_id: NotRequired[str]
134 vao_ext_id: NotRequired[str]
135 vvt_stop_id: NotRequired[int]
136 walk_distance: NotRequired[int]
137 walk_time: NotRequired[int]
138 lines: NotRequired[List[PublicTransportStopLine]]
141 class PublicTransportLine(TypedDict):
142 label: NotRequired[str]
143 name: NotRequired[str]
144 route: NotRequired[str]
145 note: NotRequired[str]
146 timetable_template: NotRequired[MediaWikiTemplate]
147 timetable_links: NotRequired[List[Weblink]]
150 class CarParking(TypedDict):
151 position: NotRequired[PositionElevation]
152 note: NotRequired[str]
155 class CarDistance(TypedDict):
156 km: NotRequired[float]
157 route: NotRequired[str]
158 minutes: NotRequired[int]
159 geonames_id: NotRequired[int]
160 onward_co2_kg: NotRequired[float]
163 class Sledrun(TypedDict):
165 aliases: NotRequired[List[str]]
166 entry_under_construction: NotRequired[bool]
167 official_url: NotRequired[str]
168 description: NotRequired[str]
169 image: NotRequired[str]
170 length: NotRequired[int]
171 difficulty: NotRequired[Difficulty]
172 avalanches: NotRequired[Avalanches]
173 has_operator: NotRequired[bool]
174 operator: NotRequired[str]
175 walkup_possible: NotRequired[bool]
176 walkup_separate: NotRequired[WalkupSeparate]
177 walkup_time: NotRequired[int]
178 walkup_supports: NotRequired[List[WalkupSupport]]
179 nightlight_description: NotRequired[str]
180 nightlight_possible: NotRequired[NightlightPossible]
181 nightlight_possible_note: NotRequired[str]
182 nightlight_weekdays: NotRequired[List[Weekday]]
183 nightlight_weekdays_count: NotRequired[int]
184 nightlight_weekdays_note: NotRequired[str]
185 sled_rental_direct: NotRequired[bool]
186 sled_rental: NotRequired[SledRental]
187 sled_rental_description: NotRequired[str]
188 has_cachet: NotRequired[bool]
189 tiroler_naturrodelbahn_gütesiegel: NotRequired[TirolerNaturrodelbahnGütesiegel]
190 show_in_overview: NotRequired[bool]
191 forum_id: NotRequired[int]
192 position: NotRequired[Position]
193 top: NotRequired[PositionElevation]
194 bottom: NotRequired[PositionElevation]
195 info_web: NotRequired[Weblink]
196 info_phone: NotRequired[List[InfoPhone]]
197 public_transport: NotRequired[PublicTransportQuality]
198 public_transport_description: NotRequired[str]
199 public_transport_stops: NotRequired[List[PublicTransportStop]]
200 public_transport_lines: NotRequired[List[PublicTransportLine]]
201 public_transport_links: NotRequired[List[Weblink]]
202 car_description: NotRequired[str]
203 car_parking: NotRequired[List[CarParking]]
204 car_distances: NotRequired[List[CarDistance]]
205 gastronomy_description: NotRequired[str]
206 gastronomy: NotRequired[List[Gastronomy]]
207 sledrun_list: NotRequired[List[WrPage]]
208 videos: NotRequired[List[Weblink]]
209 webcams: NotRequired[List[Weblink]]
210 see_also: NotRequired[List[Weblink]]
211 correction_name: NotRequired[str]
212 correction_email: NotRequired[str]
213 allow_reports: NotRequired[bool]
214 freizeitticket_tyrol: NotRequired[bool]
215 regio_card_tyrol: NotRequired[bool]