]> ToastFreeware Gitweb - philipp/winterrodeln/wrpylib.git/blob - wrpylib/sledrun_json.py
VAO is missing important streets in Switzerland.
[philipp/winterrodeln/wrpylib.git] / wrpylib / sledrun_json.py
1 from typing import TypedDict, List, Literal, NotRequired, Required, NewType
2
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"]
11
12
13 Phone = NewType('Phone', str)
14 OpeningHours = NewType('OpeningHours', str)
15 Elevation = NewType('Elevation', int)
16 Datetime = NewType('Datetime', str)
17
18
19 class Address(TypedDict):
20     country: NotRequired[str]
21     postcode: NotRequired[str]
22     city: NotRequired[str]
23     street: NotRequired[str]
24     housenumber: NotRequired[str]
25
26
27 class WalkupSupport(TypedDict):
28     type: Required[WalkupSupportType]
29     note: NotRequired[str]
30
31
32 class Weblink(TypedDict):
33     url: Required[str]
34     text: NotRequired[str]
35
36
37 class WrPage(TypedDict):
38     title: Required[str]
39     text: NotRequired[str]
40
41
42 class Position(TypedDict):
43     longitude: Required[float]
44     latitude: Required[float]
45
46
47 class PositionElevation(TypedDict):
48     position: NotRequired[Position]
49     elevation: NotRequired[Elevation]
50
51
52 class MediaWikiTemplateParameter(TypedDict):
53     key: NotRequired[str]
54     value: Required[str]
55
56
57 class MediaWikiTemplate(TypedDict):
58     name: NotRequired[str]
59     parameter: NotRequired[List[MediaWikiTemplateParameter]]
60
61
62 class InfoPhone(TypedDict):
63     phone: Required[Phone]
64     name: Required[str]
65     note: NotRequired[str]
66
67
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]
77
78
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]
89
90
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]
97
98
99 class Departure(TypedDict):
100     direction: NotRequired[str]
101     datetime: NotRequired[Datetime]
102
103
104 class Arrival(TypedDict):
105     direction: NotRequired[str]
106     datetime: NotRequired[Datetime]
107
108
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]]
115
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]]
122
123
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]]
139
140
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]]
148
149
150 class CarParking(TypedDict):
151     position: NotRequired[PositionElevation]
152     note: NotRequired[str]
153
154
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]
161
162
163 class Sledrun(TypedDict):
164     name: Required[str]
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]