Compare commits

...
48 Commits
Author SHA1 Message Date
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 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
15 changed files with 117 additions and 74 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
+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
-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
+25
View File
@@ -4,6 +4,31 @@ Changelog
A list of changes between each release
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)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+6 -3
View File
@@ -23,18 +23,15 @@ def request_login(
headers = {
"Host": DEFAULT_URL,
"Content-Type": "application/json",
"Accept": "/",
"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"],
"device_identifier": login_data["device_id"],
"client_name": "Computer",
"reauth": "false",
}
)
@@ -57,6 +54,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"
+25 -14
View File
@@ -58,7 +58,11 @@ class Auth:
"""Return authorization header."""
if self.token is None:
return None
return {"TOKEN_AUTH": self.token, "user-agent": DEFAULT_USER_AGENT}
return {
"TOKEN_AUTH": self.token,
"user-agent": DEFAULT_USER_AGENT,
"content-type": "application/json",
}
def create_session(self, opts=None):
"""Create a session for blink communication."""
@@ -104,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."""
@@ -115,21 +123,21 @@ class Auth:
self.login_response = self.login()
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["region"]["tier"]
self.region_id = self.login_response["account"]["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.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."""
@@ -151,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
@@ -227,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
@@ -235,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
+4
View File
@@ -98,6 +98,10 @@ 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
+3 -2
View File
@@ -4,7 +4,7 @@ import os
MAJOR_VERSION = 0
MINOR_VERSION = 17
PATCH_VERSION = "0.dev1"
PATCH_VERSION = "0.rc0"
__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
+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
+6 -6
View File
@@ -1,14 +1,14 @@
black==19.10b0
coverage==5.3
coverage==5.4
flake8==3.8.4
flake8-docstrings==1.5.0
pre-commit==2.7.1
pre-commit==2.10.1
pylint==2.6.0
pydocstyle==5.1.1
pytest==6.1.1
pytest-cov==2.10.1
pytest==6.2.2
pytest-cov==2.11.1
pytest-sugar==0.9.4
pytest-timeout==1.4.2
restructuredtext-lint==1.3.1
pygments==2.7.1
restructuredtext-lint==1.3.2
pygments==2.7.4
testtools>=2.4.0
+16 -9
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,7 +126,11 @@ class TestAuth(unittest.TestCase):
def test_header(self):
"""Test header data."""
self.auth.token = "bar"
expected_header = {"TOKEN_AUTH": "bar", "user-agent": const.DEFAULT_USER_AGENT}
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):
@@ -161,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")
@@ -186,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."""
+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