from typing import TypedDict, List, Literal, NotRequired, Required, NewType Difficulty = Literal["leicht", "mittel", "schwer"] Avalanches = Literal["kaum", "selten", "gelegentlich", "häufig"] WalkupSeparate = Literal["Ja", "Nein", "Teilweise"] WalkupSupportType = Literal["Sessellift", "Gondel", "Linienbus", "Taxi", "Sonstige"] NightlightPossible = Literal["Ja", "Teilweise", "Nein"] Weekday = Literal["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"] DayType = Literal['work_day'] PublicTransportQuality = Literal["Sehr gut", "Gut", "Mittelmäßig", "Schlecht", "Nein", "Ja"] Phone = NewType('Phone', str) OpeningHours = NewType('OpeningHours', str) Elevation = NewType('Elevation', int) Datetime = NewType('Datetime', str) class Address(TypedDict): country: NotRequired[str] postcode: NotRequired[str] city: NotRequired[str] street: NotRequired[str] housenumber: NotRequired[str] class WalkupSupport(TypedDict): type: Required[WalkupSupportType] note: NotRequired[str] class Weblink(TypedDict): url: Required[str] text: NotRequired[str] class WrPage(TypedDict): title: Required[str] text: NotRequired[str] class Position(TypedDict): longitude: Required[float] latitude: Required[float] class PositionElevation(TypedDict): position: NotRequired[Position] elevation: NotRequired[Elevation] class MediaWikiTemplateParameter(TypedDict): key: NotRequired[str] value: Required[str] class MediaWikiTemplate(TypedDict): name: NotRequired[str] parameter: NotRequired[List[MediaWikiTemplateParameter]] class InfoPhone(TypedDict): phone: Required[Phone] name: Required[str] note: NotRequired[str] class TirolerNaturrodelbahnGütesiegel(TypedDict): name: NotRequired[str] organization: NotRequired[str] first_issued: NotRequired[int] valid_from: NotRequired[int] valid_until: NotRequired[int] forum_id: NotRequired[int] thread_id: NotRequired[int] stätte_id: NotRequired[int] class SledRental(TypedDict): name: NotRequired[str] note: NotRequired[str] wr_page: NotRequired[WrPage] weblink: NotRequired[Weblink] phone: NotRequired[Phone] location: NotRequired[str] address: NotRequired[Address] opening_hours: NotRequired[OpeningHours] direct: NotRequired[bool] class Gastronomy(TypedDict): name: NotRequired[str] note: NotRequired[str] wr_page: NotRequired[WrPage] weblink: NotRequired[Weblink] direct: NotRequired[bool] class Departure(TypedDict): direction: NotRequired[str] datetime: NotRequired[Datetime] class Arrival(TypedDict): direction: NotRequired[str] datetime: NotRequired[Datetime] class PublicTransportSchedule(TypedDict): day_type: NotRequired[DayType] begin: NotRequired[Datetime] minutes: NotRequired[int] departure: NotRequired[List[Departure]] arrival: NotRequired[List[Arrival]] class PublicTransportStopLine(TypedDict): vao_line_id: NotRequired[str] line: NotRequired[str] category: NotRequired[str] operator: NotRequired[str] schedules: NotRequired[List[PublicTransportSchedule]] class PublicTransportStop(TypedDict): name: NotRequired[str] municipality: NotRequired[str] name_local: NotRequired[str] position: NotRequired[PositionElevation] monitor_template: NotRequired[MediaWikiTemplate] route_arrival_template: NotRequired[MediaWikiTemplate] route_departure_template: NotRequired[MediaWikiTemplate] note: NotRequired[str] ifopt_stop_id: NotRequired[str] vao_ext_id: NotRequired[str] vvt_stop_id: NotRequired[int] walk_distance: NotRequired[int] walk_time: NotRequired[int] lines: NotRequired[List[PublicTransportStopLine]] class PublicTransportLine(TypedDict): label: NotRequired[str] name: NotRequired[str] route: NotRequired[str] note: NotRequired[str] timetable_template: NotRequired[MediaWikiTemplate] timetable_links: NotRequired[List[Weblink]] class CarParking(TypedDict): position: NotRequired[PositionElevation] note: NotRequired[str] class CarDistance(TypedDict): km: NotRequired[float] route: NotRequired[str] minutes: NotRequired[int] geonames_id: NotRequired[int] onward_co2_kg: NotRequired[float] class Sledrun(TypedDict): name: Required[str] aliases: NotRequired[List[str]] entry_under_construction: NotRequired[bool] official_url: NotRequired[str] description: NotRequired[str] image: NotRequired[str] length: NotRequired[int] difficulty: NotRequired[Difficulty] avalanches: NotRequired[Avalanches] has_operator: NotRequired[bool] operator: NotRequired[str] walkup_possible: NotRequired[bool] walkup_separate: NotRequired[WalkupSeparate] walkup_time: NotRequired[int] walkup_supports: NotRequired[List[WalkupSupport]] nightlight_description: NotRequired[str] nightlight_possible: NotRequired[NightlightPossible] nightlight_possible_note: NotRequired[str] nightlight_weekdays: NotRequired[List[Weekday]] nightlight_weekdays_count: NotRequired[int] nightlight_weekdays_note: NotRequired[str] sled_rental_direct: NotRequired[bool] sled_rental: NotRequired[SledRental] sled_rental_description: NotRequired[str] has_cachet: NotRequired[bool] tiroler_naturrodelbahn_gütesiegel: NotRequired[TirolerNaturrodelbahnGütesiegel] show_in_overview: NotRequired[bool] forum_id: NotRequired[int] position: NotRequired[Position] top: NotRequired[PositionElevation] bottom: NotRequired[PositionElevation] info_web: NotRequired[Weblink] info_phone: NotRequired[List[InfoPhone]] public_transport: NotRequired[PublicTransportQuality] public_transport_description: NotRequired[str] public_transport_stops: NotRequired[List[PublicTransportStop]] public_transport_lines: NotRequired[List[PublicTransportLine]] public_transport_links: NotRequired[List[Weblink]] car_description: NotRequired[str] car_parking: NotRequired[List[CarParking]] car_distances: NotRequired[List[CarDistance]] gastronomy_description: NotRequired[str] gastronomy: NotRequired[List[Gastronomy]] sledrun_list: NotRequired[List[WrPage]] videos: NotRequired[List[Weblink]] webcams: NotRequired[List[Weblink]] see_also: NotRequired[List[Weblink]] correction_name: NotRequired[str] correction_email: NotRequired[str] allow_reports: NotRequired[bool] freizeitticket_tyrol: NotRequired[bool] regio_card_tyrol: NotRequired[bool]