Campsite Reservation Finder

Overview

yellowstone-camping logo juftin logo

yellowstone-camping

UPDATE:

yellowstone-camping is being expanded and renamed to camply.

camply

The updated tool now interfaces with the Recreation.gov API as well, adding thousands of campgrounds across the USA. Updated functionality, new camping and notification integrations, and a friendly command line interface are available too; The project is nearly ready! All work is currently on the camply branch and will be merged soon once the finishing touches are done. The original yellowtone-camping source code will be preserved at https://github.com/juftin/yellowstone-camping



yellowstone-camping is a Campsite Reservation Cancellation Finder for Yellowstone National Park. This simple Python application will continuously check Yellowstone's Campground Availability API and let you know as soon as a reservation is available with a Push Notification on your Android or iOS device. Don't stress about finding a campsite in that booked out campground, let yellowstone-camping do the work for you.

How to set up your campsite search

Make a file called yellowstone-camping.env and place it at the root of this repository, you can use the example.yellowstone-camping.env file as a template. Once the yellowstone-camping.env file is ready, fill out your lodging details and Pushover credentials:

export BOOKING_DATE_START="2021-07-31" # YELLOWSTONE ARRIVAL DATE (YYYY-MM-DD)
export NUMBER_OF_GUESTS=2 # NUMBER OF PEOPLE IN THE CAMPING RESERVATION
export NUMBER_OF_NIGHTS=1 # NUMBER OF NIGHTS IN THE CAMPING RESERVATION
export POLLING_INTERVAL=600 # HOW OFTER TO CHECK FOR NEW RESERVATIONS (IN SECONDS)

export PUSHOVER_PUSH_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxx" # PUSHOVER API TOKEN
export PUSHOVER_PUSH_USER="xxxxxxxxxxxxxxxxxxxxxxxx" # PUSHOVER USER KEY

Running with Docker

./scripts/check-yellowstone.sh

To run the reservation search in a Docker container you'll run the check-yellowstone.sh file, this creates a docker container called yellowstone-camping that runs in the background. Automatically, the logs will be attached to the current session. Exiting the attached logs does not kill the search. Once the scraper has found its first booking it will exit. Use docker stop yellowstone-camping to kill the container and stop searching or docker logs -f yellowstone-camping to reattach the container logs.

Running Locally with Python

Don't work with Docker? No problem. The docker image is based on Python 3.8.X, but any version of Python 3 you have locally should suffice. Source the yellowstone-camping.env file and run the python script (this requires the requests package to be installed):

source yellowstone-camping.env && python scripts/find_availability.py

How do I set up Pushover for Push Notifications to my phone?

Pushover is an neat service/app that allows you to easily send push notifications to your mobile device. More details on how to set up Pushover can be found on their website. FYI: Pushover is a paid service (a lifetime subscription costs $5.00). However, if Pushover is not right for you then the source code can be manually changed to use your preferred method of sending notifications. To bypass logging to Pushover, just remove the variables, set them to empty, or leave them untouched; the script will simply log CRITICAL events to the console when a campsite is available.





About this Project

My partner and I are taking a trip this summer (July, 2021) from home in Colorado through Wyoming to Glacier National Park. Like all national parks right now, the campsites in Glacier are a hot commodity and tough to come by.

To help us get an advantage in finding a site we signed up for Campnab, a service that lets you sign up for text notifications when booked out campgrounds receive cancellations. Long story short, it's totally worth it and get's a big recommendation from me. We found a 5 day cancellation and booked our first choice campground within a couple weeks of signing up.

Later in our trip, we'll be going through Yellowstone and Grand Teton National Park. Unfortunately, Campnab doesn't (currently) work for most sites in Yellowstone, since they use a different booking provider than the rest of the National Park System. Instead, I decided to play around with the booking website with Chrome Developer tools, figure out the endpoints responses, and build my own integration with their API. It's built in Python, runs in a docker container, and sends push notifications through via Pushover.

Feature Requests and Technical Feedback / Questions are best done though the Issues Page. Some basic command line skills and an always-on computer are required to run this.

We're still waiting for our Yellowstone spot as of writing this and can't wait to get back there this summer. I hope yellowstone-camping is useful for someone out there, good luck hunting for your next spot!




Cool stuff happens in Denver, CO Denver
Comments
  • Issue with multiple campsite search?

    Issue with multiple campsite search?

    Hi! I'm getting this error when I try to search multiple campsites, either through a .yml file or through the command line. Single campsite searches seem to work fine, as does your example .yml with multiple rec areas. I'm not sure how it got pointed to my Dropbox folder (which is where I was running camply from) to search for pydantic ... and am not good enough at scanning the code to pinpoint the line but it seems like a bug? error.txt

    bug 
    opened by botingzhang 9
  • API calls blocked

    API calls blocked

    As of yesterday, my Camply API calls to recreation.gov are blocked.

    Here's the error I am getting back from Camply:

    Error: 403 Request blocked.

    ERROR: The request could not be satisfied

    403 ERROR

    The request could not be satisfied.


    Request blocked. We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
    If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.

    Generated by cloudfront (CloudFront)
    Request ID: -duVM4wmJCI8E0sAi7ZfMguXA7_p3nVi6JRuT64Cuxp7FfeYd-lg1Q==
    

    I've tried changing ip addresses with no luck. I've tried changing to my own API key with no luck.

    Any suggestions?

    Is there a way to specify a different User-Agent header?

    Thanks!!

    Rick

    bug 
    opened by rboarman 7
  • Specific campground not working

    Specific campground not working

    This campground does not seem to be working: https://www.recreation.gov/camping/campgrounds/234779

    Searching it through either the command line or a yml file returns "0 Matching Campgrounds Found" and throws an error.

    bug triage 
    opened by greenh20 5
  • Going To Camp support

    Going To Camp support

    Is your feature request related to a problem? Please describe. This is a tracking issue for adding Going To Camp support.

    A Going to Camp provider will add support for the following areas

    • Washing State Parks

    • Wisconsin State Parks

    • City of Oroville (WA)

    • Tacoma Power Parks (WA)

    • Longpoint Area (CA)

    • Saugeen Valley Conservation Area (Canada)

    • St. Clair Conservation Authority (Canada)

    • Yukon Parks (Canada)

    Other Going to Camp providers may be possible, but it looks like they use some sort of self-hosted solution that makes the API more difficult to work with (and sometimes blocked because javascript is not active, or an unacceptable browser UA is in use).


    I plan to implement an initial proof of concept shortly.

    Describe the solution you'd like

    Describe alternatives you've considered

    Additional context

    enhancement camply provider 
    opened by acaloiaro 5
  • Adding support for Telegram as a Notifier (#72)

    Adding support for Telegram as a Notifier (#72)

    Linking https://github.com/juftin/camply/pull/72

    • Adding support for Telegram as a Notifier

    • Marking messages as escaped or not

    • Bumping minor version due to adding new feature

    • Fixing linting errors

    enhancement 
    opened by juftin 5
  • Adding support for Telegram as a Notifier

    Adding support for Telegram as a Notifier

    👋 Thanks for this brilliant project. Looking to add support for using Telegram to notify on available campsites.

    I've tested it locally and it works nice: Screen Shot 2022-02-26 at 23 43 00

    opened by stjohnjohnson 5
  • Incorrect Docker .camply location

    Incorrect Docker .camply location

    Describe the bug

    Docs show .camply location for Docker at /home/camply/.camply but right now it seems to be reading it from /root/.camply:

    • https://github.com/juftin/camply/blob/main/docs/docker.md#running-in-docker
    • https://github.com/juftin/camply/blob/main/docs/examples/docker-compose.yaml

    Original Camply Command (with --debug)

    docker run \
      --name camply-file-share-example \
      --env TZ="America/Denver" \
      --volume ${HOME}/.camply:/home/camply/.camply \
      juftin/camply \
      camply campsites \
          --provider yellowstone \
          --start-date 2023-07-22 \
          --end-date 2023-07-27 \
          --continuous \
          --notifications email
    

    Expected behavior Should run with configuration from ${HOME}/.camply

    Actual behavior

    Configuration from ${HOME}/.camply are not used

    Additional context

    I checked an instance and when using camply configure from inside the Docker instance it creates it to /root/.camply and references it from there

    bug triage 
    opened by grantland 4
  • Update documentation on how to specify multiple notification providers

    Update documentation on how to specify multiple notification providers

    Click doesn't support comma-separated value for multiple options: https://click.palletsprojects.com/en/8.1.x/options/#multiple-options

    When trying to use a comma-separated list of values for --notifications, camply crashes.

    Also note that I haven't made many/any contributions via Github before, so if I'm not following best practices please educate me!

    documentation 
    opened by septikus 4
  • TypeError: 'NoneType' object is not iterable

    TypeError: 'NoneType' object is not iterable

    This is my search:

    provider: Yellowstone recreation_area: campgrounds: YLYF:RV start_date: 2023-06-05 end_date: 2023-06-30 D nights: 3 continuous: True polling_interval: 5 notifications: pushover search_forever: True notify_first_try: True

    Which causes this error:

    camply-docker-compose-fishing-bridge | TypeError: 'NoneType' object is not iterable camply-docker-compose-fishing-bridge exited with code 1

    This search used to work. All I changed was the dsate range.

    Did something in the code change?

    Thanks!

    camply-docker-compose-fishing-bridge | start ---------------------- camply-docker-compose-fishing-bridge | ---------------------- camply-docker-compose-fishing-bridge | HOSTNAME=ec68bcbe4d94 camply-docker-compose-fishing-bridge | PYTHON_VERSION=3.9.13 camply-docker-compose-fishing-bridge | CAMPLY_LOG_HANDLER=PYTHON camply-docker-compose-fishing-bridge | PWD=/home/ec2-user camply-docker-compose-fishing-bridge | PYTHON_SETUPTOOLS_VERSION=58.1.0 camply-docker-compose-fishing-bridge | TZ=America/Denver camply-docker-compose-fishing-bridge | HOME=/home/camply camply-docker-compose-fishing-bridge | LANG=C.UTF-8 camply-docker-compose-fishing-bridge | GPG_KEY=E3FF2839C048B25C084DEBE9B26995E310250568 camply-docker-compose-fishing-bridge | SHLVL=1 camply-docker-compose-fishing-bridge | PYTHON_PIP_VERSION=22.0.4 camply-docker-compose-fishing-bridge | PYTHON_GET_PIP_SHA256=5aefe6ade911d997af080b315ebcb7f882212d070465df544e1175ac2be519b4 camply-docker-compose-fishing-bridge | PYTHON_GET_PIP_URL=https://github.com/pypa/get-pip/raw/5eaac1050023df1f5c98b173b248c260023f2278/public/get-pip.py camply-docker-compose-fishing-bridge | PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin camply-docker-compose-fishing-bridge | _=/usr/bin/printenv camply-docker-compose-fishing-bridge | ---------------------- camply-docker-compose-fishing-bridge | camply camply-docker-compose-fishing-bridge | ec2-user camply-docker-compose-fishing-bridge | ---------------------- camply-docker-compose-fishing-bridge | 2022-09-22 19:06:04,719 [ CAMPLY]: camply, the campsite finder ⛺️ camply-docker-compose-fishing-bridge | 2022-09-22 19:06:04,723 [ INFO]: YAML File Parsed: search.yml camply-docker-compose-fishing-bridge | 2022-09-22 19:06:04,725 [ INFO]: 25 booking nights selected for search, ranging from 2023-06-05 to 2023-06-29 camply-docker-compose-fishing-bridge | 2022-09-22 19:06:04,735 [ INFO]: Searching for availabilities with 3 consecutive night stays. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:04,736 [ INFO]: Searching for campsites every 5 minutes. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:04,736 [ INFO]: Notifications active via: , camply-docker-compose-fishing-bridge | 2022-09-22 19:06:04,737 [ INFO]: 1 Matching Campgrounds Found camply-docker-compose-fishing-bridge | 2022-09-22 19:06:04,737 [ INFO]: ⛰ Yellowstone National Park, USA (#1) - 🏕 Fishing Bridge RV Park (YLYF:RV) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:04,757 [ INFO]: Searching for Yellowstone Lodging Availability: June, 2023 camply-docker-compose-fishing-bridge | 2022-09-22 19:06:06,954 [ INFO]: ⛺️ 139 sites found. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,186 [ INFO]: ⛺️ ⛺️ ⛺️ ⛺️ 25 Reservable Campsites Matching Search Preferences camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,193 [ INFO]: 📅 Sat, June 03 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,196 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,197 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-03-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,197 [ INFO]: 📅 Sun, June 04 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,199 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,200 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-04-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,201 [ INFO]: 📅 Mon, June 05 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,202 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,203 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-05-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,204 [ INFO]: 📅 Tue, June 06 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,205 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,207 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-06-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,207 [ INFO]: 📅 Wed, June 07 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,208 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,210 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-07-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,210 [ INFO]: 📅 Thu, June 08 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,212 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,213 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-08-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,213 [ INFO]: 📅 Fri, June 09 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,215 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,216 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-09-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,217 [ INFO]: 📅 Sat, June 10 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,218 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,219 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-10-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,220 [ INFO]: 📅 Sun, June 11 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,221 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,223 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-11-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,223 [ INFO]: 📅 Mon, June 12 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,225 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,226 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-12-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,227 [ INFO]: 📅 Fri, June 16 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,228 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,229 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-16-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,230 [ INFO]: 📅 Wed, June 21 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,231 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,233 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-21-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,233 [ INFO]: 📅 Thu, June 22 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,235 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,236 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-22-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,237 [ INFO]: 📅 Fri, June 23 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,238 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,239 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-23-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,240 [ INFO]: 📅 Sat, June 24 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,241 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,243 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-24-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,243 [ INFO]: 📅 Sun, June 25 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,245 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,246 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-25-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,246 [ INFO]: 📅 Mon, June 26 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,248 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,249 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-26-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,250 [ INFO]: 📅 Tue, June 27 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,251 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,252 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-27-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,253 [ INFO]: 25 New Campsites Found. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,253 [ WARNING]: Too many campsites were found during the search (25 total). camply will only send you the first 20 notifications. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:23,372 [ CAMPLY]: Exiting camply 👋 camply-docker-compose-fishing-bridge | ╭───────────────────── Traceback (most recent call last) ──────────────────────╮ camply-docker-compose-fishing-bridge | │ /usr/local/bin/camply:8 in │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 5 from camply.cli import cli │ camply-docker-compose-fishing-bridge | │ 6 if name == 'main': │ camply-docker-compose-fishing-bridge | │ 7 │ sys.argv[0] = re.sub(r'(-script.pyw|.exe)?$', '', sys.argv[0]) │ camply-docker-compose-fishing-bridge | │ ❱ 8 │ sys.exit(cli()) │ camply-docker-compose-fishing-bridge | │ 9 │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/cli.py:429 in cli │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 426 │ Camply Command Line Utility Wrapper │ camply-docker-compose-fishing-bridge | │ 427 │ """ │ camply-docker-compose-fishing-bridge | │ 428 │ try: │ camply-docker-compose-fishing-bridge | │ ❱ 429 │ │ camply_command_line() │ camply-docker-compose-fishing-bridge | │ 430 │ except KeyboardInterrupt: │ camply-docker-compose-fishing-bridge | │ 431 │ │ logger.debug("Handling Exit Request") │ camply-docker-compose-fishing-bridge | │ 432 │ finally: │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/click/core.py:1130 in call │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 1127 │ │ camply-docker-compose-fishing-bridge | │ 1128 │ def call(self, *args: t.Any, **kwargs: t.Any) -> t.Any: │ camply-docker-compose-fishing-bridge | │ 1129 │ │ """Alias for :meth:main.""" │ camply-docker-compose-fishing-bridge | │ ❱ 1130 │ │ return self.main(*args, **kwargs) │ camply-docker-compose-fishing-bridge | │ 1131 │ camply-docker-compose-fishing-bridge | │ 1132 │ camply-docker-compose-fishing-bridge | │ 1133 class Command(BaseCommand): │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/click/core.py:1055 in main │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 1052 │ │ try: │ camply-docker-compose-fishing-bridge | │ 1053 │ │ │ try: │ camply-docker-compose-fishing-bridge | │ 1054 │ │ │ │ with self.make_context(prog_name, args, **extra) as c │ camply-docker-compose-fishing-bridge | │ ❱ 1055 │ │ │ │ │ rv = self.invoke(ctx) │ camply-docker-compose-fishing-bridge | │ 1056 │ │ │ │ │ if not standalone_mode: │ camply-docker-compose-fishing-bridge | │ 1057 │ │ │ │ │ │ return rv │ camply-docker-compose-fishing-bridge | │ 1058 │ │ │ │ │ # it's not safe to ctx.exit(rv) here! │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/click/core.py:1657 in invoke │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 1654 │ │ │ │ super().invoke(ctx) │ camply-docker-compose-fishing-bridge | │ 1655 │ │ │ │ sub_ctx = cmd.make_context(cmd_name, args, parent=ctx │ camply-docker-compose-fishing-bridge | │ 1656 │ │ │ │ with sub_ctx: │ camply-docker-compose-fishing-bridge | │ ❱ 1657 │ │ │ │ │ return _process_result(sub_ctx.command.invoke(sub │ camply-docker-compose-fishing-bridge | │ 1658 │ │ │ camply-docker-compose-fishing-bridge | │ 1659 │ │ # In chain mode we create the contexts step by step, but afte │ camply-docker-compose-fishing-bridge | │ 1660 │ │ # base command has been invoked. Because at that point we do │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/click/core.py:1404 in invoke │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 1401 │ │ │ echo(style(message, fg="red"), err=True) │ camply-docker-compose-fishing-bridge | │ 1402 │ │ │ camply-docker-compose-fishing-bridge | │ 1403 │ │ if self.callback is not None: │ camply-docker-compose-fishing-bridge | │ ❱ 1404 │ │ │ return ctx.invoke(self.callback, **ctx.params) │ camply-docker-compose-fishing-bridge | │ 1405 │ │ camply-docker-compose-fishing-bridge | │ 1406 │ def shell_complete(self, ctx: Context, incomplete: str) -> t.List │ camply-docker-compose-fishing-bridge | │ 1407 │ │ """Return a list of completions for the incomplete value. Loo │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/click/core.py:760 in invoke │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 757 │ │ │ camply-docker-compose-fishing-bridge | │ 758 │ │ with augment_usage_errors(__self): │ camply-docker-compose-fishing-bridge | │ 759 │ │ │ with ctx: │ camply-docker-compose-fishing-bridge | │ ❱ 760 │ │ │ │ return __callback(*args, **kwargs) │ camply-docker-compose-fishing-bridge | │ 761 │ │ camply-docker-compose-fishing-bridge | │ 762 │ def forward( │ camply-docker-compose-fishing-bridge | │ 763 │ │ __self, __cmd: "Command", *args: t.Any, **kwargs: t.Any # no │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/cli.py:421 in campsites │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 418 │ │ key.lower(): value for key, value in CAMPSITE_SEARCH_PROVIDER. │ camply-docker-compose-fishing-bridge | │ 419 │ }[provider.lower()] │ camply-docker-compose-fishing-bridge | │ 420 │ camping_finder = provider_class(**provider_kwargs) │ camply-docker-compose-fishing-bridge | │ ❱ 421 │ camping_finder.get_matching_campsites(**search_kwargs) │ camply-docker-compose-fishing-bridge | │ 422 │ camply-docker-compose-fishing-bridge | │ 423 │ camply-docker-compose-fishing-bridge | │ 424 def cli(): │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/search/base_search.py:468 in │ camply-docker-compose-fishing-bridge | │ get_matching_campsites │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 465 │ │ List[AvailableCampsite] │ camply-docker-compose-fishing-bridge | │ 466 │ │ """ │ camply-docker-compose-fishing-bridge | │ 467 │ │ if continuous is True: │ camply-docker-compose-fishing-bridge | │ ❱ 468 │ │ │ self._search_campsites_continuous( │ camply-docker-compose-fishing-bridge | │ 469 │ │ │ │ log=log, │ camply-docker-compose-fishing-bridge | │ 470 │ │ │ │ verbose=verbose, │ camply-docker-compose-fishing-bridge | │ 471 │ │ │ │ polling_interval=polling_interval, │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/search/base_search.py:412 in │ camply-docker-compose-fishing-bridge | │ _search_campsites_continuous │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 409 │ │ continuous_search = True │ camply-docker-compose-fishing-bridge | │ 410 │ │ continuous_search_attempts = 1 │ camply-docker-compose-fishing-bridge | │ 411 │ │ while continuous_search is True: │ camply-docker-compose-fishing-bridge | │ ❱ 412 │ │ │ self._continuous_search_retry( │ camply-docker-compose-fishing-bridge | │ 413 │ │ │ │ log=log, │ camply-docker-compose-fishing-bridge | │ 414 │ │ │ │ verbose=verbose, │ camply-docker-compose-fishing-bridge | │ 415 │ │ │ │ polling_interval=polling_interval, │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/search/base_search.py:276 in │ camply-docker-compose-fishing-bridge | │ _continuous_search_retry │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 273 │ │ logger.info(f"{len(new_campsites)} New Campsites Found.") │ camply-docker-compose-fishing-bridge | │ 274 │ │ self.campsites_found.update(new_campsites) │ camply-docker-compose-fishing-bridge | │ 275 │ │ logged_campsites = list(new_campsites) │ camply-docker-compose-fishing-bridge | │ ❱ 276 │ │ self._handle_notifications( │ camply-docker-compose-fishing-bridge | │ 277 │ │ │ retryer=retryer, │ camply-docker-compose-fishing-bridge | │ 278 │ │ │ notifier=notifier, │ camply-docker-compose-fishing-bridge | │ 279 │ │ │ logged_campsites=logged_campsites, │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/search/base_search.py:320 in │ camply-docker-compose-fishing-bridge | │ _handle_notifications │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 317 │ │ │ logged_campsites = cls.handle_too_many_campsites_found( │ camply-docker-compose-fishing-bridge | │ 318 │ │ │ │ notifier=notifier, logged_campsites=logged_campsites │ camply-docker-compose-fishing-bridge | │ 319 │ │ │ ) │ camply-docker-compose-fishing-bridge | │ ❱ 320 │ │ │ notifier.send_campsites(campsites=logged_campsites) │ camply-docker-compose-fishing-bridge | │ 321 │ │ else: │ camply-docker-compose-fishing-bridge | │ 322 │ │ │ if ( │ camply-docker-compose-fishing-bridge | │ 323 │ │ │ │ len(notifier.providers) > 1 │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/notifications/multi_provider_n │ camply-docker-compose-fishing-bridge | │ otifications.py:84 in send_campsites │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 81 │ │ campsites: List[AvailableCampsite] │ camply-docker-compose-fishing-bridge | │ 82 │ │ """ │ camply-docker-compose-fishing-bridge | │ 83 │ │ for provider in self.providers: │ camply-docker-compose-fishing-bridge | │ ❱ 84 │ │ │ provider.send_campsites(campsites=campsites, **kwargs) │ camply-docker-compose-fishing-bridge | │ 85 │ │ camply-docker-compose-fishing-bridge | │ 86 │ def log_providers(self) -> None: │ camply-docker-compose-fishing-bridge | │ 87 │ │ """ │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/notifications/pushover.py:104 │ camply-docker-compose-fishing-bridge | │ in send_campsites │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 101 │ │ campsites: AvailableCampsite │ camply-docker-compose-fishing-bridge | │ 102 │ │ """ │ camply-docker-compose-fishing-bridge | │ 103 │ │ for campsite in campsites: │ camply-docker-compose-fishing-bridge | │ ❱ 104 │ │ │ message_title, formatted_dict = cls.format_standard_campsi │ camply-docker-compose-fishing-bridge | │ 105 │ │ │ │ campsite=campsite, │ camply-docker-compose-fishing-bridge | │ 106 │ │ │ ) │ camply-docker-compose-fishing-bridge | │ 107 │ │ │ fields = [] │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/notifications/base_notificatio │ camply-docker-compose-fishing-bridge | │ ns.py:79 in format_standard_campsites │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 76 │ │ │ │ key = "booking_link" │ camply-docker-compose-fishing-bridge | │ 77 │ │ │ elif key == CampsiteContainerFields.PERMITTED_EQUIPMENT: │ camply-docker-compose-fishing-bridge | │ 78 │ │ │ │ value = "\n - " + "\n - ".join( │ camply-docker-compose-fishing-bridge | │ ❱ 79 │ │ │ │ │ set(item.equipment_name for item in campsite.permit │ camply-docker-compose-fishing-bridge | │ 80 │ │ │ │ ) │ camply-docker-compose-fishing-bridge | │ 81 │ │ │ if key not in [CampsiteContainerFields.CAMPSITE_ATTRIBUTES] │ camply-docker-compose-fishing-bridge | │ 82 │ │ │ │ formatted_key = key.replace("", " ").title() │ camply-docker-compose-fishing-bridge | ╰──────────────────────────────────────────────────────────────────────────────╯ camply-docker-compose-fishing-bridge | TypeError: 'NoneType' object is not iterable camply-docker-compose-fishing-bridge exited with code 1 camply-docker-compose-fishing-bridge | 2022-09-22 19:06:25,385 [ CAMPLY]: camply, the campsite finder ⛺️ camply-docker-compose-fishing-bridge | 2022-09-22 19:06:25,388 [ INFO]: YAML File Parsed: search.yml camply-docker-compose-fishing-bridge | 2022-09-22 19:06:25,390 [ INFO]: 25 booking nights selected for search, ranging from 2023-06-05 to 2023-06-29 camply-docker-compose-fishing-bridge | 2022-09-22 19:06:25,392 [ INFO]: Searching for availabilities with 3 consecutive night stays. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:25,393 [ INFO]: Searching for campsites every 5 minutes. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:25,393 [ INFO]: Notifications active via: , camply-docker-compose-fishing-bridge | 2022-09-22 19:06:25,393 [ INFO]: 1 Matching Campgrounds Found camply-docker-compose-fishing-bridge | 2022-09-22 19:06:25,394 [ INFO]: ⛰ Yellowstone National Park, USA (#1) - 🏕 Fishing Bridge RV Park (YLYF:RV) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:25,413 [ INFO]: Searching for Yellowstone Lodging Availability: June, 2023 camply-docker-compose-fishing-bridge | 2022-09-22 19:06:27,982 [ INFO]: ⛺️ 139 sites found. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,621 [ INFO]: ⛺️ ⛺️ ⛺️ ⛺️ 25 Reservable Campsites Matching Search Preferences camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,627 [ INFO]: 📅 Sat, June 03 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,629 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,630 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-03-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,630 [ INFO]: 📅 Sun, June 04 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,632 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,633 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-04-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,633 [ INFO]: 📅 Mon, June 05 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,635 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,636 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-05-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,637 [ INFO]: 📅 Tue, June 06 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,638 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,639 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-06-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,640 [ INFO]: 📅 Wed, June 07 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,641 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,642 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-07-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,643 [ INFO]: 📅 Thu, June 08 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,644 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,645 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-08-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,646 [ INFO]: 📅 Fri, June 09 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,647 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,648 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-09-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,649 [ INFO]: 📅 Sat, June 10 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,650 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,651 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-10-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,652 [ INFO]: 📅 Sun, June 11 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,653 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,654 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-11-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,655 [ INFO]: 📅 Mon, June 12 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,656 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,657 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-12-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,658 [ INFO]: 📅 Fri, June 16 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,659 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,660 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-16-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,661 [ INFO]: 📅 Wed, June 21 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,662 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,663 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-21-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,664 [ INFO]: 📅 Thu, June 22 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,665 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,667 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-22-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,667 [ INFO]: 📅 Fri, June 23 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,668 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,670 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-23-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,670 [ INFO]: 📅 Sat, June 24 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,672 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,673 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-24-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,673 [ INFO]: 📅 Sun, June 25 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,675 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,676 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-25-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,677 [ INFO]: 📅 Mon, June 26 🏕 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,678 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 1 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,679 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-26-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,680 [ INFO]: 📅 Tue, June 27 🏕 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,681 [ INFO]: ⛰️ Yellowstone 🏕 Fishing Bridge RV Internet Rate: ⛺ 2 sites camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,682 [ INFO]: 🔗 https://secure.yellowstonenationalparklodges.com/booking/lodging-select?dateFrom=06-27-2023&adults=1&destination=YLYF%3ARV&children=0&nights=3 (3 nights) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,683 [ INFO]: 25 New Campsites Found. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,683 [ WARNING]: Too many campsites were found during the search (25 total). camply will only send you the first 20 notifications. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:44,799 [ CAMPLY]: Exiting camply 👋 camply-docker-compose-fishing-bridge | ╭───────────────────── Traceback (most recent call last) ──────────────────────╮ camply-docker-compose-fishing-bridge | │ /usr/local/bin/camply:8 in │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 5 from camply.cli import cli │ camply-docker-compose-fishing-bridge | │ 6 if name == 'main': │ camply-docker-compose-fishing-bridge | │ 7 │ sys.argv[0] = re.sub(r'(-script.pyw|.exe)?$', '', sys.argv[0]) │ camply-docker-compose-fishing-bridge | │ ❱ 8 │ sys.exit(cli()) │ camply-docker-compose-fishing-bridge | │ 9 │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/cli.py:429 in cli │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 426 │ Camply Command Line Utility Wrapper │ camply-docker-compose-fishing-bridge | │ 427 │ """ │ camply-docker-compose-fishing-bridge | │ 428 │ try: │ camply-docker-compose-fishing-bridge | │ ❱ 429 │ │ camply_command_line() │ camply-docker-compose-fishing-bridge | │ 430 │ except KeyboardInterrupt: │ camply-docker-compose-fishing-bridge | │ 431 │ │ logger.debug("Handling Exit Request") │ camply-docker-compose-fishing-bridge | │ 432 │ finally: │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/click/core.py:1130 in call │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 1127 │ │ camply-docker-compose-fishing-bridge | │ 1128 │ def call(self, *args: t.Any, **kwargs: t.Any) -> t.Any: │ camply-docker-compose-fishing-bridge | │ 1129 │ │ """Alias for :meth:main.""" │ camply-docker-compose-fishing-bridge | │ ❱ 1130 │ │ return self.main(*args, **kwargs) │ camply-docker-compose-fishing-bridge | │ 1131 │ camply-docker-compose-fishing-bridge | │ 1132 │ camply-docker-compose-fishing-bridge | │ 1133 class Command(BaseCommand): │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/click/core.py:1055 in main │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 1052 │ │ try: │ camply-docker-compose-fishing-bridge | │ 1053 │ │ │ try: │ camply-docker-compose-fishing-bridge | │ 1054 │ │ │ │ with self.make_context(prog_name, args, **extra) as c │ camply-docker-compose-fishing-bridge | │ ❱ 1055 │ │ │ │ │ rv = self.invoke(ctx) │ camply-docker-compose-fishing-bridge | │ 1056 │ │ │ │ │ if not standalone_mode: │ camply-docker-compose-fishing-bridge | │ 1057 │ │ │ │ │ │ return rv │ camply-docker-compose-fishing-bridge | │ 1058 │ │ │ │ │ # it's not safe to ctx.exit(rv) here! │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/click/core.py:1657 in invoke │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 1654 │ │ │ │ super().invoke(ctx) │ camply-docker-compose-fishing-bridge | │ 1655 │ │ │ │ sub_ctx = cmd.make_context(cmd_name, args, parent=ctx │ camply-docker-compose-fishing-bridge | │ 1656 │ │ │ │ with sub_ctx: │ camply-docker-compose-fishing-bridge | │ ❱ 1657 │ │ │ │ │ return _process_result(sub_ctx.command.invoke(sub │ camply-docker-compose-fishing-bridge | │ 1658 │ │ │ camply-docker-compose-fishing-bridge | │ 1659 │ │ # In chain mode we create the contexts step by step, but afte │ camply-docker-compose-fishing-bridge | │ 1660 │ │ # base command has been invoked. Because at that point we do │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/click/core.py:1404 in invoke │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 1401 │ │ │ echo(style(message, fg="red"), err=True) │ camply-docker-compose-fishing-bridge | │ 1402 │ │ │ camply-docker-compose-fishing-bridge | │ 1403 │ │ if self.callback is not None: │ camply-docker-compose-fishing-bridge | │ ❱ 1404 │ │ │ return ctx.invoke(self.callback, **ctx.params) │ camply-docker-compose-fishing-bridge | │ 1405 │ │ camply-docker-compose-fishing-bridge | │ 1406 │ def shell_complete(self, ctx: Context, incomplete: str) -> t.List │ camply-docker-compose-fishing-bridge | │ 1407 │ │ """Return a list of completions for the incomplete value. Loo │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/click/core.py:760 in invoke │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 757 │ │ │ camply-docker-compose-fishing-bridge | │ 758 │ │ with augment_usage_errors(__self): │ camply-docker-compose-fishing-bridge | │ 759 │ │ │ with ctx: │ camply-docker-compose-fishing-bridge | │ ❱ 760 │ │ │ │ return __callback(*args, **kwargs) │ camply-docker-compose-fishing-bridge | │ 761 │ │ camply-docker-compose-fishing-bridge | │ 762 │ def forward( │ camply-docker-compose-fishing-bridge | │ 763 │ │ __self, __cmd: "Command", *args: t.Any, **kwargs: t.Any # no │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/cli.py:421 in campsites │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 418 │ │ key.lower(): value for key, value in CAMPSITE_SEARCH_PROVIDER. │ camply-docker-compose-fishing-bridge | │ 419 │ }[provider.lower()] │ camply-docker-compose-fishing-bridge | │ 420 │ camping_finder = provider_class(**provider_kwargs) │ camply-docker-compose-fishing-bridge | │ ❱ 421 │ camping_finder.get_matching_campsites(**search_kwargs) │ camply-docker-compose-fishing-bridge | │ 422 │ camply-docker-compose-fishing-bridge | │ 423 │ camply-docker-compose-fishing-bridge | │ 424 def cli(): │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/search/base_search.py:468 in │ camply-docker-compose-fishing-bridge | │ get_matching_campsites │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 465 │ │ List[AvailableCampsite] │ camply-docker-compose-fishing-bridge | │ 466 │ │ """ │ camply-docker-compose-fishing-bridge | │ 467 │ │ if continuous is True: │ camply-docker-compose-fishing-bridge | │ ❱ 468 │ │ │ self._search_campsites_continuous( │ camply-docker-compose-fishing-bridge | │ 469 │ │ │ │ log=log, │ camply-docker-compose-fishing-bridge | │ 470 │ │ │ │ verbose=verbose, │ camply-docker-compose-fishing-bridge | │ 471 │ │ │ │ polling_interval=polling_interval, │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/search/base_search.py:412 in │ camply-docker-compose-fishing-bridge | │ _search_campsites_continuous │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 409 │ │ continuous_search = True │ camply-docker-compose-fishing-bridge | │ 410 │ │ continuous_search_attempts = 1 │ camply-docker-compose-fishing-bridge | │ 411 │ │ while continuous_search is True: │ camply-docker-compose-fishing-bridge | │ ❱ 412 │ │ │ self._continuous_search_retry( │ camply-docker-compose-fishing-bridge | │ 413 │ │ │ │ log=log, │ camply-docker-compose-fishing-bridge | │ 414 │ │ │ │ verbose=verbose, │ camply-docker-compose-fishing-bridge | │ 415 │ │ │ │ polling_interval=polling_interval, │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/search/base_search.py:276 in │ camply-docker-compose-fishing-bridge | │ _continuous_search_retry │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 273 │ │ logger.info(f"{len(new_campsites)} New Campsites Found.") │ camply-docker-compose-fishing-bridge | │ 274 │ │ self.campsites_found.update(new_campsites) │ camply-docker-compose-fishing-bridge | │ 275 │ │ logged_campsites = list(new_campsites) │ camply-docker-compose-fishing-bridge | │ ❱ 276 │ │ self._handle_notifications( │ camply-docker-compose-fishing-bridge | │ 277 │ │ │ retryer=retryer, │ camply-docker-compose-fishing-bridge | │ 278 │ │ │ notifier=notifier, │ camply-docker-compose-fishing-bridge | │ 279 │ │ │ logged_campsites=logged_campsites, │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/search/base_search.py:320 in │ camply-docker-compose-fishing-bridge | │ _handle_notifications │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 317 │ │ │ logged_campsites = cls.handle_too_many_campsites_found( │ camply-docker-compose-fishing-bridge | │ 318 │ │ │ │ notifier=notifier, logged_campsites=logged_campsites │ camply-docker-compose-fishing-bridge | │ 319 │ │ │ ) │ camply-docker-compose-fishing-bridge | │ ❱ 320 │ │ │ notifier.send_campsites(campsites=logged_campsites) │ camply-docker-compose-fishing-bridge | │ 321 │ │ else: │ camply-docker-compose-fishing-bridge | │ 322 │ │ │ if ( │ camply-docker-compose-fishing-bridge | │ 323 │ │ │ │ len(notifier.providers) > 1 │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/notifications/multi_provider_n │ camply-docker-compose-fishing-bridge | │ otifications.py:84 in send_campsites │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 81 │ │ campsites: List[AvailableCampsite] │ camply-docker-compose-fishing-bridge | │ 82 │ │ """ │ camply-docker-compose-fishing-bridge | │ 83 │ │ for provider in self.providers: │ camply-docker-compose-fishing-bridge | │ ❱ 84 │ │ │ provider.send_campsites(campsites=campsites, **kwargs) │ camply-docker-compose-fishing-bridge | │ 85 │ │ camply-docker-compose-fishing-bridge | │ 86 │ def log_providers(self) -> None: │ camply-docker-compose-fishing-bridge | │ 87 │ │ """ │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/notifications/pushover.py:104 │ camply-docker-compose-fishing-bridge | │ in send_campsites │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 101 │ │ campsites: AvailableCampsite │ camply-docker-compose-fishing-bridge | │ 102 │ │ """ │ camply-docker-compose-fishing-bridge | │ 103 │ │ for campsite in campsites: │ camply-docker-compose-fishing-bridge | │ ❱ 104 │ │ │ message_title, formatted_dict = cls.format_standard_campsi │ camply-docker-compose-fishing-bridge | │ 105 │ │ │ │ campsite=campsite, │ camply-docker-compose-fishing-bridge | │ 106 │ │ │ ) │ camply-docker-compose-fishing-bridge | │ 107 │ │ │ fields = [] │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ /usr/local/lib/python3.9/site-packages/camply/notifications/base_notificatio │ camply-docker-compose-fishing-bridge | │ ns.py:79 in format_standard_campsites │ camply-docker-compose-fishing-bridge | │ │ camply-docker-compose-fishing-bridge | │ 76 │ │ │ │ key = "booking_link" │ camply-docker-compose-fishing-bridge | │ 77 │ │ │ elif key == CampsiteContainerFields.PERMITTED_EQUIPMENT: │ camply-docker-compose-fishing-bridge | │ 78 │ │ │ │ value = "\n - " + "\n - ".join( │ camply-docker-compose-fishing-bridge | │ ❱ 79 │ │ │ │ │ set(item.equipment_name for item in campsite.permit │ camply-docker-compose-fishing-bridge | │ 80 │ │ │ │ ) │ camply-docker-compose-fishing-bridge | │ 81 │ │ │ if key not in [CampsiteContainerFields.CAMPSITE_ATTRIBUTES] │ camply-docker-compose-fishing-bridge | │ 82 │ │ │ │ formatted_key = key.replace("", " ").title() │ camply-docker-compose-fishing-bridge | ╰──────────────────────────────────────────────────────────────────────────────╯ camply-docker-compose-fishing-bridge | TypeError: 'NoneType' object is not iterable camply-docker-compose-fishing-bridge exited with code 1 camply-docker-compose-fishing-bridge | 2022-09-22 19:06:46,793 [ CAMPLY]: camply, the campsite finder ⛺️ camply-docker-compose-fishing-bridge | 2022-09-22 19:06:46,796 [ INFO]: YAML File Parsed: search.yml camply-docker-compose-fishing-bridge | 2022-09-22 19:06:46,798 [ INFO]: 25 booking nights selected for search, ranging from 2023-06-05 to 2023-06-29 camply-docker-compose-fishing-bridge | 2022-09-22 19:06:46,800 [ INFO]: Searching for availabilities with 3 consecutive night stays. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:46,801 [ INFO]: Searching for campsites every 5 minutes. camply-docker-compose-fishing-bridge | 2022-09-22 19:06:46,801 [ INFO]: Notifications active via: , camply-docker-compose-fishing-bridge | 2022-09-22 19:06:46,801 [ INFO]: 1 Matching Campgrounds Found camply-docker-compose-fishing-bridge | 2022-09-22 19:06:46,802 [ INFO]: ⛰ Yellowstone National Park, USA (#1) - 🏕 Fishing Bridge RV Park (YLYF:RV) camply-docker-compose-fishing-bridge | 2022-09-22 19:06:46,820 [ INFO]: Searching for Yellowstone Lodging Availability: June, 2023

    bug 
    opened by rboarman 4
  • Hide Not Yet Released Sites

    Hide Not Yet Released Sites

    Is your feature request related to a problem? Please describe. When running a search for 4th of July week at Yellowstone, Camply is returning many sites open, but none of them are reservable until two weeks out.

    Visitors can make a reservation six weeks in advance for 80% of the camping spots at Indian Creek, Lewis Lake, Pebble Creek, Mammoth and Slough Creek, reservations for the other 20% will open two weeks in advance.

    Describe the solution you'd like Is it possible to filter out Not Yet Released (NR) reservations?

    Describe alternatives you've considered

    Additional context

    2022-05-18 20:16:55,479 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068683 (5 nights) 2022-05-18 20:16:55,479 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068684 (5 nights) 2022-05-18 20:16:55,479 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068685 (5 nights) 2022-05-18 20:16:55,479 [ INFO]: ⛰️ Yellowstone National Park, WY 🏕 Lewis Lake Campground: ⛺ 17 sites 2022-05-18 20:16:55,482 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077164 (5 nights) 2022-05-18 20:16:55,483 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077166 (5 nights) 2022-05-18 20:16:55,483 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077167 (5 nights) 2022-05-18 20:16:55,483 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077169 (5 nights) 2022-05-18 20:16:55,483 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077175 (5 nights) 2022-05-18 20:16:55,483 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077179 (5 nights) 2022-05-18 20:16:55,483 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077180 (5 nights) 2022-05-18 20:16:55,483 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077181 (5 nights) 2022-05-18 20:16:55,483 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077185 (5 nights) 2022-05-18 20:16:55,484 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077186 (5 nights) 2022-05-18 20:16:55,484 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077188 (5 nights) 2022-05-18 20:16:55,484 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077189 (5 nights) 2022-05-18 20:16:55,484 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077190 (5 nights) 2022-05-18 20:16:55,484 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077191 (5 nights) 2022-05-18 20:16:55,484 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077192 (5 nights) 2022-05-18 20:16:55,484 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077206 (5 nights) 2022-05-18 20:16:55,485 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077215 (5 nights) 2022-05-18 20:16:55,485 [ INFO]: 📅 Tue, July 05 🏕 36 sites 2022-05-18 20:16:55,490 [ INFO]: ⛰️ Yellowstone National Park, USA 🏕 Pebble Creek Campground: ⛺ 5 sites 2022-05-18 20:16:55,494 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068704 (5 nights) 2022-05-18 20:16:55,494 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068705 (5 nights) 2022-05-18 20:16:55,494 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068706 (5 nights) 2022-05-18 20:16:55,494 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068707 (5 nights) 2022-05-18 20:16:55,494 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068713 (5 nights) 2022-05-18 20:16:55,495 [ INFO]: ⛰️ Yellowstone National Park, WY 🏕 Indian Creek Campground (Yellowstone): ⛺ 14 sites 2022-05-18 20:16:55,498 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068620 (5 nights) 2022-05-18 20:16:55,498 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068623 (5 nights) 2022-05-18 20:16:55,499 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068625 (5 nights) 2022-05-18 20:16:55,499 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068632 (5 nights) 2022-05-18 20:16:55,499 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068645 (5 nights) 2022-05-18 20:16:55,499 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068647 (5 nights) 2022-05-18 20:16:55,499 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068662 (5 nights) 2022-05-18 20:16:55,499 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068663 (5 nights) 2022-05-18 20:16:55,499 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068671 (5 nights) 2022-05-18 20:16:55,499 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068681 (5 nights) 2022-05-18 20:16:55,500 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068682 (5 nights) 2022-05-18 20:16:55,500 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068683 (5 nights) 2022-05-18 20:16:55,500 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068684 (5 nights) 2022-05-18 20:16:55,500 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10068685 (5 nights) 2022-05-18 20:16:55,500 [ INFO]: ⛰️ Yellowstone National Park, WY 🏕 Lewis Lake Campground: ⛺ 17 sites 2022-05-18 20:16:55,503 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077164 (5 nights) 2022-05-18 20:16:55,504 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077166 (5 nights) 2022-05-18 20:16:55,504 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077167 (5 nights) 2022-05-18 20:16:55,504 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077169 (5 nights) 2022-05-18 20:16:55,504 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077175 (5 nights) 2022-05-18 20:16:55,504 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077179 (5 nights) 2022-05-18 20:16:55,505 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077180 (5 nights) 2022-05-18 20:16:55,505 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077181 (5 nights) 2022-05-18 20:16:55,505 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077185 (5 nights) 2022-05-18 20:16:55,505 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077186 (5 nights) 2022-05-18 20:16:55,505 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077188 (5 nights) 2022-05-18 20:16:55,505 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077189 (5 nights) 2022-05-18 20:16:55,505 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077190 (5 nights) 2022-05-18 20:16:55,505 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077191 (5 nights) 2022-05-18 20:16:55,505 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077192 (5 nights) 2022-05-18 20:16:55,506 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077206 (5 nights) 2022-05-18 20:16:55,506 [ INFO]: 🔗 https://www.recreation.gov/camping/campsites/10077215 (5 nights) 2022-05-18 20:16:55,506 [ INFO]: 180 New Campsites Found. 2022-05-18 20:16:55,507 [ WARNING]: Too many campsites were found during the search (180 total). camply will only send you the first 20 notifications.

    opened by detroittigers 4
  • Fix parsing facilities responses

    Fix parsing facilities responses

    Fix parsing facilities responses without FACILITY_ADDRESS or CAMPGROUND_RECREATION_AREA by adding except KeyError

    Sample facility response from 89898:

    {'FacilityID': '', 'LegacyFacilityID': '', 'OrgFacilityID': '', 'ParentOrgID': '', 'ParentRecAreaID': '', 'FacilityName': '', 'FacilityDescription': '', 'FacilityTypeDescription': '', 'FacilityUseFeeDescription': '', 'FacilityDirections': '', 'FacilityPhone': '', 'FacilityEmail': '', 'FacilityReservationURL': '', 'FacilityMapURL': '', 'FacilityAdaAccess': '', 'GEOJSON': {'TYPE': '', 'COORDINATES': None}, 'FacilityLongitude': 0, 'FacilityLatitude': 0, 'Keywords': '', 'StayLimit': '', 'Reservable': False, 'Enabled': False, 'LastUpdatedDate': ''}
    
    bug 
    opened by grantland 4
  • Bump griffe from 0.25.1 to 0.25.2

    Bump griffe from 0.25.1 to 0.25.2

    Bumps griffe from 0.25.1 to 0.25.2.

    Changelog

    Sourced from griffe's changelog.

    0.25.2 - 2022-12-24

    Compare with 0.25.1

    Bug Fixes

    Commits
    • 67b328a chore: Prepare release 0.25.2
    • 79733f4 fix: Make sure passage through aliases is reset
    • bb62b2f fix: Ignore cyclic alias errors when updating target aliases
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump filelock from 3.8.2 to 3.9.0

    Bump filelock from 3.8.2 to 3.9.0

    Bumps filelock from 3.8.2 to 3.9.0.

    Release notes

    Sourced from filelock's releases.

    3.9.0

    What's Changed

    Full Changelog: https://github.com/tox-dev/py-filelock/compare/3.8.2...3.9.0

    Changelog

    Sourced from filelock's changelog.

    v3.9.0 (2022-12-28)

    • Move build backend to hatchling :pr:185 - by :user:gaborbernat`.

    v3.8.1 (2022-12-04)

    • Fix mypy does not accept filelock.FileLock as a valid type

    v3.8.0 (2022-12-04)

    • Bump project dependencies
    • Add timeout unit to docstrings
    • Support 3.11

    v3.7.1 (2022-05-31)

    • Make the readme documentation point to the index page

    v3.7.0 (2022-05-13)

    • Add ability to return immediately when a lock cannot be obtained

    v3.6.0 (2022-02-17)

    • Fix pylint warning "Abstract class :class:WindowsFileLock <filelock.WindowsFileLock> with abstract methods instantiated" :pr:135 - by :user:vonschultz
    • Fix pylint warning "Abstract class :class:UnixFileLock <filelock.UnixFileLock> with abstract methods instantiated" :pr:135 - by :user:vonschultz

    v3.5.1 (2022-02-16)

    • Use time.monotonic instead of time.time for calculating timeouts.

    v3.5.0 (2022-02-15)

    • Enable use as context decorator

    v3.4.2 (2021-12-16)

    • Drop support for python 3.6

    v3.4.1 (2021-12-16)

    • Add stacklevel to deprecation warnings for argument name change

    v3.4.0 (2021-11-16)

    • Add correct spelling of poll interval parameter for :meth:acquire <filelock.BaseFileLock.acquire> method, raise deprecation warning when using the misspelled form :pr:119 - by :user:XuehaiPan.

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump platformdirs from 2.6.0 to 2.6.2

    Bump platformdirs from 2.6.0 to 2.6.2

    Bumps platformdirs from 2.6.0 to 2.6.2.

    Release notes

    Sourced from platformdirs's releases.

    2.6.2

    What's Changed

    New Contributors

    Full Changelog: https://github.com/platformdirs/platformdirs/compare/2.6.1...2.6.2

    2.6.1

    What's Changed

    New Contributors

    Full Changelog: https://github.com/platformdirs/platformdirs/compare/2.6.0...2.6.1

    Changelog

    Sourced from platformdirs's changelog.

    platformdirs 2.6.2 (2022-12-28)

    • Fix missing typing-extensions dependency.

    platformdirs 2.6.1 (2022-12-28)

    • Add detection of $PREFIX for android.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump importlib-metadata from 5.2.0 to 6.0.0

    Bump importlib-metadata from 5.2.0 to 6.0.0

    Bumps importlib-metadata from 5.2.0 to 6.0.0.

    Changelog

    Sourced from importlib-metadata's changelog.

    v6.0.0

    • #419: Declared Distribution as an abstract class, enforcing definition of abstract methods in instantiated subclasses. It's no longer possible to instantiate a Distribution or any subclasses unless they define the abstract methods.

      Please comment in the issue if this change breaks any projects. This change will likely be rolled back if it causes significant disruption.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump coverage from 7.0.0 to 7.0.1

    Bump coverage from 7.0.0 to 7.0.1

    Bumps coverage from 7.0.0 to 7.0.1.

    Changelog

    Sourced from coverage's changelog.

    Version 7.0.1 — 2022-12-23

    • When checking if a file mapping resolved to a file that exists, we weren't considering files in .whl files. This is now fixed, closing issue 1511_.

    • File pattern rules were too strict, forbidding plus signs and curly braces in directory and file names. This is now fixed, closing issue 1513_.

    • Unusual Unicode or control characters in source files could prevent reporting. This is now fixed, closing issue 1512_.

    • The PyPy wheel now installs on PyPy 3.7, 3.8, and 3.9, closing issue 1510_.

    .. _issue 1510: nedbat/coveragepy#1510 .. _issue 1511: nedbat/coveragepy#1511 .. _issue 1512: nedbat/coveragepy#1512 .. _issue 1513: nedbat/coveragepy#1513

    .. _changes_7-0-0:

    Commits
    • c5cda3a docs: releases take a little bit longer now
    • 9d4226e docs: latest sample HTML report
    • 8c77758 docs: prep for 7.0.1
    • da1b282 fix: also look into .whl files for source
    • d327a70 fix: more information when mapping rules aren't working right.
    • 35e249f fix: certain strange characters caused reporting to fail. #1512
    • 152cdc7 fix: don't forbid plus signs in file names. #1513
    • 31513b4 chore: make upgrade
    • 873b059 test: don't run tests on Windows PyPy-3.9
    • 5c5caa2 build: PyPy wheel now installs on 3.7, 3.8, and 3.9. #1510
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(v0.8.0)
Owner
Justin Flannery
Data Science Engineering @ Teladoc
Justin Flannery
Simple implementation of Mobile-Former on Pytorch

Simple-implementation-of-Mobile-Former At present, only the model but no trained. There may be some bug in the code, and some details may be different

Acheung 103 Dec 31, 2022
Gym environments used in the paper: "Developmental Reinforcement Learning of Control Policy of a Quadcopter UAV with Thrust Vectoring Rotors"

gym_multirotor Gym to train reinforcement learning agents on UAV platforms Quadrotor Tiltrotor Requirements This package has been tested on Ubuntu 18.

Aditya M. Deshpande 19 Dec 29, 2022
The official implementation of CircleNet: Anchor-free Detection with Circle Representation, MICCAI 2030

CircleNet: Anchor-free Detection with Circle Representation The official implementation of CircleNet, MICCAI 2020 [PyTorch] [project page] [MICCAI pap

The Biomedical Data Representation and Learning Lab 45 Nov 18, 2022
PyTorch implementation of "ContextNet: Improving Convolutional Neural Networks for Automatic Speech Recognition with Global Context" (INTERSPEECH 2020)

ContextNet ContextNet has CNN-RNN-transducer architecture and features a fully convolutional encoder that incorporates global context information into

Sangchun Ha 24 Nov 24, 2022
Data and code for ICCV 2021 paper Distant Supervision for Scene Graph Generation.

Distant Supervision for Scene Graph Generation Data and code for ICCV 2021 paper Distant Supervision for Scene Graph Generation. Introduction The pape

THUNLP 23 Dec 31, 2022
AquaTimer - Programmable Timer for Aquariums based on ATtiny414/814/1614

AquaTimer - Programmable Timer for Aquariums based on ATtiny414/814/1614 AquaTimer is a programmable timer for 12V devices such as lighting, solenoid

Stefan Wagner 4 Jun 13, 2022
RoMA: Robust Model Adaptation for Offline Model-based Optimization

RoMA: Robust Model Adaptation for Offline Model-based Optimization Implementation of RoMA: Robust Model Adaptation for Offline Model-based Optimizatio

9 Oct 31, 2022
Boosting Adversarial Attacks with Enhanced Momentum (BMVC 2021)

EMI-FGSM This repository contains code to reproduce results from the paper: Boosting Adversarial Attacks with Enhanced Momentum (BMVC 2021) Xiaosen Wa

John Hopcroft Lab at HUST 10 Sep 26, 2022
DeLag: Detecting Latency Degradation Patterns in Service-based Systems

DeLag: Detecting Latency Degradation Patterns in Service-based Systems Replication package of the work "DeLag: Detecting Latency Degradation Patterns

SEALABQualityGroup @ University of L'Aquila 2 Mar 24, 2022
TResNet: High Performance GPU-Dedicated Architecture

TResNet: High Performance GPU-Dedicated Architecture paperV2 | pretrained models Official PyTorch Implementation Tal Ridnik, Hussam Lawen, Asaf Noy, I

426 Dec 28, 2022
PyTorch implementation for paper Neural Marching Cubes.

NMC PyTorch implementation for paper Neural Marching Cubes, Zhiqin Chen, Hao Zhang. Paper | Supplementary Material (to be updated) Citation If you fin

Zhiqin Chen 109 Dec 27, 2022
audioLIME: Listenable Explanations Using Source Separation

audioLIME This repository contains the Python package audioLIME, a tool for creating listenable explanations for machine learning models in music info

Institute of Computational Perception 27 Dec 01, 2022
Everything about being a TA for ITP/AP course!

تی‌ای بودن! تی‌ای یا دستیار استاد از نقش‌های رایج بین دانشجویان مهندسی است، این ریپوزیتوری قرار است نکات مهم درمورد تی‌ای بودن و تی ای شدن را به ما نش

<a href=[email protected]"> 14 Sep 10, 2022
An Straight Dilated Network with Wavelet for image Deblurring

SDWNet: A Straight Dilated Network with Wavelet Transformation for Image Deblurring(offical) 1. Introduction This repo is not only used for our paper(

FlyEgle 41 Jan 04, 2023
Tree-based Search Graph for Approximate Nearest Neighbor Search

TBSG: Tree-based Search Graph for Approximate Nearest Neighbor Search. TBSG is a graph-based algorithm for ANNS based on Cover Tree, which is also an

Fanxbin 2 Dec 27, 2022
Official implementation of Unfolded Deep Kernel Estimation for Blind Image Super-resolution.

Unfolded Deep Kernel Estimation for Blind Image Super-resolution Hongyi Zheng, Hongwei Yong, Lei Zhang, "Unfolded Deep Kernel Estimation for Blind Ima

Z80 15 Dec 26, 2022
Elevation Mapping on GPU.

Elevation Mapping cupy Overview This is a ros package of elevation mapping on GPU. Code are written in python and uses cupy for GPU calculation. * pla

Robotic Systems Lab - Legged Robotics at ETH Zürich 183 Dec 19, 2022
Udacity Suse Cloud Native Foundations Scholarship Course Walkthrough

SUSE Cloud Native Foundations Scholarship Udacity is collaborating with SUSE, a global leader in true open source solutions, to empower developers and

Shivansh Srivastava 34 Oct 18, 2022
Auto-Lama combines object detection and image inpainting to automate object removals

Auto-Lama Auto-Lama combines object detection and image inpainting to automate object removals. It is build on top of DE:TR from Facebook Research and

44 Dec 09, 2022
Seeing All the Angles: Learning Multiview Manipulation Policies for Contact-Rich Tasks from Demonstrations

Seeing All the Angles: Learning Multiview Manipulation Policies for Contact-Rich Tasks from Demonstrations Trevor Ablett, Daniel (Yifan) Zhai, Jonatha

STARS Laboratory 3 Feb 01, 2022