Skip to main content

Aggregated reporting of lift status at various ski resorts

Project description

ski-resort-lift-status

Introduction

ski-resort-lift-status is an aggregator of ski resort APIs, providing a common interface for reporting lift closures, hours of operation, types, and wait times where available. While many resorts offer APIs for this purpose, each API is formatted differently, requiring unique handlers for each mountain of interest. Many mountains do not offer APIs at all, and require custom HTML element parsing to determine status. This library provides a best-effort attempt to abstract these differences away.

Disclaimers

The usage of public APIs is always subject to change, and changes to ownership structures, API features, web page layout, etc. may cause incompatibilities with this library.

This library does not perform throttling, it is up to the user to avoid hammering the web servers. Libraries such as ratelimit can help avoid making the webadmins unhappy.

Not all mountains will fill in every field in the Lift object. Each mountain's implementation will perform a best-effort attempt to determine the current information, however the details may slightly differ between mountains and the time of the year. For example:

  • Some mountains include all lifts in their lift report regardless of status, while others omit lifts that are out of season, restricted, etc.
  • Some mountains report all lifts during the offseason, while others report no lifts.
  • Some mountains report scheduled opening times while others just have open/closed.
  • Some mountains mark status as scheduled if lifts have a delayed opening time, while others report expected lifts as open at all times.

Usage

import liftstatus

# For other mountains, see list in README
mountain = liftstatus.mountains.colorado.Vail()

for lift in mountain.get_lift_status():
    print(f"{lift.name} - {lift.type} - {lift.status}")

Each entry in the lift status report is an instance of the following data class:

class Lift:
    name: str
    type: LiftType
    status: LiftStatus # One of CLOSED, OPEN, HOLD, DELAYED, SCHEDULED, RESTRICTED, UNKNOWN
    updated_at: datetime.datetime | None
    open_time: datetime.time | None
    closed_time: datetime.time | None
    wait_time: datetime.timedelta | None

The following ski resorts are available for use. Pull requests are always appreciated for implementing more mountains.

British Columbia

Mountain Class Name
Cypress Mountain liftstatus.mountains.britishcolumbia.CypressMountain()
Whistler Blackcomb liftstatus.mountains.britishcolumbia.WhistlerBlackcomb()

California

Mountain Class Name
Bear Mountain liftstatus.mountains.california.BearMountain()
Boreal liftstatus.mountains.california.Boreal()
Heavenly liftstatus.mountains.california.Heavenly()
June Mountain liftstatus.mountains.california.JuneMountain()
Kirkwood liftstatus.mountains.california.Kirkwood()
Mammoth Mountain liftstatus.mountains.california.MammothMountain()
Northstar liftstatus.mountains.california.Northstar()
Palisades Tahoe liftstatus.mountains.california.PalisadesTahoe()
Snow Summit liftstatus.mountains.california.SnowSummit()
Snow Valley liftstatus.mountains.california.SnowValley()
Soda Springs liftstatus.mountains.california.SodaSprings()

Colorado

Mountain Class Name
Arapahoe Basin liftstatus.mountains.colorado.ArapahoeBasin()
Aspen Highlands liftstatus.mountains.colorado.AspenHighlands()
Aspen Mountain liftstatus.mountains.colorado.AspenMountain()
Beaver Creek liftstatus.mountains.colorado.BeaverCreek()
Breckenridge liftstatus.mountains.colorado.Breckenridge()
Buttermilk liftstatus.mountains.colorado.Buttermilk()
Copper Mountain liftstatus.mountains.colorado.Copper()
Crested Butte liftstatus.mountains.colorado.CrestedButte()
Eldora liftstatus.mountains.colorado.Eldora()
Keystone liftstatus.mountains.colorado.Keystone()
Loveland liftstatus.mountains.colorado.Loveland()
Snowmass liftstatus.mountains.colorado.Snowmass()
Steamboat liftstatus.mountains.colorado.Steamboat()
Vail liftstatus.mountains.colorado.Vail()
Winter Park liftstatus.mountains.colorado.WinterPark()

Idaho

Mountain Class Name
Schweitzer liftstatus.mountains.idaho.Schweitzer()

Indiana

Mountain Class Name
Paoli Peaks liftstatus.mountains.indiana.PaoliPeaks()

Maine

Mountain Class Name
Pleasant Mountain liftstatus.mountains.maine.PleasantMountain()
Sugarloaf liftstatus.mountains.maine.Sugarloaf()
Sunday River liftstatus.mountains.maine.SundayRiver()

Michigan

Mountain Class Name
Boyne Mountain liftstatus.mountains.michigan.BoyneMountain()
Boyne Highlands liftstatus.mountains.michigan.BoyneHighlands()
Mt. Brighton liftstatus.mountains.michigan.MountBrighton()

Minnesota

Mountain Class Name
Afton Alps liftstatus.mountains.minnesota.AftonAlps()

Missouri

Mountain Class Name
Hidden Valley liftstatus.mountains.missouri.HiddenValley()
Snow Creek liftstatus.mountains.missouri.SnowCreek()

New Hampshire

Mountain Class Name
Attitash liftstatus.mountains.newhampshire.Attitash()
Crotched Mountain liftstatus.mountains.newhampshire.CrotchedMountain()
Loon Mountain liftstatus.mountains.newhampshire.LoonMountain()
Mount Sunapee liftstatus.mountains.newhampshire.MountSunapee()
Wildcat liftstatus.mountains.newhampshire.Wildcat()

New York

Mountain Class Name
Hunter Mountain liftstatus.mountains.newyork.HunterMountain()

Ohio

Mountain Class Name
Alpine Valley liftstatus.mountains.ohio.AlpineValley()
Boston Mills / Brandywine liftstatus.mountains.ohio.BostonMillsBrandywine()
Mad River liftstatus.mountains.ohio.MadRiver()

Ontario

Mountain Class Name
Blue Mountain liftstatus.mountains.ontario.BlueMountain()

Oregon

Mountain Class Name
Mt. Bachelor liftstatus.mountains.oregon.MountBachelor()

Pennsylvania

Mountain Class Name
Hidden Valley liftstatus.mountains.pennsylvania.HiddenValley()
Jack Frost / Big Boulder liftstatus.mountains.pennsylvania.JackFrostBigBoulder()
Laurel Mountain liftstatus.mountains.pennsylvania.LaurelMountain()
Liberty Mountain liftstatus.mountains.pennsylvania.LibertyMountain()
Roundtop liftstatus.mountains.pennsylvania.Roundtop()
Seven Springs liftstatus.mountains.pennsylvania.SevenSprings()
Whitetail liftstatus.mountains.pennsylvania.Whitetail()

Quebec

Mountain Class Name
Mont Tremblant liftstatus.mountains.quebec.Tremblant()

Utah

Mountain Class Name
Brighton liftstatus.mountains.utah.DeerValley()
Deer Valley liftstatus.mountains.utah.Brighton()
Park City liftstatus.mountains.utah.ParkCity()
Snowbird liftstatus.mountains.utah.Snowbird()
Solitude liftstatus.mountains.utah.Solitude()

Vermont

Mountain Class Name
Mount Snow liftstatus.mountains.vermont.MountSnow()
Okemo liftstatus.mountains.vermont.Okemo()
Stowe liftstatus.mountains.vermont.Stowe()
Stratton liftstatus.mountains.vermont.Stratton()
Sugarbush liftstatus.mountains.vermont.Sugarbush()

Washington

Mountain Class Name
Crystal Mountain liftstatus.mountains.washington.CrystalMountain()
Summit at Snoqualmie liftstatus.mountains.washington.Snoqualmie()
Stevens Pass liftstatus.mountains.washington.StevensPass()

West Virginia

Mountain Class Name
Snowshoe liftstatus.mountains.westvirginia.Snowshoe()

Wisconsin

Mountain Class Name
Wilmot Mountain liftstatus.mountains.wisconsin.WilmotMountain()

Wyoming

Mountain Class Name
Jackson Hole liftstatus.mountains.wyoming.JacksonHole()

Development

  1. Clone the project repository:

    cd /path/to/projects
    git clone https://github.com/NietoSkunk/ski-resort-lift-status.git
    cd ski-resort-lift-status
    
  2. Install required packages:

    python -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt -r requirements-dev.txt
    
  3. Install package as an editable library:

    pip install -e .
    
  4. Run tests:

    pytest
    
  5. Build wheel:

    python3 -m build
    

Contributing

If you have code to contribute to the project, open a pull request and describe clearly the changes and what they are intended to do (enhancement, bug fixes etc).

Alternatively, you may raise bugs or suggestions by opening an issue.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ski_resort_lift_status-1.0.0.tar.gz (22.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ski_resort_lift_status-1.0.0-py3-none-any.whl (73.0 kB view details)

Uploaded Python 3

File details

Details for the file ski_resort_lift_status-1.0.0.tar.gz.

File metadata

  • Download URL: ski_resort_lift_status-1.0.0.tar.gz
  • Upload date:
  • Size: 22.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for ski_resort_lift_status-1.0.0.tar.gz
Algorithm Hash digest
SHA256 8f6f1518ca8d8f8aa95ffec7f3258e03316a8ba10172346c78dcb6eab9e8861b
MD5 104d2ec2577b534454a168bce8d7ce5b
BLAKE2b-256 34519fcfc4604d9f6b43b8c3874822a6e4fc9de9964f9f333217d701423117ec

See more details on using hashes here.

File details

Details for the file ski_resort_lift_status-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ski_resort_lift_status-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b6bebf35adaad2862cb5535f96d94a0a2662958d348a275078e004d5adfd26a7
MD5 c7bb45b471369723b1bf554ab88b4a5c
BLAKE2b-256 6535f7a28f5e950540923ef7f5802d9bcfa4f9d5abe493d9fa2f30c6ac5d3cea

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page