From ed25745deb9dfe0c2762a68ad807f7f6781eb5c0 Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Fri, 23 Nov 2018 16:36:17 -0500 Subject: [PATCH] Added case insesnitive dict, changed sync module name to network name (to mimic app) --- blinkpy/blinkpy.py | 14 +++++++++----- blinkpy/sync_module.py | 7 +++---- tests/test_blinkpy.py | 19 ++++++++++++------- tests/test_cameras.py | 6 +++--- tests/test_sync_module.py | 33 ++++++++++++++++----------------- 5 files changed, 43 insertions(+), 36 deletions(-) diff --git a/blinkpy/blinkpy.py b/blinkpy/blinkpy.py index c3f1ef0..34b5d38 100644 --- a/blinkpy/blinkpy.py +++ b/blinkpy/blinkpy.py @@ -14,6 +14,7 @@ I am in no way affiliated with Blink, nor Immedia Inc. import time import getpass import logging +from requests.structures import CaseInsensitiveDict import blinkpy.helpers.errors as ERROR from blinkpy import api from blinkpy.sync_module import BlinkSyncModule @@ -49,7 +50,7 @@ class Blink(): self.account_id = None self.network_ids = [] self.urls = None - self.sync = {} + self.sync = CaseInsensitiveDict({}) self.region = None self.region_id = None self.last_refresh = None @@ -75,11 +76,11 @@ class Blink(): else: self.get_auth_token() - self.get_ids() - for network_id in self.network_ids: - sync_module = BlinkSyncModule(self) + networks = self.get_ids() + for network_name, network_id in networks.items(): + sync_module = BlinkSyncModule(self, network_name, network_id) sync_module.start() - self.sync[network_id] = sync_module + self.sync[network_name] = sync_module def login(self): """Prompt user for username and password.""" @@ -138,9 +139,11 @@ class Blink(): # Look for only onboarded network, flag warning if multiple # since it's unexpected all_networks = [] + network_dict = {} for network, status in self.networks.items(): if status['onboarded']: all_networks.append('{}'.format(network)) + network_dict[status['name']] = network # For the first onboarded network we find, grab the account id for resp in response['networks']: @@ -149,6 +152,7 @@ class Blink(): break self.network_ids = all_networks + return network_dict def refresh(self, force_cache=False): """ diff --git a/blinkpy/sync_module.py b/blinkpy/sync_module.py index efb0cf9..b59c7a4 100644 --- a/blinkpy/sync_module.py +++ b/blinkpy/sync_module.py @@ -13,7 +13,7 @@ _LOGGER = logging.getLogger(__name__) class BlinkSyncModule(): """Class to initialize sync module.""" - def __init__(self, blink): + def __init__(self, blink, network_name, network_id): """ Initialize Blink sync module. @@ -21,10 +21,10 @@ class BlinkSyncModule(): """ self.blink = blink self._auth_header = blink.auth_header - self.network_id = None + self.network_id = network_id self.region = blink.region self.region_id = blink.region_id - self.name = 'sync' + self.name = network_name self.serial = None self.status = None self.sync_id = None @@ -79,7 +79,6 @@ class BlinkSyncModule(): """Initialize the system.""" response = api.request_syncmodule(self.blink, self.network_id) self.summary = response['syncmodule'] - self.name = self.summary['name'] self.sync_id = self.summary['id'] self.network_id = self.summary['network_id'] self.serial = self.summary['serial'] diff --git a/tests/test_blinkpy.py b/tests/test_blinkpy.py index f12c870..6676fbd 100644 --- a/tests/test_blinkpy.py +++ b/tests/test_blinkpy.py @@ -30,7 +30,7 @@ class TestBlinkSetup(unittest.TestCase): self.blink_no_cred = Blink() self.blink = Blink(username=USERNAME, password=PASSWORD) - self.blink.sync = BlinkSyncModule(self.blink) + self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', '1234') self.blink.urls = BlinkURLHandler('test') self.blink.session = create_session() @@ -110,9 +110,9 @@ class TestBlinkSetup(unittest.TestCase): 'networks': [{'id': 1234, 'account_id': 1111}, {'id': 5678, 'account_id': 2222}] } - self.blink.networks = {'0000': {'onboarded': False}, - '5678': {'onboarded': True}, - '1234': {'onboarded': False}} + self.blink.networks = {'0000': {'onboarded': False, 'name': 'foo'}, + '5678': {'onboarded': True, 'name': 'bar'}, + '1234': {'onboarded': False, 'name': 'test'}} self.blink.get_ids() self.assertTrue('5678' in self.blink.network_ids) self.assertEqual(self.blink.account_id, 2222) @@ -124,9 +124,9 @@ class TestBlinkSetup(unittest.TestCase): 'networks': [{'id': 0000, 'account_id': 2222}, {'id': 5678, 'account_id': 1111}] } - self.blink.networks = {'0000': {'onboarded': False}, - '5678': {'onboarded': True}, - '1234': {'onboarded': True}} + self.blink.networks = {'0000': {'onboarded': False, 'name': 'foo'}, + '5678': {'onboarded': True, 'name': 'bar'}, + '1234': {'onboarded': True, 'name': 'test'}} self.blink.get_ids() self.assertTrue('5678' in self.blink.network_ids) self.assertTrue('1234' in self.blink.network_ids) @@ -143,3 +143,8 @@ class TestBlinkSetup(unittest.TestCase): self.assertEqual(result, True) self.assertEqual(self.blink.check_if_ok_to_update(), False) self.assertEqual(self.blink.last_refresh, now) + + def test_sync_case_insensitive_dict(self, mock_sess): + """Check that we can access sync modules ignoring case.""" + self.assertEqual(self.blink.sync['test'].name, 'test') + self.assertEqual(self.blink.sync['TEST'].name, 'test') diff --git a/tests/test_cameras.py b/tests/test_cameras.py index 4f7bbbc..d3ffccb 100644 --- a/tests/test_cameras.py +++ b/tests/test_cameras.py @@ -46,10 +46,10 @@ class TestBlinkCameraSetup(unittest.TestCase): self.blink._auth_header = header self.blink.session = create_session() self.blink.urls = BlinkURLHandler('test') - self.blink.sync = BlinkSyncModule(self.blink) - self.camera = BlinkCamera(self.blink.sync) + self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', 1234) + self.camera = BlinkCamera(self.blink.sync['test']) self.camera.name = 'foobar' - self.blink.sync.cameras['foobar'] = self.camera + self.blink.sync['test'].cameras['foobar'] = self.camera def tearDown(self): """Clean up after test.""" diff --git a/tests/test_sync_module.py b/tests/test_sync_module.py index 07d654f..7c623d1 100644 --- a/tests/test_sync_module.py +++ b/tests/test_sync_module.py @@ -24,7 +24,7 @@ class TestBlinkSyncModule(unittest.TestCase): 'TOKEN_AUTH': 'foobar123' } self.blink.urls = blinkpy.BlinkURLHandler('test') - self.blink.sync = BlinkSyncModule(self.blink) + self.blink.sync['test'] = BlinkSyncModule(self.blink, 'test', '1234') self.camera = BlinkCamera(self.blink.sync) def tearDown(self): @@ -35,12 +35,12 @@ class TestBlinkSyncModule(unittest.TestCase): def test_get_events(self, mock_resp): """Test get events function.""" mock_resp.return_value = {'event': True} - self.assertEqual(self.blink.sync.get_events(), True) + self.assertEqual(self.blink.sync['test'].get_events(), True) def test_get_camera_info(self, mock_resp): """Test get camera info function.""" mock_resp.return_value = {'devicestatus': True} - self.assertEqual(self.blink.sync.get_camera_info(), True) + self.assertEqual(self.blink.sync['test'].get_camera_info(), True) def test_get_videos_one_page(self, mock_resp): """Test video access.""" @@ -54,13 +54,13 @@ class TestBlinkSyncModule(unittest.TestCase): expected_videos = {'foobar': [ {'clip': '/test/clip_1900_01_01_12_00_00AM.mp4', 'thumb': '/test/thumb'}]} - expected_records = {'foobar': ['1900_01_01_12_00_00AM']} + expected_recs = {'foobar': ['1900_01_01_12_00_00AM']} expected_clips = {'foobar': { '1900_01_01_12_00_00AM': '/test/clip_1900_01_01_12_00_00AM.mp4'}} - self.blink.sync.get_videos(start_page=0, end_page=0) - self.assertEqual(self.blink.sync.videos, expected_videos) - self.assertEqual(self.blink.sync.record_dates, expected_records) - self.assertEqual(self.blink.sync.all_clips, expected_clips) + self.blink.sync['test'].get_videos(start_page=0, end_page=0) + self.assertEqual(self.blink.sync['test'].videos, expected_videos) + self.assertEqual(self.blink.sync['test'].record_dates, expected_recs) + self.assertEqual(self.blink.sync['test'].all_clips, expected_clips) def test_get_videos_multi_page(self, mock_resp): """Test video access with multiple pages.""" @@ -71,17 +71,16 @@ class TestBlinkSyncModule(unittest.TestCase): 'thumbnail': '/foobar' } ] - self.blink.sync.get_videos() + self.blink.sync['test'].get_videos() self.assertEqual(mock_resp.call_count, 2) mock_resp.reset_mock() - self.blink.sync.get_videos(start_page=0, end_page=9) + self.blink.sync['test'].get_videos(start_page=0, end_page=9) self.assertEqual(mock_resp.call_count, 10) def test_sync_start(self, mock_resp): """Test sync start function.""" mock_resp.side_effect = [ {'syncmodule': { - 'name': 'test', 'id': 1234, 'network_id': 5678, 'serial': '12345678', @@ -93,9 +92,9 @@ class TestBlinkSyncModule(unittest.TestCase): None, None ] - self.blink.sync.start() - self.assertEqual(self.blink.sync.name, 'test') - self.assertEqual(self.blink.sync.sync_id, 1234) - self.assertEqual(self.blink.sync.network_id, 5678) - self.assertEqual(self.blink.sync.serial, '12345678') - self.assertEqual(self.blink.sync.status, 'foobar') + self.blink.sync['test'].start() + self.assertEqual(self.blink.sync['test'].name, 'test') + self.assertEqual(self.blink.sync['test'].sync_id, 1234) + self.assertEqual(self.blink.sync['test'].network_id, 5678) + self.assertEqual(self.blink.sync['test'].serial, '12345678') + self.assertEqual(self.blink.sync['test'].status, 'foobar')