Compare commits

..
180 Commits
Author SHA1 Message Date
Kevin FronczakandGitHub 1ced64de65 Merge pull request #434 from fronzbot/dev
0.17.0
2021-02-15 10:30:52 -05:00
Kevin Fronczak b41460c569 Add 0.17.0 changes 2021-02-15 10:27:32 -05:00
Kevin Fronczak 9ff02de48b Version bump 2021-02-15 10:16:59 -05:00
Kevin FronczakandGitHub 14cbbacc1b Merge pull request #433 from fronzbot/dependabot/pip/pygments-2.8.0
Bump pygments from 2.7.4 to 2.8.0
2021-02-15 10:14:35 -05:00
dependabot-preview[bot]andGitHub 1cadf3488d Bump pygments from 2.7.4 to 2.8.0
Bumps [pygments](https://github.com/pygments/pygments) from 2.7.4 to 2.8.0.
- [Release notes](https://github.com/pygments/pygments/releases)
- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)
- [Commits](https://github.com/pygments/pygments/compare/2.7.4...2.8.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-15 06:09:58 +00:00
Kevin FronczakandGitHub c78f411014 Merge pull request #432 from fronzbot/add-reauth-back
Add reauth param back into login
2021-02-13 11:38:27 -05:00
Kevin Fronczak ab2db14bc8 Add reauth param back into login...may stop emails
- Also added a debug script because I'm tired of typing the same
  commands over and over again when debugging
2021-02-13 11:33:05 -05:00
Kevin FronczakandGitHub 36ff8e4917 Merge pull request #431 from fronzbot/0.17.0rc0
v0.17.0rc0
2021-02-11 23:55:59 -05:00
Kevin Fronczak f42c49d221 RC Version bump 2021-02-11 23:49:11 -05:00
Kevin FronczakandGitHub 114f8fbfa8 Merge pull request #430 from fronzbot/add-clip-record-function
Add camera record function
2021-02-11 23:46:33 -05:00
Kevin FronczakandGitHub 8bbf03fdb4 Merge pull request #429 from fronzbot/add-logout-endpoint
Add logout endpoint
2021-02-11 23:44:49 -05:00
Kevin Fronczak 5b57982b41 Add record function for camera 2021-02-11 23:41:16 -05:00
Kevin Fronczak ecf7a5b13a Add logout endpoint (among some linting improvements) 2021-02-11 23:34:59 -05:00
Kevin FronczakandGitHub f68951fab7 Merge pull request #428 from fronzbot/update-login
Upgrade login, UUID
2021-02-11 22:42:12 -05:00
Kevin Fronczak 23eec5187d Add gen_uid test 2021-02-11 22:32:15 -05:00
Kevin Fronczak caa3e10648 Fixed errant comment 2021-02-11 22:22:05 -05:00
Kevin FronczakandGitHub 4bc0b80eea Merge pull request #427 from fronzbot/dependabot/pip/pre-commit-2.10.1
Bump pre-commit from 2.9.3 to 2.10.1
2021-02-11 22:17:17 -05:00
Kevin Fronczak 959a7dfa85 Modify uid to prefix with BlinkCamera 2021-02-11 11:55:27 -05:00
Kevin Fronczak 9e793b6748 Upgraded login endpoint, fixed uid generation 2021-02-11 11:21:26 -05:00
dependabot-preview[bot]andGitHub c75e057e83 Bump pre-commit from 2.9.3 to 2.10.1
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.9.3 to 2.10.1.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.9.3...v2.10.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-02-08 06:29:34 +00:00
Kevin FronczakandGitHub 6fa4aa6f75 Merge pull request #425 from fronzbot/0.16.5.rc0
0.16.5.rc0
2021-02-05 10:24:00 -05:00
Kevin FronczakandGitHub 89da167404 Update constants.py 2021-02-05 10:22:04 -05:00
Kevin FronczakandGitHub f2520e35fe Merge pull request #424 from fronzbot/fix-vid-download
Add content type to header to fix downloading
2021-02-05 10:21:10 -05:00
Kevin Fronczak aaaaea4dd1 Fix header test 2021-02-05 15:18:09 +00:00
Kevin Fronczak ec67d97809 Add content type to header to fix downloading 2021-02-05 15:11:03 +00:00
Kevin FronczakandGitHub f6118ea4a7 Merge pull request #420 from fronzbot/dependabot/pip/coverage-5.4
Bump coverage from 5.3.1 to 5.4
2021-01-27 07:37:23 -05:00
dependabot-preview[bot]andGitHub d257f676ec Bump coverage from 5.3.1 to 5.4
Bumps [coverage](https://github.com/nedbat/coveragepy) from 5.3.1 to 5.4.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/coverage-5.3.1...coverage-5.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-27 06:09:36 +00:00
Kevin FronczakandGitHub 58f4a9df57 Merge pull request #419 from fronzbot/dependabot/pip/pytest-6.2.2
Bump pytest from 6.2.1 to 6.2.2
2021-01-26 08:10:02 -05:00
dependabot-preview[bot]andGitHub 9d91ce62d3 Bump pytest from 6.2.1 to 6.2.2
Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.2.1 to 6.2.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/6.2.1...6.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-26 06:06:01 +00:00
Kevin FronczakandGitHub 511ca99cba Merge pull request #416 from fronzbot/dependabot/pip/pytest-cov-2.11.1
Bump pytest-cov from 2.11.0 to 2.11.1
2021-01-21 09:04:52 -05:00
dependabot-preview[bot]andGitHub 465701810b Bump pytest-cov from 2.11.0 to 2.11.1
Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 2.11.0 to 2.11.1.
- [Release notes](https://github.com/pytest-dev/pytest-cov/releases)
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v2.11.0...v2.11.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-21 06:06:32 +00:00
Kevin FronczakandGitHub c8c0ed58df Merge pull request #415 from fronzbot/dependabot/pip/pytest-cov-2.11.0
Bump pytest-cov from 2.10.1 to 2.11.0
2021-01-19 07:30:16 -05:00
dependabot-preview[bot]andGitHub cfe3c10cec Bump pytest-cov from 2.10.1 to 2.11.0
Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 2.10.1 to 2.11.0.
- [Release notes](https://github.com/pytest-dev/pytest-cov/releases)
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v2.10.1...v2.11.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-19 06:06:21 +00:00
Kevin FronczakandGitHub 014509bd64 Merge pull request #414 from fronzbot/dependabot/pip/pygments-2.7.4
Bump pygments from 2.7.3 to 2.7.4
2021-01-13 07:53:07 -05:00
dependabot-preview[bot]andGitHub f5d5d34eda Bump pygments from 2.7.3 to 2.7.4
Bumps [pygments](https://github.com/pygments/pygments) from 2.7.3 to 2.7.4.
- [Release notes](https://github.com/pygments/pygments/releases)
- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)
- [Commits](https://github.com/pygments/pygments/compare/2.7.3...2.7.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-13 06:12:31 +00:00
Kevin FronczakandGitHub 64c8bec614 Merge pull request #405 from fronzbot/dependabot/pip/restructuredtext-lint-1.3.2
Bump restructuredtext-lint from 1.3.1 to 1.3.2
2021-01-05 09:43:00 -05:00
Kevin FronczakandGitHub 1b765035de Merge pull request #408 from fronzbot/dependabot/pip/pre-commit-2.9.3
Bump pre-commit from 2.7.1 to 2.9.3
2021-01-05 09:42:48 -05:00
dependabot-preview[bot]andGitHub 93f46bde6a Bump restructuredtext-lint from 1.3.1 to 1.3.2
Bumps [restructuredtext-lint](https://github.com/twolfson/restructuredtext-lint) from 1.3.1 to 1.3.2.
- [Release notes](https://github.com/twolfson/restructuredtext-lint/releases)
- [Changelog](https://github.com/twolfson/restructuredtext-lint/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/twolfson/restructuredtext-lint/compare/1.3.1...1.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-05 14:37:34 +00:00
dependabot-preview[bot]andGitHub 4a09fcf06f Bump pre-commit from 2.7.1 to 2.9.3
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.7.1 to 2.9.3.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.7.1...v2.9.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-05 14:36:38 +00:00
Kevin FronczakandGitHub 12a2ae1326 Merge pull request #407 from fronzbot/dependabot/pip/pygments-2.7.3
Bump pygments from 2.7.1 to 2.7.3
2021-01-05 09:36:22 -05:00
Kevin FronczakandGitHub 325241d56a Merge pull request #411 from fronzbot/dependabot/pip/coverage-5.3.1
Bump coverage from 5.3 to 5.3.1
2021-01-05 09:36:04 -05:00
Kevin FronczakandGitHub 95664fea1f Merge pull request #410 from fronzbot/dependabot/pip/pytest-6.2.1
Bump pytest from 6.1.1 to 6.2.1
2021-01-05 09:35:22 -05:00
dependabot-preview[bot]andGitHub e2b43f4b06 Bump pytest from 6.1.1 to 6.2.1
Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.1.1 to 6.2.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/6.1.1...6.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-05 14:29:23 +00:00
Kevin FronczakandGitHub 845c8a2a40 Merge pull request #413 from fronzbot/add-py39
Add py39
2021-01-05 09:27:31 -05:00
Kevin FronczakandGitHub 306f8b6cb4 Update tests.yml 2021-01-05 09:24:04 -05:00
Kevin FronczakandGitHub a704933a35 Update publish.yml 2021-01-05 09:23:29 -05:00
Kevin FronczakandGitHub 8bd09c3726 Delete .gitlab-ci.yml 2021-01-05 09:22:04 -05:00
Kevin FronczakandGitHub 6240364067 Update constants.py 2021-01-05 09:21:36 -05:00
Kevin FronczakandGitHub 9d37cfccd0 Update stale.yml 2021-01-05 09:12:56 -05:00
dependabot-preview[bot]andGitHub 125efd9436 Bump coverage from 5.3 to 5.3.1
Bumps [coverage](https://github.com/nedbat/coveragepy) from 5.3 to 5.3.1.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/coverage-5.3...coverage-5.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-21 06:32:59 +00:00
dependabot-preview[bot]andGitHub 6701fd39d8 Bump pygments from 2.7.1 to 2.7.3
Bumps [pygments](https://github.com/pygments/pygments) from 2.7.1 to 2.7.3.
- [Release notes](https://github.com/pygments/pygments/releases)
- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)
- [Commits](https://github.com/pygments/pygments/compare/2.7.1...2.7.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-07 06:18:02 +00:00
Kevin Fronczak d4edf96f83 Dev version bump 2020-11-23 04:34:49 +00:00
Kevin FronczakandGitHub 37350da1b2 Merge pull request #402 from fronzbot/dev
0.16.4
2020-11-22 23:33:15 -05:00
Kevin FronczakandGitHub a2555a6c40 Update for 0.16.4 2020-11-22 23:31:13 -05:00
Kevin Fronczak c01a6ce16b dev version bump 2020-11-23 04:25:16 +00:00
Kevin Fronczak ab38afa105 dev version bump 2020-11-23 04:06:19 +00:00
Kevin FronczakandGitHub ba3c2e3489 Merge pull request #401 from fronzbot/fix-exception-on-refresh
Added test to catch NoneType error on refresh, fixed offending code
2020-11-22 23:04:31 -05:00
Kevin Fronczak 92a2cc2d9a Added test to catch NoneType error on refresh, fixed offending code 2020-11-23 03:30:15 +00:00
Kevin FronczakandGitHub 0842739197 Merge pull request #395 from fronzbot/fix-stream-format
Fix malformatted stream url for blink mini
2020-10-25 10:09:28 -04:00
Kevin Fronczak f09a66c083 Fix malformatted stream url for blink mini 2020-10-25 14:01:03 +00:00
Kevin FronczakandGitHub 88984365fe Update constants.py 2020-10-06 09:31:45 -04:00
Kevin FronczakandGitHub 469b0c257e Merge pull request #389 from fronzbot/fix-liveview-endpoint
Updated liveview endpoint
2020-10-06 09:29:17 -04:00
Kevin FronczakandGitHub a94f59eb53 Merge pull request #388 from fronzbot/fix-mini-thumb-refresh
Generalized image/video download, fixed non-updating image for minis
2020-10-06 09:23:55 -04:00
Kevin Fronczak eb1fbe90d1 Updated liveview endpoint 2020-10-06 13:20:56 +00:00
Kevin Fronczak b5b7498041 Generalized image/video download, fixed non-updating image for minis 2020-10-06 13:16:05 +00:00
Kevin FronczakandGitHub 828b41197b Merge pull request #387 from fronzbot/move-testtools
Move testtools to requirements_test.txt
2020-10-05 16:33:14 -04:00
Kevin Fronczak b0fed670b9 Move testtools to requirements_test.txt 2020-10-05 20:29:13 +00:00
Kevin FronczakandGitHub f13d177615 Merge pull request #371 from fronzbot/dependabot/pip/pre-commit-2.7.1
Bump pre-commit from 2.6.0 to 2.7.1
2020-10-05 09:53:56 -04:00
Kevin FronczakandGitHub fcce28c9c4 Merge pull request #385 from fronzbot/dependabot/pip/pytest-6.1.1
Bump pytest from 6.0.1 to 6.1.1
2020-10-05 09:53:44 -04:00
Kevin FronczakandGitHub e8e9d4e3cd Update .pre-commit-config.yaml 2020-10-05 09:49:16 -04:00
dependabot-preview[bot]andGitHub 59ef398452 Bump pytest from 6.0.1 to 6.1.1
Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.0.1 to 6.1.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/6.0.1...6.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-05 13:49:12 +00:00
Kevin FronczakandGitHub 80e39845ce Merge pull request #375 from fronzbot/dependabot/pip/pydocstyle-5.1.1
Bump pydocstyle from 5.0.2 to 5.1.1
2020-10-05 09:47:58 -04:00
Kevin FronczakandGitHub cbab673084 Merge pull request #384 from fronzbot/dependabot/pip/flake8-3.8.4
Bump flake8 from 3.8.3 to 3.8.4
2020-10-05 09:47:44 -04:00
Kevin FronczakandGitHub f27df12e64 Merge pull request #379 from fronzbot/dependabot/pip/pygments-2.7.1
Bump pygments from 2.6.1 to 2.7.1
2020-10-05 09:46:08 -04:00
dependabot-preview[bot]andGitHub bdcb3f6203 Bump pydocstyle from 5.0.2 to 5.1.1
Bumps [pydocstyle](https://github.com/PyCQA/pydocstyle) from 5.0.2 to 5.1.1.
- [Release notes](https://github.com/PyCQA/pydocstyle/releases)
- [Changelog](https://github.com/PyCQA/pydocstyle/blob/master/docs/release_notes.rst)
- [Commits](https://github.com/PyCQA/pydocstyle/compare/5.0.2...5.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-05 13:44:53 +00:00
dependabot-preview[bot]andGitHub f619b20e2a Bump flake8 from 3.8.3 to 3.8.4
Bumps [flake8](https://gitlab.com/pycqa/flake8) from 3.8.3 to 3.8.4.
- [Release notes](https://gitlab.com/pycqa/flake8/tags)
- [Commits](https://gitlab.com/pycqa/flake8/compare/3.8.3...3.8.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-05 13:44:52 +00:00
Kevin FronczakandGitHub 69aaee3fc4 Merge branch 'dev' into dependabot/pip/pre-commit-2.7.1 2020-10-05 09:44:28 -04:00
Kevin FronczakandGitHub 7140895c58 Merge pull request #370 from fronzbot/dependabot/pip/pylint-2.6.0
Bump pylint from 2.5.3 to 2.6.0
2020-10-05 09:43:33 -04:00
Kevin FronczakandGitHub 190cef875e Attempt to fix coverage 2020-10-05 09:38:15 -04:00
dependabot-preview[bot]andGitHub 7aef8570a5 Bump pylint from 2.5.3 to 2.6.0
Bumps [pylint](https://github.com/PyCQA/pylint) from 2.5.3 to 2.6.0.
- [Release notes](https://github.com/PyCQA/pylint/releases)
- [Changelog](https://github.com/PyCQA/pylint/blob/master/ChangeLog)
- [Commits](https://github.com/PyCQA/pylint/compare/pylint-2.5.3...pylint-2.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-10-05 13:24:47 +00:00
Kevin FronczakandGitHub 721a3ad8f2 Merge pull request #386 from fronzbot/add-codecov-token
Add codecov token to workflow to fix upload issue
2020-10-05 09:21:31 -04:00
Kevin FronczakandGitHub 1b1c30bff0 Add codecov token to workflow to fix upload issue 2020-10-05 09:08:15 -04:00
dependabot-preview[bot]andGitHub 8c23087f89 Bump pre-commit from 2.6.0 to 2.7.1
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.6.0 to 2.7.1.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.6.0...v2.7.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-28 15:10:49 +00:00
Kevin FronczakandGitHub dae2413ed1 Merge pull request #381 from rohitsud/patch-1
Fix readme param and spelling
2020-09-28 11:10:32 -04:00
Kevin FronczakandGitHub cd9792193f Merge pull request #377 from fronzbot/dependabot/pip/coverage-5.3
Bump coverage from 5.2.1 to 5.3
2020-09-28 11:09:35 -04:00
Kevin FronczakandGitHub 75dbd1e498 Merge pull request #368 from fronzbot/dependabot/pip/pytest-cov-2.10.1
Bump pytest-cov from 2.10.0 to 2.10.1
2020-09-27 21:59:53 -04:00
rohitsudandGitHub a374009835 Fix readme param and spelling 2020-09-27 13:06:24 -07:00
dependabot-preview[bot]andGitHub 9a9501635f Bump pygments from 2.6.1 to 2.7.1
Bumps [pygments](https://github.com/pygments/pygments) from 2.6.1 to 2.7.1.
- [Release notes](https://github.com/pygments/pygments/releases)
- [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES)
- [Commits](https://github.com/pygments/pygments/compare/2.6.1...2.7.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-18 06:32:37 +00:00
dependabot-preview[bot]andGitHub e00600c955 Bump coverage from 5.2.1 to 5.3
Bumps [coverage](https://github.com/nedbat/coveragepy) from 5.2.1 to 5.3.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/coverage-5.2.1...coverage-5.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-09-14 06:38:09 +00:00
dependabot-preview[bot]andGitHub 141fea542c Bump pytest-cov from 2.10.0 to 2.10.1
Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 2.10.0 to 2.10.1.
- [Release notes](https://github.com/pytest-dev/pytest-cov/releases)
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v2.10.0...v2.10.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-17 08:14:22 +00:00
Kevin Fronczak ed4450778d Dev bump 2020-08-02 03:35:42 +00:00
Kevin FronczakandGitHub 19b7eef123 Merge pull request #363 from fronzbot/dev
0.16.3
2020-08-01 23:33:38 -04:00
Kevin FronczakandGitHub 41d59b1df0 Merge pull request #362 from fronzbot/update-changelog
Update changelog for 0.16.3
2020-08-01 23:29:04 -04:00
Kevin FronczakandGitHub fd104c09da Merge pull request #361 from fronzbot/add-user-agent-everywhere
Add user agent to all headers
2020-08-01 23:28:54 -04:00
Kevin Fronczak 6dbed91426 Update changelog for 0.16.3 2020-08-02 03:24:38 +00:00
Kevin Fronczak cb43f17d75 Add user agent to all headers 2020-08-02 03:22:49 +00:00
Kevin FronczakandGitHub 5ebf278ad3 Merge pull request #360 from fronzbot/dev-bump
Dev version bump
2020-08-01 23:13:46 -04:00
Kevin FronczakandGitHub 6bd8d14190 Merge pull request #359 from fronzbot/dev
0.16.2
2020-08-01 23:12:25 -04:00
Kevin Fronczak 7f782533b8 Dev version bump 2020-08-02 03:09:22 +00:00
Kevin FronczakandGitHub 1790c1beae Merge pull request #358 from fronzbot/bugfix-version-bump
Version bump
2020-08-01 23:07:58 -04:00
Kevin Fronczak 09e1c382d3 Version bump 2020-08-02 03:04:09 +00:00
Kevin FronczakandGitHub ceb2270ee5 Merge pull request #357 from fronzbot/simplify-login
Updated headers to include user-agent, removed extra data at login
2020-08-01 23:01:34 -04:00
Kevin Fronczak 986a3c81f3 Updated headers to include user-agent, removed extra data at login 2020-08-02 02:57:26 +00:00
Kevin FronczakandGitHub 11d6bbb916 Merge pull request #354 from fronzbot/dev-rc-bump
Dev rc bump
2020-07-31 22:15:13 -04:00
Kevin FronczakandGitHub b02f6318a7 Merge pull request #353 from fronzbot/update-app-version
Update app version and set reauth to True...should fix login problems
2020-07-31 22:15:02 -04:00
Kevin FronczakandGitHub c1435e74e8 Merge pull request #352 from fronzbot/dependabot/pip/pytest-6.0.1
Bump pytest from 6.0.0 to 6.0.1
2020-07-31 22:13:28 -04:00
Kevin Fronczak b30da661e5 Dev rc bump 2020-08-01 02:12:42 +00:00
Kevin Fronczak 3a22dddc82 Update app version and set reauth to True...should fix login problems 2020-08-01 02:10:25 +00:00
dependabot-preview[bot]andGitHub a19a17d4dc Bump pytest from 6.0.0 to 6.0.1
Bumps [pytest](https://github.com/pytest-dev/pytest) from 6.0.0 to 6.0.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/6.0.0...6.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-31 08:16:15 +00:00
Kevin FronczakandGitHub bff6ef92ce Merge pull request #350 from fronzbot/dev-version-bump
Dev bump
2020-07-29 11:38:18 -04:00
Kevin FronczakandGitHub f6ddfbe5cf Merge pull request #349 from fronzbot/dev
0.16.1
2020-07-29 11:32:04 -04:00
Kevin Fronczak 263572eb66 Dev bump 2020-07-29 15:28:13 +00:00
Kevin FronczakandGitHub 3a97a928de Merge pull request #348 from fronzbot/0.16.1-changelog
Updated versions and changelog for 0.16.1
2020-07-29 11:27:26 -04:00
Kevin Fronczak 0322414de1 Updated versions and changelog for 0.16.1 2020-07-29 15:23:59 +00:00
Kevin FronczakandGitHub 1c75e86863 Merge pull request #347 from fronzbot/unpin-reqs
Set min version for reqs instead of pinning
2020-07-29 11:23:11 -04:00
Kevin FronczakandGitHub 0ae71f6367 Merge pull request #345 from fronzbot/dependabot/pip/pytest-6.0.0
Bump pytest from 5.4.3 to 6.0.0
2020-07-29 11:19:38 -04:00
Kevin FronczakandGitHub af7c38695a Merge pull request #344 from fronzbot/dependabot/pip/coverage-5.2.1
Bump coverage from 5.2 to 5.2.1
2020-07-29 11:19:21 -04:00
Kevin Fronczak c741c22876 Set min version for reqs instead of pinning 2020-07-29 15:15:19 +00:00
dependabot-preview[bot]andGitHub 06b9b12eeb Bump pytest from 5.4.3 to 6.0.0
Bumps [pytest](https://github.com/pytest-dev/pytest) from 5.4.3 to 6.0.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/5.4.3...6.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-29 08:05:56 +00:00
dependabot-preview[bot]andGitHub daf7078f98 Bump coverage from 5.2 to 5.2.1
Bumps [coverage](https://github.com/nedbat/coveragepy) from 5.2 to 5.2.1.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/coverage-5.2...coverage-5.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-27 08:17:40 +00:00
Kevin FronczakandGitHub c2db57ecb3 Merge pull request #341 from fronzbot/dev-bump
Dev version bump
2020-07-20 23:01:51 -04:00
Kevin FronczakandGitHub 1b66eddfb4 Merge pull request #340 from fronzbot/dev
0.16.0
2020-07-20 23:01:30 -04:00
Kevin Fronczak 0336c6a8f8 Dev version bump 2020-07-20 02:24:28 +00:00
Kevin Fronczak 22d3fa9565 Merge remote-tracking branch 'origin/master' into dev 2020-07-20 02:19:27 +00:00
Kevin FronczakandGitHub 9d81973b3a Merge pull request #339 from fronzbot/retry-options
Retry options
2020-07-19 21:47:40 -04:00
Kevin Fronczak fe8eac3dc6 Update documentation 2020-07-20 01:42:07 +00:00
Kevin Fronczak 5fc315201a Add tests for retry options 2020-07-20 01:33:11 +00:00
Kevin Fronczak a9d3d5568b Adding retry options to auth class 2020-07-20 01:25:09 +00:00
Kevin FronczakandGitHub f88dbdaeba Merge pull request #338 from fronzbot/fix-auth-tests
Fix broken test and missing try/except
2020-07-19 21:24:50 -04:00
Kevin Fronczak 48028914de Fix broken test and missing try/except 2020-07-20 01:18:41 +00:00
Kevin FronczakandGitHub fcdb70d246 Merge pull request #337 from fronzbot/remove-exec-info
Removed all exc_info parameters during logging
2020-07-19 20:51:38 -04:00
Kevin Fronczak e8589bfa05 Fix test 2020-07-20 00:48:40 +00:00
Kevin Fronczak 854ffbf26a Removed all exc_info parameters during logging 2020-07-20 00:37:30 +00:00
Kevin FronczakandGitHub ca109f703c Merge pull request #336 from fronzbot/dev-bump
Dev version bump
2020-07-19 20:37:22 -04:00
Kevin Fronczak 82d5a7ea51 Dev version bump 2020-07-20 00:34:06 +00:00
Kevin FronczakandGitHub 79ead7b826 Merge pull request #333 from fronzbot/dependabot/pip/pytest-timeout-1.4.2
Bump pytest-timeout from 1.4.1 to 1.4.2
2020-07-16 13:03:03 -04:00
dependabot-preview[bot]andGitHub 6e360b2bb1 Bump pytest-timeout from 1.4.1 to 1.4.2
Bumps [pytest-timeout](https://github.com/pytest-dev/pytest-timeout) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/pytest-dev/pytest-timeout/releases)
- [Commits](https://github.com/pytest-dev/pytest-timeout/compare/1.4.1...1.4.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-16 08:06:30 +00:00
Kevin FronczakandGitHub 1aaa5b649f Merge pull request #331 from fronzbot/remove-host
Remove host from auth header
2020-07-11 11:24:47 -04:00
Kevin FronczakandGitHub 435f3b9831 Update CHANGES.rst 2020-07-11 10:44:37 -04:00
Kevin FronczakandGitHub bcf0bb5525 Merge pull request #330 from fronzbot/bugfix
Bugfix: remove Host from auth header
2020-07-11 10:42:44 -04:00
Kevin Fronczak 322aae37dc fix test (remove host) 2020-07-11 14:41:44 +00:00
Kevin Fronczak 45cb4028b8 Remove host from auth header 2020-07-11 14:39:45 +00:00
Kevin Fronczak 151d9b7375 Version bump 2020-07-11 14:37:04 +00:00
Kevin Fronczak d393c861d7 bugfix: remove host from auth header 2020-07-11 14:36:37 +00:00
Kevin Fronczak 02c4b2e7e1 Add rst linter to pre-commit and fix flake8 2020-07-11 14:36:06 +00:00
Kevin FronczakandGitHub 77959d6d94 Merge pull request #327 from fronzbot/dependabot/pip/pytest-sugar-0.9.4
Bump pytest-sugar from 0.9.3 to 0.9.4
2020-07-08 22:47:46 -04:00
Kevin FronczakandGitHub ad832c4d2d Merge pull request #326 from fronzbot/dependabot/pip/coverage-5.2
Bump coverage from 5.1 to 5.2
2020-07-08 22:46:54 -04:00
Kevin FronczakandGitHub 0ce2aec139 Merge pull request #328 from fronzbot/remove-unbound-ref
Remove reference to response on exception since it may be unbound
2020-07-08 22:46:29 -04:00
Kevin Fronczak d3761b23ec Remove reference to response on exception since it may be unbound 2020-07-08 17:57:56 +00:00
dependabot-preview[bot]andGitHub cdbd1a4c27 Bump pytest-sugar from 0.9.3 to 0.9.4
Bumps [pytest-sugar](https://github.com/Teemu/pytest-sugar) from 0.9.3 to 0.9.4.
- [Release notes](https://github.com/Teemu/pytest-sugar/releases)
- [Changelog](https://github.com/Teemu/pytest-sugar/blob/master/CHANGES.rst)
- [Commits](https://github.com/Teemu/pytest-sugar/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 08:16:07 +00:00
dependabot-preview[bot]andGitHub 2d2e569595 Bump coverage from 5.1 to 5.2
Bumps [coverage](https://github.com/nedbat/coveragepy) from 5.1 to 5.2.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/coverage-5.1...coverage-5.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-07 08:15:43 +00:00
Kevin FronczakandGitHub 391373b304 Merge pull request #324 from fronzbot/http-adapter
Modify session to use HTTPAdapter and handle retries
2020-07-02 14:34:45 -04:00
Kevin Fronczak a030f46b4d Modify session to use HTTPAdapter and handle retries 2020-07-02 18:15:29 +00:00
Kevin FronczakandGitHub f6dc22f241 Merge pull request #323 from fronzbot/image-and-video-timeout
Add different timeout for video and image retrieval
2020-07-02 11:40:31 -04:00
Kevin Fronczak 220638e525 Add different timeout for video and image retrieval 2020-07-02 14:50:38 +00:00
Kevin FronczakandGitHub 24b1aac1be Merge pull request #322 from fronzbot/dependabot/pip/pre-commit-2.6.0
Bump pre-commit from 2.5.1 to 2.6.0
2020-07-02 08:46:50 -04:00
dependabot-preview[bot]andGitHub c4608f4258 Bump pre-commit from 2.5.1 to 2.6.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 2.5.1 to 2.6.0.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v2.5.1...v2.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-02 08:15:35 +00:00
Kevin FronczakandGitHub ca19ea62a4 Merge pull request #321 from fronzbot/dependabot/pip/python-slugify-approx-eq-4.0.1
Update python-slugify requirement from ~=4.0.0 to ~=4.0.1
2020-06-30 12:47:24 -04:00
Kevin FronczakandGitHub 2d8f4d8289 Merge pull request #320 from fronzbot/roll-back
Rolled back to rc8, removed v3 auth functionality (poorly thought out)
2020-06-30 12:46:57 -04:00
Kevin Fronczak 24ca9d9617 Fixed request version, improved setup.py requirement import 2020-06-30 16:40:19 +00:00
dependabot-preview[bot]andGitHub 41aa1839b7 Update python-slugify requirement from ~=4.0.0 to ~=4.0.1
Updates the requirements on [python-slugify](https://github.com/un33k/python-slugify) to permit the latest version.
- [Release notes](https://github.com/un33k/python-slugify/releases)
- [Changelog](https://github.com/un33k/python-slugify/blob/master/CHANGELOG.md)
- [Commits](https://github.com/un33k/python-slugify/compare/4.0.0...4.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-30 07:53:51 +00:00
Kevin Fronczak 40354e87a0 Rolled back to rc8, removed v3 auth functionality (poorly thought out) 2020-06-29 17:23:15 +00:00
Kevin FronczakandGitHub 0fc74c3f82 Merge pull request #319 from fronzbot/login-fix
Changed the way the new login method switch is handled
2020-06-29 13:06:01 -04:00
Kevin Fronczak 7b150eb1af Changed the way the new login method switch is handled 2020-06-29 17:01:46 +00:00
Kevin FronczakandGitHub f8db8eb3b6 Merge pull request #318 from fronzbot/login-switch
Add option to use v3 login endpoint
2020-06-29 12:49:56 -04:00
Kevin FronczakandGitHub a34b6dec67 Merge pull request #315 from fronzbot/dependabot/pip/requests-approx-eq-2.24.0
Update requests requirement from ~=2.23.0 to ~=2.24.0
2020-06-29 11:54:10 -04:00
Kevin Fronczak bded3eb156 Add option to use v3 login endpoint 2020-06-29 15:46:43 +00:00
dependabot-preview[bot]andGitHub 9ca73934ce Update requests requirement from ~=2.23.0 to ~=2.24.0
Updates the requirements on [requests](https://github.com/psf/requests) to permit the latest version.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/master/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.23.0...v2.24.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-18 08:04:10 +00:00
Kevin FronczakandGitHub e02b429523 Merge pull request #314 from fronzbot/fix-return-error
Fix error with updating owl information during refresh
2020-06-16 14:46:40 -04:00
Kevin Fronczak 22e4b7dabe Fix error with updating owl information during refresh 2020-06-16 18:42:59 +00:00
Kevin FronczakandGitHub 130b5acf84 Merge pull request #312 from fronzbot/dependabot/pip/pytest-timeout-1.4.1
Bump pytest-timeout from 1.4.0 to 1.4.1
2020-06-16 13:54:52 -04:00
Kevin FronczakandGitHub d0fa303c88 Merge pull request #313 from fronzbot/improve-mini-extraction
Broke out homescreen call to prevent back-to-back api calls
2020-06-16 13:54:37 -04:00
Kevin Fronczak dff0746450 Broke out homescreen call to prevent back-to-back api calls 2020-06-16 17:43:22 +00:00
dependabot-preview[bot]andGitHub 815dfd9a8e Bump pytest-timeout from 1.4.0 to 1.4.1
Bumps [pytest-timeout](https://github.com/pytest-dev/pytest-timeout) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/pytest-dev/pytest-timeout/releases)
- [Commits](https://github.com/pytest-dev/pytest-timeout/compare/1.4.0...1.4.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-16 07:58:09 +00:00
Kevin FronczakandGitHub b0ea0566a5 Merge pull request #310 from fronzbot/dependabot/pip/pytest-cov-2.10.0
Bump pytest-cov from 2.9.0 to 2.10.0
2020-06-15 10:57:19 -04:00
dependabot-preview[bot]andGitHub 0167900415 Bump pytest-cov from 2.9.0 to 2.10.0
Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 2.9.0 to 2.10.0.
- [Release notes](https://github.com/pytest-dev/pytest-cov/releases)
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v2.9.0...v2.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-15 14:34:40 +00:00
Kevin FronczakandGitHub 9279ba2aa9 Merge pull request #311 from fronzbot/dependabot/pip/pytest-timeout-1.4.0
Bump pytest-timeout from 1.3.4 to 1.4.0
2020-06-15 10:33:14 -04:00
dependabot-preview[bot]andGitHub 2abfc3e843 Bump pytest-timeout from 1.3.4 to 1.4.0
Bumps [pytest-timeout](https://github.com/pytest-dev/pytest-timeout) from 1.3.4 to 1.4.0.
- [Release notes](https://github.com/pytest-dev/pytest-timeout/releases)
- [Commits](https://github.com/pytest-dev/pytest-timeout/compare/1.3.4...1.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-06-15 08:34:05 +00:00
Kevin FronczakandGitHub 4ff83585b4 Merge pull request #309 from fronzbot/dev-bump
dev bump
2020-06-14 10:51:47 -04:00
Kevin FronczakandGitHub 3cf2b5e093 dev bump 2020-06-14 10:49:17 -04:00
29 changed files with 517 additions and 190 deletions
+3 -2
View File
@@ -1,5 +1,5 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
daysUntilStale: 30
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
@@ -8,7 +8,8 @@ daysUntilClose: 7
exemptLabels:
- Priority
- bug
- Help Wanted
- help wanted
- feature request
# Set to true to ignore issues in a project (defaults to false)
exemptProjects: true
+2 -1
View File
@@ -33,8 +33,9 @@ jobs:
run: |
tox -r -e cov
- name: Codecov
uses: codecov/codecov-action@v1.0.6
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: unittests
file: ./coverage.xml
name: blinkpy
+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.8]
python-version: [3.9]
steps:
- uses: actions/checkout@v2
+1 -1
View File
@@ -17,7 +17,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v1
with:
python-version: '3.7'
python-version: '3.8'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
+2 -2
View File
@@ -10,11 +10,11 @@ jobs:
build:
runs-on: ${{ matrix.platform }}
strategy:
max-parallel: 3
max-parallel: 4
matrix:
platform:
- ubuntu-latest
python-version: [3.6, 3.7, 3.8]
python-version: [3.6, 3.7, 3.8, 3.9]
steps:
- uses: actions/checkout@v2
+1
View File
@@ -14,3 +14,4 @@ build/*
docs/_build
*.log
venv
.session*
-25
View File
@@ -1,25 +0,0 @@
image: python
stages:
- test
before_script:
- curl -O https://bootstrap.pypa.io/get-pip.py
- python get-pip.py
- pip install tox
python35:
image: python:3.5
stage: test
script: tox -e py35
python36:
image: python:3.6
stage: test
script: tox -e py36
lint:
image: python:3.6
stage: test
script: tox -e lint
+2 -2
View File
@@ -8,12 +8,12 @@ repos:
- --quiet
files: ^((blinkpy|tests)/.+)?[^/]+\.py$
- repo: https://gitlab.com/pycqa/flake8
rev: 3.8.2
rev: 3.8.3
hooks:
- id: flake8
additional_dependencies:
- flake8-docstrings==1.5.0
- pydocstyle==5.0.2
- pydocstyle==5.1.1
files: ^(blinkpy|tests)/.+\.py$
- repo: https://github.com/Lucas-C/pre-commit-hooks-markup
rev: v1.0.0
+98
View File
@@ -4,6 +4,104 @@ Changelog
A list of changes between each release
0.17.0 (2021-02-15)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Bugfixes:**
- Fix video downloading bug (`#424 <https://github.com/fronzbot/blinkpy/pull/424>`__)
- Fix repeated authorization email bug (`#432 <https://github.com/fronzbot/blinkpy/pull/432>`__ and `#428 <https://github.com/fronzbot/blinkpy/pull/428>`__)
**New Features:**
- Add logout method (`#429 <https://github.com/fronzbot/blinkpy/pull/429>`__)
- Add camera record method (`#430 <https://github.com/fronzbot/blinkpy/pull/430>`__)
**Other:**
- Add debug script to main repo to help with general debug
- Upgrade login endpoint from v4 to v5
- Add python 3.9 support
- Bump coverage to 5.4
- Bump pytest to 6.2.2
- Bump pytest-cov to 2.11.1
- Bump pygments to 2.8.0
- Bump pre-commit to 2.10.1
- Bump restructuredtext-lint to 1.3.2
0.16.4 (2020-11-22)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Bugfixes:**
- Updated liveview endpoint (`#389 <https://github.com/fronzbot/blinkpy/pull/389>`__)
- Fixed mini thumbnail not updating (`#388 <https://github.com/fronzbot/blinkpy/pull/388>`__)
- Add exception catch to prevent NoneType error on refresh, added test to check behavior as well (`#401 <https://github.com/fronzbot/blinkpy/pull/401>`__)
- Unrelated: had to add two force methods to refresh for testing purposes. Should not change normal usage.
- Fix malformed stream url (`#395 <https://github.com/fronzbot/blinkpy/pull/395>`__)
**All:**
- Moved testtools to requirements_test.txt (`#387 <https://github.com/fronzbot/blinkpy/pull/387>`__)
- Bumped pytest to 6.1.1
- Bumped flake8 to 3.8.4
- Fixed README spelling ((`#381 <https://github.com/fronzbot/blinkpy/pull/381>`__) via @rohitsud)
- Bumped pygments to 2.7.1
- Bumped coverage to 5.3
- Bumped pydocstyle to 5.1.1
- Bumped pre-commit to 2.7.1
- Bumped pylint to 2.6.0
- Bumped pytest-cov to 2.10.1
0.16.3 (2020-08-02)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Add user-agent to all headers
0.16.2 (2020-08-01)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Add user-agent to header at login
- Remove extra data parameters at login (not-needed)
- Bump pytest to 6.0.1
0.16.1 (2020-07-29)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Unpin requirements, set minimum version instead
- Bump coverage to 5.2.1
- Bump pytest to 6.0.0
0.16.0 (2020-07-20)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Breaking Changes:**
- Add arm property to camera, deprecate motion enable method (`#273 <https://github.com/fronzbot/blinkpy/pull/273>`__)
- Complete refactoring of auth logic (breaks all pre-0.16.0 setups!) (`#261 <https://github.com/fronzbot/blinkpy/pull/261>`__)
**New Features:**
- Add is_errored property to Auth class (`#275 <https://github.com/fronzbot/blinkpy/pull/275>`__)
- Add new endpoint to get user infor (`#280 <https://github.com/fronzbot/blinkpy/pull/280>`__)
- Add get_liveview command to camera module (`#289 <https://github.com/fronzbot/blinkpy/pull/289>`__)
- Add blink Mini Camera support (`#290 <https://github.com/fronzbot/blinkpy/pull/290>`__)
- Add option to skip homescreen check (`#305 <https://github.com/fronzbot/blinkpy/pull/305>`__)
- Add different timeout for video and image retrieval (`#323 <https://github.com/fronzbot/blinkpy/pull/323>`__)
- Modifiy session to use HTTPAdapter and handle retries (`#324 <https://github.com/fronzbot/blinkpy/pull/324>`__)
- Add retry option overrides (`#339 <https://github.com/fronzbot/blinkpy/pull/339>`__)
**All changes:**
Please see the change list in the (`Release Notes <https://github.com/fronzbot/releases/tag/v0.16.0>`__)
0.15.1 (2020-07-11)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Bugfix: remove "Host" from auth header (`#330 <https://github.com/fronzbot/blinkpy/pull/330>`__)
0.15.0 (2020-05-08)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**Breaking Changes:**
+1 -1
View File
@@ -174,7 +174,7 @@ Similar methods exist for individual cameras:
Download videos
----------------
You can also use this library to download all videos from the server. In order to do this, you must specify a ``path``. You may also specifiy a how far back in time to go to retrieve videos via the ``since=`` variable (a simple string such as ``"2017/09/21"`` is sufficient), as well as how many pages to traverse via the ``page=`` variable. Note that by default, the library will search the first ten pages which is sufficient in most use cases. Additionally, you can specidy one or more cameras via the ``camera=`` property. This can be a single string indicating the name of the camera, or a list of camera names. By default, it is set to the string ``'all'`` to grab videos from all cameras.
You can also use this library to download all videos from the server. In order to do this, you must specify a ``path``. You may also specifiy a how far back in time to go to retrieve videos via the ``since=`` variable (a simple string such as ``"2017/09/21"`` is sufficient), as well as how many pages to traverse via the ``stop=`` variable. Note that by default, the library will search the first ten pages which is sufficient in most use cases. Additionally, you can specify one or more cameras via the ``camera=`` property. This can be a single string indicating the name of the camera, or a list of camera names. By default, it is set to the string ``'all'`` to grab videos from all cameras.
Example usage, which downloads all videos recorded since July 4th, 2018 at 9:34am to the ``/home/blink`` directory:
+17 -12
View File
@@ -3,7 +3,7 @@
import logging
from json import dumps
from blinkpy.helpers.util import get_time, Throttle
from blinkpy.helpers.constants import DEFAULT_URL
from blinkpy.helpers.constants import DEFAULT_URL, TIMEOUT, DEFAULT_USER_AGENT
_LOGGER = logging.getLogger(__name__)
@@ -20,21 +20,22 @@ def request_login(
:param url: Login url.
:login_data: Dictionary containing blink login data.
"""
headers = {"Host": DEFAULT_URL, "Content-Type": "application/json"}
headers = {
"Host": DEFAULT_URL,
"Content-Type": "application/json",
"user-agent": DEFAULT_USER_AGENT,
}
data = dumps(
{
"email": login_data["username"],
"password": login_data["password"],
"notification_key": login_data["notification_key"],
"unique_id": login_data["uid"],
"app_version": "6.0.7 (520300) #afb0be72a",
"device_identifier": login_data["device_id"],
"client_name": "Computer",
"client_type": "android",
"os_version": "5.1.1",
"reauth": "false",
"reauth": True,
}
)
return auth.query(
url=url,
headers=headers,
@@ -54,6 +55,12 @@ def request_verify(auth, blink, verify_key):
)
def request_logout(blink):
"""Logout of blink servers."""
url = f"{blink.urls.base_url}/api/v4/account/{blink.account_id}/client/{blink.client_id}/logout"
return http_post(blink, url=url)
def request_networks(blink):
"""Request all networks information."""
url = f"{blink.urls.base_url}/networks"
@@ -241,9 +248,7 @@ def request_camera_liveview(blink, network, camera_id):
:param network: Sync module network id.
:param camera_id: Camera ID of camera to request liveview from.
"""
url = (
f"{blink.urls.base_url}/api/v3/networks/{network}/cameras/{camera_id}/liveview"
)
url = f"{blink.urls.base_url}/api/v5/accounts/{blink.account_id}/networks/{network}/cameras/{camera_id}/liveview"
return http_post(blink, url)
@@ -284,7 +289,7 @@ def request_motion_detection_disable(blink, network, camera_id):
return http_post(blink, url)
def http_get(blink, url, stream=False, json=True, is_retry=False):
def http_get(blink, url, stream=False, json=True, is_retry=False, timeout=TIMEOUT):
"""
Perform an http get request.
@@ -304,7 +309,7 @@ def http_get(blink, url, stream=False, json=True, is_retry=False):
)
def http_post(blink, url, is_retry=False):
def http_post(blink, url, is_retry=False, timeout=TIMEOUT):
"""
Perform an http post request.
+68 -25
View File
@@ -2,9 +2,16 @@
import logging
from functools import partial
from requests import Request, Session, exceptions
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
from blinkpy import api
from blinkpy.helpers import util
from blinkpy.helpers.constants import BLINK_URL, LOGIN_ENDPOINT
from blinkpy.helpers.constants import (
BLINK_URL,
DEFAULT_USER_AGENT,
LOGIN_ENDPOINT,
TIMEOUT,
)
_LOGGER = logging.getLogger(__name__)
@@ -51,12 +58,31 @@ class Auth:
"""Return authorization header."""
if self.token is None:
return None
return {"Host": self.host, "TOKEN_AUTH": self.token}
return {
"TOKEN_AUTH": self.token,
"user-agent": DEFAULT_USER_AGENT,
"content-type": "application/json",
}
def create_session(self):
def create_session(self, opts=None):
"""Create a session for blink communication."""
if opts is None:
opts = {}
backoff = opts.get("backoff", 1)
retries = opts.get("retries", 3)
retry_list = opts.get("retry_list", [429, 500, 502, 503, 504])
sess = Session()
sess.get = partial(sess.get, timeout=10)
assert_status_hook = [
lambda response, *args, **kwargs: response.raise_for_status()
]
sess.hooks["response"] = assert_status_hook
retry = Retry(
total=retries, backoff_factor=backoff, status_forcelist=retry_list
)
adapter = HTTPAdapter(max_retries=retry)
sess.mount("https://", adapter)
sess.mount("http://", adapter)
sess.get = partial(sess.get, timeout=TIMEOUT)
return sess
def prepare_request(self, url, headers, data, reqtype):
@@ -82,8 +108,12 @@ class Auth:
if response.status_code == 200:
return response.json()
raise LoginError
except AttributeError:
raise LoginError
except AttributeError as error:
raise LoginError from error
def logout(self, blink):
"""Log out."""
return api.request_logout(blink)
def refresh_token(self):
"""Refresh auth token."""
@@ -91,20 +121,24 @@ class Auth:
try:
_LOGGER.info("Token expired, attempting automatic refresh.")
self.login_response = self.login()
self.region_id = self.login_response["region"]["tier"]
self.host = f"{self.region_id}.{BLINK_URL}"
self.token = self.login_response["authtoken"]["authtoken"]
self.client_id = self.login_response["client"]["id"]
self.account_id = self.login_response["account"]["id"]
self.extract_login_info()
self.is_errored = False
except LoginError:
except LoginError as error:
_LOGGER.error("Login endpoint failed. Try again later.")
raise TokenRefreshFailed
except (TypeError, KeyError):
raise TokenRefreshFailed from error
except (TypeError, KeyError) as error:
_LOGGER.error("Malformed login response: %s", self.login_response)
raise TokenRefreshFailed
raise TokenRefreshFailed from error
return True
def extract_login_info(self):
"""Extract login info from login response."""
self.region_id = self.login_response["account"]["tier"]
self.host = f"{self.region_id}.{BLINK_URL}"
self.token = self.login_response["auth"]["token"]
self.client_id = self.login_response["account"]["client_id"]
self.account_id = self.login_response["account"]["account_id"]
def startup(self):
"""Initialize tokens for communication."""
self.validate_login()
@@ -125,8 +159,8 @@ class Auth:
json_data = response.json()
except KeyError:
pass
except (AttributeError, ValueError):
raise BlinkBadResponse
except (AttributeError, ValueError) as error:
raise BlinkBadResponse from error
self.is_errored = False
return json_data
@@ -140,6 +174,7 @@ class Auth:
stream=False,
json_resp=True,
is_retry=False,
timeout=TIMEOUT,
):
"""
Perform server requests.
@@ -154,21 +189,25 @@ class Auth:
"""
req = self.prepare_request(url, headers, data, reqtype)
try:
response = self.session.send(req, stream=stream)
response = self.session.send(req, stream=stream, timeout=timeout)
return self.validate_response(response, json_resp)
except (exceptions.ConnectionError, exceptions.Timeout):
_LOGGER.error(
"Connection error. Endpoint %s possibly down or throttled. %s: %s",
url,
response.status_code,
response.reason,
"Connection error. Endpoint %s possibly down or throttled.", url,
)
except BlinkBadResponse:
code = None
reason = None
try:
code = response.status_code
reason = response.reason
except AttributeError:
pass
_LOGGER.error(
"Expected json response from %s, but received: %s: %s",
url,
response.status_code,
response.reason,
code,
reason,
)
except UnauthorizedError:
try:
@@ -182,6 +221,7 @@ class Auth:
stream=stream,
json_resp=json_resp,
is_retry=True,
timeout=timeout,
)
_LOGGER.error("Unable to access %s after token refresh.", url)
except TokenRefreshFailed:
@@ -195,6 +235,9 @@ class Auth:
try:
json_resp = response.json()
blink.available = json_resp["valid"]
if not json_resp["valid"]:
_LOGGER.error("%s", json_resp["message"])
return False
except (KeyError, TypeError):
_LOGGER.error("Did not receive valid response from server.")
return False
@@ -203,7 +246,7 @@ class Auth:
def check_key_required(self):
"""Check if 2FA key is required."""
try:
if self.login_response["client"]["verification_required"]:
if self.login_response["account"]["client_verification_required"]:
return True
except (KeyError, TypeError):
pass
+25 -12
View File
@@ -29,6 +29,7 @@ from blinkpy.helpers.constants import (
DEFAULT_MOTION_INTERVAL,
DEFAULT_REFRESH,
MIN_THROTTLE_TIME,
TIMEOUT_MEDIA,
)
from blinkpy.helpers.constants import __version__
from blinkpy.auth import Auth, TokenRefreshFailed, LoginError
@@ -75,20 +76,22 @@ class Blink:
self.no_owls = no_owls
@util.Throttle(seconds=MIN_THROTTLE_TIME)
def refresh(self, force=False):
def refresh(self, force=False, force_cache=False):
"""
Perform a system refresh.
:param force: Force an update of the camera data
:param force: Used to override throttle, resets refresh
:param force_cache: Used to force update without overriding throttle
"""
if self.check_if_ok_to_update() or force:
if self.check_if_ok_to_update() or force or force_cache:
if not self.available:
self.setup_post_verify()
self.get_homescreen()
for sync_name, sync_module in self.sync.items():
_LOGGER.debug("Attempting refresh of sync %s", sync_name)
sync_module.refresh(force_cache=force)
if not force:
sync_module.refresh(force_cache=(force or force_cache))
if not force_cache:
# Prevents rapid clearing of motion detect property
self.last_refresh = int(time.time())
return True
@@ -100,6 +103,7 @@ class Blink:
self.auth.startup()
self.setup_login_ids()
self.setup_urls()
self.get_homescreen()
except (LoginError, TokenRefreshFailed, BlinkSetupError):
_LOGGER.error("Cannot setup Blink platform.")
self.available = False
@@ -144,17 +148,20 @@ class Blink:
self.sync[name] = BlinkSyncModule(self, name, network_id, cameras)
self.sync[name].start()
def setup_owls(self):
"""Check for mini cameras."""
def get_homescreen(self):
"""Get homecreen information."""
if self.no_owls:
_LOGGER.debug("Skipping owl extraction.")
return []
response = api.request_homescreen(self)
self.homescreen = response
self.homescreen = {}
return
self.homescreen = api.request_homescreen(self)
def setup_owls(self):
"""Check for mini cameras."""
network_list = []
camera_list = []
try:
for owl in response["owls"]:
for owl in self.homescreen["owls"]:
name = owl["name"]
network_id = str(owl["network_id"])
if network_id in self.network_ids:
@@ -326,7 +333,13 @@ class Blink:
_LOGGER.info("%s already exists, skipping...", filename)
continue
response = api.http_get(self, url=clip_address, stream=True, json=False)
response = api.http_get(
self,
url=clip_address,
stream=True,
json=False,
timeout=TIMEOUT_MEDIA,
)
with open(filename, "wb") as vidfile:
copyfileobj(response.raw, vidfile)
+21 -12
View File
@@ -3,6 +3,7 @@
from shutil import copyfileobj
import logging
from blinkpy import api
from blinkpy.helpers.constants import TIMEOUT_MEDIA
_LOGGER = logging.getLogger(__name__)
@@ -97,6 +98,19 @@ class BlinkCamera:
self.sync.blink, self.network_id, self.camera_id
)
def record(self):
"""Initiate clip recording."""
return api.request_new_video(self.sync.blink, self.network_id, self.camera_id)
def get_media(self, media_type="image"):
"""Download media (image or video)."""
url = self.thumbnail
if media_type.lower() == "video":
url = self.clip
return api.http_get(
self.sync.blink, url=url, stream=True, json=False, timeout=TIMEOUT_MEDIA,
)
def snap_picture(self):
"""Take a picture with camera to create a new thumbnail."""
return api.request_new_image(self.sync.blink, self.network_id, self.camera_id)
@@ -150,9 +164,7 @@ class BlinkCamera:
if config.get("thumbnail", False):
thumb_addr = config["thumbnail"]
else:
_LOGGER.warning(
"Could not find thumbnail for camera %s", self.name, exc_info=True
)
_LOGGER.warning("Could not find thumbnail for camera %s", self.name)
if thumb_addr is not None:
new_thumbnail = f"{self.sync.urls.base_url}{thumb_addr}.jpg"
@@ -181,13 +193,10 @@ class BlinkCamera:
update_cached_video = True
if new_thumbnail is not None and (update_cached_image or force_cache):
self._cached_image = api.http_get(
self.sync.blink, url=self.thumbnail, stream=True, json=False
)
self._cached_image = self.get_media()
if clip_addr is not None and (update_cached_video or force_cache):
self._cached_video = api.http_get(
self.sync.blink, url=self.clip, stream=True, json=False
)
self._cached_video = self.get_media(media_type="video")
def get_liveview(self):
"""Get livewview rtsps link."""
@@ -203,7 +212,7 @@ class BlinkCamera:
:param path: Path to write file
"""
_LOGGER.debug("Writing image from %s to %s", self.name, path)
response = self._cached_image
response = self.get_media()
if response.status_code == 200:
with open(path, "wb") as imgfile:
copyfileobj(response.raw, imgfile)
@@ -219,7 +228,7 @@ class BlinkCamera:
:param path: Path to write file
"""
_LOGGER.debug("Writing video from %s to %s", self.name, path)
response = self._cached_video
response = self.get_media(media_type="video")
if response is None:
_LOGGER.error("No saved video exist for %s.", self.name)
return
@@ -261,6 +270,6 @@ class BlinkCameraMini(BlinkCamera):
response = api.http_post(self.sync.blink, url)
server = response["server"]
server_split = server.split(":")
server_split[0] = "rtsps"
server_split[0] = "rtsps:"
link = "".join(server_split)
return link
+7 -3
View File
@@ -3,8 +3,8 @@
import os
MAJOR_VERSION = 0
MINOR_VERSION = 16
PATCH_VERSION = "0-rc6"
MINOR_VERSION = 17
PATCH_VERSION = 0
__version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}.{PATCH_VERSION}"
@@ -34,6 +34,7 @@ PROJECT_CLASSIFIERS = [
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Topic :: Home Automation",
]
@@ -48,7 +49,7 @@ URLS
BLINK_URL = "immedia-semi.com"
DEFAULT_URL = f"rest-prod.{BLINK_URL}"
BASE_URL = f"https://{DEFAULT_URL}"
LOGIN_ENDPOINT = f"{BASE_URL}/api/v4/account/login"
LOGIN_ENDPOINT = f"{BASE_URL}/api/v5/account/login"
"""
Dictionaries
@@ -58,6 +59,7 @@ ONLINE = {"online": True, "offline": False}
"""
OTHER
"""
DEFAULT_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
DEVICE_ID = "Blinkpy"
TIMESTAMP_FORMAT = "%Y-%m-%dT%H:%M:%S%z"
DEFAULT_MOTION_INTERVAL = 1
@@ -65,3 +67,5 @@ DEFAULT_REFRESH = 30
MIN_THROTTLE_TIME = 2
SIZE_NOTIFICATION_KEY = 152
SIZE_UID = 16
TIMEOUT = 10
TIMEOUT_MEDIA = 90
+7 -7
View File
@@ -33,10 +33,13 @@ def json_save(data, file_name):
json.dump(data, json_file, indent=4)
def gen_uid(size):
def gen_uid(size, uid_format=False):
"""Create a random sring."""
full_token = secrets.token_hex(size)
return full_token[0:size]
if uid_format:
token = f"BlinkCamera_{secrets.token_hex(4)}-{secrets.token_hex(2)}-{secrets.token_hex(2)}-{secrets.token_hex(2)}-{secrets.token_hex(6)}"
else:
token = secrets.token_hex(size)
return token
def time_to_seconds(timestamp):
@@ -79,10 +82,7 @@ def prompt_login_data(data):
def validate_login_data(data):
"""Check for missing keys."""
data["uid"] = data.get("uid", gen_uid(const.SIZE_UID))
data["notification_key"] = data.get(
"notification_key", gen_uid(const.SIZE_NOTIFICATION_KEY)
)
data["uid"] = data.get("uid", gen_uid(const.SIZE_UID, uid_format=True))
data["device_id"] = data.get("device_id", const.DEVICE_ID)
return data
+9 -9
View File
@@ -93,9 +93,7 @@ class BlinkSyncModule:
self.serial = self.summary["serial"]
self.status = self.summary["status"]
except KeyError:
_LOGGER.error(
"Could not extract some sync module info: %s", response, exc_info=True
)
_LOGGER.error("Could not extract some sync module info: %s", response)
is_ok = self.get_network_info()
self.check_new_videos()
@@ -147,7 +145,7 @@ class BlinkSyncModule:
for owl in self.blink.homescreen["owls"]:
if owl["name"] == name:
return owl
except KeyError:
except (TypeError, KeyError):
pass
return None
@@ -158,7 +156,7 @@ class BlinkSyncModule:
try:
return response["event"]
except (TypeError, KeyError):
_LOGGER.error("Could not extract events: %s", response, exc_info=True)
_LOGGER.error("Could not extract events: %s", response)
return False
def get_camera_info(self, camera_id, **kwargs):
@@ -170,8 +168,8 @@ class BlinkSyncModule:
try:
return response["camera"][0]
except (TypeError, KeyError):
_LOGGER.error("Could not extract camera info: %s", response, exc_info=True)
return []
_LOGGER.error("Could not extract camera info: %s", response)
return {}
def get_network_info(self):
"""Retrieve network status."""
@@ -191,7 +189,9 @@ class BlinkSyncModule:
self.check_new_videos()
for camera_name in self.cameras.keys():
camera_id = self.cameras[camera_name].camera_id
camera_info = self.get_camera_info(camera_id)
camera_info = self.get_camera_info(
camera_id, owl_info=self.get_owl_info(camera_name)
)
self.cameras[camera_name].update(camera_info, force_cache=force_cache)
self.available = True
@@ -270,7 +270,7 @@ class BlinkOwl(BlinkSyncModule):
if owl["name"] == self.name:
self.status = owl["enabled"]
return owl
except KeyError:
except (TypeError, KeyError):
pass
return None
+77
View File
@@ -0,0 +1,77 @@
"""Login testing script."""
import sys
import os
from blinkpy.blinkpy import Blink
from blinkpy.auth import Auth
from blinkpy.helpers.util import json_load, json_save
save_session = False
print("")
print("Blink Login Debug Script ...")
print(" ... Loading previous session information.")
cwd = os.getcwd()
print(f" ... Looking in {cwd}.")
session_path = os.path.join(cwd, ".session_debug")
session = json_load(session_path)
try:
auth_file = session["file"]
except (TypeError, KeyError):
print(" ... Please input location of auth file")
auth_file = input(" Must contain username and password: ")
save_session = True
data = json_load(auth_file)
if data is None:
print(f" ... Please fix file contents of {auth_file}.")
print(" ... Exiting.")
sys.exit(1)
try:
username = data["username"]
password = data["password"]
except KeyError:
print(f" ... File contents of {auth_file} incorrect.")
print(" ... Require username and password at minimum.")
print(" ... Exiting.")
sys.exit(1)
if save_session:
print(f" ... Saving session file to {session_path}.")
json_save({"file": auth_file}, session_path)
blink = Blink()
auth = Auth(data)
blink.auth = auth
print(" ... Starting Blink.")
print("")
blink.start()
print("")
print(" ... Printing login response.")
print("")
print(blink.auth.login_response)
print("")
print(" ... Printing login attributes.")
print("")
print(blink.auth.login_attributes)
print("")
input(" ... Press any key to continue: ")
print(" ... Deactivating auth token.")
blink.auth.token = "foobar"
print(f"\t - blink.auth.token = {blink.auth.token}")
print(" ... Attempting login.")
print("")
blink.start()
print("")
print(" ... Printing login response.")
print("")
print(blink.auth.login_response)
print("")
print(" ... Printing login attributes.")
print("")
print(blink.auth.login_attributes)
print("")
rint(" ... Done.")
print("")
+23
View File
@@ -30,6 +30,29 @@ By default, the ``blink.auth.Auth`` class creates its own websession via its ``c
blink.auth = Auth()
blink.auth.session = YourCustomSession
Custom Retry Logic
--------------------
The built-in auth session via the ``create_session`` method allows for customizable retry intervals and conditions. These parameters are:
- retries
- backoff
- retry_list
``retries`` is the total number of retry attempts that each http request can do before timing out. ``backoff`` is a parameter that allows for non-linear retry times such that the time between retries is backoff*(2^(retries) - 1). ``retry_list`` is simply a list of status codes to force a retry. By default ``retries=3``, ``backoff=1``, and ``retry_list=[429, 500, 502, 503, 504]``. To override them, you need to add you overrides to a dictionary and use that to create a new session with the ``opts`` variable in the ``create_session`` method. The following example can serve as a guide where only the number of retries and backoff factor are overridden:
.. code:: python
from blinkpy.blinkpy import Blink
from blinkpy.auth import Auth
blink = Blink()
blink.auth = Auth()
opts = {"retries": 10, "backoff": 2}
blink.auth.session = blink.auth.create_session(opts=opts)
Custom HTTP requests
---------------------
In addition to custom sessions, custom blink server requests can be performed. This give you the ability to bypass the built-in ``Auth.query`` method. It also allows flexibility by giving you the option to pass your own url, rather than be limited to what is currently implemented in the ``blinkpy.api`` module.
+3 -4
View File
@@ -1,4 +1,3 @@
python-dateutil~=2.8.1
requests~=2.23.0
python-slugify~=4.0.0
testtools==2.4.0
python-dateutil>=2.8.1
requests>=2.24.0
python-slugify>=4.0.1
+12 -11
View File
@@ -1,13 +1,14 @@
black==19.10b0
coverage==5.1
flake8==3.8.3
coverage==5.4
flake8==3.8.4
flake8-docstrings==1.5.0
pre-commit==2.5.1
pylint==2.5.3
pydocstyle==5.0.2
pytest==5.4.3
pytest-cov==2.9.0
pytest-sugar==0.9.3
pytest-timeout==1.3.4
restructuredtext-lint==1.3.1
pygments==2.6.1
pre-commit==2.10.1
pylint==2.6.0
pydocstyle==5.1.1
pytest==6.2.2
pytest-cov==2.11.1
pytest-sugar==0.9.4
pytest-timeout==1.4.2
restructuredtext-lint==1.3.2
pygments==2.8.0
testtools>=2.4.0
+16 -13
View File
@@ -3,23 +3,26 @@
from os.path import abspath, dirname
from setuptools import setup, find_packages
from blinkpy.helpers.constants import (
__version__, PROJECT_PACKAGE_NAME, PROJECT_LICENSE, PROJECT_URL,
PROJECT_EMAIL, PROJECT_DESCRIPTION, PROJECT_CLASSIFIERS, PROJECT_AUTHOR,
__version__,
PROJECT_PACKAGE_NAME,
PROJECT_LICENSE,
PROJECT_URL,
PROJECT_EMAIL,
PROJECT_DESCRIPTION,
PROJECT_CLASSIFIERS,
PROJECT_AUTHOR,
)
PROJECT_VERSION = __version__
THIS_DIR = abspath(dirname(__file__))
REQUIRES = [
"python-dateutil~=2.8.1",
"requests~=2.23.0",
"python-slugify~=4.0.0",
]
with open(f"{THIS_DIR}/requirements.txt") as req_file:
REQUIRES = [line.rstrip() for line in req_file]
PACKAGES = find_packages(exclude=['tests*', 'docs'])
PACKAGES = find_packages(exclude=["tests*", "docs"])
with open('{}/README.rst'.format(THIS_DIR), encoding='utf-8') as readme_file:
with open("{}/README.rst".format(THIS_DIR), encoding="utf-8") as readme_file:
LONG_DESCRIPTION = readme_file.read()
setup(
@@ -31,11 +34,11 @@ setup(
author_email=PROJECT_EMAIL,
license=PROJECT_LICENSE,
url=PROJECT_URL,
platforms='any',
py_modules=['blinkpy'],
platforms="any",
py_modules=["blinkpy"],
packages=PACKAGES,
include_package_data=True,
install_requires=REQUIRES,
test_suite='tests',
classifiers=PROJECT_CLASSIFIERS
test_suite="tests",
classifiers=PROJECT_CLASSIFIERS,
)
+60 -11
View File
@@ -42,7 +42,6 @@ class TestAuth(unittest.TestCase):
"username": "foo",
"password": "bar",
"uid": 1234,
"notification_key": 1234,
"device_id": const.DEVICE_ID,
}
self.assertDictEqual(auth.data, expected_data)
@@ -62,7 +61,6 @@ class TestAuth(unittest.TestCase):
"username": "foo",
"password": "bar",
"uid": 1234,
"notification_key": 1234,
"device_id": const.DEVICE_ID,
}
self.assertDictEqual(auth.data, expected_data)
@@ -128,8 +126,11 @@ class TestAuth(unittest.TestCase):
def test_header(self):
"""Test header data."""
self.auth.token = "bar"
self.auth.host = "foo"
expected_header = {"Host": "foo", "TOKEN_AUTH": "bar"}
expected_header = {
"TOKEN_AUTH": "bar",
"user-agent": const.DEFAULT_USER_AGENT,
"content-type": "application/json",
}
self.assertDictEqual(self.auth.header, expected_header)
def test_header_no_token(self):
@@ -162,10 +163,8 @@ class TestAuth(unittest.TestCase):
def test_refresh_token(self, mock_login):
"""Test refresh token method."""
mock_login.return_value = {
"region": {"tier": "test"},
"authtoken": {"authtoken": "foobar"},
"client": {"id": 1234},
"account": {"id": 5678},
"account": {"account_id": 5678, "client_id": 1234, "tier": "test"},
"auth": {"token": "foobar"},
}
self.assertTrue(self.auth.refresh_token())
self.assertEqual(self.auth.region_id, "test")
@@ -187,12 +186,19 @@ class TestAuth(unittest.TestCase):
self.auth.login_response = {}
self.assertFalse(self.auth.check_key_required())
self.auth.login_response = {"client": {"verification_required": False}}
self.auth.login_response = {"account": {"client_verification_required": False}}
self.assertFalse(self.auth.check_key_required())
self.auth.login_response = {"client": {"verification_required": True}}
self.auth.login_response = {"account": {"client_verification_required": True}}
self.assertTrue(self.auth.check_key_required())
@mock.patch("blinkpy.auth.api.request_logout")
def test_logout(self, mock_req):
"""Test logout method."""
mock_blink = MockBlink(None)
mock_req.return_value = True
self.assertTrue(self.auth.logout(mock_blink))
@mock.patch("blinkpy.auth.api.request_verify")
def test_send_auth_key(self, mock_req):
"""Check sending of auth key."""
@@ -231,7 +237,7 @@ class TestAuth(unittest.TestCase):
@mock.patch("blinkpy.auth.Auth.refresh_token")
def test_query_retry_failed(self, mock_refresh, mock_validate):
"""Check handling of failed retry request."""
self.auth.seession = MockSession()
self.auth.session = MockSession()
mock_validate.side_effect = [UnauthorizedError, BlinkBadResponse]
mock_refresh.return_value = True
self.assertEqual(self.auth.query(url="http://example.com"), None)
@@ -239,6 +245,49 @@ class TestAuth(unittest.TestCase):
mock_validate.side_effect = [UnauthorizedError, TokenRefreshFailed]
self.assertEqual(self.auth.query(url="http://example.com"), None)
def test_default_session(self):
"""Test default session creation."""
sess = self.auth.create_session()
adapter = sess.adapters["https://"]
self.assertEqual(adapter.max_retries.total, 3)
self.assertEqual(adapter.max_retries.backoff_factor, 1)
self.assertEqual(
adapter.max_retries.status_forcelist, [429, 500, 502, 503, 504]
)
def test_custom_session_full(self):
"""Test full custom session creation."""
opts = {"backoff": 2, "retries": 10, "retry_list": [404]}
sess = self.auth.create_session(opts=opts)
adapter = sess.adapters["https://"]
self.assertEqual(adapter.max_retries.total, 10)
self.assertEqual(adapter.max_retries.backoff_factor, 2)
self.assertEqual(adapter.max_retries.status_forcelist, [404])
def test_custom_session_partial(self):
"""Test partial custom session creation."""
opts1 = {"backoff": 2}
opts2 = {"retries": 5}
opts3 = {"retry_list": [101, 202]}
sess1 = self.auth.create_session(opts=opts1)
sess2 = self.auth.create_session(opts=opts2)
sess3 = self.auth.create_session(opts=opts3)
adapt1 = sess1.adapters["https://"]
adapt2 = sess2.adapters["https://"]
adapt3 = sess3.adapters["https://"]
self.assertEqual(adapt1.max_retries.total, 3)
self.assertEqual(adapt1.max_retries.backoff_factor, 2)
self.assertEqual(adapt1.max_retries.status_forcelist, [429, 500, 502, 503, 504])
self.assertEqual(adapt2.max_retries.total, 5)
self.assertEqual(adapt2.max_retries.backoff_factor, 1)
self.assertEqual(adapt2.max_retries.status_forcelist, [429, 500, 502, 503, 504])
self.assertEqual(adapt3.max_retries.total, 3)
self.assertEqual(adapt3.max_retries.backoff_factor, 1)
self.assertEqual(adapt3.max_retries.status_forcelist, [101, 202])
class MockSession:
"""Object to mock a session."""
+23 -16
View File
@@ -5,29 +5,23 @@ import logging
from blinkpy import blinkpy
from blinkpy.sync_module import BlinkSyncModule
from blinkpy.camera import BlinkCamera
from blinkpy.helpers.util import get_time, BlinkURLHandler
class MockSyncModule(BlinkSyncModule):
"""Mock http requests from sync module."""
"""Mock blink sync module object."""
def __init__(self, blink, header):
"""Create mock sync module instance."""
super().__init__(blink, header, network_id=None, camera_list=None)
self.blink = blink
self.header = header
self.return_value = None
self.return_value2 = None
def get_network_info(self):
"""Mock network info method."""
return True
def http_get(self, url, stream=False, json=True):
"""Mock get request."""
if stream and self.return_value2 is not None:
return self.return_value2
return self.return_value
def http_post(self, url):
"""Mock post request."""
return self.return_value
class MockCamera(BlinkCamera):
"""Mock blink camera object."""
def update(self, config, force_cache=False, **kwargs):
"""Mock camera update method."""
class TestBlinkFunctions(unittest.TestCase):
@@ -121,3 +115,16 @@ class TestBlinkFunctions(unittest.TestCase):
with self.assertLogs() as dl_log:
blink.download_videos("/tmp", camera="bar", stop=2)
self.assertEqual(dl_log.output, expected_log)
@mock.patch("blinkpy.blinkpy.api.request_network_update")
@mock.patch("blinkpy.auth.Auth.query")
def test_refresh(self, mock_req, mock_update):
"""Test ability to refresh system."""
mock_update.return_value = {"network": {"sync_module_error": False}}
mock_req.return_value = None
self.blink.last_refresh = 0
self.blink.available = True
self.blink.sync["foo"] = MockSyncModule(self.blink, "foo", 1, [])
self.blink.cameras = {"bar": MockCamera(self.blink.sync)}
self.blink.sync["foo"].cameras = self.blink.cameras
self.assertTrue(self.blink.refresh())
+9 -11
View File
@@ -68,8 +68,8 @@ class TestBlinkSetup(unittest.TestCase):
self.assertEqual(self.blink.last_refresh, None)
with mock.patch(
"blinkpy.sync_module.BlinkSyncModule.refresh", return_value=True
):
self.blink.refresh()
), mock.patch("blinkpy.blinkpy.Blink.get_homescreen", return_value=True):
self.blink.refresh(force=True)
self.assertEqual(self.blink.last_refresh, now)
self.assertEqual(self.blink.check_if_ok_to_update(), False)
@@ -197,12 +197,11 @@ class TestBlinkSetup(unittest.TestCase):
self.assertEqual(combined["fizz"], "buzz")
self.assertEqual(combined["bar"], "foo")
@mock.patch("blinkpy.api.request_homescreen")
@mock.patch("blinkpy.blinkpy.BlinkOwl.start")
def test_initialize_blink_minis(self, mock_start, mock_home):
def test_initialize_blink_minis(self, mock_start):
"""Test blink mini initialization."""
mock_start.return_value = True
mock_home.return_value = {
self.blink.homescreen = {
"owls": [
{
"enabled": False,
@@ -235,11 +234,10 @@ class TestBlinkSetup(unittest.TestCase):
self.assertEqual(self.blink.sync["foo"].name, "foo")
self.assertEqual(self.blink.sync["bar"].name, "bar")
@mock.patch("blinkpy.api.request_homescreen")
def test_blink_mini_cameras_returned(self, mock_home):
def test_blink_mini_cameras_returned(self):
"""Test that blink mini cameras are found if attached to sync module."""
self.blink.network_ids = ["1234"]
mock_home.return_value = {
self.blink.homescreen = {
"owls": [
{
"id": 1,
@@ -261,16 +259,16 @@ class TestBlinkSetup(unittest.TestCase):
self.blink.no_owls = True
self.blink.network_ids = []
self.blink.get_homescreen()
result = self.blink.setup_owls()
self.assertEqual(self.blink.network_ids, [])
self.assertEqual(result, [])
@mock.patch("blinkpy.api.request_homescreen")
@mock.patch("blinkpy.api.request_camera_usage")
def test_blink_mini_attached_to_sync(self, mock_usage, mock_home):
def test_blink_mini_attached_to_sync(self, mock_usage):
"""Test that blink mini cameras are properly attached to sync module."""
self.blink.network_ids = ["1234"]
mock_home.return_value = {
self.blink.homescreen = {
"owls": [
{
"id": 1,
+8 -4
View File
@@ -117,10 +117,7 @@ class TestBlinkCameraSetup(unittest.TestCase):
"WARNING:blinkpy.camera:Could not retrieve calibrated "
"temperature."
),
(
"WARNING:blinkpy.camera:Could not find thumbnail for camera new"
"\nNoneType: None"
),
("WARNING:blinkpy.camera:Could not find thumbnail for camera new"),
],
)
@@ -179,3 +176,10 @@ class TestBlinkCameraSetup(unittest.TestCase):
attr = camera.attributes
for key in attr:
self.assertEqual(attr[key], None)
def test_camera_stream(self, mock_resp):
"""Test that camera stream returns correct url."""
mock_resp.return_value = {"server": "rtsps://foo.bar"}
mini_camera = BlinkCameraMini(self.blink.sync["test"])
self.assertEqual(self.camera.get_liveview(), "rtsps://foo.bar")
self.assertEqual(mini_camera.get_liveview(), "rtsps://foo.bar")
+3 -3
View File
@@ -80,11 +80,11 @@ class TestBlinkSyncModule(unittest.TestCase):
def test_get_camera_info_fail(self, mock_resp):
"""Test handling of failed get camera info function."""
mock_resp.return_value = None
self.assertEqual(self.blink.sync["test"].get_camera_info("1"), [])
self.assertEqual(self.blink.sync["test"].get_camera_info("1"), {})
mock_resp.return_value = {}
self.assertEqual(self.blink.sync["test"].get_camera_info("1"), [])
self.assertEqual(self.blink.sync["test"].get_camera_info("1"), {})
mock_resp.return_value = {"camera": None}
self.assertEqual(self.blink.sync["test"].get_camera_info("1"), [])
self.assertEqual(self.blink.sync["test"].get_camera_info("1"), {})
def test_get_network_info(self, mock_resp):
"""Test network retrieval."""
+17 -1
View File
@@ -3,7 +3,7 @@
import unittest
from unittest import mock
import time
from blinkpy.helpers.util import json_load, Throttle, time_to_seconds
from blinkpy.helpers.util import json_load, Throttle, time_to_seconds, gen_uid
class TestUtil(unittest.TestCase):
@@ -132,3 +132,19 @@ class TestUtil(unittest.TestCase):
self.assertEqual(json_load("fake.file"), None)
with mock.patch("builtins.open", mock.mock_open(read_data="")):
self.assertEqual(json_load("fake.file"), None)
def test_gen_uid(self):
"""Test gen_uid formatting."""
val1 = gen_uid(8)
val2 = gen_uid(8, uid_format=True)
self.assertEqual(len(val1), 16)
self.assertTrue(val2.startswith("BlinkCamera_"))
val2_cut = val2.split("_")
val2_split = val2_cut[1].split("-")
self.assertEqual(len(val2_split[0]), 8)
self.assertEqual(len(val2_split[1]), 4)
self.assertEqual(len(val2_split[2]), 4)
self.assertEqual(len(val2_split[3]), 4)
self.assertEqual(len(val2_split[4]), 12)
+1 -1
View File
@@ -1,5 +1,5 @@
[tox]
envlist = build, py36, py37, py38, lint
envlist = build, py36, py37, py38, py39, lint
skip_missing_interpreters = True
skipsdist = True