diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 94dcdb6d..3324b406 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 677e712b..176237cd 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 c0eb673c..9d31d9b0 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 a90feea4..6392580b 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 cde67550..2181b0a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,31 @@ # Changelog -## [0.9.2](https://github.com/tchellomello/python-ring-doorbell/tree/0.9.2) (2024-08-29) +## [0.9.3](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.9.3) (2024-09-02) -[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.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:** @@ -11,26 +34,26 @@ **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/tchellomello/python-ring-doorbell/tree/0.9.0) (2024-08-21) +## [0.9.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.9.0) (2024-08-21) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.12...0.9.0) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.12...0.9.0) **Release highlights:** @@ -45,48 +68,48 @@ Hotfix for missing typing_extensions dependency **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/tchellomello/python-ring-doorbell/tree/0.8.10) (2024-04-04) +## [0.8.10](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.10) (2024-04-04) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.9...0.8.10) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.9...0.8.10) **Release highlights:** @@ -94,35 +117,35 @@ Hotfix for missing typing_extensions dependency **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:** @@ -130,21 +153,21 @@ Hotfix for missing typing_extensions dependency **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/tchellomello/python-ring-doorbell/tree/0.8.6) (2024-01-25) +## [0.8.6](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.8.6) (2024-01-25) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.8.5...0.8.6) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.8.5...0.8.6) **Breaking change:** @@ -152,154 +175,154 @@ Hotfix for missing typing_extensions dependency **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/tchellomello/python-ring-doorbell/tree/0.6.0) (2020-01-14) +## [0.6.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.6.0) (2020-01-14) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.5.0...0.6.0) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.5.0...0.6.0) **Major breaking change:** @@ -323,11 +346,11 @@ Changes: **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:** @@ -335,15 +358,15 @@ The `Auth` class no longer takes an `otp_callback` but now takes an `otp_code`. **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/tchellomello/python-ring-doorbell/tree/0.4.0) (2020-01-11) +## [0.4.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.4.0) (2020-01-11) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.2.9...0.4.0) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.2.9...0.4.0) **Major breaking change:** @@ -357,179 +380,179 @@ 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/tchellomello/python-ring-doorbell/tree/0.1.0) (2017-02-25) +## [0.1.0](https://github.com/python-ring-doorbell/python-ring-doorbell/tree/0.1.0) (2017-02-25) -[Full Changelog](https://github.com/tchellomello/python-ring-doorbell/compare/0.0.4...0.1.0) +[Full Changelog](https://github.com/python-ring-doorbell/python-ring-doorbell/compare/0.0.4...0.1.0) **Breaking change:** @@ -537,39 +560,39 @@ 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 b0d39079..214326f8 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 36432ecc..ac3af282 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 @@ -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 `_. @@ -43,7 +42,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/poetry.lock b/poetry.lock index cb26c36d..3ef68bea 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] @@ -1995,4 +1997,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 11ce9dbd..d3b44fa1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,12 +1,12 @@ [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 = ["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" @@ -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 } diff --git a/ring_doorbell/doorbot.py b/ring_doorbell/doorbot.py index 35be0130..697cb7ce 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/ring_doorbell/ring.py b/ring_doorbell/ring.py index d69cb5be..ac614230 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 59684320..f9a2089d 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 00000000..41eac230 --- /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 00000000..d7a493e1 --- /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 00000000..428e889c --- /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 00000000..c9623c40 --- /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 f71d9b13..519170f8 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 31410713..d122c9d4 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 00000000..6205fa0d --- /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 00000000..276f4b3f --- /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 00000000..68f3f73f --- /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 00000000..d9843c36 --- /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 9fbf9da2..5cea0695 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 9630549c..394a2531 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 diff --git a/tests/test_ring.py b/tests/test_ring.py index 6ff48a33..26afaacc 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)