juftin / camply

camply, the campsite finder ⛺️ - a tool to find campsites at sold out campgrounds through sites like recreation.gov
https://juftin.com/camply/
MIT License
476 stars 93 forks source link

Availability None error for Yosemite campgrounds that have closed for the season. #360

Open stjohnjohnson opened 3 weeks ago

stjohnjohnson commented 3 weeks ago

Describe the bug

Trying to search for campsites in North, Lower, and Upper pines and getting stuck with

campsites -> 924 -> availabilities 
none is not an allowed value (type=type_error.none.not_allowed)

I believe it is because North and Lower are closed for the season.

Yaml Config

campgrounds:
  - 232449
  - 232450
  - 232447
start_date:       2024-11-23
end_date:         2024-11-26
nights:           3
continuous:       true
notifications:    telegram
search_forever:   true
polling_interval: 5
equipment:
  - [RV, 25]

Debug

| 2024-10-03 04:59:04,487 [  CAMPLY]: camply, the campsite finder ⛺️
| 2024-10-03 04:59:04,488 [   DEBUG]: Setting up camply debugging
| 2024-10-03 04:59:04,488 [   DEBUG]: Camply Version: 0.32.8
| 2024-10-03 04:59:04,488 [   DEBUG]: Python Version: 3.11.9
| 2024-10-03 04:59:04,488 [   DEBUG]: Platform: linux
| 2024-10-03 04:59:04,490 [    INFO]: YAML File Parsed: search.yml
| 2024-10-03 04:59:04,490 [    INFO]: Using Camply Provider: "RecreationDotGov"
| 2024-10-03 04:59:04,491 [    INFO]: 3 booking nights selected for search, ranging from 2024-11-23 to 2024-11-25
| 2024-10-03 04:59:04,492 [    INFO]: Searching for availabilities with 3 consecutive night stays.
| 2024-10-03 04:59:04,493 [   DEBUG]: Starting new HTTPS connection (1): ridb.recreation.gov:443
| 2024-10-03 04:59:06,115 [   DEBUG]: https://ridb.recreation.gov:443 "GET /api/v1/facilities/232449?full=True HTTP/1.1" 200 11240
| 2024-10-03 04:59:07,690 [   DEBUG]: https://ridb.recreation.gov:443 "GET /api/v1/facilities/232450?full=True HTTP/1.1" 200 10478
| 2024-10-03 04:59:09,195 [   DEBUG]: https://ridb.recreation.gov:443 "GET /api/v1/facilities/232447?full=True HTTP/1.1" 200 12287
| 2024-10-03 04:59:09,199 [    INFO]: 3 Matching Campgrounds Found
| 2024-10-03 04:59:09,199 [    INFO]: ⛰  Yosemite National Park, CA (#2991) - 🏕  Lower Pines Campground (#232450)
| 2024-10-03 04:59:09,199 [    INFO]: ⛰  Yosemite National Park, CA (#2991) - 🏕  North Pines Campground (#232449)
| 2024-10-03 04:59:09,199 [    INFO]: ⛰  Yosemite National Park, CA (#2991) - 🏕  Upper Pines Campground (#232447)
| 2024-10-03 04:59:09,200 [    INFO]: Filtering Campsites based on Equipment: RV
| 2024-10-03 04:59:09,201 [    INFO]: Searching for campsites every 5 minutes.
| 2024-10-03 04:59:09,202 [    INFO]: Notifications active via: <SilentNotifications>, <TelegramNotifications>
| 2024-10-03 04:59:09,202 [    INFO]: Searching across 3 campgrounds
| 2024-10-03 04:59:09,209 [   DEBUG]: Starting new HTTPS connection (1): www.recreation.gov:443
| 2024-10-03 04:59:09,276 [   DEBUG]: https://www.recreation.gov:443 "GET /api/search/campsites?start=0&size=1000&fq=asset_id%3A232447&include_non_site_specific_campsites=True HTTP/1.1" 200 None
| 2024-10-03 04:59:09,397 [   DEBUG]: Starting new HTTPS connection (1): www.recreation.gov:443
| 2024-10-03 04:59:09,451 [   DEBUG]: https://www.recreation.gov:443 "GET /api/search/campsites?start=0&size=1000&fq=asset_id%3A232450&include_non_site_specific_campsites=True HTTP/1.1" 200 None
| 2024-10-03 04:59:09,484 [   DEBUG]: Starting new HTTPS connection (1): www.recreation.gov:443
| 2024-10-03 04:59:09,545 [   DEBUG]: https://www.recreation.gov:443 "GET /api/search/campsites?start=0&size=1000&fq=asset_id%3A232449&include_non_site_specific_campsites=True HTTP/1.1" 200 None
| 2024-10-03 04:59:09,717 [    INFO]: Metadata fetched for 414 campsites
| 2024-10-03 04:59:09,717 [    INFO]: Searching Upper Pines Campground, Yosemite National Park, CA (232447) for availability: November, 2024
| 2024-10-03 04:59:10,208 [   DEBUG]: Starting new HTTPS connection (1): www.recreation.gov:443
| 2024-10-03 04:59:10,283 [   DEBUG]: https://www.recreation.gov:443 "GET /api/camps/availability/campground/232447/month?start_date=2024-11-01T00%3A00%3A00.000Z HTTP/1.1" 200 None
| 2024-10-03 04:59:10,375 [    INFO]:   ❌   0 total sites found in month of November
| 2024-10-03 04:59:11,396 [    INFO]: Searching Lower Pines Campground, Yosemite National Park, CA (232450) for availability: November, 2024
| 2024-10-03 04:59:11,401 [   DEBUG]: Starting new HTTPS connection (1): www.recreation.gov:443
| 2024-10-03 04:59:11,495 [   DEBUG]: https://www.recreation.gov:443 "GET /api/camps/availability/campground/232450/month?start_date=2024-11-01T00%3A00%3A00.000Z HTTP/1.1" 200 None
| 2024-10-03 04:59:11,500 [  CAMPLY]: Exiting camply 👋
| ╭───────────────────── Traceback (most recent call last) ──────────────────────╮
| │ /usr/local/bin/camply:8 in <module>                                          │
| │                                                                              │
| │   5 from camply.cli import cli                                               │
| │   6 if __name__ == '__main__':                                               │
| │   7 │   sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])     │
| │ ❱ 8 │   sys.exit(cli())                                                      │
| │   9                                                                          │
| │                                                                              │
| │ ╭────────────────────────────── locals ───────────────────────────────╮      │
| │ │ cli = <function cli at 0x7f46618cca40>                              │      │
| │ │  re = <module 're' from '/usr/local/lib/python3.11/re/__init__.py'> │      │
| │ │ sys = <module 'sys' (built-in)>                                     │      │
| │ ╰─────────────────────────────────────────────────────────────────────╯      │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/camply/cli.py:883 in cli             │
| │                                                                              │
| │   880 │   Camply Command Line Utility Wrapper                                │
| │   881 │   """                                                                │
| │   882 │   try:                                                               │
| │ ❱ 883 │   │   camply_command_line()                                          │
| │   884 │   except KeyboardInterrupt:                                          │
| │   885 │   │   logger.debug("Handling Exit Request")                          │
| │   886 │   finally:                                                           │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/click/core.py:1157 in __call__       │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/rich_click/rich_group.py:21 in main  │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/click/core.py:1078 in main           │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/click/core.py:1688 in invoke         │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/click/core.py:1434 in invoke         │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/click/core.py:783 in invoke          │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/click/decorators.py:45 in new_func   │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/camply/cli.py:775 in campsites       │
| │                                                                              │
| │   772 │   │   )                                                              │
| │   773 │   provider_class: Type[BaseCampingSearch] = CAMPSITE_SEARCH_PROVIDER │
| │   774 │   camping_finder: BaseCampingSearch = provider_class(**provider_kwar │
| │ ❱ 775 │   camping_finder.get_matching_campsites(**search_kwargs)             │
| │   776                                                                        │
| │   777                                                                        │
| │   778 @camply_command_line.command(cls=RichCommand)                          │
| │                                                                              │
| │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
| │ │          campground = ()                                                 │ │
| │ │      camping_finder = <camply.search.search_recreationdotgov.SearchRecr… │ │
| │ │                       object at 0x7f466184f090>                          │ │
| │ │            campsite = ()                                                 │ │
| │ │             context = CamplyContext(debug=True, provider=None)           │ │
| │ │          continuous = False                                              │ │
| │ │                 day = ()                                                 │ │
| │ │               debug = True                                               │ │
| │ │            end_date = ()                                                 │ │
| │ │           equipment = ()                                                 │ │
| │ │        equipment_id = None                                               │ │
| │ │              nights = 1                                                  │ │
| │ │       notifications = ()                                                 │ │
| │ │    notify_first_try = None                                               │ │
| │ │      offline_search = False                                              │ │
| │ │ offline_search_path = None                                               │ │
| │ │    polling_interval = None                                               │ │
| │ │            provider = 'RecreationDotGov'                                 │ │
| │ │      provider_class = <class                                             │ │
| │ │                       'camply.search.search_recreationdotgov.SearchRecr… │ │
| │ │     provider_kwargs = {                                                  │ │
| │ │                       │   'search_window': SearchWindow(                 │ │
| │ │                       │   │   start_date=datetime.date(2024, 11, 23),    │ │
| │ │                       │   │   end_date=datetime.date(2024, 11, 26)       │ │
| │ │                       │   ),                                             │ │
| │ │                       │   'recreation_area': None,                       │ │
| │ │                       │   'campgrounds': [232449, 232450, 232447],       │ │
| │ │                       │   'campsites': None,                             │ │
| │ │                       │   'weekends_only': False,                        │ │
| │ │                       │   'days_of_the_week': None,                      │ │
| │ │                       │   'nights': 3,                                   │ │
| │ │                       │   'equipment': [('RV', 25)],                     │ │
| │ │                       │   'offline_search': False,                       │ │
| │ │                       │   'offline_search_path': None                    │ │
| │ │                       }                                                  │ │
| │ │            rec_area = ()                                                 │ │
| │ │      search_forever = None                                               │ │
| │ │       search_kwargs = {                                                  │ │
| │ │                       │   'log': True,                                   │ │
| │ │                       │   'verbose': True,                               │ │
| │ │                       │   'continuous': True,                            │ │
| │ │                       │   'polling_interval': 5,                         │ │
| │ │                       │   'notify_first_try': False,                     │ │
| │ │                       │   'notification_provider': 'telegram',           │ │
| │ │                       │   'search_forever': True,                        │ │
| │ │                       │   'search_once': False                           │ │
| │ │                       }                                                  │ │
| │ │         search_once = False                                              │ │
| │ │          start_date = ()                                                 │ │
| │ │            weekends = False                                              │ │
| │ │         yaml_config = '/home/camply/search.yml'                          │ │
| │ ╰──────────────────────────────────────────────────────────────────────────╯ │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/camply/search/base_search.py:588 in  │
| │ get_matching_campsites                                                       │
| │                                                                              │
| │    585 │   │   │   except Exception as e:                                    │
| │    586 │   │   │   │   if self.search_attempts >= 1:                         │
| │    587 │   │   │   │   │   self.notifier.last_gasp(error=e)                  │
| │ ❱  588 │   │   │   │   raise e                                               │
| │    589 │   │   else:                                                         │
| │    590 │   │   │   starting_count = len(self.campsites_found)                │
| │    591 │   │   │   matching_campsites = self._search_matching_campsites_avai │
| │                                                                              │
| │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
| │ │            continuous = True                                             │ │
| │ │                   log = True                                             │ │
| │ │ notification_provider = 'telegram'                                       │ │
| │ │      notify_first_try = False                                            │ │
| │ │      polling_interval = 5                                                │ │
| │ │        search_forever = True                                             │ │
| │ │           search_once = False                                            │ │
| │ │                  self = <camply.search.search_recreationdotgov.SearchRe… │ │
| │ │                         object at 0x7f466184f090>                        │ │
| │ │               verbose = True                                             │ │
| │ ╰──────────────────────────────────────────────────────────────────────────╯ │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/camply/search/base_search.py:576 in  │
| │ get_matching_campsites                                                       │
| │                                                                              │
| │    573 │   │   """                                                           │
| │    574 │   │   if continuous is True or search_once is True:                 │
| │    575 │   │   │   try:                                                      │
| │ ❱  576 │   │   │   │   self._search_campsites_continuous(                    │
| │    577 │   │   │   │   │   log=log,                                          │
| │    578 │   │   │   │   │   verbose=verbose,                                  │
| │    579 │   │   │   │   │   polling_interval=polling_interval,                │
| │                                                                              │
| │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
| │ │            continuous = True                                             │ │
| │ │                   log = True                                             │ │
| │ │ notification_provider = 'telegram'                                       │ │
| │ │      notify_first_try = False                                            │ │
| │ │      polling_interval = 5                                                │ │
| │ │        search_forever = True                                             │ │
| │ │           search_once = False                                            │ │
| │ │                  self = <camply.search.search_recreationdotgov.SearchRe… │ │
| │ │                         object at 0x7f466184f090>                        │ │
| │ │               verbose = True                                             │ │
| │ ╰──────────────────────────────────────────────────────────────────────────╯ │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/camply/search/base_search.py:510 in  │
| │ _search_campsites_continuous                                                 │
| │                                                                              │
| │    507 │   │   continuous_search_attempts = 1                                │
| │    508 │   │   while continuous_search is True:                              │
| │    509 │   │   │   starting_count = len(self.campsites_found)                │
| │ ❱  510 │   │   │   self._continuous_search_retry(                            │
| │    511 │   │   │   │   log=log,                                              │
| │    512 │   │   │   │   verbose=verbose,                                      │
| │    513 │   │   │   │   polling_interval=polling_interval,                    │
| │                                                                              │
| │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
| │ │          continuous_search = True                                        │ │
| │ │ continuous_search_attempts = 1                                           │ │
| │ │                        log = True                                        │ │
| │ │      notification_provider = 'telegram'                                  │ │
| │ │           notify_first_try = False                                       │ │
| │ │           polling_interval = 5                                           │ │
| │ │   polling_interval_minutes = 5                                           │ │
| │ │             search_forever = True                                        │ │
| │ │                search_once = False                                       │ │
| │ │                       self = <camply.search.search_recreationdotgov.Sea… │ │
| │ │                              object at 0x7f466184f090>                   │ │
| │ │             starting_count = 0                                           │ │
| │ │                    verbose = True                                        │ │
| │ ╰──────────────────────────────────────────────────────────────────────────╯ │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/camply/search/base_search.py:356 in  │
| │ _continuous_search_retry                                                     │
| │                                                                              │
| │    353 │   │   │   retry=tenacity.retry_if_exception_type(CampsiteNotFoundEr │
| │    354 │   │   │   wait=tenacity.wait.wait_fixed(int(polling_interval_minute │
| │    355 │   │   )                                                             │
| │ ❱  356 │   │   matching_campsites = retryer.__call__(                        │
| │    357 │   │   │   fn=self._search_matching_campsites_available,             │
| │    358 │   │   │   log=False,                                                │
| │    359 │   │   │   verbose=False,                                            │
| │                                                                              │
| │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
| │ │ continuous_search_attempts = 1                                           │ │
| │ │                        log = True                                        │ │
| │ │      notification_provider = 'telegram'                                  │ │
| │ │           notify_first_try = False                                       │ │
| │ │           polling_interval = 5                                           │ │
| │ │   polling_interval_minutes = 5                                           │ │
| │ │                    retryer = <Retrying object at 0x7f46618ea950          │ │
| │ │                              (stop=<tenacity.stop._stop_never object at  │ │
| │ │                              0x7f468388f950>,                            │ │
| │ │                              wait=<tenacity.wait.wait_fixed object at    │ │
| │ │                              0x7f46618ebe50>, sleep=<function sleep at   │ │
| │ │                              0x7f468500f2e0>,                            │ │
| │ │                              retry=<tenacity.retry.retry_if_exception_t… │ │
| │ │                              object at 0x7f46618ea690>, before=<function │ │
| │ │                              before_nothing at 0x7f4683883920>,          │ │
| │ │                              after=<function after_nothing at            │ │
| │ │                              0x7f46838ac860>)>                           │ │
| │ │                search_once = False                                       │ │
| │ │                       self = <camply.search.search_recreationdotgov.Sea… │ │
| │ │                              object at 0x7f466184f090>                   │ │
| │ │                    verbose = True                                        │ │
| │ ╰──────────────────────────────────────────────────────────────────────────╯ │
| │                                                                              │
| │ /usr/local/lib/python3.11/site-packages/tenacity/__init__.py:379 in __call__ │
| │                                                                              │
| │   376 │   │                                                                  │
| │   377 │   │   retry_state = RetryCallState(retry_object=self, fn=fn, args=ar │
| │   378 │   │   while True:                                                    │
| │ ❱ 379 │   │   │   do = self.iter(retry_state=retry_state)                    │
| │   380 │   │   │   if isinstance(do, DoAttempt):                              │
| │   381 │   │   │   │   try:                                                   │
| │   382 │   │   │   │   │   result = fn(*args, **kwargs)                       │
| │                                                                              │
| │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
| │ │        args = ()                                                         │ │
| │ │          do = <tenacity.DoAttempt object at 0x7f46618ea7d0>              │ │
| │ │          fn = <bound method                                              │ │
| │ │               BaseCampingSearch._search_matching_campsites_available of  │ │
| │ │               <camply.search.search_recreationdotgov.SearchRecreationDo… │ │
| │ │               object at 0x7f466184f090>>                                 │ │
| │ │      kwargs = {'log': False, 'verbose': False, 'raise_error': True}      │ │
| │ │ retry_state = <RetryCallState 139940261168208: attempt #1; slept for     │ │
| │ │               0.0; last result: failed (ValidationError 74 validation    │ │
| │ │               errors for CampsiteAvailabilityResponse                    │ │
| │ │               campsites -> 906 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 907 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 908 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 909 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 910 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 911 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 912 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 913 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 914 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 915 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 916 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 917 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 918 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 919 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 920 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 921 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 922 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 923 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 924 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 925 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 926 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 927 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 928 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 929 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 930 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 931 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 932 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 933 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 934 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 935 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 936 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 937 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 938 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 939 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 940 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 941 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 942 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 943 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 944 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 945 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 946 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 947 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 948 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 949 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 950 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 951 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 952 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 953 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 954 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 955 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 956 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 957 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 958 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 959 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 960 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 961 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 962 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 963 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 964 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 965 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 966 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 967 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 968 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 969 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 970 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 971 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 972 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 973 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 974 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 975 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 976 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 978 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 979 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed)                         │ │
| │ │               campsites -> 980 -> availabilities                         │ │
| │ │                 none is not an allowed value                             │ │
| │ │               (type=type_error.none.not_allowed))>                       │ │
| │ │        self = <Retrying object at 0x7f46618ea950                         │ │
| │ │               (stop=<tenacity.stop._stop_never object at                 │ │
| │ │               0x7f468388f950>, wait=<tenacity.wait.wait_fixed object at  │ │
| │ │               0x7f46618ebe50>, sleep=<function sleep at 0x7f468500f2e0>, │ │
| │ │               retry=<tenacity.retry.retry_if_exception_type object at    │ │
| │ │               0x7f46618ea690>, before=<function before_nothing at        │ │
| │ │               0x7f4683883920>, after=<function after_nothing at          │ │
| │ │               0x7f46838ac860>)>                                          │ │
| │ ╰──────────────────────────────────────────────────────────────────────────╯ │
| │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
| │ │  availabilities = {                                                      │ │
| │ │                   │   'campsites': {                                     │ │
| │ │                   │   │   '906': {                                       │ │
| │ │                   │   │   │   'campsite_id': '906',                      │ │
| │ │                   │   │   │   'site': '003',                             │ │
| │ │                   │   │   │   'loop': 'Lower Pines',                     │ │
| │ │                   │   │   │   'campsite_reserve_type': 'Site-Specific',  │ │
| │ │                   │   │   │   'availabilities': None,                    │ │
| │ │                   │   │   │   'quantities': None,                        │ │
| │ │                   │   │   │   'campsite_type': 'STANDARD NONELECTRIC',   │ │
| │ │                   │   │   │   'type_of_use': 'Overnight',                │ │
| │ │                   │   │   │   'min_num_people': 0,                       │ │
| │ │                   │   │   │   'max_num_people': 6,                       │ │
| │ │                   │   │   │   ... +4                                     │ │
| │ │                   │   │   },                                             │ │
| │ │                   │   │   '907': {                                       │ │
| │ │                   │   │   │   'campsite_id': '907',                      │ │
| │ │                   │   │   │   'site': '004',                             │ │
| │ │                   │   │   │   'loop': 'Lower Pines',                     │ │
| │ │                   │   │   │   'campsite_reserve_type': 'Site-Specific',  │ │
| │ │                   │   │   │   'availabilities': None,                    │ │
| │ │                   │   │   │   'quantities': None,                        │ │
| │ │                   │   │   │   'campsite_type': 'STANDARD NONELECTRIC',   │ │
| │ │                   │   │   │   'type_of_use': 'Overnight',                │ │
| │ │                   │   │   │   'min_num_people': 0,                       │ │
| │ │                   │   │   │   'max_num_people': 6,                       │ │
| │ │                   │   │   │   ... +4                                     │ │
| │ │                   │   │   },                                             │ │
| │ │                   │   │   '908': {                                       │ │
| │ │                   │   │   │   'campsite_id': '908',                      │ │
| │ │                   │   │   │   'site': '005',                             │ │
| │ │                   │   │   │   'loop': 'Lower Pines',                     │ │
| │ │                   │   │   │   'campsite_reserve_type': 'Site-Specific',  │ │
| │ │                   │   │   │   'availabilities': None,                    │ │
| │ │                   │   │   │   'quantities': None,                        │ │
| │ │                   │   │   │   'campsite_type': 'STANDARD NONELECTRIC',   │ │
| │ │                   │   │   │   'type_of_use': 'Overnight',                │ │
| │ │                   │   │   │   'min_num_people': 0,                       │ │
| │ │                   │   │   │   'max_num_people': 6,                       │ │
| │ │                   │   │   │   ... +4                                     │ │
| │ │                   │   │   },                                             │ │
| │ │                   │   │   '909': {                                       │ │
| │ │                   │   │   │   'campsite_id': '909',                      │ │
| │ │                   │   │   │   'site': 'DBL1',                            │ │
| │ │                   │   │   │   'loop': 'Lower Pines',                     │ │
| │ │                   │   │   │   'campsite_reserve_type': 'Site-Specific',  │ │
| │ │                   │   │   │   'availabilities': None,                    │ │
| │ │                   │   │   │   'quantities': None,                        │ │
| │ │                   │   │   │   'campsite_type': 'STANDARD NONELECTRIC',   │ │
| │ │                   │   │   │   'type_of_use': 'Overnight',                │ │
| │ │                   │   │   │   'min_num_people': 7,                       │ │
| │ │                   │   │   │   'max_num_people': 12,                      │ │
| │ │                   │   │   │   ... +4                                     │ │
| │ │                   │   │   },                                             │ │
| │ │                   │   │   '910': {                                       │ │
| │ │                   │   │   │   'campsite_id': '910',                      │ │
| │ │                   │   │   │   'site': '007',                             │ │
| │ │                   │   │   │   'loop': 'Lower Pines',                     │ │
| │ │                   │   │   │   'campsite_reserve_type': 'Site-Specific',  │ │
| │ │                   │   │   │   'availabilities': None,                    │ │
| │ │                   │   │   │   'quantities': None,                        │ │
| │ │                   │   │   │   'campsite_type': 'STANDARD NONELECTRIC',   │ │
| │ │                   │   │   │   'type_of_use': 'Overnight',                │ │
| │ │                   │   │   │   'min_num_people': 0,                       │ │
| │ │                   │   │   │   'max_num_people': 6,                       │ │
| │ │                   │   │   │   ... +4                                     │ │
| │ │                   │   │   },                                             │ │
| │ │                   │   │   '911': {                                       │ │
| │ │                   │   │   │   'campsite_id': '911',                      │ │
| │ │                   │   │   │   'site': '012',                             │ │
| │ │                   │   │   │   'loop': 'Lower Pines',                     │ │
| │ │                   │   │   │   'campsite_reserve_type': 'Site-Specific',  │ │
| │ │                   │   │   │   'availabilities': None,                    │ │
| │ │                   │   │   │   'quantities': None,                        │ │
| │ │                   │   │   │   'campsite_type': 'STANDARD NONELECTRIC',   │ │
| │ │                   │   │   │   'type_of_use': 'Overnight',                │ │
| │ │                   │   │   │   'min_num_people': 1,                       │ │
| │ │                   │   │   │   'max_num_people': 6,                       │ │
| │ │                   │   │   │   ... +4                                     │ │
| │ │                   │   │   },                                             │ │
| │ │                   │   │   '912': {                                       │ │
| │ │                   │   │   │   'campsite_id': '912',                      │ │
| │ │                   │   │   │   'site': '013',                             │ │
| │ │                   │   │   │   'loop': 'Lower Pines',                     │ │
| │ │                   │   │   │   'campsite_reserve_type': 'Site-Specific',  │ │
| │ │                   │   │   │   'availabilities': None,                    │ │
| │ │                   │   │   │   'quantities': None,                        │ │
| │ │                   │   │   │   'campsite_type': 'STANDARD NONELECTRIC',   │ │
| │ │                   │   │   │   'type_of_use': 'Overnight',                │ │
| │ │                   │   │   │   'min_num_people': 0,                       │ │
| │ │                   │   │   │   'max_num_people': 6,                       │ │
| │ │                   │   │   │   ... +4                                     │ │
| │ │                   │   │   },                                             │ │
| │ │                   │   │   '913': {                                       │ │
| │ │                   │   │   │   'campsite_id': '913',                      │ │
| │ │                   │   │   │   'site': '014',                             │ │
| │ │                   │   │   │   'loop': 'Lower Pines',                     │ │
| │ │                   │   │   │   'campsite_reserve_type': 'Site-Specific',  │ │
| │ │                   │   │   │   'availabilities': None,                    │ │
| │ │                   │   │   │   'quantities': None,                        │ │
| │ │                   │   │   │   'campsite_type': 'STANDARD NONELECTRIC',   │ │
| │ │                   │   │   │   'type_of_use': 'Overnight',                │ │
| │ │                   │   │   │   'min_num_people': 0,                       │ │
| │ │                   │   │   │   'max_num_people': 6,                       │ │
| │ │                   │   │   │   ... +4                                     │ │
| │ │                   │   │   },                                             │ │
| │ │                   │   │   '914': {                                       │ │
| │ │                   │   │   │   'campsite_id': '914',                      │ │
| │ │                   │   │   │   'site': '017',                             │ │
| │ │                   │   │   │   'loop': 'Lower Pines',                     │ │
| │ │                   │   │   │   'campsite_reserve_type': 'Site-Specific',  │ │
| │ │                   │   │   │   'availabilities': None,                    │ │
| │ │                   │   │   │   'quantities': None,                        │ │
| │ │                   │   │   │   'campsite_type': 'STANDARD NONELECTRIC',   │ │
| │ │                   │   │   │   'type_of_use': 'Overnight',                │ │
| │ │                   │   │   │   'min_num_people': 0,                       │ │
| │ │                   │   │   │   'max_num_people': 6,                       │ │
| │ │                   │   │   │   ... +4                                     │ │
| │ │                   │   │   },                                             │ │
| │ │                   │   │   '915': {                                       │ │
| │ │                   │   │   │   'campsite_id': '915',                      │ │
| │ │                   │   │   │   'site': '018',                             │ │
| │ │                   │   │   │   'loop': 'Lower Pines',                     │ │
| │ │                   │   │   │   'campsite_reserve_type': 'Site-Specific',  │ │
| │ │                   │   │   │   'availabilities': None,                    │ │
| │ │                   │   │   │   'quantities': None,                        │ │
| │ │                   │   │   │   'campsite_type': 'STANDARD NONELECTRIC',   │ │
| │ │                   │   │   │   'type_of_use': 'Overnight',                │ │
| │ │                   │   │   │   'min_num_people': 0,                       │ │
| │ │                   │   │   │   'max_num_people': 6,                       │ │
| │ │                   │   │   │   ... +4                                     │ │
| │ │                   │   │   },                                             │ │
| │ │                   │   │   ... +64                                        │ │
| │ │                   │   },                                                 │ │
| │ │                   │   'count': 74                                        │ │
| │ │                   }                                                      │ │
| │ │      campground = CampgroundFacility(                                    │ │
| │ │                   │   facility_name='Lower Pines Campground',            │ │
| │ │                   │   recreation_area='Yosemite National Park, CA',      │ │
| │ │                   │   facility_id=232450,                                │ │
| │ │                   │   recreation_area_id=2991,                           │ │
| │ │                   │   map_id=None,                                       │ │
| │ │                   │   coordinates=None                                   │ │
| │ │                   )                                                      │ │
| │ │       campsites = []                                                     │ │
| │ │ found_campsites = []                                                     │ │
| │ │           index = 1                                                      │ │
| │ │           month = datetime.date(2024, 11, 1)                             │ │
| │ │            self = <camply.search.search_recreationdotgov.SearchRecreati… │ │
| │ │                   object at 0x7f466184f090>                              │ │
| │ ╰──────────────────────────────────────────────────────────────────────────╯ │
wallboy2020 commented 3 weeks ago

I am experiencing the same error searching for an open campground, but also on recreation.gov: provider: RecreationDotGov recreation_area: 2730 campgrounds: 232491 campsites: 4242