Skip to content

Commit

Permalink
Added case insesnitive dict, changed sync module name to network name
Browse files Browse the repository at this point in the history
(to mimic app)
  • Loading branch information
fronzbot committed Nov 23, 2018
1 parent a1fd057 commit ed25745
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 36 deletions.
14 changes: 9 additions & 5 deletions blinkpy/blinkpy.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
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
Expand Down Expand Up @@ -49,7 +50,7 @@ def __init__(self, username=None, password=None,
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
Expand All @@ -75,11 +76,11 @@ def start(self):
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."""
Expand Down Expand Up @@ -138,9 +139,11 @@ def get_ids(self):
# 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']:
Expand All @@ -149,6 +152,7 @@ def get_ids(self):
break

self.network_ids = all_networks
return network_dict

def refresh(self, force_cache=False):
"""
Expand Down
7 changes: 3 additions & 4 deletions blinkpy/sync_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,18 @@
class BlinkSyncModule():
"""Class to initialize sync module."""

def __init__(self, blink):
def __init__(self, blink, network_name, network_id):
"""
Initialize Blink sync module.
:param blink: Blink class instantiation
"""
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
Expand Down Expand Up @@ -79,7 +79,6 @@ def start(self):
"""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']
Expand Down
19 changes: 12 additions & 7 deletions tests/test_blinkpy.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def setUp(self):
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()

Expand Down Expand Up @@ -110,9 +110,9 @@ def test_multiple_networks(self, mock_net, mock_sess):
'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)
Expand All @@ -124,9 +124,9 @@ def test_multiple_onboarded_networks(self, mock_net, mock_sess):
'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)
Expand All @@ -143,3 +143,8 @@ def test_throttle(self, mock_time, mock_sess):
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')
6 changes: 3 additions & 3 deletions tests/test_cameras.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ def setUp(self):
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."""
Expand Down
33 changes: 16 additions & 17 deletions tests/test_sync_module.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def setUp(self):
'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):
Expand All @@ -35,12 +35,12 @@ def tearDown(self):
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."""
Expand All @@ -54,13 +54,13 @@ def test_get_videos_one_page(self, mock_resp):
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."""
Expand All @@ -71,17 +71,16 @@ def test_get_videos_multi_page(self, mock_resp):
'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',
Expand All @@ -93,9 +92,9 @@ def test_sync_start(self, mock_resp):
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')

0 comments on commit ed25745

Please sign in to comment.