When having a continuous scan run, it seems to error quite frequently with "list object has no attribute items" error. Requires me to start the command again. It has happened over the last 2 weeks a dozen times.
[2024-05-01 07:37:59] INFO ⛰ Yellowstone National Park, USA (#1) - 🏕 Fishing Bridge RV Park (YLYF:RV)
[2024-05-01 07:37:59] INFO ⛰ Yellowstone National Park, USA (#1) - 🏕 Madison Campground (YLYM:RV)
[2024-05-01 07:37:59] INFO Searching for Yellowstone Lodging Availability: June, 2024
[2024-05-01 07:37:59] DEBUG Starting new HTTPS connection (1): webapi.xanterra.net:443
[2024-05-01 07:38:00] DEBUG https://webapi.xanterra.net:443 "GET /v1/api/availability/hotels/yellowstonenationalparklodges?date=2024-06-01&limit=31&rate_code=INTERNET&nights=3
HTTP/1.1" 200 None
[2024-05-01 07:38:00] INFO Exception encountered, emitting notification last gasp.
[2024-05-01 07:38:00] DEBUG SilentNotification: camply encountered an error and exited 😟 [2024-05-01 07:38:00] - (AttributeError) 'list' object has no attribute 'items'
[2024-05-01 07:38:00] DEBUG Starting new HTTPS connection (1): api.pushover.net:443
[2024-05-01 07:38:00] DEBUG https://api.pushover.net:443 "POST
/1/messages.json?token=REMOVED&user=HIDDEN&message=camply+encountered+an+error+and+exited+%F0%9F%98%
9F+%5B2024-05-01+07%3A38%3A00%5D+-+%28AttributeError%29+%27list%27+object+has+no+attribute+%27items%27 HTTP/1.1" 200 None
[2024-05-01 07:38:00] CAMPLY Exiting camply 👋
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/camply/search/base_search.py:57 │
│ 4 in get_matching_campsites │
│ │
│ 571 │ │ """ │
│ 572 │ │ if continuous is True or search_once is True: │
│ 573 │ │ │ try: │
│ ❱ 574 │ │ │ │ self._search_campsites_continuous( │
│ 575 │ │ │ │ │ log=log, │
│ 576 │ │ │ │ │ verbose=verbose, │
│ 577 │ │ │ │ │ polling_interval=polling_interval, │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ continuous = True │ │
│ │ log = True │ │
│ │ notification_provider = ['pushover'] │ │
│ │ notify_first_try = False │ │
│ │ polling_interval = 5.0 │ │
│ │ search_forever = True │ │
│ │ search_once = False │ │
│ │ self = <camply.search.search_yellowstone.SearchYellowstone object at │ │
│ │ 0x7f8451804a00> │ │
│ │ verbose = True │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/camply/search/base_search.py:50 │
│ 8 in _search_campsites_continuous │
│ │
│ 505 │ │ continuous_search_attempts = 1 │
│ 506 │ │ while continuous_search is True: │
│ 507 │ │ │ starting_count = len(self.campsites_found) │
│ ❱ 508 │ │ │ self._continuous_search_retry( │
│ 509 │ │ │ │ log=log, │
│ 510 │ │ │ │ verbose=verbose, │
│ 511 │ │ │ │ polling_interval=polling_interval, │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ continuous_search = True │ │
│ │ continuous_search_attempts = 1 │ │
│ │ log = True │ │
│ │ notification_provider = ['pushover'] │ │
│ │ notify_first_try = False │ │
│ │ polling_interval = 5.0 │ │
│ │ polling_interval_minutes = 5 │ │
│ │ search_forever = True │ │
│ │ search_once = False │ │
│ │ self = <camply.search.search_yellowstone.SearchYellowstone object at │ │
│ │ 0x7f8451804a00> │ │
│ │ starting_count = 0 │ │
│ │ verbose = True │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/camply/search/base_search.py:35 │
│ 4 in _continuous_search_retry │
│ │
│ 351 │ │ │ retry=tenacity.retry_if_exception_type(CampsiteNotFoundError), │
│ 352 │ │ │ wait=tenacity.wait.wait_fixed(int(polling_interval_minutes) * 60), │
│ 353 │ │ ) │
│ ❱ 354 │ │ matching_campsites = retryer.__call__( │
│ 355 │ │ │ fn=self._search_matching_campsites_available, │
│ 356 │ │ │ log=False, │
│ 357 │ │ │ verbose=False, │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ continuous_search_attempts = 1 │ │
│ │ log = True │ │
│ │ notification_provider = ['pushover'] │ │
│ │ notify_first_try = False │ │
│ │ polling_interval = 5.0 │ │
│ │ polling_interval_minutes = 5 │ │
│ │ retryer = <Retrying object at 0x7f8451805ff0 │ │
│ │ (stop=<tenacity.stop._stop_never object at 0x7f845a4f3850>, │ │
│ │ wait=<tenacity.wait.wait_fixed object at 0x7f8451805f90>, │ │
│ │ sleep=<function sleep at 0x7f845a50b640>, │ │
│ │ retry=<tenacity.retry.retry_if_exception_type object at │ │
│ │ 0x7f8451805b10>, before=<function before_nothing at │ │
│ │ 0x7f845a52d1b0>, after=<function after_nothing at │ │
│ │ 0x7f845a52d480>)> │ │
│ │ search_once = False │ │
│ │ self = <camply.search.search_yellowstone.SearchYellowstone object at │ │
│ │ 0x7f8451804a00> │ │
│ │ verbose = True │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/tenacity/__init__.py:379 in │
│ __call__ │
│ │
│ 376 │ │ │
│ 377 │ │ retry_state = RetryCallState(retry_object=self, fn=fn, args=args, kwargs=kwargs) │
│ 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 0x7f84547965c0> │ │
│ │ fn = <bound method BaseCampingSearch._search_matching_campsites_available of │ │
│ │ <camply.search.search_yellowstone.SearchYellowstone object at 0x7f8451804a00>> │ │
│ │ kwargs = {'log': False, 'verbose': False, 'raise_error': True} │ │
│ │ retry_state = <RetryCallState 140206279776608: attempt #16; slept for 4500.0; last result: │ │
│ │ failed (AttributeError 'list' object has no attribute 'items')> │ │
│ │ self = <Retrying object at 0x7f8451805ff0 (stop=<tenacity.stop._stop_never object at │ │
│ │ 0x7f845a4f3850>, wait=<tenacity.wait.wait_fixed object at 0x7f8451805f90>, │ │
│ │ sleep=<function sleep at 0x7f845a50b640>, │ │
│ │ retry=<tenacity.retry.retry_if_exception_type object at 0x7f8451805b10>, │ │
│ │ before=<function before_nothing at 0x7f845a52d1b0>, after=<function │ │
│ │ after_nothing at 0x7f845a52d480>)> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/tenacity/__init__.py:314 in │
│ iter │
│ │
│ 311 │ │ │
│ 312 │ │ is_explicit_retry = fut.failed and isinstance(fut.exception(), TryAgain) │
│ 313 │ │ if not (is_explicit_retry or self.retry(retry_state)): │
│ ❱ 314 │ │ │ return fut.result() │
│ 315 │ │ │
│ 316 │ │ if self.after is not None: │
│ 317 │ │ │ self.after(retry_state) │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ fut = <Future at 0x7f8452024d00 state=finished raised AttributeError> │ │
│ │ is_explicit_retry = False │ │
│ │ retry_state = <RetryCallState 140206279776608: attempt #16; slept for 4500.0; last │ │
│ │ result: failed (AttributeError 'list' object has no attribute 'items')> │ │
│ │ self = <Retrying object at 0x7f8451805ff0 (stop=<tenacity.stop._stop_never │ │
│ │ object at 0x7f845a4f3850>, wait=<tenacity.wait.wait_fixed object at │ │
│ │ 0x7f8451805f90>, sleep=<function sleep at 0x7f845a50b640>, │ │
│ │ retry=<tenacity.retry.retry_if_exception_type object at 0x7f8451805b10>, │ │
│ │ before=<function before_nothing at 0x7f845a52d1b0>, after=<function │ │
│ │ after_nothing at 0x7f845a52d480>)> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /usr/lib/python3.10/concurrent/futures/_base.py:451 in result │
│ │
│ 448 │ │ │ │ if self._state in [CANCELLED, CANCELLED_AND_NOTIFIED]: │
│ 449 │ │ │ │ │ raise CancelledError() │
│ 450 │ │ │ │ elif self._state == FINISHED: │
│ ❱ 451 │ │ │ │ │ return self.__get_result() │
│ 452 │ │ │ │ │
│ 453 │ │ │ │ self._condition.wait(timeout) │
│ 454 │
│ │
│ ╭──── locals ────╮ │
│ │ self = None │ │
│ │ timeout = None │ │
│ ╰────────────────╯ │
│ │
│ /usr/lib/python3.10/concurrent/futures/_base.py:403 in __get_result │
│ │
│ 400 │ def __get_result(self): │
│ 401 │ │ if self._exception: │
│ 402 │ │ │ try: │
│ ❱ 403 │ │ │ │ raise self._exception │
│ 404 │ │ │ finally: │
│ 405 │ │ │ │ # Break a reference cycle with the exception in self._exception │
│ 406 │ │ │ │ self = None │
│ │
│ ╭── locals ───╮ │
│ │ self = None │ │
│ ╰─────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/tenacity/__init__.py:382 in │
│ __call__ │
│ │
│ 379 │ │ │ do = self.iter(retry_state=retry_state) │
│ 380 │ │ │ if isinstance(do, DoAttempt): │
│ 381 │ │ │ │ try: │
│ ❱ 382 │ │ │ │ │ result = fn(*args, **kwargs) │
│ 383 │ │ │ │ except BaseException: # noqa: B902 │
│ 384 │ │ │ │ │ retry_state.set_exception(sys.exc_info()) # type: ignore[arg-type] │
│ 385 │ │ │ │ else: │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ args = () │ │
│ │ do = <tenacity.DoAttempt object at 0x7f84547965c0> │ │
│ │ fn = <bound method BaseCampingSearch._search_matching_campsites_available of │ │
│ │ <camply.search.search_yellowstone.SearchYellowstone object at 0x7f8451804a00>> │ │
│ │ kwargs = {'log': False, 'verbose': False, 'raise_error': True} │ │
│ │ retry_state = <RetryCallState 140206279776608: attempt #16; slept for 4500.0; last result: │ │
│ │ failed (AttributeError 'list' object has no attribute 'items')> │ │
│ │ self = <Retrying object at 0x7f8451805ff0 (stop=<tenacity.stop._stop_never object at │ │
│ │ 0x7f845a4f3850>, wait=<tenacity.wait.wait_fixed object at 0x7f8451805f90>, │ │
│ │ sleep=<function sleep at 0x7f845a50b640>, │ │
│ │ retry=<tenacity.retry.retry_if_exception_type object at 0x7f8451805b10>, │ │
│ │ before=<function before_nothing at 0x7f845a52d1b0>, after=<function │ │
│ │ after_nothing at 0x7f845a52d480>)> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/camply/search/base_search.py:24 │
│ 6 in _search_matching_campsites_available │
│ │
│ 243 │ │ List[AvailableCampsite] │
│ 244 │ │ """ │
│ 245 │ │ matching_campgrounds = [] │
│ ❱ 246 │ │ for camp in self.get_all_campsites(): │
│ 247 │ │ │ if all( │
│ 248 │ │ │ │ [ │
│ 249 │ │ │ │ │ self._compare_date_overlap(campsite=camp) is True, │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ log = False │ │
│ │ matching_campgrounds = [] │ │
│ │ raise_error = True │ │
│ │ self = <camply.search.search_yellowstone.SearchYellowstone object at │ │
│ │ 0x7f8451804a00> │ │
│ │ verbose = False │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/camply/search/search_yellowston │
│ e.py:87 in get_all_campsites │
│ │
│ 84 │ │ this_month = datetime.now().date().replace(day=1) │
│ 85 │ │ for month in self.search_months: │
│ 86 │ │ │ if month >= this_month: │
│ ❱ 87 │ │ │ │ all_campsites += self.campsite_finder.get_monthly_campsites( │
│ 88 │ │ │ │ │ month=month, nights=None if self.nights == 1 else self.nights │
│ 89 │ │ │ │ ) │
│ 90 │ │ matching_campsites = self._filter_campsites_to_campgrounds( │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ all_campsites = [] │ │
│ │ month = datetime.date(2024, 6, 1) │ │
│ │ searchable_campgrounds = {'YLYF:RV', 'YLYM:RV'} │ │
│ │ self = <camply.search.search_yellowstone.SearchYellowstone object at │ │
│ │ 0x7f8451804a00> │ │
│ │ this_month = datetime.date(2024, 5, 1) │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/camply/providers/xanterra/yello │
│ wstone_lodging.py:417 in get_monthly_campsites │
│ │
│ 414 │ │ availability_found = self._get_monthly_availability( │
│ 415 │ │ │ month=search_date, nights=nights │
│ 416 │ │ ) │
│ ❱ 417 │ │ availability = XantResortData(**availability_found) │
│ 418 │ │ monthly_campsites = self._compile_campground_availabilities( │
│ 419 │ │ │ availability=availability │
│ 420 │ │ ) │
│ │
│ ╭──────────────────── locals ────────────────────╮ │
│ │ availability_found = {'availability': []} │ │
│ │ month = datetime.date(2024, 6, 1) │ │
│ │ nights = 3 │ │
│ │ now = datetime.date(2024, 5, 1) │ │
│ │ search_date = datetime.date(2024, 6, 1) │ │
│ │ self = <Yellowstone> │ │
│ ╰────────────────────────────────────────────────╯ │
│ │
│ in pydantic.main.BaseModel.__init__:339 │
│ │
│ in pydantic.main.validate_model:1074 │
│ │
│ in pydantic.fields.ModelField.validate:864 │
│ │
│ in pydantic.fields.ModelField._apply_validators:1154 │
│ │
│ in pydantic.class_validators._generic_validator_cls.lambda4:304 │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/camply/containers/api_responses │
│ .py:440 in parse_datetime │
│ │
│ 437 │ │ """ │
│ 438 │ │ return { │
│ 439 │ │ │ datetime.datetime.strptime(x, "%m/%d/%Y").date(): y │
│ ❱ 440 │ │ │ for x, y in value.items() │
│ 441 │ │ } │
│ 442 │
│ 443 │
│ │
│ ╭───────────────────────────── locals ─────────────────────────────╮ │
│ │ cls = <class 'camply.containers.api_responses.XantResortData'> │ │
│ │ value = [] │ │
│ ╰──────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: 'list' object has no attribute 'items'
The above exception was the direct cause of the following exception:
╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/zach/.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 0x7f84517f9240> │ │
│ │ re = <module 're' from '/usr/lib/python3.10/re.py'> │ │
│ │ sys = <module 'sys' (built-in)> │ │
│ ╰──────────────────────────────────────────────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/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: │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/click/core.py:1157 in __call__ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/rich_click/rich_group.py:21 in │
│ main │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/click/core.py:1078 in main │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/click/core.py:1688 in invoke │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/click/core.py:1434 in invoke │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/click/core.py:783 in invoke │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/click/decorators.py:45 in │
│ new_func │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/camply/cli.py:775 in campsites │
│ │
│ 772 │ │ ) │
│ 773 │ provider_class: Type[BaseCampingSearch] = CAMPSITE_SEARCH_PROVIDER[provider] │
│ 774 │ camping_finder: BaseCampingSearch = provider_class(**provider_kwargs) │
│ ❱ 775 │ camping_finder.get_matching_campsites(**search_kwargs) │
│ 776 │
│ 777 │
│ 778 @camply_command_line.command(cls=RichCommand) │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ campground = ('YLYF:RV', 'YLYM:RV') │ │
│ │ camping_finder = <camply.search.search_yellowstone.SearchYellowstone object at │ │
│ │ 0x7f8451804a00> │ │
│ │ campsite = () │ │
│ │ context = CamplyContext(debug=True, provider='Yellowstone') │ │
│ │ continuous = False │ │
│ │ day = () │ │
│ │ debug = True │ │
│ │ end_date = ('2024-06-16',) │ │
│ │ equipment = () │ │
│ │ equipment_id = None │ │
│ │ nights = 3 │ │
│ │ notifications = ('pushover',) │ │
│ │ notify_first_try = None │ │
│ │ offline_search = False │ │
│ │ offline_search_path = None │ │
│ │ polling_interval = 5 │ │
│ │ provider = 'Yellowstone' │ │
│ │ provider_class = <class 'camply.search.search_yellowstone.SearchYellowstone'> │ │
│ │ provider_kwargs = { │ │
│ │ │ 'search_window': SearchWindow( │ │
│ │ │ │ start_date=datetime.date(2024, 6, 13), │ │
│ │ │ │ end_date=datetime.date(2024, 6, 16) │ │
│ │ │ ), │ │
│ │ │ 'recreation_area': [], │ │
│ │ │ 'campgrounds': ['YLYF:RV', 'YLYM:RV'], │ │
│ │ │ 'campsites': [], │ │
│ │ │ 'weekends_only': False, │ │
│ │ │ 'nights': 3, │ │
│ │ │ 'offline_search': False, │ │
│ │ │ 'offline_search_path': None, │ │
│ │ │ 'equipment': (), │ │
│ │ │ 'equipment_id': None, │ │
│ │ │ ... +1 │ │
│ │ } │ │
│ │ rec_area = () │ │
│ │ search_forever = 'FLAG-SET' │ │
│ │ search_kwargs = { │ │
│ │ │ 'log': True, │ │
│ │ │ 'verbose': True, │ │
│ │ │ 'continuous': True, │ │
│ │ │ 'polling_interval': 5.0, │ │
│ │ │ 'notify_first_try': False, │ │
│ │ │ 'notification_provider': ['pushover'], │ │
│ │ │ 'search_forever': True, │ │
│ │ │ 'search_once': False │ │
│ │ } │ │
│ │ search_once = False │ │
│ │ start_date = ('2024-06-13',) │ │
│ │ weekends = False │ │
│ │ yaml_config = None │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/camply/search/base_search.py:58 │
│ 4 in get_matching_campsites │
│ │
│ 581 │ │ │ │ │ search_once=search_once, │
│ 582 │ │ │ │ ) │
│ 583 │ │ │ except Exception as e: │
│ ❱ 584 │ │ │ │ self.notifier.last_gasp(error=e) │
│ 585 │ │ │ │ raise e │
│ 586 │ │ else: │
│ 587 │ │ │ starting_count = len(self.campsites_found) │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ continuous = True │ │
│ │ log = True │ │
│ │ notification_provider = ['pushover'] │ │
│ │ notify_first_try = False │ │
│ │ polling_interval = 5.0 │ │
│ │ search_forever = True │ │
│ │ search_once = False │ │
│ │ self = <camply.search.search_yellowstone.SearchYellowstone object at │ │
│ │ 0x7f8451804a00> │ │
│ │ verbose = True │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /home/zach/.local/pipx/venvs/camply/lib/python3.10/site-packages/camply/notifications/multi_prov │
│ ider_notifications.py:130 in last_gasp │
│ │
│ 127 │ │ for provider in self.providers: │
│ 128 │ │ │ if provider.last_gasp is True: │
│ 129 │ │ │ │ provider.send_message(error_message) │
│ ❱ 130 │ │ raise RuntimeError(error_message) from error │
│ 131 │
│ │
│ ╭─────────────────────────────────────────── locals ───────────────────────────────────────────╮ │
│ │ date_string = '2024-05-01 07:38:00' │ │
│ │ error = AttributeError("'list' object has no attribute 'items'") │ │
│ │ error_message = 'camply encountered an error and exited 😟 [2024-05-01 07:38:00] - │ │
│ │ (AttributeError'+40 │ │
│ │ error_string = "'list' object has no attribute 'items'" │ │
│ │ provider = <PushoverNotifications> │ │
│ │ self = <MultiNotifierProvider> │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
RuntimeError: camply encountered an error and exited 😟 [2024-05-01 07:38:00] - (AttributeError) 'list' object has no attribute 'items'
Describe the bug
When having a continuous scan run, it seems to error quite frequently with "list object has no attribute items" error. Requires me to start the command again. It has happened over the last 2 weeks a dozen times.
Original Camply Command (with
--debug)camply --provider Yellowstone campsites --campground YLYF:RV --campground YLYM:RV --start-date 2024-06-13 --end-date 2024-06-16 --nights 3 --search-forever --notifications pushover --polling-interval 5 --debugAdditional context