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
SARS-Cov-2 Recombinant Finder for fasta sequences

Sc2rf - SARS-Cov-2 Recombinant Finder Pronounced: Scarf What's this? Sc2rf can search genome sequences of SARS-CoV-2 for potential recombinants - new

Lena Schimmel 41 Oct 3, 2022
Campsite Reservation Finder

yellowstone-camping UPDATE: yellowstone-camping is being expanded and renamed to camply. The updated tool now interfaces with the Recreation.gov API a

Justin Flannery 233 Jan 8, 2023
Tinyman exploit finder - Tinyman exploit finder for python

tinyman_exploit_finder There was a big tinyman exploit. You can read about it he

fish.exe 9 Dec 27, 2022
Restaurant-finder - Restaurant finder With Python

restaurant-finder APIs /restaurants query-params: a. filter: column based on whi

Kumar saurav 1 Feb 22, 2022
Flight Reservation App With Python

Flight Reservation App With Python

victor-h. 1 Nov 21, 2021
This is a menu driven Railway Reservation Project which is mainly based on the python-mysql connectivity.

Online-Railway-Reservation-System This is a menu driven Railway Reservation Project which is mainly based on the python-mysql connectivity. The projec

Ananya Gupta 1 Jan 9, 2022
Airplane reservation system python 2

airplane-reservation-system-python-2 Announcement ?? : ?? IMPORTANT ?? : Few new things have been added into the code [16/05/2021] different names is

voyager2005 1 Dec 6, 2021
OpenTable Reservation Maker For Python

OpenTable-Reservation-Maker The code that corresponds with this blog post on writing a script to make reservations for me on opentable Getting started

JonLuca De Caro 36 Nov 10, 2022
BookMyShowPC - Movie Ticket Reservation App made with Tkinter

Book My Show PC What is this? Movie Ticket Reservation App made with Tkinter. Tk

The Nithin Balaji 3 Dec 9, 2022
💉 🔍 VaxFinder - Backend The backend for the Vaccine Hunters Finder tool.

?? ?? VaxFinder - Backend The backend for the Vaccine Hunters Finder tool. Development Prerequisites Python 3.8 Poetry: A tool for dependency manageme

Vaccine Hunters Canada 32 Jan 19, 2022
✨ Udemy Coupon Finder For Discord. Supports Turkish & English Language.

Udemy Course Finder Bot | Udemy Kupon Bulucu Botu This bot finds new udemy coupons and sends to the channel. Before Setup You must have python >= 3.6

Penguen 4 May 4, 2022
A pypi packages finder telegram bot.

PyPi-Bot A pypi packages information finder telegram bot. Made with Python3 (C) @FayasNoushad Copyright permission under MIT License License -> https:

Fayas Noushad 17 Oct 21, 2022
Broken Link Finder is a Burp Extension to detect broken links for a passive scanning domains and links.

Broken Link Finder Broken Link Finder is a Burp Extension to detect broken links for a passive scanning domains and links. Inspired by InitRoot's link

Red Section 10 Sep 11, 2021
A real-time tech course finder, created using Elasticsearch, Python, React+Redux, Docker, and Kubernetes.

A real-time tech course finder, created using Elasticsearch, Python, React+Redux, Docker, and Kubernetes.

Dinesh Sonachalam 130 Dec 20, 2022
Snack Rice - A Rice University servery finder, customized for your needs!

Snack Rice - A Rice University servery finder, customized for your needs!

Aidan Gerber 3 Sep 25, 2022
simple subdomain finder

Subdomain-finder Simple SubDomain finder using python which is easy to use just download and run it Wordlist you can use your own wordlist but here i

AsjadOwO 5 Sep 24, 2021
User-friendly reference finder in IDA

IDARefHunter Updated: This project's been introduced on IDA Plugin Contest 2021! Why do we need RefHunter? Getting reference information in one specif

Jiwon 29 Dec 4, 2022
An advanced telegram country information finder bot.

Country-Info-Bot-V2 An advanced telegram country information finder bot Made with Python3 (C) @FayasNoushad Copyright permission under MIT License Lic

Fayas Noushad 16 Nov 12, 2022
An advanced telegram movie information finder bot

An advanced telegram movie information finder bot

Fayas Noushad 22 Aug 23, 2022