Compare commits

...
Author SHA1 Message Date
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
7 changed files with 42 additions and 27 deletions
+6 -5
View File
@@ -76,21 +76,22 @@ class Blink:
self.no_owls = no_owls self.no_owls = no_owls
@util.Throttle(seconds=MIN_THROTTLE_TIME) @util.Throttle(seconds=MIN_THROTTLE_TIME)
def refresh(self, force=False): def refresh(self, force=False, force_cache=False):
""" """
Perform a system refresh. 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: if not self.available:
self.setup_post_verify() self.setup_post_verify()
self.get_homescreen() self.get_homescreen()
for sync_name, sync_module in self.sync.items(): for sync_name, sync_module in self.sync.items():
_LOGGER.debug("Attempting refresh of sync %s", sync_name) _LOGGER.debug("Attempting refresh of sync %s", sync_name)
sync_module.refresh(force_cache=force) sync_module.refresh(force_cache=(force or force_cache))
if not force: if not force_cache:
# Prevents rapid clearing of motion detect property # Prevents rapid clearing of motion detect property
self.last_refresh = int(time.time()) self.last_refresh = int(time.time())
return True return True
+1 -1
View File
@@ -266,6 +266,6 @@ class BlinkCameraMini(BlinkCamera):
response = api.http_post(self.sync.blink, url) response = api.http_post(self.sync.blink, url)
server = response["server"] server = response["server"]
server_split = server.split(":") server_split = server.split(":")
server_split[0] = "rtsps" server_split[0] = "rtsps:"
link = "".join(server_split) link = "".join(server_split)
return link return link
+2 -2
View File
@@ -3,8 +3,8 @@
import os import os
MAJOR_VERSION = 0 MAJOR_VERSION = 0
MINOR_VERSION = 16 MINOR_VERSION = 17
PATCH_VERSION = "4-rc0" PATCH_VERSION = "0.dev1"
__version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}.{PATCH_VERSION}" __version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}.{PATCH_VERSION}"
+2 -2
View File
@@ -145,7 +145,7 @@ class BlinkSyncModule:
for owl in self.blink.homescreen["owls"]: for owl in self.blink.homescreen["owls"]:
if owl["name"] == name: if owl["name"] == name:
return owl return owl
except KeyError: except (TypeError, KeyError):
pass pass
return None return None
@@ -270,7 +270,7 @@ class BlinkOwl(BlinkSyncModule):
if owl["name"] == self.name: if owl["name"] == self.name:
self.status = owl["enabled"] self.status = owl["enabled"]
return owl return owl
except KeyError: except (TypeError, KeyError):
pass pass
return None return None
+23 -16
View File
@@ -5,29 +5,23 @@ import logging
from blinkpy import blinkpy from blinkpy import blinkpy
from blinkpy.sync_module import BlinkSyncModule from blinkpy.sync_module import BlinkSyncModule
from blinkpy.camera import BlinkCamera
from blinkpy.helpers.util import get_time, BlinkURLHandler from blinkpy.helpers.util import get_time, BlinkURLHandler
class MockSyncModule(BlinkSyncModule): class MockSyncModule(BlinkSyncModule):
"""Mock http requests from sync module.""" """Mock blink sync module object."""
def __init__(self, blink, header): def get_network_info(self):
"""Create mock sync module instance.""" """Mock network info method."""
super().__init__(blink, header, network_id=None, camera_list=None) return True
self.blink = blink
self.header = header
self.return_value = None
self.return_value2 = None
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): class MockCamera(BlinkCamera):
"""Mock post request.""" """Mock blink camera object."""
return self.return_value
def update(self, config, force_cache=False, **kwargs):
"""Mock camera update method."""
class TestBlinkFunctions(unittest.TestCase): class TestBlinkFunctions(unittest.TestCase):
@@ -121,3 +115,16 @@ class TestBlinkFunctions(unittest.TestCase):
with self.assertLogs() as dl_log: with self.assertLogs() as dl_log:
blink.download_videos("/tmp", camera="bar", stop=2) blink.download_videos("/tmp", camera="bar", stop=2)
self.assertEqual(dl_log.output, expected_log) 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())
+1 -1
View File
@@ -69,7 +69,7 @@ class TestBlinkSetup(unittest.TestCase):
with mock.patch( with mock.patch(
"blinkpy.sync_module.BlinkSyncModule.refresh", return_value=True "blinkpy.sync_module.BlinkSyncModule.refresh", return_value=True
), mock.patch("blinkpy.blinkpy.Blink.get_homescreen", return_value=True): ), mock.patch("blinkpy.blinkpy.Blink.get_homescreen", return_value=True):
self.blink.refresh() self.blink.refresh(force=True)
self.assertEqual(self.blink.last_refresh, now) self.assertEqual(self.blink.last_refresh, now)
self.assertEqual(self.blink.check_if_ok_to_update(), False) self.assertEqual(self.blink.check_if_ok_to_update(), False)
+7
View File
@@ -176,3 +176,10 @@ class TestBlinkCameraSetup(unittest.TestCase):
attr = camera.attributes attr = camera.attributes
for key in attr: for key in attr:
self.assertEqual(attr[key], None) 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")