From 6e98bbc4cc57ef374fc69111ef72e69c21049d23 Mon Sep 17 00:00:00 2001 From: Brian Goldstein Date: Mon, 2 Sep 2024 03:22:34 -0700 Subject: [PATCH 1/6] Fix method to enable in-home doorbell chime (#419) Fixes a bug when calling `async_set_existing_doorbell_type_enabled`. Co-authored-by: Steven B <51370195+sdb9696@users.noreply.github.com> --- ring_doorbell/doorbot.py | 7 +++-- tests/test_ring.py | 61 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/ring_doorbell/doorbot.py b/ring_doorbell/doorbot.py index 35be013..697cb7c 100644 --- a/ring_doorbell/doorbot.py +++ b/ring_doorbell/doorbot.py @@ -221,11 +221,14 @@ async def async_set_existing_doorbell_type_enabled(self, value: bool) -> None: raise RingError(MSG_BOOLEAN_REQUIRED) if self.existing_doorbell_type == DOORBELL_EXISTING_TYPE[2]: - return + msg = "In-Home chime is not present." + raise RingError(msg) + + int_value = int(value) params = { "doorbot[description]": self.name, - "doorbot[settings][chime_settings][enable]": value, + "doorbot[settings][chime_settings][enable]": int_value, } url = DOORBELLS_ENDPOINT.format(self.device_api_id) await self._ring.async_query(url, extra_params=params, method="PUT") diff --git a/tests/test_ring.py b/tests/test_ring.py index 6ff48a3..26afaac 100644 --- a/tests/test_ring.py +++ b/tests/test_ring.py @@ -6,7 +6,7 @@ import pytest from freezegun.api import FrozenDateTimeFactory from ring_doorbell import Auth, Ring, RingError -from ring_doorbell.const import USER_AGENT +from ring_doorbell.const import MSG_EXISTING_TYPE, USER_AGENT from ring_doorbell.util import parse_datetime from .conftest import json_request_kwargs, load_fixture_as_dict, nojson_request_kwargs @@ -289,3 +289,62 @@ def test_sync_queries_with_no_event_loop(): with pytest.deprecated_call(): auth.close() + + +async def test_set_existing_doorbell_type(ring, aioresponses_mock): + data = ring.devices() + dev = data["doorbots"][0] + assert dev.existing_doorbell_type == "Mechanical" + + kwargs = nojson_request_kwargs() + + aioresponses_mock.requests.clear() + # Attempting to turn off the in-home chime + await dev.async_set_existing_doorbell_type_enabled(value=False) + kwargs["params"] = { + "doorbot[description]": dev.name, + "doorbot[settings][chime_settings][enable]": 0, + } + aioresponses_mock.assert_called_with( + url="https://api.ring.com/clients_api/doorbots/987652", + method="PUT", + **kwargs, + ) + + aioresponses_mock.requests.clear() + # Attempting to turn on the in-home chime + await dev.async_set_existing_doorbell_type_enabled(value=True) + kwargs["params"] = { + "doorbot[description]": dev.name, + "doorbot[settings][chime_settings][enable]": 1, + } + aioresponses_mock.assert_called_with( + url="https://api.ring.com/clients_api/doorbots/987652", + method="PUT", + **kwargs, + ) + + aioresponses_mock.requests.clear() + # Attempting to set the doorbell type + await dev.async_set_existing_doorbell_type(2) + kwargs["params"] = { + "doorbot[description]": dev.name, + "doorbot[settings][chime_settings][type]": 2, + } + aioresponses_mock.assert_called_with( + url="https://api.ring.com/clients_api/doorbots/987652", + method="PUT", + **kwargs, + ) + + # Attempting to enable when no chime present + settings = dev._attrs["settings"]["chime_settings"] + settings["type"] = 2 + assert dev.existing_doorbell_type == "Not Present" + + with pytest.raises(RingError, match="In-Home chime is not present."): + await dev.async_set_existing_doorbell_type_enabled(value=True) + + # Attempting to set the doorbell type to an invalid value + with pytest.raises(RingError, match=f"value must be in {MSG_EXISTING_TYPE}"): + await dev.async_set_existing_doorbell_type(4) From eb2cc3ca3b654e7f68dc8d4dd2101161059bc29d Mon Sep 17 00:00:00 2001 From: "Steven B." <51370195+sdb9696@users.noreply.github.com> Date: Mon, 2 Sep 2024 13:05:21 +0100 Subject: [PATCH 2/6] Migrate repo to python-ring-doorbell github organisation (#421) Repo has been moved from `https://github.com/tchellomello/python-ring-doorbell` to `https://github.com/python-ring-doorbell/python-ring-doorbell` --- .github/workflows/ci.yml | 11 + .github/workflows/locks-threads.yml | 2 +- .github/workflows/stale.yml | 2 +- .github_changelog_generator | 2 +- CHANGELOG.md | 580 ++++++++++++++-------------- CONTRIBUTING.rst | 4 +- README.rst | 10 +- pyproject.toml | 8 +- 8 files changed, 315 insertions(+), 304 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 94dcdb6..3324b40 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,4 +93,15 @@ jobs: with: file: coverage.xml debug: true + parallel: true if: ${{ success() && matrix.python-version == '3.12' }} + + finish: + name: Finish coverage build + needs: tests + runs-on: ubuntu-latest + steps: + - name: Close parallel build + uses: coverallsapp/github-action@v2.2.3 + with: + parallel-finished: true diff --git a/.github/workflows/locks-threads.yml b/.github/workflows/locks-threads.yml index 677e712..176237c 100644 --- a/.github/workflows/locks-threads.yml +++ b/.github/workflows/locks-threads.yml @@ -7,7 +7,7 @@ on: jobs: lock: - if: github.repository_owner == 'tchellomello' + if: github.repository_owner == 'python-ring-doorbell' runs-on: ubuntu-latest steps: - uses: dessant/lock-threads@v5.0.1 diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index c0eb673..9d31d9b 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -8,7 +8,7 @@ on: jobs: stale: - if: github.repository_owner == 'tchellomello' + if: github.repository_owner == 'python-ring-doorbell' runs-on: ubuntu-latest steps: - name: Stale issues and prs diff --git a/.github_changelog_generator b/.github_changelog_generator index a90feea..6392580 100644 --- a/.github_changelog_generator +++ b/.github_changelog_generator @@ -1,5 +1,5 @@ output=CHANGELOG.md -user=tchellomello +user=python-ring-doorbell project=python-ring-doorbell release-branch=master usernames-as-github-logins=true diff --git a/CHANGELOG.md b/CHANGELOG.md index cde6755..acc2031 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,575 +1,575 @@ # Changelog -## [0.9.2](https://github.com/tchellomello/python-ring-doorbell/tree/0.9.2) (2024-08-29) +## [0.9.2](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.9.2) (2024-08-29) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.9.1...0.9.2) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.9.1...0.9.2) -**Release highlights:** - -- Fixes the broken event listener by migrating to the new `firebase-messaging` library to support FCM HTTP v1 api +**Release highlights:** + +- Fixes the broken event listener by migrating to the new `firebase-messaging` library to support FCM HTTP v1 api - **breaking** - the `RingEventListener` will only support async queries. Hence `start` and `stop` are now async defs **Fixed bugs:** -- Fix event listener [\#416](https://github.com/tchellomello/python-ring-doorbell/pull/416) (@sdb9696) +- Fix event listener [\#416](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/416) (@sdb9696) -## [0.9.1](https://github.com/tchellomello/python-ring-doorbell/tree/0.9.1) (2024-08-23) +## [0.9.1](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.9.1) (2024-08-23) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.9.0...0.9.1) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.9.0...0.9.1) Hotfix for missing typing_extensions dependency **Fixed bugs:** -- Fix missing typing\_extensions dependency [\#413](https://github.com/tchellomello/python-ring-doorbell/pull/413) (@sdb9696) +- Fix missing typing\_extensions dependency [\#413](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/413) (@sdb9696) **Project maintenance:** -- Update contributing docs to remove tox step [\#411](https://github.com/tchellomello/python-ring-doorbell/pull/411) (@sdb9696) -- Update and add code checkers [\#410](https://github.com/tchellomello/python-ring-doorbell/pull/410) (@sdb9696) +- Update contributing docs to remove tox step [\#411](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/411) (@sdb9696) +- Update and add code checkers [\#410](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/410) (@sdb9696) + +## [0.9.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.9.0) (2024-08-21) + +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.12...0.9.0) -## [0.9.0](https://github.com/tchellomello/python-ring-doorbell/tree/0.9.0) (2024-08-21) +**Release highlights:** -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.12...0.9.0) +- Async support for the library +- Removed python 3.8 support -**Release highlights:** - -- Async support for the library -- Removed python 3.8 support - -**Breaking changes:** - -- Synchronous api calls are now deprecated. For example calling `Ring.update_data()` will emit a deprecation warning to use `await Ring.async_update_data()` which should be run within an event loop via `asyncio.run()`. See `test.py` for an example. -- Calling the deprecated sync api methods from inside a running event loop is not supported. This is unlikely to affect many consumers as the norm if running in an event loop is to make synchronous api calls from an executor thread. +**Breaking changes:** + +- Synchronous api calls are now deprecated. For example calling `Ring.update_data()` will emit a deprecation warning to use `await Ring.async_update_data()` which should be run within an event loop via `asyncio.run()`. See `test.py` for an example. +- Calling the deprecated sync api methods from inside a running event loop is not supported. This is unlikely to affect many consumers as the norm if running in an event loop is to make synchronous api calls from an executor thread. - Python 3.8 is no longer officially supported and could break in future releases. **Breaking change pull requests:** -- Drop python3.8 support and enable python3.13 in the CI [\#398](https://github.com/tchellomello/python-ring-doorbell/pull/398) (@sdb9696) +- Drop python3.8 support and enable python3.13 in the CI [\#398](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/398) (@sdb9696) **Implemented enhancements:** -- Make library fully async [\#361](https://github.com/tchellomello/python-ring-doorbell/pull/361) (@sdb9696) +- Make library fully async [\#361](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/361) (@sdb9696) **Fixed bugs:** -- Small change to modify the timestamp [\#378](https://github.com/tchellomello/python-ring-doorbell/pull/378) (@AndrewMohawk) +- Small change to modify the timestamp [\#378](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/378) (@AndrewMohawk) **Project maintenance:** -- Update instructions for releasing and migrate changelog [\#407](https://github.com/tchellomello/python-ring-doorbell/pull/407) (@sdb9696) -- Add .vscode folder to gitignore [\#397](https://github.com/tchellomello/python-ring-doorbell/pull/397) (@sdb9696) -- Update dependencies [\#396](https://github.com/tchellomello/python-ring-doorbell/pull/396) (@sdb9696) -- Reduce lock and stale workflow frequency [\#388](https://github.com/tchellomello/python-ring-doorbell/pull/388) (@sdb9696) +- Update instructions for releasing and migrate changelog [\#407](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/407) (@sdb9696) +- Add .vscode folder to gitignore [\#397](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/397) (@sdb9696) +- Update dependencies [\#396](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/396) (@sdb9696) +- Reduce lock and stale workflow frequency [\#388](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/388) (@sdb9696) -## [0.8.12](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.12) (2024-06-27) +## [0.8.12](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.12) (2024-06-27) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.11...0.8.12) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.11...0.8.12) **Merged pull requests:** -- Fix license value in pyproject.toml for better compliance with accepted values [\#386](https://github.com/tchellomello/python-ring-doorbell/pull/386) (@joostlek) -- Fix stale workflow exclude list [\#377](https://github.com/tchellomello/python-ring-doorbell/pull/377) (@sdb9696) -- Fix lock and stale workflows [\#376](https://github.com/tchellomello/python-ring-doorbell/pull/376) (@sdb9696) -- Add stale and lock github workflows [\#375](https://github.com/tchellomello/python-ring-doorbell/pull/375) (@sdb9696) -- Update dependencies in lock file and pre-commit [\#374](https://github.com/tchellomello/python-ring-doorbell/pull/374) (@sdb9696) -- Enable windows, macos and pypy in the CI [\#373](https://github.com/tchellomello/python-ring-doorbell/pull/373) (@sdb9696) -- Update CI to cache pipx poetry app install [\#372](https://github.com/tchellomello/python-ring-doorbell/pull/372) (@sdb9696) +- Fix license value in pyproject.toml for better compliance with accepted values [\#386](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/386) (@joostlek) +- Fix stale workflow exclude list [\#377](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/377) (@sdb9696) +- Fix lock and stale workflows [\#376](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/376) (@sdb9696) +- Add stale and lock github workflows [\#375](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/375) (@sdb9696) +- Update dependencies in lock file and pre-commit [\#374](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/374) (@sdb9696) +- Enable windows, macos and pypy in the CI [\#373](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/373) (@sdb9696) +- Update CI to cache pipx poetry app install [\#372](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/372) (@sdb9696) -## [0.8.11](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.11) (2024-04-09) +## [0.8.11](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.11) (2024-04-09) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.10...0.8.11) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.10...0.8.11) **Merged pull requests:** -- Fix get\_device missing authorized doorbots [\#368](https://github.com/tchellomello/python-ring-doorbell/pull/368) (@sdb9696) +- Fix get\_device missing authorized doorbots [\#368](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/368) (@sdb9696) + +## [0.8.10](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.10) (2024-04-04) -## [0.8.10](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.10) (2024-04-04) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.9...0.8.10) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.9...0.8.10) +**Release highlights:** -**Release highlights:** - - py.typed added to library for type checkers **Merged pull requests:** -- Update RingDevices class for better typing support and add py.typed [\#366](https://github.com/tchellomello/python-ring-doorbell/pull/366) (@sdb9696) -- Enable more ruff rules [\#365](https://github.com/tchellomello/python-ring-doorbell/pull/365) (@joostlek) -- Bump ruff to 0.3.5 [\#364](https://github.com/tchellomello/python-ring-doorbell/pull/364) (@joostlek) +- Update RingDevices class for better typing support and add py.typed [\#366](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/366) (@sdb9696) +- Enable more ruff rules [\#365](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/365) (@joostlek) +- Bump ruff to 0.3.5 [\#364](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/364) (@joostlek) -## [0.8.9](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.9) (2024-04-02) +## [0.8.9](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.9) (2024-04-02) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.8...0.8.9) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.8...0.8.9) **Merged pull requests:** -- Fix issue with third party devices returned in the group other [\#362](https://github.com/tchellomello/python-ring-doorbell/pull/362) (@sdb9696) -- Save gcm credentials in the cli as default [\#360](https://github.com/tchellomello/python-ring-doorbell/pull/360) (@sdb9696) -- Add typing and mypy checking [\#359](https://github.com/tchellomello/python-ring-doorbell/pull/359) (@sdb9696) -- Fix readme example and add to test.py [\#358](https://github.com/tchellomello/python-ring-doorbell/pull/358) (@sdb9696) -- Update CI to use environment caches [\#355](https://github.com/tchellomello/python-ring-doorbell/pull/355) (@sdb9696) +- Fix issue with third party devices returned in the group other [\#362](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/362) (@sdb9696) +- Save gcm credentials in the cli as default [\#360](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/360) (@sdb9696) +- Add typing and mypy checking [\#359](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/359) (@sdb9696) +- Fix readme example and add to test.py [\#358](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/358) (@sdb9696) +- Update CI to use environment caches [\#355](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/355) (@sdb9696) -## [0.8.8](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.8) (2024-03-18) +## [0.8.8](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.8) (2024-03-18) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.7...0.8.8) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.7...0.8.8) **Merged pull requests:** -- Bump cryptography from 41.0.6 to 42.0.0 [\#343](https://github.com/tchellomello/python-ring-doorbell/pull/343) (@dependabot[bot]) -- Handle Intercom unlock event [\#341](https://github.com/tchellomello/python-ring-doorbell/pull/341) (@sdb9696) -- Add history to Ring Intercom [\#340](https://github.com/tchellomello/python-ring-doorbell/pull/340) (@cosimomeli) +- Bump cryptography from 41.0.6 to 42.0.0 [\#343](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/343) (@dependabot[bot]) +- Handle Intercom unlock event [\#341](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/341) (@sdb9696) +- Add history to Ring Intercom [\#340](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/340) (@cosimomeli) -## [0.8.7](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.7) (2024-02-06) +## [0.8.7](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.7) (2024-02-06) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.6...0.8.7) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.6...0.8.7) + +**Release highlights:** -**Release highlights:** - - Support for Ring Intercoms. Many thanks to @rautsch & @andrew-rinato for initial PRs and special thanks to @cosimomeli for getting this over the line! **Merged pull requests:** -- Add history to has\_capability check [\#342](https://github.com/tchellomello/python-ring-doorbell/pull/342) (@sdb9696) -- Upgrade CI poetry version to 1.7.1 [\#338](https://github.com/tchellomello/python-ring-doorbell/pull/338) (@sdb9696) -- Fix changelog link [\#337](https://github.com/tchellomello/python-ring-doorbell/pull/337) (@sdb9696) -- Migrate to ruff [\#336](https://github.com/tchellomello/python-ring-doorbell/pull/336) (@sdb9696) -- Make changelog autogenerated as part of CI [\#335](https://github.com/tchellomello/python-ring-doorbell/pull/335) (@sdb9696) -- Fix coverage over-reporting by uploading xml report [\#333](https://github.com/tchellomello/python-ring-doorbell/pull/333) (@sdb9696) -- Use coveralls github action [\#332](https://github.com/tchellomello/python-ring-doorbell/pull/332) (@sdb9696) -- Updated Intercom Support \(2024\) [\#330](https://github.com/tchellomello/python-ring-doorbell/pull/330) (@cosimomeli) -- Bump jinja2 from 3.1.2 to 3.1.3 [\#327](https://github.com/tchellomello/python-ring-doorbell/pull/327) (@dependabot[bot]) -- Remove exec permissions of ring\_doorbell/cli.py [\#323](https://github.com/tchellomello/python-ring-doorbell/pull/323) (@cpina) -- Bump cryptography from 41.0.5 to 41.0.6 [\#313](https://github.com/tchellomello/python-ring-doorbell/pull/313) (@dependabot[bot]) +- Add history to has\_capability check [\#342](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/342) (@sdb9696) +- Upgrade CI poetry version to 1.7.1 [\#338](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/338) (@sdb9696) +- Fix changelog link [\#337](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/337) (@sdb9696) +- Migrate to ruff [\#336](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/336) (@sdb9696) +- Make changelog autogenerated as part of CI [\#335](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/335) (@sdb9696) +- Fix coverage over-reporting by uploading xml report [\#333](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/333) (@sdb9696) +- Use coveralls github action [\#332](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/332) (@sdb9696) +- Updated Intercom Support \(2024\) [\#330](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/330) (@cosimomeli) +- Bump jinja2 from 3.1.2 to 3.1.3 [\#327](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/327) (@dependabot[bot]) +- Remove exec permissions of ring\_doorbell/cli.py [\#323](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/323) (@cpina) +- Bump cryptography from 41.0.5 to 41.0.6 [\#313](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/313) (@dependabot[bot]) + +## [0.8.6](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.6) (2024-01-25) -## [0.8.6](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.6) (2024-01-25) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.5...0.8.6) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.5...0.8.6) +**Breaking change:** -**Breaking change:** - - Breaking change to the listen subpackage api to allow the listener be configurable. **Merged pull requests:** -- Allow ring listener to be configurable [\#329](https://github.com/tchellomello/python-ring-doorbell/pull/329) (@sdb9696) -- Thank note for Debian package [\#326](https://github.com/tchellomello/python-ring-doorbell/pull/326) (@tchellomello) +- Allow ring listener to be configurable [\#329](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/329) (@sdb9696) +- Thank note for Debian package [\#326](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/326) (@tchellomello) -## [0.8.5](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.5) (2023-12-21) +## [0.8.5](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.5) (2023-12-21) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.4...0.8.5) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.4...0.8.5) **Merged pull requests:** -- Fix history timeformat and bump to 0.8.5 [\#320](https://github.com/tchellomello/python-ring-doorbell/pull/320) (@sdb9696) +- Fix history timeformat and bump to 0.8.5 [\#320](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/320) (@sdb9696) -## [0.8.4](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.4) (2023-12-12) +## [0.8.4](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.4) (2023-12-12) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.3...0.8.4) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.3...0.8.4) **Merged pull requests:** -- Add Spotlight Cam Pro and enable motion detection for Stickup Cam [\#316](https://github.com/tchellomello/python-ring-doorbell/pull/316) (@sdb9696) +- Add Spotlight Cam Pro and enable motion detection for Stickup Cam [\#316](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/316) (@sdb9696) -## [0.8.3](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.3) (2023-11-27) +## [0.8.3](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.3) (2023-11-27) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.2...0.8.3) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.2...0.8.3) **Merged pull requests:** -- Fix auth when token invalid & rename device\_id parameters [\#311](https://github.com/tchellomello/python-ring-doorbell/pull/311) (@sdb9696) -- fix typo in the documentation [\#284](https://github.com/tchellomello/python-ring-doorbell/pull/284) (@ghost) +- Fix auth when token invalid & rename device\_id parameters [\#311](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/311) (@sdb9696) +- fix typo in the documentation [\#284](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/284) (@ghost) -## [0.8.2](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.2) (2023-11-24) +## [0.8.2](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.2) (2023-11-24) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.1...0.8.2) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.1...0.8.2) **Merged pull requests:** -- Add ring devices and bump version to 0.8.2 [\#310](https://github.com/tchellomello/python-ring-doorbell/pull/310) (@sdb9696) +- Add ring devices and bump version to 0.8.2 [\#310](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/310) (@sdb9696) -## [0.8.1](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.1) (2023-11-15) +## [0.8.1](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.1) (2023-11-15) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.0...0.8.1) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.0...0.8.1) **Merged pull requests:** -- Update CI for python 3.12 [\#307](https://github.com/tchellomello/python-ring-doorbell/pull/307) (@sdb9696) -- Wrap more exceptions in RingError [\#306](https://github.com/tchellomello/python-ring-doorbell/pull/306) (@sdb9696) +- Update CI for python 3.12 [\#307](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/307) (@sdb9696) +- Wrap more exceptions in RingError [\#306](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/306) (@sdb9696) -## [0.8.0](https://github.com/tchellomello/python-ring-doorbell/tree/0.8.0) (2023-11-08) +## [0.8.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.0) (2023-11-08) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.7.7...0.8.0) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.7.7...0.8.0) **Merged pull requests:** -- Add custom exceptions and encapsulate oauth error handling [\#304](https://github.com/tchellomello/python-ring-doorbell/pull/304) (@sdb9696) +- Add custom exceptions and encapsulate oauth error handling [\#304](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/304) (@sdb9696) -## [0.7.7](https://github.com/tchellomello/python-ring-doorbell/tree/0.7.7) (2023-10-31) +## [0.7.7](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.7.7) (2023-10-31) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.7.6...0.7.7) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.7.6...0.7.7) **Merged pull requests:** -- Improve stability and capabilities of realtime event listener [\#300](https://github.com/tchellomello/python-ring-doorbell/pull/300) (@sdb9696) +- Improve stability and capabilities of realtime event listener [\#300](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/300) (@sdb9696) -## [0.7.6](https://github.com/tchellomello/python-ring-doorbell/tree/0.7.6) (2023-10-25) +## [0.7.6](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.7.6) (2023-10-25) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.7.5...0.7.6) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.7.5...0.7.6) **Merged pull requests:** -- Fix anyio dependency preventing ha install [\#298](https://github.com/tchellomello/python-ring-doorbell/pull/298) (@sdb9696) +- Fix anyio dependency preventing ha install [\#298](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/298) (@sdb9696) -## [0.7.5](https://github.com/tchellomello/python-ring-doorbell/tree/0.7.5) (2023-10-25) +## [0.7.5](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.7.5) (2023-10-25) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.7.4...0.7.5) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.7.4...0.7.5) **Merged pull requests:** -- Add event listener for getting realtime dings [\#296](https://github.com/tchellomello/python-ring-doorbell/pull/296) (@sdb9696) -- Add cli commands: devices, groups, dings and history [\#293](https://github.com/tchellomello/python-ring-doorbell/pull/293) (@sdb9696) -- Add motion detection cli command and improve formatting of show command [\#292](https://github.com/tchellomello/python-ring-doorbell/pull/292) (@sdb9696) -- Add tests for cli and fix issues with videos [\#290](https://github.com/tchellomello/python-ring-doorbell/pull/290) (@sdb9696) +- Add event listener for getting realtime dings [\#296](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/296) (@sdb9696) +- Add cli commands: devices, groups, dings and history [\#293](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/293) (@sdb9696) +- Add motion detection cli command and improve formatting of show command [\#292](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/292) (@sdb9696) +- Add tests for cli and fix issues with videos [\#290](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/290) (@sdb9696) -## [0.7.4](https://github.com/tchellomello/python-ring-doorbell/tree/0.7.4) (2023-09-27) +## [0.7.4](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.7.4) (2023-09-27) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.7.3...0.7.4) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.7.3...0.7.4) **Merged pull requests:** -- Fix and update cli [\#288](https://github.com/tchellomello/python-ring-doorbell/pull/288) (@sdb9696) -- Update to pyproject.toml, poetry, and update docs to use yaml config [\#287](https://github.com/tchellomello/python-ring-doorbell/pull/287) (@sdb9696) +- Fix and update cli [\#288](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/288) (@sdb9696) +- Update to pyproject.toml, poetry, and update docs to use yaml config [\#287](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/287) (@sdb9696) -## [0.7.3](https://github.com/tchellomello/python-ring-doorbell/tree/0.7.3) (2023-09-11) +## [0.7.3](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.7.3) (2023-09-11) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.7.2...0.7.3) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.7.2...0.7.3) **Merged pull requests:** -- 0.7.3 release [\#285](https://github.com/tchellomello/python-ring-doorbell/pull/285) (@sdb9696) -- Add motion detection enabled switch [\#282](https://github.com/tchellomello/python-ring-doorbell/pull/282) (@sdb9696) -- Fix ci to use up to date python versions and include pre-commit-config [\#281](https://github.com/tchellomello/python-ring-doorbell/pull/281) (@sdb9696) -- Add support for Floodlight Cam Pro [\#280](https://github.com/tchellomello/python-ring-doorbell/pull/280) (@twasilczyk) +- 0.7.3 release [\#285](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/285) (@sdb9696) +- Add motion detection enabled switch [\#282](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/282) (@sdb9696) +- Fix ci to use up to date python versions and include pre-commit-config [\#281](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/281) (@sdb9696) +- Add support for Floodlight Cam Pro [\#280](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/280) (@twasilczyk) -## [0.7.2](https://github.com/tchellomello/python-ring-doorbell/tree/0.7.2) (2021-12-18) +## [0.7.2](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.7.2) (2021-12-18) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.7.1...0.7.2) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.7.1...0.7.2) **Merged pull requests:** -- Recognize cocoa\_floodlight as a floodlight kind [\#255](https://github.com/tchellomello/python-ring-doorbell/pull/255) (@mwren) +- Recognize cocoa\_floodlight as a floodlight kind [\#255](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/255) (@mwren) -## [0.7.1](https://github.com/tchellomello/python-ring-doorbell/tree/0.7.1) (2021-08-26) +## [0.7.1](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.7.1) (2021-08-26) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.7.0...0.7.1) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.7.0...0.7.1) **Merged pull requests:** -- fix memory growth when calling url\_recording [\#253](https://github.com/tchellomello/python-ring-doorbell/pull/253) (@prwood80) -- \[dist\] Fix coveralls build issue [\#238](https://github.com/tchellomello/python-ring-doorbell/pull/238) (@decompil3d) -- \[dist\] Disable Travis now that GH Actions is setup [\#236](https://github.com/tchellomello/python-ring-doorbell/pull/236) (@decompil3d) -- get\_snapshot\(\) logic to be compliant with legacy [\#234](https://github.com/tchellomello/python-ring-doorbell/pull/234) (@tchellomello) -- \[dist\] Use GitHub Actions [\#233](https://github.com/tchellomello/python-ring-doorbell/pull/233) (@decompil3d) -- \[feat\] Add support for Light Groups [\#231](https://github.com/tchellomello/python-ring-doorbell/pull/231) (@decompil3d) -- fix: prevent multiple device entries for "Python" in the Ring app when using this library [\#228](https://github.com/tchellomello/python-ring-doorbell/pull/228) (@riptidewave93) -- Fix live streaming json [\#225](https://github.com/tchellomello/python-ring-doorbell/pull/225) (@JoeDaddy7105) -- Fix Build Errors [\#224](https://github.com/tchellomello/python-ring-doorbell/pull/224) (@JoeDaddy7105) -- Fixed RingDoorBell.get\_snapshot\(\) and added download [\#218](https://github.com/tchellomello/python-ring-doorbell/pull/218) (@NSEvent) -- Fix get snapshot based on comments [\#196](https://github.com/tchellomello/python-ring-doorbell/pull/196) (@dshokouhi) -- Return None if no battery installed [\#185](https://github.com/tchellomello/python-ring-doorbell/pull/185) (@balloob) +- fix memory growth when calling url\_recording [\#253](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/253) (@prwood80) +- \[dist\] Fix coveralls build issue [\#238](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/238) (@decompil3d) +- \[dist\] Disable Travis now that GH Actions is setup [\#236](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/236) (@decompil3d) +- get\_snapshot\(\) logic to be compliant with legacy [\#234](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/234) (@tchellomello) +- \[dist\] Use GitHub Actions [\#233](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/233) (@decompil3d) +- \[feat\] Add support for Light Groups [\#231](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/231) (@decompil3d) +- fix: prevent multiple device entries for "Python" in the Ring app when using this library [\#228](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/228) (@riptidewave93) +- Fix live streaming json [\#225](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/225) (@JoeDaddy7105) +- Fix Build Errors [\#224](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/224) (@JoeDaddy7105) +- Fixed RingDoorBell.get\_snapshot\(\) and added download [\#218](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/218) (@NSEvent) +- Fix get snapshot based on comments [\#196](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/196) (@dshokouhi) +- Return None if no battery installed [\#185](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/185) (@balloob) -## [0.7.0](https://github.com/tchellomello/python-ring-doorbell/tree/0.7.0) (2021-02-05) +## [0.7.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.7.0) (2021-02-05) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.6.2...0.7.0) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.6.2...0.7.0) -## [0.6.2](https://github.com/tchellomello/python-ring-doorbell/tree/0.6.2) (2020-11-21) +## [0.6.2](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.6.2) (2020-11-21) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.6.1...0.6.2) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.6.1...0.6.2) -## [0.6.1](https://github.com/tchellomello/python-ring-doorbell/tree/0.6.1) (2020-09-28) +## [0.6.1](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.6.1) (2020-09-28) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.6.0...0.6.1) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.6.0...0.6.1) **Merged pull requests:** -- Add latest device kinds [\#207](https://github.com/tchellomello/python-ring-doorbell/pull/207) (@jsetton) -- Pushes new documentation to \(http://python-ring-doorbell.readthedocs.io/\) [\#194](https://github.com/tchellomello/python-ring-doorbell/pull/194) (@tchellomello) -- Drop python 2.7/3.5. Updated readme and test.py examples [\#192](https://github.com/tchellomello/python-ring-doorbell/pull/192) (@steve-gombos) +- Add latest device kinds [\#207](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/207) (@jsetton) +- Pushes new documentation to \(http://python-ring-doorbell.readthedocs.io/\) [\#194](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/194) (@tchellomello) +- Drop python 2.7/3.5. Updated readme and test.py examples [\#192](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/192) (@steve-gombos) + +## [0.6.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.6.0) (2020-01-14) + +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.5.0...0.6.0) -## [0.6.0](https://github.com/tchellomello/python-ring-doorbell/tree/0.6.0) (2020-01-14) +**Major breaking change:** -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.5.0...0.6.0) +Ring APIs offer 1 endpoint with all device info. 1 with all health for doorbells etc. The API used to make a request from each device to the "all device" endpoint and fetch its own data. + +With the new approach we now just fetch the data once and each device will fetch that data. This significantly reduces the number of requests. + +See updated [test.py](https://github.com/tchellomello/python-ring-doorbell/blob/0.6.0/test.py) on usage. + +Changes: + - Pass a user agent to the auth class to identify your project (at request from Ring) + - For most updates, just call `ring.update_all()`. If you want health data (wifi stuff), call `device.update_health_data()` on each device + - Renamed `device.id` -> `device.device_id`, `device.account_id` -> `device.id` to follow API naming. + - Call `ring.update_all()` at least once before querying for devices + - Querying devices now is a function `ring.devices()` instead of property `ring.devices` + - Removed `ring.chimes`, `ring.doorbells`, `ring.stickup_cams` + - Cleaned up tests with pytest fixtures + - Run Black on code to silence hound. -**Major breaking change:** - -Ring APIs offer 1 endpoint with all device info. 1 with all health for doorbells etc. The API used to make a request from each device to the "all device" endpoint and fetch its own data. - -With the new approach we now just fetch the data once and each device will fetch that data. This significantly reduces the number of requests. - -See updated [test.py](https://github.com/tchellomello/python-ring-doorbell/blob/0.6.0/test.py) on usage. - -Changes: - - Pass a user agent to the auth class to identify your project (at request from Ring) - - For most updates, just call `ring.update_all()`. If you want health data (wifi stuff), call `device.update_health_data()` on each device - - Renamed `device.id` -> `device.device_id`, `device.account_id` -> `device.id` to follow API naming. - - Call `ring.update_all()` at least once before querying for devices - - Querying devices now is a function `ring.devices()` instead of property `ring.devices` - - Removed `ring.chimes`, `ring.doorbells`, `ring.stickup_cams` - - Cleaned up tests with pytest fixtures - - Run Black on code to silence hound. - **Merged pull requests:** -- Refactor data handling [\#184](https://github.com/tchellomello/python-ring-doorbell/pull/184) (@balloob) +- Refactor data handling [\#184](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/184) (@balloob) -## [0.5.0](https://github.com/tchellomello/python-ring-doorbell/tree/0.5.0) (2020-01-12) +## [0.5.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.5.0) (2020-01-12) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.4.0...0.5.0) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.4.0...0.5.0) + +**Breaking Change:** -**Breaking Change:** - The `Auth` class no longer takes an `otp_callback` but now takes an `otp_code`. It raises `MissingTokenError` if `otp_code` is required. See the [updated example](https://github.com/tchellomello/python-ring-doorbell/blob/261eaf96875e51fc266a5dbfc6198f8cbb8006e0/test.py). **Implemented enhancements:** -- Removed otp\_callback [\#180](https://github.com/tchellomello/python-ring-doorbell/pull/180) (@steve-gombos) +- Removed otp\_callback [\#180](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/180) (@steve-gombos) **Merged pull requests:** -- Increased timeout from 5 to 10 seconds [\#179](https://github.com/tchellomello/python-ring-doorbell/pull/179) (@cyberjunky) +- Increased timeout from 5 to 10 seconds [\#179](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/179) (@cyberjunky) + +## [0.4.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.4.0) (2020-01-11) -## [0.4.0](https://github.com/tchellomello/python-ring-doorbell/tree/0.4.0) (2020-01-11) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.2.9...0.4.0) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.2.9...0.4.0) +**Major breaking change:** + +This release is a major breaking change to clean up the auth and follow proper OAuth2. Big thanks to @steve-gombos for this. + +All authentication is now done inside `Auth`. The first time you need username, password and optionally an 2-factor auth callback function. After that you have a token and that can be used. + +The old cache file is no longer in use and can be removed. -**Major breaking change:** - -This release is a major breaking change to clean up the auth and follow proper OAuth2. Big thanks to @steve-gombos for this. - -All authentication is now done inside `Auth`. The first time you need username, password and optionally an 2-factor auth callback function. After that you have a token and that can be used. - -The old cache file is no longer in use and can be removed. - Example usage in `test.py`. **Implemented enhancements:** -- Auth and ring class refactor [\#175](https://github.com/tchellomello/python-ring-doorbell/pull/175) (@steve-gombos) -- Implemented timeouts for HTTP requests methods [\#165](https://github.com/tchellomello/python-ring-doorbell/pull/165) (@tchellomello) -- Support for device model name property and has capability method [\#116](https://github.com/tchellomello/python-ring-doorbell/pull/116) (@jsetton) +- Auth and ring class refactor [\#175](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/175) (@steve-gombos) +- Implemented timeouts for HTTP requests methods [\#165](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/165) (@tchellomello) +- Support for device model name property and has capability method [\#116](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/116) (@jsetton) **Merged pull requests:** -- Blocked user agent temp fix [\#176](https://github.com/tchellomello/python-ring-doorbell/pull/176) (@steve-gombos) -- Fixed logic and simplified module imports [\#168](https://github.com/tchellomello/python-ring-doorbell/pull/168) (@tchellomello) -- Fixes for tchellomello/python-ring-doorbell\#162 [\#163](https://github.com/tchellomello/python-ring-doorbell/pull/163) (@ZachBenz) -- Make consistent requirements.txt and setup.py [\#158](https://github.com/tchellomello/python-ring-doorbell/pull/158) (@tchellomello) -- Fixed requirements.xt [\#155](https://github.com/tchellomello/python-ring-doorbell/pull/155) (@tchellomello) -- fix R1705: Unnecessary elif after return \(no-else-return\) [\#151](https://github.com/tchellomello/python-ring-doorbell/pull/151) (@xernaj) -- Fix for Issue \#146 [\#149](https://github.com/tchellomello/python-ring-doorbell/pull/149) (@ZachBenz) -- Fix/oauth fail due to blocked user agent [\#143](https://github.com/tchellomello/python-ring-doorbell/pull/143) (@xernaj) -- Add additional device kinds for new products [\#137](https://github.com/tchellomello/python-ring-doorbell/pull/137) (@jsetton) -- Add a couple of device kinds [\#135](https://github.com/tchellomello/python-ring-doorbell/pull/135) (@dshokouhi) -- Fixed pylint and test errors [\#115](https://github.com/tchellomello/python-ring-doorbell/pull/115) (@tchellomello) -- support of externally powered new stickup cam [\#109](https://github.com/tchellomello/python-ring-doorbell/pull/109) (@steveww) -- Add support for downloading snapshot from doorbell [\#108](https://github.com/tchellomello/python-ring-doorbell/pull/108) (@MorganBulkeley) -- Support for Spotlight Battery cameras with multiple battery bays [\#106](https://github.com/tchellomello/python-ring-doorbell/pull/106) (@evanjd) +- Blocked user agent temp fix [\#176](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/176) (@steve-gombos) +- Fixed logic and simplified module imports [\#168](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/168) (@tchellomello) +- Fixes for tchellomello/python-ring-doorbell\#162 [\#163](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/163) (@ZachBenz) +- Make consistent requirements.txt and setup.py [\#158](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/158) (@tchellomello) +- Fixed requirements.xt [\#155](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/155) (@tchellomello) +- fix R1705: Unnecessary elif after return \(no-else-return\) [\#151](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/151) (@xernaj) +- Fix for Issue \#146 [\#149](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/149) (@ZachBenz) +- Fix/oauth fail due to blocked user agent [\#143](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/143) (@xernaj) +- Add additional device kinds for new products [\#137](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/137) (@jsetton) +- Add a couple of device kinds [\#135](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/135) (@dshokouhi) +- Fixed pylint and test errors [\#115](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/115) (@tchellomello) +- support of externally powered new stickup cam [\#109](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/109) (@steveww) +- Add support for downloading snapshot from doorbell [\#108](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/108) (@MorganBulkeley) +- Support for Spotlight Battery cameras with multiple battery bays [\#106](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/106) (@evanjd) -## [0.2.9](https://github.com/tchellomello/python-ring-doorbell/tree/0.2.9) (2020-01-03) +## [0.2.9](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.2.9) (2020-01-03) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.2.8...0.2.9) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.2.8...0.2.9) **Implemented enhancements:** -- add timeout to requests [\#164](https://github.com/tchellomello/python-ring-doorbell/issues/164) +- add timeout to requests [\#164](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/164) **Closed issues:** -- 3000 DNS queries a minute [\#160](https://github.com/tchellomello/python-ring-doorbell/issues/160) +- 3000 DNS queries a minute [\#160](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/160) -## [0.2.8](https://github.com/tchellomello/python-ring-doorbell/tree/0.2.8) (2019-12-27) +## [0.2.8](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.2.8) (2019-12-27) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.2.6...0.2.8) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.2.6...0.2.8) -## [0.2.6](https://github.com/tchellomello/python-ring-doorbell/tree/0.2.6) (2019-12-27) +## [0.2.6](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.2.6) (2019-12-27) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.2.5...0.2.6) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.2.5...0.2.6) -## [0.2.5](https://github.com/tchellomello/python-ring-doorbell/tree/0.2.5) (2019-12-20) +## [0.2.5](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.2.5) (2019-12-20) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.2.3...0.2.5) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.2.3...0.2.5) -## [0.2.3](https://github.com/tchellomello/python-ring-doorbell/tree/0.2.3) (2019-03-05) +## [0.2.3](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.2.3) (2019-03-05) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.2.2...0.2.3) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.2.2...0.2.3) **Implemented enhancements:** -- Feature Request: Add a model property to identify the different products [\#112](https://github.com/tchellomello/python-ring-doorbell/issues/112) +- Feature Request: Add a model property to identify the different products [\#112](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/112) **Closed issues:** -- MSG\_GENERIC\_FAIL [\#114](https://github.com/tchellomello/python-ring-doorbell/issues/114) +- MSG\_GENERIC\_FAIL [\#114](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/114) -## [0.2.2](https://github.com/tchellomello/python-ring-doorbell/tree/0.2.2) (2018-10-29) +## [0.2.2](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.2.2) (2018-10-29) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.2.1...0.2.2) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.2.1...0.2.2) -## [0.2.1](https://github.com/tchellomello/python-ring-doorbell/tree/0.2.1) (2018-06-15) +## [0.2.1](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.2.1) (2018-06-15) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.2.0...0.2.1) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.2.0...0.2.1) -## [0.2.0](https://github.com/tchellomello/python-ring-doorbell/tree/0.2.0) (2018-05-16) +## [0.2.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.2.0) (2018-05-16) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.1.9...0.2.0) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.1.9...0.2.0) **Closed issues:** -- Push Notification Token [\#61](https://github.com/tchellomello/python-ring-doorbell/issues/61) +- Push Notification Token [\#61](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/61) **Merged pull requests:** -- only save token to disk if reuse session is true [\#81](https://github.com/tchellomello/python-ring-doorbell/pull/81) (@andrewkress) +- only save token to disk if reuse session is true [\#81](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/81) (@andrewkress) -## [0.1.9](https://github.com/tchellomello/python-ring-doorbell/tree/0.1.9) (2017-11-29) +## [0.1.9](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.1.9) (2017-11-29) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.1.8...0.1.9) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.1.8...0.1.9) **Implemented enhancements:** -- Create a generic update\(\) call which updates all devices under top-level Ring object [\#74](https://github.com/tchellomello/python-ring-doorbell/issues/74) -- Created generic update method for all devices on Ring top-parent object [\#75](https://github.com/tchellomello/python-ring-doorbell/pull/75) (@tchellomello) +- Create a generic update\(\) call which updates all devices under top-level Ring object [\#74](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/74) +- Created generic update method for all devices on Ring top-parent object [\#75](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/75) (@tchellomello) -## [0.1.8](https://github.com/tchellomello/python-ring-doorbell/tree/0.1.8) (2017-11-22) +## [0.1.8](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.1.8) (2017-11-22) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.1.7...0.1.8) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.1.7...0.1.8) -## [0.1.7](https://github.com/tchellomello/python-ring-doorbell/tree/0.1.7) (2017-11-14) +## [0.1.7](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.1.7) (2017-11-14) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.1.6...0.1.7) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.1.6...0.1.7) **Implemented enhancements:** -- Doorbell history does not return all events [\#63](https://github.com/tchellomello/python-ring-doorbell/issues/63) -- Allows `older_than` parameter to history\(\) method [\#69](https://github.com/tchellomello/python-ring-doorbell/pull/69) (@tchellomello) +- Doorbell history does not return all events [\#63](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/63) +- Allows `older_than` parameter to history\(\) method [\#69](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/69) (@tchellomello) **Merged pull requests:** -- Update README.rst [\#66](https://github.com/tchellomello/python-ring-doorbell/pull/66) (@ntalekt) +- Update README.rst [\#66](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/66) (@ntalekt) -## [0.1.6](https://github.com/tchellomello/python-ring-doorbell/tree/0.1.6) (2017-10-19) +## [0.1.6](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.1.6) (2017-10-19) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.1.5...0.1.6) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.1.5...0.1.6) **Implemented enhancements:** -- Add support to Stick Up cameras [\#38](https://github.com/tchellomello/python-ring-doorbell/issues/38) -- Added floodlight lights and siren support [\#58](https://github.com/tchellomello/python-ring-doorbell/pull/58) (@jsetton) +- Add support to Stick Up cameras [\#38](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/38) +- Added floodlight lights and siren support [\#58](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/58) (@jsetton) -## [0.1.5](https://github.com/tchellomello/python-ring-doorbell/tree/0.1.5) (2017-10-17) +## [0.1.5](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.1.5) (2017-10-17) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.1.4...0.1.5) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.1.4...0.1.5) **Implemented enhancements:** -- Split source code into different files [\#54](https://github.com/tchellomello/python-ring-doorbell/issues/54) -- Fix \_\_init\_\_ methods [\#49](https://github.com/tchellomello/python-ring-doorbell/issues/49) -- How to get RSSI? [\#47](https://github.com/tchellomello/python-ring-doorbell/issues/47) -- House keeping: split source code into different files [\#55](https://github.com/tchellomello/python-ring-doorbell/pull/55) (@tchellomello) -- Refactored unittests [\#53](https://github.com/tchellomello/python-ring-doorbell/pull/53) (@tchellomello) -- Implemented health parameters reporting \(wifi, wifi\_rssi\) [\#50](https://github.com/tchellomello/python-ring-doorbell/pull/50) (@tchellomello) +- Split source code into different files [\#54](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/54) +- Fix \_\_init\_\_ methods [\#49](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/49) +- How to get RSSI? [\#47](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/47) +- House keeping: split source code into different files [\#55](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/55) (@tchellomello) +- Refactored unittests [\#53](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/53) (@tchellomello) +- Implemented health parameters reporting \(wifi, wifi\_rssi\) [\#50](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/50) (@tchellomello) **Merged pull requests:** -- add wifi connection status property [\#48](https://github.com/tchellomello/python-ring-doorbell/pull/48) (@keeth) -- chime: Support playing motion test sound [\#46](https://github.com/tchellomello/python-ring-doorbell/pull/46) (@vickyg3) -- adds support for stickup & floodlight cams [\#44](https://github.com/tchellomello/python-ring-doorbell/pull/44) (@jlippold) +- add wifi connection status property [\#48](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/48) (@keeth) +- chime: Support playing motion test sound [\#46](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/46) (@vickyg3) +- adds support for stickup & floodlight cams [\#44](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/44) (@jlippold) -## [0.1.4](https://github.com/tchellomello/python-ring-doorbell/tree/0.1.4) (2017-04-30) +## [0.1.4](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.1.4) (2017-04-30) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/v0.1.3...0.1.4) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/v0.1.3...0.1.4) **Merged pull requests:** -- 0.1.4 [\#42](https://github.com/tchellomello/python-ring-doorbell/pull/42) (@tchellomello) +- 0.1.4 [\#42](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/42) (@tchellomello) -## [v0.1.3](https://github.com/tchellomello/python-ring-doorbell/tree/v0.1.3) (2017-03-31) +## [v0.1.3](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/v0.1.3) (2017-03-31) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.1.2...v0.1.3) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.1.2...v0.1.3) -## [0.1.2](https://github.com/tchellomello/python-ring-doorbell/tree/0.1.2) (2017-03-20) +## [0.1.2](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.1.2) (2017-03-20) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.1.1...0.1.2) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.1.1...0.1.2) **Implemented enhancements:** -- Feature request: Change Chime ring [\#19](https://github.com/tchellomello/python-ring-doorbell/issues/19) -- Allows to filter history by event kind: 'motion', 'on\_demand', 'ding' [\#20](https://github.com/tchellomello/python-ring-doorbell/pull/20) (@tchellomello) +- Feature request: Change Chime ring [\#19](https://github.com/python-ring-doorbell/python-ring-doorbell/issues/19) +- Allows to filter history by event kind: 'motion', 'on\_demand', 'ding' [\#20](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/20) (@tchellomello) **Merged pull requests:** -- Extended unittest coverage to check\_alerts [\#30](https://github.com/tchellomello/python-ring-doorbell/pull/30) (@tchellomello) -- Added new example [\#27](https://github.com/tchellomello/python-ring-doorbell/pull/27) (@tchellomello) -- Update README.rst [\#26](https://github.com/tchellomello/python-ring-doorbell/pull/26) (@tchellomello) -- Rebasing master from dev [\#25](https://github.com/tchellomello/python-ring-doorbell/pull/25) (@tchellomello) -- Added basic structure for docs [\#24](https://github.com/tchellomello/python-ring-doorbell/pull/24) (@tchellomello) -- Unittests [\#22](https://github.com/tchellomello/python-ring-doorbell/pull/22) (@tchellomello) -- Introduced check\_alerts\(\) method [\#17](https://github.com/tchellomello/python-ring-doorbell/pull/17) (@tchellomello) +- Extended unittest coverage to check\_alerts [\#30](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/30) (@tchellomello) +- Added new example [\#27](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/27) (@tchellomello) +- Update README.rst [\#26](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/26) (@tchellomello) +- Rebasing master from dev [\#25](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/25) (@tchellomello) +- Added basic structure for docs [\#24](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/24) (@tchellomello) +- Unittests [\#22](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/22) (@tchellomello) +- Introduced check\_alerts\(\) method [\#17](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/17) (@tchellomello) -## [0.1.1](https://github.com/tchellomello/python-ring-doorbell/tree/0.1.1) (2017-03-09) +## [0.1.1](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.1.1) (2017-03-09) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.1.0...0.1.1) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.1.0...0.1.1) **Merged pull requests:** -- v0.1.1 [\#18](https://github.com/tchellomello/python-ring-doorbell/pull/18) (@tchellomello) +- v0.1.1 [\#18](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/18) (@tchellomello) + +## [0.1.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.1.0) (2017-02-25) -## [0.1.0](https://github.com/tchellomello/python-ring-doorbell/tree/0.1.0) (2017-02-25) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.0.4...0.1.0) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.0.4...0.1.0) +**Breaking change:** -**Breaking change:** - The code was refactored to allow to manipulate the objects in a better way. **Implemented enhancements:** -- Refactored project to make it more Pythonish and transparent [\#14](https://github.com/tchellomello/python-ring-doorbell/pull/14) (@tchellomello) +- Refactored project to make it more Pythonish and transparent [\#14](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/14) (@tchellomello) -## [0.0.4](https://github.com/tchellomello/python-ring-doorbell/tree/0.0.4) (2017-02-15) +## [0.0.4](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.0.4) (2017-02-15) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.0.3...0.0.4) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.0.3...0.0.4) **Merged pull requests:** -- 0.0.4 [\#12](https://github.com/tchellomello/python-ring-doorbell/pull/12) (@tchellomello) +- 0.0.4 [\#12](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/12) (@tchellomello) -## [0.0.3](https://github.com/tchellomello/python-ring-doorbell/tree/0.0.3) (2017-02-15) +## [0.0.3](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.0.3) (2017-02-15) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.0.2...0.0.3) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.0.2...0.0.3) **Merged pull requests:** -- Fixed metadata setup.py [\#11](https://github.com/tchellomello/python-ring-doorbell/pull/11) (@tchellomello) -- 0.0.3 [\#10](https://github.com/tchellomello/python-ring-doorbell/pull/10) (@tchellomello) +- Fixed metadata setup.py [\#11](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/11) (@tchellomello) +- 0.0.3 [\#10](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/10) (@tchellomello) -## [0.0.2](https://github.com/tchellomello/python-ring-doorbell/tree/0.0.2) (2017-02-15) +## [0.0.2](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.0.2) (2017-02-15) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.0.1...0.0.2) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.0.1...0.0.2) -## [0.0.1](https://github.com/tchellomello/python-ring-doorbell/tree/0.0.1) (2017-02-12) +## [0.0.1](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.0.1) (2017-02-12) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/1f01b44074cb8d72ca40c83b896ea79768fde885...0.0.1) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/1f01b44074cb8d72ca40c83b896ea79768fde885...0.0.1) **Merged pull requests:** -- Merging from dev [\#5](https://github.com/tchellomello/python-ring-doorbell/pull/5) (@tchellomello) -- Implemented travis, tox tests [\#4](https://github.com/tchellomello/python-ring-doorbell/pull/4) (@tchellomello) -- Refactored and updated documentation [\#2](https://github.com/tchellomello/python-ring-doorbell/pull/2) (@tchellomello) -- Make flake8 happy [\#1](https://github.com/tchellomello/python-ring-doorbell/pull/1) (@tchellomello) +- Merging from dev [\#5](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/5) (@tchellomello) +- Implemented travis, tox tests [\#4](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/4) (@tchellomello) +- Refactored and updated documentation [\#2](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/2) (@tchellomello) +- Make flake8 happy [\#1](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/1) (@tchellomello) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index b0d3907..214326f 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -11,7 +11,7 @@ Types of Contributions Report Bugs ~~~~~~~~~~~ -Report bugs at https://github.com/tchellomello/python-ring-doorbell/issues +Report bugs at https://github.com/python-ring-doorbell/python-ring-doorbell/issues If you are reporting a bug, please include: @@ -40,7 +40,7 @@ you think will help our users. Request Features ~~~~~~~~~~~~~~~~ -File an issue at https://github.com/tchellomello/python-ring-doorbell/issues. +File an issue at https://github.com/python-ring-doorbell/python-ring-doorbell/issues. Get Started! ------------ diff --git a/README.rst b/README.rst index 36432ec..0ed741e 100644 --- a/README.rst +++ b/README.rst @@ -6,13 +6,13 @@ Python Ring Door Bell :alt: PyPI Version :target: https://badge.fury.io/py/ring-doorbell -.. image:: https://github.com/tchellomello/python-ring-doorbell/actions/workflows/ci.yml/badge.svg?branch=master +.. image:: https://github.com/python-ring-doorbell/python-ring-doorbell/actions/workflows/ci.yml/badge.svg?branch=master :alt: Build Status - :target: https://github.com/tchellomello/python-ring-doorbell/actions/workflows/ci.yml?branch=master + :target: https://github.com/python-ring-doorbell/python-ring-doorbell/actions/workflows/ci.yml?branch=master -.. image:: https://coveralls.io/repos/github/tchellomello/python-ring-doorbell/badge.svg?branch=master +.. image:: https://coveralls.io/repos/github/python-ring-doorbell/python-ring-doorbell/badge.svg?branch=master :alt: Coverage - :target: https://coveralls.io/github/tchellomello/python-ring-doorbell?branch=master + :target: https://coveralls.io/github/python-ring-doorbell/python-ring-doorbell?branch=master .. image:: https://readthedocs.org/projects/python-ring-doorbell/badge/?version=latest :alt: Documentation Status @@ -43,7 +43,7 @@ Installation # Installing latest development $ pip install \ - git+https://github.com/tchellomello/python-ring-doorbell@master + git+https://github.com/python-ring-doorbell/python-ring-doorbell@master Event Listener ++++++++++++++ diff --git a/pyproject.toml b/pyproject.toml index 11ce9db..c847041 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,11 +2,11 @@ name = "ring-doorbell" version = "0.9.2" description = "A Python library to communicate with Ring Door Bell (https://ring.com/)" -authors = ["Marcelo Moreira de Mello "] +authors = ["python-ring-doorbell developers"] license = "LGPL-3.0-or-later" readme = "README.rst" -homepage = "https://github.com/tchellomello/python-ring-doorbell" -repository = "https://github.com/tchellomello/python-ring-doorbell" +homepage = "https://github.com/python-ring-doorbell/python-ring-doorbell" +repository = "https://github.com/python-ring-doorbell/python-ring-doorbell" documentation = "http://python-ring-doorbell.readthedocs.io/" keywords = [ "ring", @@ -30,7 +30,7 @@ include = [ ] [tool.poetry.urls] -"Bug Tracker" = "https://github.com/tchellomello/python-ring-doorbell/issues" +"Bug Tracker" = "https://github.com/python-ring-doorbell/python-ring-doorbell/issues" [tool.poetry.scripts] ring-doorbell = "ring_doorbell.cli:cli" From 399b5bbbd48b8fac319a015eaf4f067d34482481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCtz?= Date: Mon, 2 Sep 2024 05:10:50 -0700 Subject: [PATCH 3/6] Remove anyio from dependencies (#420) Asyncclick correctly specifies the dependency starting with version 8.1.7.1. --- poetry.lock | 2 +- pyproject.toml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index cb26c36..3ab5050 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1995,4 +1995,4 @@ listen = ["firebase-messaging"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "9450ea4a06e2a82694cc6870f11bf3cdec977fc662d684d3f1e826f3890216a1" +content-hash = "3ba1c88b5fb933f3cbdea18470a4fa2397e66759a5ea001347ee14f2e0e4294c" diff --git a/pyproject.toml b/pyproject.toml index c847041..535740c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,10 +39,9 @@ ring-doorbell = "ring_doorbell.cli:cli" python = "^3.9" oauthlib = ">=3.0.0,<4" pytz = ">=2022.0" -asyncclick = ">=8" +asyncclick = ">=8.1.7.1" aiohttp = ">=3" aiofiles = ">=23" -anyio = "*" # see https://github.com/python-trio/asyncclick/issues/18 sphinx = {version = "<7.2.6", optional = true} sphinx-rtd-theme = {version = "^1.3.0", optional = true} myst-parser = { version = "*", optional = true } From baa6d022468f1dc9027a75882b9a00d3b529939c Mon Sep 17 00:00:00 2001 From: "Steven B." <51370195+sdb9696@users.noreply.github.com> Date: Mon, 2 Sep 2024 13:23:12 +0100 Subject: [PATCH 4/6] Update supported python version in readme (#422) --- README.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 0ed741e..ac3af28 100644 --- a/README.rst +++ b/README.rst @@ -23,8 +23,7 @@ Python Ring Door Bell :target: https://pypi.python.org/pypi/ring-doorbell -Python Ring Door Bell is a library written for Python 3.8+ -that exposes the Ring.com devices as Python objects. +Python Ring Door Bell is a library written for Python that exposes the Ring.com devices as Python objects. There is also a command line interface that is work in progress. `Contributors welcome `_. From 2e606d334f7b72b02e3d59af2f01ffec0d2e3a98 Mon Sep 17 00:00:00 2001 From: "Steven B." <51370195+sdb9696@users.noreply.github.com> Date: Mon, 2 Sep 2024 14:35:57 +0100 Subject: [PATCH 5/6] Fix active listen alert counter (#423) Counter would always increase due to use of `time.monotonic` --- ring_doorbell/ring.py | 2 +- tests/conftest.py | 46 ++++++++++++++ .../listen/camera_motion_analytics.json | 9 +++ .../listen/camera_motion_android_config.json | 5 ++ tests/fixtures/listen/camera_motion_data.json | 31 ++++++++++ .../camera_motion_gcmdata.json} | 0 tests/fixtures/listen/camera_motion_img.json | 3 + .../doorbot_ding_gcmdata.json} | 2 +- .../fcmdata_v1.json} | 2 +- tests/fixtures/listen/fcmdata_v2.json | 13 ++++ .../listen/intercom_ding_analytics.json | 9 +++ .../listen/intercom_ding_android_config.json | 4 ++ tests/fixtures/listen/intercom_ding_data.json | 25 ++++++++ .../intercom_unlock_gcmdata.json} | 0 tests/test_cli.py | 14 +++-- tests/test_listen.py | 60 ++++++++++--------- 16 files changed, 189 insertions(+), 36 deletions(-) create mode 100644 tests/fixtures/listen/camera_motion_analytics.json create mode 100644 tests/fixtures/listen/camera_motion_android_config.json create mode 100644 tests/fixtures/listen/camera_motion_data.json rename tests/fixtures/{ring_listen_motion.json => listen/camera_motion_gcmdata.json} (100%) create mode 100644 tests/fixtures/listen/camera_motion_img.json rename tests/fixtures/{ring_listen_ding.json => listen/doorbot_ding_gcmdata.json} (95%) rename tests/fixtures/{ring_listen_fcmdata.json => listen/fcmdata_v1.json} (74%) create mode 100644 tests/fixtures/listen/fcmdata_v2.json create mode 100644 tests/fixtures/listen/intercom_ding_analytics.json create mode 100644 tests/fixtures/listen/intercom_ding_android_config.json create mode 100644 tests/fixtures/listen/intercom_ding_data.json rename tests/fixtures/{ring_listen_intercom_unlock.json => listen/intercom_unlock_gcmdata.json} (100%) diff --git a/ring_doorbell/ring.py b/ring_doorbell/ring.py index d69cb5b..ac61423 100644 --- a/ring_doorbell/ring.py +++ b/ring_doorbell/ring.py @@ -68,7 +68,7 @@ async def _async_update_data(self) -> None: def _add_event_to_dings_data(self, ring_event: RingEvent) -> None: # Purge expired push_dings - now = time.monotonic() + now = time.time() self.push_dings_data = [ re for re in self.push_dings_data if now < re.now + re.expires_in ] diff --git a/tests/conftest.py b/tests/conftest.py index 5968432..f9a2089 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,5 +1,8 @@ """Test configuration for the Ring platform.""" +from __future__ import annotations + +import datetime import json import re from pathlib import Path @@ -82,6 +85,49 @@ def load_fixture_as_dict(filename): return json.loads(load_fixture(filename)) +def load_alert_v1( + alert_type: str, device_id, *, ding_id_inc: int = 0, created_at: str | None = None +) -> dict: + msg = json.loads(load_fixture(Path().joinpath("listen", "fcmdata_v1.json"))) + gcmdata = json.loads( + load_fixture(Path().joinpath("listen", f"{alert_type}_gcmdata.json")) + ) + if created_at is None: + created_at = datetime.datetime.utcnow().isoformat(timespec="milliseconds") + "Z" # noqa: DTZ003 + if "ding" in gcmdata: + gcmdata["ding"]["doorbot_id"] = device_id + gcmdata["ding"]["created_at"] = created_at + gcmdata["ding"]["id"] = gcmdata["ding"]["id"] + ding_id_inc + else: + gcmdata["alarm_meta"]["device_zid"] = device_id + msg["data"]["gcmData"] = json.dumps(gcmdata) + return msg + + +def load_alert_v2( + alert_type: str, device_id, *, ding_id_inc: int = 0, created_at: str | None = None +) -> dict: + msg = json.loads(load_fixture(Path().joinpath("listen", "fcmdata_v2.json"))) + data = json.loads( + load_fixture(Path().joinpath("listen", f"{alert_type}_data.json")) + ) + android_config = json.loads( + load_fixture(Path().joinpath("listen", f"{alert_type}_android_config.json")) + ) + analytics = json.loads( + load_fixture(Path().joinpath("listen", f"{alert_type}_analytics.json")) + ) + if created_at is None: + created_at = datetime.datetime.utcnow().isoformat(timespec="milliseconds") + "Z" # noqa: DTZ003 + data["device"]["id"] = device_id + data["event"]["ding"]["created_at"] = created_at + data["event"]["ding"]["id"] = str(int(data["event"]["ding"]["id"]) + ding_id_inc) + msg["data"]["data"] = json.dumps(data) + msg["data"]["android_config"] = json.dumps(android_config) + msg["data"]["analytics"] = json.dumps(analytics) + return msg + + @pytest.fixture(autouse=True) def _listen_mock(mocker, request) -> None: if not can_listen or "nolistenmock" in request.keywords: diff --git a/tests/fixtures/listen/camera_motion_analytics.json b/tests/fixtures/listen/camera_motion_analytics.json new file mode 100644 index 0000000..41eac23 --- /dev/null +++ b/tests/fixtures/listen/camera_motion_analytics.json @@ -0,0 +1,9 @@ +{ + "server_correlation_id": "1234abcd-12ab-12ab-ab12-1234567abcde", + "server_id": "com.ring.pns", + "subcategory": "motion", + "triggered_at": 1724945621824, + "sent_at": 1724945622331, + "referring_item_type": "device_id", + "referring_item_id": "123456789" +} diff --git a/tests/fixtures/listen/camera_motion_android_config.json b/tests/fixtures/listen/camera_motion_android_config.json new file mode 100644 index 0000000..d7a493e --- /dev/null +++ b/tests/fixtures/listen/camera_motion_android_config.json @@ -0,0 +1,5 @@ +{ + "category": "com.ring.pn.live-event.motion", + "channel": "motion_channel_notification123456789", + "body": "There is motion at your Garden Floodcam" +} diff --git a/tests/fixtures/listen/camera_motion_data.json b/tests/fixtures/listen/camera_motion_data.json new file mode 100644 index 0000000..428e889 --- /dev/null +++ b/tests/fixtures/listen/camera_motion_data.json @@ -0,0 +1,31 @@ +{ + "device": { + "e2ee_enabled": false, + "id": 123456789, + "kind": "floodlight_v2", + "name": "Garden Floodcam" + }, + "event": { + "ding": { + "id": "1234567890123456789", + "created_at": "2024-08-29T15:33:41Z", + "subtype": "motion", + "detection_type": "motion" + }, + "eventito": { + "type": "motion", + "timestamp": 1724945621824 + }, + "riid": "0123456789abcdef0123456789abcdef", + "is_sidewalk": false, + "live_session": { + "streaming_data_hash": "sh-v1|1228_characters_urlsafe_b64", + "active_streaming_profile": "rms", + "default_audio_route": "loud_speaker", + "max_duration": 600 + } + }, + "location": { + "id": "zyxw12-4wxyz-0" + } +} diff --git a/tests/fixtures/ring_listen_motion.json b/tests/fixtures/listen/camera_motion_gcmdata.json similarity index 100% rename from tests/fixtures/ring_listen_motion.json rename to tests/fixtures/listen/camera_motion_gcmdata.json diff --git a/tests/fixtures/listen/camera_motion_img.json b/tests/fixtures/listen/camera_motion_img.json new file mode 100644 index 0000000..c9623c4 --- /dev/null +++ b/tests/fixtures/listen/camera_motion_img.json @@ -0,0 +1,3 @@ +{ + "snapshot_uuid": "12345678-ab12-1234-5678-123456abcdef:12345678" +} diff --git a/tests/fixtures/ring_listen_ding.json b/tests/fixtures/listen/doorbot_ding_gcmdata.json similarity index 95% rename from tests/fixtures/ring_listen_ding.json rename to tests/fixtures/listen/doorbot_ding_gcmdata.json index f71d9b1..519170f 100644 --- a/tests/fixtures/ring_listen_ding.json +++ b/tests/fixtures/listen/doorbot_ding_gcmdata.json @@ -9,7 +9,7 @@ "doorbot_id": 12345678, "e2ee_enabled": false, "streaming_data_hash": "sh-v1|1228_characters_urlsafe_b64", - "device_kind": "floodlight_v2", + "device_kind": "lpd_v1", "id": 12345678901234, "request_id": "abcd1234-cd12-f321-123a-abcdef123456", "properties": { diff --git a/tests/fixtures/ring_listen_fcmdata.json b/tests/fixtures/listen/fcmdata_v1.json similarity index 74% rename from tests/fixtures/ring_listen_fcmdata.json rename to tests/fixtures/listen/fcmdata_v1.json index 3141071..d122c9d 100644 --- a/tests/fixtures/ring_listen_fcmdata.json +++ b/tests/fixtures/listen/fcmdata_v1.json @@ -1,6 +1,6 @@ { "data": { - "gcmData": "ring_listen_gcmdata.json" + "gcmData": "${gcm_data}" }, "from": "123456789012", "priority": "high", diff --git a/tests/fixtures/listen/fcmdata_v2.json b/tests/fixtures/listen/fcmdata_v2.json new file mode 100644 index 0000000..6205fa0 --- /dev/null +++ b/tests/fixtures/listen/fcmdata_v2.json @@ -0,0 +1,13 @@ +{ + "data": { + "version": "2.0.0", + "data": "${data}", + "analytics": "${analytics}", + "android_config": "${android_config}", + "img": "${img}", + "video": {} + }, + "from": "123456789012", + "priority": "normal", + "fcmMessageId": "1234fdeb-1234-bc78-cd12-abcdef123456" +} diff --git a/tests/fixtures/listen/intercom_ding_analytics.json b/tests/fixtures/listen/intercom_ding_analytics.json new file mode 100644 index 0000000..276f4b3 --- /dev/null +++ b/tests/fixtures/listen/intercom_ding_analytics.json @@ -0,0 +1,9 @@ +{ + "server_correlation_id": "1234abcd-12ab-12ab-ab12-1234567abcde", + "server_id": "com.ring.pns", + "subcategory": "ding", + "triggered_at": 1721635228182, + "sent_at": 1721635228372, + "referring_item_type": "device_id", + "referring_item_id": "123456789" +} diff --git a/tests/fixtures/listen/intercom_ding_android_config.json b/tests/fixtures/listen/intercom_ding_android_config.json new file mode 100644 index 0000000..68f3f73 --- /dev/null +++ b/tests/fixtures/listen/intercom_ding_android_config.json @@ -0,0 +1,4 @@ +{ + "category": "com.ring.pn.live-event.intercom", + "body": "🔔 Someone is at your Entrance" +} diff --git a/tests/fixtures/listen/intercom_ding_data.json b/tests/fixtures/listen/intercom_ding_data.json new file mode 100644 index 0000000..d9843c3 --- /dev/null +++ b/tests/fixtures/listen/intercom_ding_data.json @@ -0,0 +1,25 @@ +{ + "device": { + "e2ee_enabled": false, + "id": 298361211, + "kind": "intercom_handset_audio", + "name": "Entrance" + }, + "event": { + "ding": { + "id": "7394367000199864699", + "created_at": "2024-07-22T08:00:28.182Z", + "subtype": "ding" + }, + "is_sidewalk": false, + "live_session": { + "streaming_data_hash": "sh-v1|wVrxK3siWHM-rDBmVyqHvnthjtKk6NzDBahF23xoEPqN9UQ7Oyn_4dg5XgUDGPZsgB1hrMe3e8yU4R-iiQJLArIrb9rKGmhT3OlzVT8WnX8kopIFZKHRm9lHqzsBQ-Xj0t_BIuK5RBAoFLHYOyF4d9zp19MkDu9dGUQWWkMoW-zTbbSCimOCxTeOxo8jsLf3yfOG5UadzYGLBN-91tQ_6zIbU0r5RXdh4z1IXmnpNJSl-61iupCVYdhMWdGtmelMhR2tDO32pk0647I286tyCl0pM2MMsqMl_XdEZxA4vMI2fIA47FZkP7Xvuj21Mbaj9--bMOOT9HXfH3NnpuMTIs_QkKnWCrc0VGn_YUNywuSySC_qv4tCjco7Uto7xFLVYwjAJmKFCMsG3cqz00OSR8j9MbLnZLH9-MDyDUewD28pxGq7bM1nHsUqKN0kTdqeEd_gyLmsAAvnEo-ZQEumXID8hcvZxKFdVVKAFdnk4cD8wrL6t2w5KUXQCW54-olZGTK32e9pY6MbdOHeWTe1VnXM4TSG7P0Sv0MgfUR8ZrsH8-4ov-xaiWL6DBeO0lvwIejKyr56IworUhVzNSZhGOTBPgEB5-T-rxUiGRBedv35x_3xETpRPurEKJ3rRPA06VtD6vyY5-NXcMrEErZHZI_ob60JYT8-BqiY2SxYchqlKTm8zb00dPO6fZXl12U0j6OS7BIIYo2wSGWK8enlDjrTgLFtd0RIqtYIYaZrcxa2GJVaK_u7_UD_l5TnNh1jHrwLXNnSQJV_ife4beNbMOaaWzCuVwmbsOx1Mk84xz9jagMslCYPn1gi3AfKSlewwVTr7TIwSxVjOnVxpBIDydzVIhJliyh95q8Uy7XFm3CrwQbCLXSaEKmARiIFtq773zhuwBv2sH6N1NaVyxtLd1U0FQxipwz8f0SgEaoInUfxeWPRxKNHLkzGR2OK9PLLJN-pWJPurrhjbHZ5tlL-0xuI1IFXTlpU9J2mmobdjy1pcy8EZndZKMTCaR1puRIBsn0hZhErpzBZvdceLZ-Jh5iIO9tQr4mG1pRL_A7wjaTfqhja6oKobjQkdFZEALKzsyp5PsMN7EzRBU9Ckt6V0fZ-b1oJfOyN0ldmtP7Cyqmb5oplr5Ukn07ROmBs78JIH5XetaikmKT4Ib0IzEC_Mf8LpYRx3K-hhYIpTWEhQLwzyQpBsToLhdcC8t352Ge6ON-RwDDpQlQe8tp5rMVSMHryciOfSyVIh3K5GIKJJ5YSBlImoC8exECYcnu-4YW7iRp2", + "active_streaming_profile": "rms", + "default_audio_route": "quiet_speaker", + "max_duration": 600 + } + }, + "location": { + "id": "99b3e09a-948d-44b4-bab5-0cc40eee9b36" + } +} diff --git a/tests/fixtures/ring_listen_intercom_unlock.json b/tests/fixtures/listen/intercom_unlock_gcmdata.json similarity index 100% rename from tests/fixtures/ring_listen_intercom_unlock.json rename to tests/fixtures/listen/intercom_unlock_gcmdata.json diff --git a/tests/test_cli.py b/tests/test_cli.py index 9fbf9da..5cea069 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -24,7 +24,11 @@ from ring_doorbell.const import GCM_TOKEN_FILE from ring_doorbell.listen import can_listen -from tests.conftest import load_fixture, load_fixture_as_dict +from tests.conftest import ( + load_alert_v1, + load_fixture, + load_fixture_as_dict, +) async def test_cli_default(ring): @@ -252,9 +256,9 @@ async def test_listen_event_handler(mocker, auth): await listener.start() listener.add_notification_callback(_event_handler(ring).on_event) - msg = json.loads(load_fixture("ring_listen_fcmdata.json")) - gcmdata = load_fixture("ring_listen_motion.json") - msg["data"]["gcmData"] = gcmdata + msg = load_alert_v1( + "camera_motion", 12345678, created_at="2023-10-24T09:42:18.789709Z" + ) echomock = mocker.patch("ring_doorbell.cli.echo") mocker.patch( "ring_doorbell.cli.get_now_str", return_value="2023-10-24 09:42:18.789709" @@ -263,7 +267,7 @@ async def test_listen_event_handler(mocker, auth): exp = ( "2023-10-24 09:42:18.789709: RingEvent(id=12345678901234, " "doorbot_id=12345678, device_name='Front Floodcam'" - ", device_kind='floodlight_v2', now=1698137483.395," + ", device_kind='floodlight_v2', now=1698140538.789709," " expires_in=180, kind='motion', state='human') : " "Currently active count = 1" ) diff --git a/tests/test_listen.py b/tests/test_listen.py index 9630549..394a253 100644 --- a/tests/test_listen.py +++ b/tests/test_listen.py @@ -4,11 +4,12 @@ import json import pytest +from freezegun.api import FrozenDateTimeFactory from ring_doorbell import Ring from ring_doorbell.exceptions import RingError from ring_doorbell.listen import can_listen -from tests.conftest import load_fixture +from tests.conftest import load_alert_v1, load_alert_v2, load_fixture # test_module.py pytestmark = pytest.mark.skipif( @@ -59,55 +60,58 @@ async def test_active_dings(auth, mocker): assert num_active == 0 alertstoadd = 2 for i in range(alertstoadd): - msg = json.loads(load_fixture("ring_listen_fcmdata.json")) - gcmdata_dict = json.loads(load_fixture("ring_listen_ding.json")) - created_at = datetime.datetime.utcnow().isoformat(timespec="milliseconds") + "Z" # noqa: DTZ003 - gcmdata_dict["ding"]["created_at"] = created_at - gcmdata_dict["ding"]["id"] = gcmdata_dict["ding"]["id"] + i - msg["data"]["gcmData"] = json.dumps(gcmdata_dict) + msg = load_alert_v1("doorbot_ding", 123456781, ding_id_inc=i) + listener._on_notification(msg, "1234567" + str(i)) + msg = load_alert_v2("camera_motion", 123456782, ding_id_inc=i) + listener._on_notification(msg, "1234567" + str(i)) + msg = load_alert_v1("intercom_unlock", 185036587, ding_id_inc=i) listener._on_notification(msg, "1234567" + str(i)) dings = ring.active_alerts() - assert len(dings) == num_active + alertstoadd + assert len(dings) == num_active + alertstoadd * 3 # Test with the same id which should overwrite # previous and keep the overall count the same for i in range(alertstoadd): - msg = json.loads(load_fixture("ring_listen_fcmdata.json")) - gcmdata_dict = json.loads(load_fixture("ring_listen_ding.json")) - created_at = datetime.datetime.utcnow().isoformat(timespec="milliseconds") + "Z" # noqa: DTZ003 - gcmdata_dict["ding"]["created_at"] = created_at - gcmdata_dict["ding"]["id"] = gcmdata_dict["ding"]["id"] + 1 - msg["data"]["gcmData"] = json.dumps(gcmdata_dict) + msg = load_alert_v1("doorbot_ding", 123456781, ding_id_inc=i) + listener._on_notification(msg, "1234567" + str(i)) + msg = load_alert_v2("camera_motion", 123456782, ding_id_inc=i) listener._on_notification(msg, "1234567" + str(i)) dings = ring.active_alerts() - assert len(dings) == num_active + alertstoadd + assert len(dings) == num_active + alertstoadd * 3 await listener.stop() -async def test_intercom_unlock(auth, mocker): - import firebase_messaging - +async def test_ding_expirey(auth, mocker, freezer: FrozenDateTimeFactory): ring = Ring(auth) listener = RingEventListener(ring) await listener.start() - assert firebase_messaging.FcmPushClient.checkin_or_register.call_count == 1 - assert firebase_messaging.FcmPushClient.start.call_count == 1 + assert listener.subscribed is True assert listener.started is True - num_active = len(ring.active_alerts()) - assert num_active == 0 + + assert len(ring.push_dings_data) == 0 + assert len(ring.active_alerts()) == 0 + alertstoadd = 2 for i in range(alertstoadd): - msg = json.loads(load_fixture("ring_listen_fcmdata.json")) - gcmdata_dict = json.loads(load_fixture("ring_listen_intercom_unlock.json")) - msg["data"]["gcmData"] = json.dumps(gcmdata_dict) + msg = load_alert_v1("doorbot_ding", 123456781, ding_id_inc=i) + listener._on_notification(msg, "1234567" + str(i)) + msg = load_alert_v2("camera_motion", 123456782, ding_id_inc=i) + listener._on_notification(msg, "1234567" + str(i)) + msg = load_alert_v1("intercom_unlock", 185036587, ding_id_inc=i) listener._on_notification(msg, "1234567" + str(i)) - dings = ring.active_alerts() - assert len(dings) == num_active + alertstoadd + assert len(ring.push_dings_data) == 6 + assert len(ring.active_alerts()) == 6 - await listener.stop() + freezer.tick(datetime.timedelta(minutes=5)) + + msg = load_alert_v1("doorbot_ding", 123456781, ding_id_inc=alertstoadd + 1) + listener._on_notification(msg, "123456781" + str(alertstoadd + 1)) + + assert len(ring.push_dings_data) == 1 + assert len(ring.active_alerts()) == 1 @pytest.mark.nolistenmock From c85e4b6853b5876e431a68327104c143dfb75a5d Mon Sep 17 00:00:00 2001 From: "Steven B." <51370195+sdb9696@users.noreply.github.com> Date: Mon, 2 Sep 2024 14:51:14 +0100 Subject: [PATCH 6/6] Prepare 0.9.3 (#425) ## [0.9.3](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.9.3) (2024-09-02) [Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.9.2...0.9.3) **Release highlights:** - The python-ring-doorbell code repository has moved to https://github.com/python-ring-doorbell/python-ring-doorbell - Fix for enabling in-home chimes - Many thanks @briangoldstein! **Fixed bugs:** - Fix active listen alert counter [\#423](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/423) (@sdb9696) - Fix method to enable in-home doorbell chime [\#419](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/419) (@briangoldstein) **Documentation updates:** - Update supported python version in readme [\#422](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/422) (@sdb9696) **Project maintenance:** - Migrate repo to python-ring-doorbell github organisation [\#421](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/421) (@sdb9696) - Remove anyio from dependencies [\#420](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/420) (@dotlambda) --- CHANGELOG.md | 119 ++++++++++++++----------- poetry.lock | 230 +++++++++++++++++++++++++------------------------ pyproject.toml | 2 +- 3 files changed, 188 insertions(+), 163 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index acc2031..2181b0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,35 @@ # Changelog +## [0.9.3](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.9.3) (2024-09-02) + +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.9.2...0.9.3) + +**Release highlights:** + +- The python-ring-doorbell code repository has moved to https://github.com/python-ring-doorbell/python-ring-doorbell +- Fix for enabling in-home chimes - Many thanks @briangoldstein! + +**Fixed bugs:** + +- Fix active listen alert counter [\#423](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/423) (@sdb9696) +- Fix method to enable in-home doorbell chime [\#419](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/419) (@briangoldstein) + +**Documentation updates:** + +- Update supported python version in readme [\#422](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/422) (@sdb9696) + +**Project maintenance:** + +- Migrate repo to python-ring-doorbell github organisation [\#421](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/421) (@sdb9696) +- Remove anyio from dependencies [\#420](https://github.com/python-ring-doorbell/python-ring-doorbell/pull/420) (@dotlambda) + ## [0.9.2](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.9.2) (2024-08-29) [Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.9.1...0.9.2) -**Release highlights:** - -- Fixes the broken event listener by migrating to the new `firebase-messaging` library to support FCM HTTP v1 api +**Release highlights:** + +- Fixes the broken event listener by migrating to the new `firebase-messaging` library to support FCM HTTP v1 api - **breaking** - the `RingEventListener` will only support async queries. Hence `start` and `stop` are now async defs **Fixed bugs:** @@ -32,15 +55,15 @@ Hotfix for missing typing_extensions dependency [Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.12...0.9.0) -**Release highlights:** - -- Async support for the library -- Removed python 3.8 support - -**Breaking changes:** - -- Synchronous api calls are now deprecated. For example calling `Ring.update_data()` will emit a deprecation warning to use `await Ring.async_update_data()` which should be run within an event loop via `asyncio.run()`. See `test.py` for an example. -- Calling the deprecated sync api methods from inside a running event loop is not supported. This is unlikely to affect many consumers as the norm if running in an event loop is to make synchronous api calls from an executor thread. +**Release highlights:** + +- Async support for the library +- Removed python 3.8 support + +**Breaking changes:** + +- Synchronous api calls are now deprecated. For example calling `Ring.update_data()` will emit a deprecation warning to use `await Ring.async_update_data()` which should be run within an event loop via `asyncio.run()`. See `test.py` for an example. +- Calling the deprecated sync api methods from inside a running event loop is not supported. This is unlikely to affect many consumers as the norm if running in an event loop is to make synchronous api calls from an executor thread. - Python 3.8 is no longer officially supported and could break in future releases. **Breaking change pull requests:** @@ -88,8 +111,8 @@ Hotfix for missing typing_extensions dependency [Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.9...0.8.10) -**Release highlights:** - +**Release highlights:** + - py.typed added to library for type checkers **Merged pull requests:** @@ -124,8 +147,8 @@ Hotfix for missing typing_extensions dependency [Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.6...0.8.7) -**Release highlights:** - +**Release highlights:** + - Support for Ring Intercoms. Many thanks to @rautsch & @andrew-rinato for initial PRs and special thanks to @cosimomeli for getting this over the line! **Merged pull requests:** @@ -146,8 +169,8 @@ Hotfix for missing typing_extensions dependency [Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.5...0.8.6) -**Breaking change:** - +**Breaking change:** + - Breaking change to the listen subpackage api to allow the listener be configurable. **Merged pull requests:** @@ -301,24 +324,24 @@ Hotfix for missing typing_extensions dependency [Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.5.0...0.6.0) -**Major breaking change:** - -Ring APIs offer 1 endpoint with all device info. 1 with all health for doorbells etc. The API used to make a request from each device to the "all device" endpoint and fetch its own data. - -With the new approach we now just fetch the data once and each device will fetch that data. This significantly reduces the number of requests. - -See updated [test.py](https://github.com/tchellomello/python-ring-doorbell/blob/0.6.0/test.py) on usage. - -Changes: - - Pass a user agent to the auth class to identify your project (at request from Ring) - - For most updates, just call `ring.update_all()`. If you want health data (wifi stuff), call `device.update_health_data()` on each device - - Renamed `device.id` -> `device.device_id`, `device.account_id` -> `device.id` to follow API naming. - - Call `ring.update_all()` at least once before querying for devices - - Querying devices now is a function `ring.devices()` instead of property `ring.devices` - - Removed `ring.chimes`, `ring.doorbells`, `ring.stickup_cams` - - Cleaned up tests with pytest fixtures - - Run Black on code to silence hound. - +**Major breaking change:** + +Ring APIs offer 1 endpoint with all device info. 1 with all health for doorbells etc. The API used to make a request from each device to the "all device" endpoint and fetch its own data. + +With the new approach we now just fetch the data once and each device will fetch that data. This significantly reduces the number of requests. + +See updated [test.py](https://github.com/tchellomello/python-ring-doorbell/blob/0.6.0/test.py) on usage. + +Changes: + - Pass a user agent to the auth class to identify your project (at request from Ring) + - For most updates, just call `ring.update_all()`. If you want health data (wifi stuff), call `device.update_health_data()` on each device + - Renamed `device.id` -> `device.device_id`, `device.account_id` -> `device.id` to follow API naming. + - Call `ring.update_all()` at least once before querying for devices + - Querying devices now is a function `ring.devices()` instead of property `ring.devices` + - Removed `ring.chimes`, `ring.doorbells`, `ring.stickup_cams` + - Cleaned up tests with pytest fixtures + - Run Black on code to silence hound. + **Merged pull requests:** @@ -329,8 +352,8 @@ Changes: [Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.4.0...0.5.0) -**Breaking Change:** - +**Breaking Change:** + The `Auth` class no longer takes an `otp_callback` but now takes an `otp_code`. It raises `MissingTokenError` if `otp_code` is required. See the [updated example](https://github.com/tchellomello/python-ring-doorbell/blob/261eaf96875e51fc266a5dbfc6198f8cbb8006e0/test.py). **Implemented enhancements:** @@ -345,14 +368,14 @@ The `Auth` class no longer takes an `otp_callback` but now takes an `otp_code`. [Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.2.9...0.4.0) -**Major breaking change:** - -This release is a major breaking change to clean up the auth and follow proper OAuth2. Big thanks to @steve-gombos for this. - -All authentication is now done inside `Auth`. The first time you need username, password and optionally an 2-factor auth callback function. After that you have a token and that can be used. - -The old cache file is no longer in use and can be removed. - +**Major breaking change:** + +This release is a major breaking change to clean up the auth and follow proper OAuth2. Big thanks to @steve-gombos for this. + +All authentication is now done inside `Auth`. The first time you need username, password and optionally an 2-factor auth callback function. After that you have a token and that can be used. + +The old cache file is no longer in use and can be removed. + Example usage in `test.py`. **Implemented enhancements:** @@ -531,8 +554,8 @@ Example usage in `test.py`. [Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.0.4...0.1.0) -**Breaking change:** - +**Breaking change:** + The code was refactored to allow to manipulate the objects in a better way. **Implemented enhancements:** diff --git a/poetry.lock b/poetry.lock index 3ab5050..3ef68be 100644 --- a/poetry.lock +++ b/poetry.lock @@ -256,13 +256,13 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] [[package]] name = "certifi" -version = "2024.7.4" +version = "2024.8.30" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, - {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, + {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, + {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, ] [[package]] @@ -1554,29 +1554,29 @@ fixture = ["fixtures"] [[package]] name = "ruff" -version = "0.6.2" +version = "0.6.3" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.2-py3-none-linux_armv6l.whl", hash = "sha256:5c8cbc6252deb3ea840ad6a20b0f8583caab0c5ef4f9cca21adc5a92b8f79f3c"}, - {file = "ruff-0.6.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:17002fe241e76544448a8e1e6118abecbe8cd10cf68fde635dad480dba594570"}, - {file = "ruff-0.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3dbeac76ed13456f8158b8f4fe087bf87882e645c8e8b606dd17b0b66c2c1158"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:094600ee88cda325988d3f54e3588c46de5c18dae09d683ace278b11f9d4d534"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:316d418fe258c036ba05fbf7dfc1f7d3d4096db63431546163b472285668132b"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d72b8b3abf8a2d51b7b9944a41307d2f442558ccb3859bbd87e6ae9be1694a5d"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2aed7e243be68487aa8982e91c6e260982d00da3f38955873aecd5a9204b1d66"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d371f7fc9cec83497fe7cf5eaf5b76e22a8efce463de5f775a1826197feb9df8"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f310d63af08f583363dfb844ba8f9417b558199c58a5999215082036d795a1"}, - {file = "ruff-0.6.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6880c53c56addb8638fe444818183385ec85eeada1d48fc5abe045301b2f1"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1175d39faadd9a50718f478d23bfc1d4da5743f1ab56af81a2b6caf0a2394f23"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5b939f9c86d51635fe486585389f54582f0d65b8238e08c327c1534844b3bb9a"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d0d62ca91219f906caf9b187dea50d17353f15ec9bb15aae4a606cd697b49b4c"}, - {file = "ruff-0.6.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7438a7288f9d67ed3c8ce4d059e67f7ed65e9fe3aa2ab6f5b4b3610e57e3cb56"}, - {file = "ruff-0.6.2-py3-none-win32.whl", hash = "sha256:279d5f7d86696df5f9549b56b9b6a7f6c72961b619022b5b7999b15db392a4da"}, - {file = "ruff-0.6.2-py3-none-win_amd64.whl", hash = "sha256:d9f3469c7dd43cd22eb1c3fc16926fb8258d50cb1b216658a07be95dd117b0f2"}, - {file = "ruff-0.6.2-py3-none-win_arm64.whl", hash = "sha256:f28fcd2cd0e02bdf739297516d5643a945cc7caf09bd9bcb4d932540a5ea4fa9"}, - {file = "ruff-0.6.2.tar.gz", hash = "sha256:239ee6beb9e91feb8e0ec384204a763f36cb53fb895a1a364618c6abb076b3be"}, + {file = "ruff-0.6.3-py3-none-linux_armv6l.whl", hash = "sha256:97f58fda4e309382ad30ede7f30e2791d70dd29ea17f41970119f55bdb7a45c3"}, + {file = "ruff-0.6.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:3b061e49b5cf3a297b4d1c27ac5587954ccb4ff601160d3d6b2f70b1622194dc"}, + {file = "ruff-0.6.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:34e2824a13bb8c668c71c1760a6ac7d795ccbd8d38ff4a0d8471fdb15de910b1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bddfbb8d63c460f4b4128b6a506e7052bad4d6f3ff607ebbb41b0aa19c2770d1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ced3eeb44df75353e08ab3b6a9e113b5f3f996bea48d4f7c027bc528ba87b672"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47021dff5445d549be954eb275156dfd7c37222acc1e8014311badcb9b4ec8c1"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7d7bd20dc07cebd68cc8bc7b3f5ada6d637f42d947c85264f94b0d1cd9d87384"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:500f166d03fc6d0e61c8e40a3ff853fa8a43d938f5d14c183c612df1b0d6c58a"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42844ff678f9b976366b262fa2d1d1a3fe76f6e145bd92c84e27d172e3c34500"}, + {file = "ruff-0.6.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70452a10eb2d66549de8e75f89ae82462159855e983ddff91bc0bce6511d0470"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:65a533235ed55f767d1fc62193a21cbf9e3329cf26d427b800fdeacfb77d296f"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2e2c23cef30dc3cbe9cc5d04f2899e7f5e478c40d2e0a633513ad081f7361b5"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d8a136aa7d228975a6aee3dd8bea9b28e2b43e9444aa678fb62aeb1956ff2351"}, + {file = "ruff-0.6.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f92fe93bc72e262b7b3f2bba9879897e2d58a989b4714ba6a5a7273e842ad2f8"}, + {file = "ruff-0.6.3-py3-none-win32.whl", hash = "sha256:7a62d3b5b0d7f9143d94893f8ba43aa5a5c51a0ffc4a401aa97a81ed76930521"}, + {file = "ruff-0.6.3-py3-none-win_amd64.whl", hash = "sha256:746af39356fee2b89aada06c7376e1aa274a23493d7016059c3a72e3b296befb"}, + {file = "ruff-0.6.3-py3-none-win_arm64.whl", hash = "sha256:14a9528a8b70ccc7a847637c29e56fd1f9183a9db743bbc5b8e0c4ad60592a82"}, + {file = "ruff-0.6.3.tar.gz", hash = "sha256:183b99e9edd1ef63be34a3b51fee0a9f4ab95add123dbf89a71f7b1f0c991983"}, ] [[package]] @@ -1868,101 +1868,103 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "yarl" -version = "1.9.4" +version = "1.9.7" description = "Yet another URL library" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:60c04415b31a1611ef5989a6084dd6f6b95652c6a18378b58985667b65b2ecb6"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1787dcfdbe730207acb454548a6e19f80ae75e6d2d1f531c5a777bc1ab6f7952"}, + {file = "yarl-1.9.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5ddad20363f9f1bbedc95789c897da62f939e6bc855793c3060ef8b9f9407bf"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdb156a06208fc9645ae7cc0fca45c40dd40d7a8c4db626e542525489ca81a9"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:522fa3d300d898402ae4e0fa7c2c21311248ca43827dc362a667de87fdb4f1be"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7f9cabfb8b980791b97a3ae3eab2e38b2ba5eab1af9b7495bdc44e1ce7c89e3"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fc728857df4087da6544fc68f62d7017fa68d74201d5b878e18ed4822c31fb3"}, + {file = "yarl-1.9.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3dba2ebac677184d56374fa3e452b461f5d6a03aa132745e648ae8859361eb6b"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a95167ae34667c5cc7d9206c024f793e8ffbadfb307d5c059de470345de58a21"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9d319ac113ca47352319cbea92d1925a37cb7bd61a8c2f3e3cd2e96eb33cccae"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:2d71a5d818d82586ac46265ae01466e0bda0638760f18b21f1174e0dd58a9d2f"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:ff03f1c1ac474c66d474929ae7e4dd195592c1c7cc8c36418528ed81b1ca0a79"}, + {file = "yarl-1.9.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78250f635f221dde97d02c57aade3313310469bc291888dfe32acd1012594441"}, + {file = "yarl-1.9.7-cp310-cp310-win32.whl", hash = "sha256:f3aaf9fa960d55bd7876d55d7ea3cc046f3660df1ff73fc1b8c520a741ed1f21"}, + {file = "yarl-1.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:e8362c941e07fbcde851597672a5e41b21dc292b7d5a1dc439b7a93c9a1af5d9"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:596069ddeaf72b5eb36cd714dcd2b5751d0090d05a8d65113b582ed9e1c801fb"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cb870907e8b86b2f32541403da9455afc1e535ce483e579bea0e6e79a0cc751c"}, + {file = "yarl-1.9.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ca5e86be84492fa403c4dcd4dcaf8e1b1c4ffc747b5176f7c3d09878c45719b0"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99cecfb51c84d00132db909e83ae388793ca86e48df7ae57f1be0beab0dcce5"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25508739e9b44d251172145f54c084b71747b09e4d237dc2abb045f46c36a66e"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:60f3b5aec3146b6992640592856414870f5b20eb688c1f1d5f7ac010a7f86561"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1557456afce5db3d655b5f8a31cdcaae1f47e57958760525c44b76e812b4987"}, + {file = "yarl-1.9.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71bb1435a84688ed831220c5305d96161beb65cac4a966374475348aa3de4575"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f87d8645a7a806ec8f66aac5e3b1dcb5014849ff53ffe2a1f0b86ca813f534c7"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:58e3f01673873b8573da3abe138debc63e4e68541b2104a55df4c10c129513a4"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8af0bbd4d84f8abdd9b11be9488e32c76b1501889b73c9e2292a15fb925b378b"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7fc441408ed0d9c6d2d627a02e281c21f5de43eb5209c16636a17fc704f7d0f8"}, + {file = "yarl-1.9.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a9552367dc440870556da47bb289a806f08ad06fbc4054072d193d9e5dd619ba"}, + {file = "yarl-1.9.7-cp311-cp311-win32.whl", hash = "sha256:628619008680a11d07243391271b46f07f13b75deb9fe92ef342305058c70722"}, + {file = "yarl-1.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:bc23d870864971c8455cfba17498ccefa53a5719ea9f5fce5e7e9c1606b5755f"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d8cf3d0b67996edc11957aece3fbce4c224d0451c7c3d6154ec3a35d0e55f6b"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a7748cd66fef49c877e59503e0cc76179caf1158d1080228e67e1db14554f08"}, + {file = "yarl-1.9.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a6fa3aeca8efabb0fbbb3b15e0956b0cb77f7d9db67c107503c30af07cd9e00"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf37dd0008e5ac5c3880198976063c491b6a15b288d150d12833248cf2003acb"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87aa5308482f248f8c3bd9311cd6c7dfd98ea1a8e57e35fb11e4adcac3066003"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:867b13c1b361f9ba5d2f84dc5408082f5d744c83f66de45edc2b96793a9c5e48"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48ce93947554c2c85fe97fc4866646ec90840bc1162e4db349b37d692a811755"}, + {file = "yarl-1.9.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcd3d94b848cba132f39a5b40d80b0847d001a91a6f35a2204505cdd46afe1b2"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d06d6a8f98dd87646d98f0c468be14b201e47ec6092ad569adf835810ad0dffb"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:91567ff4fce73d2e7ac67ed5983ad26ba2343bc28cb22e1e1184a9677df98d7c"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1d5594512541e63188fea640b7f066c218d2176203d6e6f82abf702ae3dca3b2"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9c2743e43183e4afbb07d5605693299b8756baff0b086c25236c761feb0e3c56"}, + {file = "yarl-1.9.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:daa69a3a2204355af39f4cfe7f3870d87c53d77a597b5100b97e3faa9460428b"}, + {file = "yarl-1.9.7-cp312-cp312-win32.whl", hash = "sha256:36b16884336c15adf79a4bf1d592e0c1ffdb036a760e36a1361565b66785ec6c"}, + {file = "yarl-1.9.7-cp312-cp312-win_amd64.whl", hash = "sha256:2ead2f87a1174963cc406d18ac93d731fbb190633d3995fa052d10cefae69ed8"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:808eddabcb6f7b2cdb6929b3e021ac824a2c07dc7bc83f7618e18438b1b65781"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:395ab0d8ce6d104a988da429bcbfd445e03fb4c911148dfd523f69d13f772e47"}, + {file = "yarl-1.9.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:49827dfccbd59c4499605c13805e947349295466e490860a855b7c7e82ec9c75"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6b8bbdd425d0978311520ea99fb6c0e9e04e64aee84fac05f3157ace9f81b05"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71d33fd1c219b5b28ee98cd76da0c9398a4ed4792fd75c94135237db05ba5ca8"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62440431741d0b7d410e5cbad800885e3289048140a43390ecab4f0b96dde3bb"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4db97210433366dfba55590e48285b89ad0146c52bf248dd0da492dd9f0f72cf"}, + {file = "yarl-1.9.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:653597b615809f2e5f4dba6cd805608b6fd3597128361a22cc612cf7c7a4d1bf"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:df47612129e66f7ce7c9994d4cd4e6852f6e3bf97699375d86991481796eeec8"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5e338b6febbae6c9fe86924bac3ea9c1944e33255c249543cd82a4af6df6047b"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e649d37d04665dddb90994bbf0034331b6c14144cc6f3fbce400dc5f28dc05b7"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0a1b8fd849567be56342e988e72c9d28bd3c77b9296c38b9b42d2fe4813c9d3f"}, + {file = "yarl-1.9.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9d715b2175dff9a49c6dafdc2ab3f04850ba2f3d4a77f69a5a1786b057a9d45"}, + {file = "yarl-1.9.7-cp313-cp313-win32.whl", hash = "sha256:bc9233638b07c2e4a3a14bef70f53983389bffa9e8cb90a2da3f67ac9c5e1842"}, + {file = "yarl-1.9.7-cp313-cp313-win_amd64.whl", hash = "sha256:62e110772330d7116f91e79cd83fef92545cb2f36414c95881477aa01971f75f"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a564155cc2194ecd9c0d8f8dc57059b822a507de5f08120063675eb9540576aa"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03e917cc44a01e1be60a83ee1a17550b929490aaa5df2a109adc02137bddf06b"}, + {file = "yarl-1.9.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:eefda67ba0ba44ab781e34843c266a76f718772b348f7c5d798d8ea55b95517f"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:316c82b499b6df41444db5dea26ee23ece9356e38cea43a8b2af9e6d8a3558e4"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10452727843bc847596b75e30a7fe92d91829f60747301d1bd60363366776b0b"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:050f3e4d886be55728fef268587d061c5ce6f79a82baba71840801b63441c301"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0aabe557446aa615693a82b4d3803c102fd0e7a6a503bf93d744d182a510184"}, + {file = "yarl-1.9.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23404842228e6fa8ace235024519df37f3f8e173620407644d40ddca571ff0f4"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:34736fcc9d6d7080ebbeb0998ecb91e4f14ad8f18648cf0b3099e2420a225d86"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:48f7a158f3ca67509d21cb02a96964e4798b6f133691cc0c86cf36e26e26ec8f"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:6639444d161c693cdabb073baaed1945c717d3982ecedf23a219bc55a242e728"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:1cd450e10cb53d63962757c3f6f7870be49a3e448c46621d6bd46f8088d532de"}, + {file = "yarl-1.9.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74d3ef5e81f81507cea04bf5ae22f18ef538607a7c754aac2b6e3029956a2842"}, + {file = "yarl-1.9.7-cp38-cp38-win32.whl", hash = "sha256:4052dbd0c900bece330e3071c636f99dff06e4628461a29b38c6e222a427cf98"}, + {file = "yarl-1.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:dd08da4f2d171e19bd02083c921f1bef89f8f5f87000d0ffc49aa257bc5a9802"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ab906a956d2109c6ea11e24c66592b06336e2743509290117f0f7f47d2c1dd3"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d8ad761493d5aaa7ab2a09736e62b8a220cb0b10ff8ccf6968c861cd8718b915"}, + {file = "yarl-1.9.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d35f9cdab0ec5e20cf6d2bd46456cf599052cf49a1698ef06b9592238d1cf1b1"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a48d2b9f0ae29a456fb766ae461691378ecc6cf159dd9f938507d925607591c3"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf85599c9336b89b92c313519bcaa223d92fa5d98feb4935a47cce2e8722b4b8"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e8916b1ff7680b1f2b1608c82dc15c569b9f2cb2da100c747c291f1acf18a14"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29c80890e0a64fb0e5f71350d48da330995073881f8b8e623154aef631febfb0"}, + {file = "yarl-1.9.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9163d21aa40ff8528db2aee2b0b6752efe098055b41ab8e5422b2098457199fe"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:65e3098969baf221bb45e3b2f60735fc2b154fc95902131ebc604bae4c629ea6"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cddebd096effe4be90fd378e4224cd575ac99e1c521598a6900e94959006e02e"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8525f955a2dcc281573b6aadeb8ab9c37e2d3428b64ca6a2feec2a794a69c1da"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:5d585c7d834c13f24c7e3e0efaf1a4b7678866940802e11bd6c4d1f99c935e6b"}, + {file = "yarl-1.9.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:78805148e780a9ca66f3123e04741e344b66cf06b4fb13223e3a209f39a6da55"}, + {file = "yarl-1.9.7-cp39-cp39-win32.whl", hash = "sha256:3f53df493ec80b76969d6e1ae6e4411a55ab1360e02b80c84bd4b33d61a567ba"}, + {file = "yarl-1.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:c81c28221a85add23a0922a6aeb2cdda7f9723e03e2dfae06fee5c57fe684262"}, + {file = "yarl-1.9.7-py3-none-any.whl", hash = "sha256:49935cc51d272264358962d050d726c3e5603a616f53e52ea88e9df1728aa2ee"}, + {file = "yarl-1.9.7.tar.gz", hash = "sha256:f28e602edeeec01fc96daf7728e8052bc2e12a672e2a138561a1ebaf30fd9df7"}, ] [package.dependencies] diff --git a/pyproject.toml b/pyproject.toml index 535740c..d3b44fa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "ring-doorbell" -version = "0.9.2" +version = "0.9.3" description = "A Python library to communicate with Ring Door Bell (https://ring.com/)" authors = ["python-ring-doorbell developers"] license = "LGPL-3.0-or-later"