From a4f65c11021fa5caaa033d585c11305947651f8f Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Tue, 30 Oct 2018 20:24:39 -0400 Subject: [PATCH 01/20] dev version bump --- blinkpy/helpers/constants.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blinkpy/helpers/constants.py b/blinkpy/helpers/constants.py index db5d0077..d92280e8 100644 --- a/blinkpy/helpers/constants.py +++ b/blinkpy/helpers/constants.py @@ -3,8 +3,8 @@ import os MAJOR_VERSION = 0 -MINOR_VERSION = 10 -PATCH_VERSION = 2 +MINOR_VERSION = 11 +PATCH_VERSION = '0.dev' __version__ = '{}.{}.{}'.format(MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION) From 7710e3f972d0b96c37d9f289bdda992c9551f853 Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Tue, 30 Oct 2018 21:08:43 -0400 Subject: [PATCH 02/20] Errant whitespace --- blinkpy/helpers/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blinkpy/helpers/constants.py b/blinkpy/helpers/constants.py index d92280e8..c0e1538f 100644 --- a/blinkpy/helpers/constants.py +++ b/blinkpy/helpers/constants.py @@ -4,7 +4,7 @@ MAJOR_VERSION = 0 MINOR_VERSION = 11 -PATCH_VERSION = '0.dev' +PATCH_VERSION = '0.dev' __version__ = '{}.{}.{}'.format(MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION) From c621ba3150b8adbff9667c08a8f25f6e66cba46c Mon Sep 17 00:00:00 2001 From: md-reddevil Date: Wed, 14 Nov 2018 09:34:25 +0200 Subject: [PATCH 03/20] fix check command status --- blinkpy/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blinkpy/api.py b/blinkpy/api.py index df0772c6..9a987a5c 100644 --- a/blinkpy/api.py +++ b/blinkpy/api.py @@ -50,7 +50,7 @@ def request_system_disarm(blink, network): def request_command_status(blink, network, command_id): """Request command status.""" - url = "{}/network/{}/command_id/{}".format(blink.urls.base_url, + url = "{}/network/{}/command/{}".format(blink.urls.base_url, network, command_id) return http_get(blink, url) From 9c1974c227c1b8b6d7cd6a086c2ff23657bd8d82 Mon Sep 17 00:00:00 2001 From: md-reddevil Date: Wed, 14 Nov 2018 09:39:44 +0200 Subject: [PATCH 04/20] Add method to request the Network/System status Home screen method returns just the information about last added System(network). The method "request_network_status", should replace the homescreen method in order to obtain all the information about a system. --- blinkpy/api.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/blinkpy/api.py b/blinkpy/api.py index 9a987a5c..d6fd4ac1 100644 --- a/blinkpy/api.py +++ b/blinkpy/api.py @@ -29,6 +29,11 @@ def request_networks(blink): url = "{}/networks".format(blink.urls.base_url) return http_get(blink, url) +def request_network_status(blink, network): + """Request network information.""" + url = "{}/network/{}".format(blink.urls.base_url, network) + return http_get(blink, url) + def request_syncmodule(blink, network): """Request sync module info.""" From c83b173a173bcf5d47268616202bde1d8af4140c Mon Sep 17 00:00:00 2001 From: md-reddevil Date: Wed, 14 Nov 2018 09:55:17 +0200 Subject: [PATCH 05/20] update description of the networks method --- blinkpy/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blinkpy/api.py b/blinkpy/api.py index d6fd4ac1..74c74c97 100644 --- a/blinkpy/api.py +++ b/blinkpy/api.py @@ -25,7 +25,7 @@ def request_login(blink, url, username, password): def request_networks(blink): - """Request network information.""" + """Request all networks information.""" url = "{}/networks".format(blink.urls.base_url) return http_get(blink, url) From d62429189eea27dbab65656c4c38d071e22e9062 Mon Sep 17 00:00:00 2001 From: md-reddevil <16707502+md-reddevil@users.noreply.github.com> Date: Wed, 14 Nov 2018 11:04:40 +0200 Subject: [PATCH 06/20] Fix formatting issue in api.py --- blinkpy/api.py | 1 + 1 file changed, 1 insertion(+) diff --git a/blinkpy/api.py b/blinkpy/api.py index 74c74c97..a968c083 100644 --- a/blinkpy/api.py +++ b/blinkpy/api.py @@ -29,6 +29,7 @@ def request_networks(blink): url = "{}/networks".format(blink.urls.base_url) return http_get(blink, url) + def request_network_status(blink, network): """Request network information.""" url = "{}/network/{}".format(blink.urls.base_url, network) From 8b0507f1a7a91d566def18e80998ef7d0bcfa81e Mon Sep 17 00:00:00 2001 From: md-reddevil <16707502+md-reddevil@users.noreply.github.com> Date: Wed, 14 Nov 2018 15:57:46 +0200 Subject: [PATCH 07/20] fix indentation for method request_command_status --- blinkpy/api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blinkpy/api.py b/blinkpy/api.py index a968c083..6b885773 100644 --- a/blinkpy/api.py +++ b/blinkpy/api.py @@ -57,8 +57,8 @@ def request_system_disarm(blink, network): def request_command_status(blink, network, command_id): """Request command status.""" url = "{}/network/{}/command/{}".format(blink.urls.base_url, - network, - command_id) + network, + command_id) return http_get(blink, url) From 557f21b637e60ba2f17e84cc99902770266bd117 Mon Sep 17 00:00:00 2001 From: md-reddevil Date: Sat, 17 Nov 2018 18:12:26 +0200 Subject: [PATCH 08/20] Use network_status instead of homescreen Use network_status to check if System is armed or disarmed --- blinkpy/sync_module.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/blinkpy/sync_module.py b/blinkpy/sync_module.py index d1fa668e..bd0f7a60 100644 --- a/blinkpy/sync_module.py +++ b/blinkpy/sync_module.py @@ -31,6 +31,7 @@ def __init__(self, blink): self.host = None self.summary = None self.homescreen = None + self.network_info = None self.record_dates = {} self.videos = {} self.events = [] @@ -64,7 +65,7 @@ def online(self): @property def arm(self): """Return status of sync module: armed/disarmed.""" - return self.homescreen['network']['armed'] + return self.network_info['network']['armed'] @arm.setter def arm(self, value): @@ -88,6 +89,8 @@ def start(self): self.homescreen = api.request_homescreen(self.blink) + self.network_info = api.request_network_status(self.blink,self.network_id) + camera_info = self.get_camera_info() for camera_config in camera_info: name = camera_config['name'] @@ -114,6 +117,7 @@ def refresh(self, force_cache=False): self.events = self.get_events() self.videos = self.get_videos() self.homescreen = api.request_homescreen(self.blink) + self.network_info = api.request_network_status(self.blink,self.network_id) camera_info = self.get_camera_info() for camera_config in camera_info: name = camera_config['name'] From 4f4189933814af7c7d6fbe8e92d13d5dfdea6841 Mon Sep 17 00:00:00 2001 From: md-reddevil Date: Sat, 17 Nov 2018 18:18:57 +0200 Subject: [PATCH 09/20] fix indentation --- blinkpy/sync_module.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/blinkpy/sync_module.py b/blinkpy/sync_module.py index bd0f7a60..4f7e7ea8 100644 --- a/blinkpy/sync_module.py +++ b/blinkpy/sync_module.py @@ -89,7 +89,8 @@ def start(self): self.homescreen = api.request_homescreen(self.blink) - self.network_info = api.request_network_status(self.blink,self.network_id) + self.network_info = api.request_network_status(self.blink, + self.network_id) camera_info = self.get_camera_info() for camera_config in camera_info: @@ -117,7 +118,8 @@ def refresh(self, force_cache=False): self.events = self.get_events() self.videos = self.get_videos() self.homescreen = api.request_homescreen(self.blink) - self.network_info = api.request_network_status(self.blink,self.network_id) + self.network_info = api.request_network_status(self.blink, + self.network_id) camera_info = self.get_camera_info() for camera_config in camera_info: name = camera_config['name'] From bdc760608eece7e96e840c7096959afb79b2c580 Mon Sep 17 00:00:00 2001 From: md-reddevil Date: Sat, 17 Nov 2018 18:20:28 +0200 Subject: [PATCH 10/20] fix indentation --- blinkpy/sync_module.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/blinkpy/sync_module.py b/blinkpy/sync_module.py index 4f7e7ea8..39fde82e 100644 --- a/blinkpy/sync_module.py +++ b/blinkpy/sync_module.py @@ -89,8 +89,7 @@ def start(self): self.homescreen = api.request_homescreen(self.blink) - self.network_info = api.request_network_status(self.blink, - self.network_id) + self.network_info = api.request_network_status(self.blink, self.network_id) camera_info = self.get_camera_info() for camera_config in camera_info: @@ -118,8 +117,7 @@ def refresh(self, force_cache=False): self.events = self.get_events() self.videos = self.get_videos() self.homescreen = api.request_homescreen(self.blink) - self.network_info = api.request_network_status(self.blink, - self.network_id) + self.network_info = api.request_network_status(self.blink, self.network_id) camera_info = self.get_camera_info() for camera_config in camera_info: name = camera_config['name'] From cec6035d23b6c0e04c4946fa1d28a9f6718249b2 Mon Sep 17 00:00:00 2001 From: md-reddevil <16707502+md-reddevil@users.noreply.github.com> Date: Sun, 18 Nov 2018 14:01:22 +0200 Subject: [PATCH 11/20] fix tests after API changes --- tests/test_sync_module.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_sync_module.py b/tests/test_sync_module.py index bda50fa3..206a9622 100644 --- a/tests/test_sync_module.py +++ b/tests/test_sync_module.py @@ -90,6 +90,7 @@ def test_sync_start(self, mock_resp): {}, {'devicestatus': {}}, None, + None, None ] self.blink.sync.start() From 2e5e34391372cb5b7d273194888cd5c2c1c93e3f Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Sun, 18 Nov 2018 14:06:21 +0200 Subject: [PATCH 12/20] Update blinkpy/sync_module.py fix linting Co-Authored-By: md-reddevil <16707502+md-reddevil@users.noreply.github.com> --- blinkpy/sync_module.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/blinkpy/sync_module.py b/blinkpy/sync_module.py index 39fde82e..8b2c0e73 100644 --- a/blinkpy/sync_module.py +++ b/blinkpy/sync_module.py @@ -89,7 +89,8 @@ def start(self): self.homescreen = api.request_homescreen(self.blink) - self.network_info = api.request_network_status(self.blink, self.network_id) + self.network_info = api.request_network_status(self.blink, + self.network_id) camera_info = self.get_camera_info() for camera_config in camera_info: From d17183a152f51df4abad90bb70be4975810813e8 Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Mon, 19 Nov 2018 12:42:54 -0500 Subject: [PATCH 13/20] Fixed broken sync module test --- tests/test_sync_module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_sync_module.py b/tests/test_sync_module.py index 206a9622..07d654fa 100644 --- a/tests/test_sync_module.py +++ b/tests/test_sync_module.py @@ -88,9 +88,9 @@ def test_sync_start(self, mock_resp): 'status': 'foobar'}}, {'event': True}, {}, + {}, {'devicestatus': {}}, None, - None, None ] self.blink.sync.start() From 3c7892385352079227c6251eb88257870bea0bb3 Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Mon, 19 Nov 2018 12:46:01 -0500 Subject: [PATCH 14/20] Fix linting error (line was too long) --- blinkpy/sync_module.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/blinkpy/sync_module.py b/blinkpy/sync_module.py index 8b2c0e73..c106e70b 100644 --- a/blinkpy/sync_module.py +++ b/blinkpy/sync_module.py @@ -118,7 +118,8 @@ def refresh(self, force_cache=False): self.events = self.get_events() self.videos = self.get_videos() self.homescreen = api.request_homescreen(self.blink) - self.network_info = api.request_network_status(self.blink, self.network_id) + self.network_info = api.request_network_status(self.blink, + self.network_id) camera_info = self.get_camera_info() for camera_config in camera_info: name = camera_config['name'] From a6e02433b60a1063f888263db8abe94303d324d6 Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Tue, 20 Nov 2018 21:12:12 -0500 Subject: [PATCH 15/20] Fix #113 --- blinkpy/helpers/util.py | 8 ++++---- tests/test_api.py | 10 ++++++---- tests/test_blinkpy.py | 3 +-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/blinkpy/helpers/util.py b/blinkpy/helpers/util.py index 253220e2..a06fe21d 100644 --- a/blinkpy/helpers/util.py +++ b/blinkpy/helpers/util.py @@ -50,8 +50,7 @@ def http_req(blink, url='http://example.com', data=None, headers=None, response = blink.session.send(prepped, stream=stream) if json_resp and 'code' in response.json(): if is_retry: - _LOGGER.error(("Cannot obtain new token for server auth. " - "Please report this issue on %s"), PROJECT_URL) + _LOGGER.error("Cannot obtain new token for server auth.") return None else: headers = attempt_reauthorization(blink) @@ -59,13 +58,14 @@ def http_req(blink, url='http://example.com', data=None, headers=None, reqtype=reqtype, stream=stream, json_resp=json_resp, is_retry=True) except (exceptions.ConnectionError, exceptions.Timeout): - _LOGGER.error("Cannot connect to server with url %s.", url) + _LOGGER.info("Cannot connect to server with url %s.", url) if not is_retry: headers = attempt_reauthorization(blink) return http_req(blink, url=url, data=data, headers=headers, reqtype=reqtype, stream=stream, json_resp=json_resp, is_retry=True) - _LOGGER.error("Possible issue with Blink servers.") + _LOGGER.error("Endpoint %s failed. Possible issue with Blink servers.", + url) return None if json_resp: diff --git a/tests/test_api.py b/tests/test_api.py index 103367d8..7b516aaa 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -25,13 +25,15 @@ def tearDown(self): def test_http_req_connect_error(self, mock_auth): """Test http_get error condition.""" mock_auth.return_value = {'foo': 'bar'} - firstlog = ("ERROR:blinkpy.helpers.util:" - "Cannot connect to server with url {}").format( - 'http://notreal.fake.') + firstlog = ("INFO:blinkpy.helpers.util:" + "Cannot connect to server with url {}.").format( + 'http://notreal.fake') nextlog = ("INFO:blinkpy.helpers.util:" "Auth token expired, attempting reauthorization.") lastlog = ("ERROR:blinkpy.helpers.util:" - "Possible issue with Blink servers.") + "Endpoint {} failed. Possible issue with " + "Blink servers.").format( + 'http://notreal.fake') expected = [firstlog, nextlog, firstlog, lastlog] with self.assertLogs() as getlog: api.http_get(self.blink, 'http://notreal.fake') diff --git a/tests/test_blinkpy.py b/tests/test_blinkpy.py index 577d177c..87b1aa85 100644 --- a/tests/test_blinkpy.py +++ b/tests/test_blinkpy.py @@ -79,8 +79,7 @@ def test_bad_request(self, mock_sess): """Check that we raise an Exception with a bad request.""" self.blink.session = create_session() explog = ("ERROR:blinkpy.helpers.util:" - "Cannot obtain new token for server auth. " - "Please report this issue on {}").format(PROJECT_URL) + "Cannot obtain new token for server auth.") with self.assertRaises(BlinkException): http_req(self.blink, reqtype='bad') From 92088779e07eac2614a71152857f3a66a47ddc2b Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Tue, 20 Nov 2018 21:15:01 -0500 Subject: [PATCH 16/20] Added debug logging --- blinkpy/api.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/blinkpy/api.py b/blinkpy/api.py index 6b885773..f9db8df8 100644 --- a/blinkpy/api.py +++ b/blinkpy/api.py @@ -150,6 +150,7 @@ def http_get(blink, url, stream=False, json=True): """ if blink.auth_header is None: raise BlinkException(ERROR.AUTH_TOKEN) + _LOGGER.debug("Making GET request to %s", url) return http_req(blink, url=url, headers=blink.auth_header, reqtype='get', stream=stream, json_resp=json) @@ -162,4 +163,5 @@ def http_post(blink, url): """ if blink.auth_header is None: raise BlinkException(ERROR.AUTH_TOKEN) + _LOGGER.debug("Making POST request to %s", url) return http_req(blink, url=url, headers=blink.auth_header, reqtype='post') From 1e0d069dcd5f7a147655fb7d0efd76c7520b99f9 Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Tue, 20 Nov 2018 21:16:41 -0500 Subject: [PATCH 17/20] Fix linting errors --- blinkpy/helpers/util.py | 2 +- tests/test_api.py | 3 +-- tests/test_blinkpy.py | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/blinkpy/helpers/util.py b/blinkpy/helpers/util.py index a06fe21d..710f7bb0 100644 --- a/blinkpy/helpers/util.py +++ b/blinkpy/helpers/util.py @@ -2,7 +2,7 @@ import logging from requests import Request, Session, exceptions -from blinkpy.helpers.constants import BLINK_URL, PROJECT_URL +from blinkpy.helpers.constants import BLINK_URL import blinkpy.helpers.errors as ERROR diff --git a/tests/test_api.py b/tests/test_api.py index 7b516aaa..e5f73996 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -32,8 +32,7 @@ def test_http_req_connect_error(self, mock_auth): "Auth token expired, attempting reauthorization.") lastlog = ("ERROR:blinkpy.helpers.util:" "Endpoint {} failed. Possible issue with " - "Blink servers.").format( - 'http://notreal.fake') + "Blink servers.").format('http://notreal.fake') expected = [firstlog, nextlog, firstlog, lastlog] with self.assertLogs() as getlog: api.http_get(self.blink, 'http://notreal.fake') diff --git a/tests/test_blinkpy.py b/tests/test_blinkpy.py index 87b1aa85..444581c2 100644 --- a/tests/test_blinkpy.py +++ b/tests/test_blinkpy.py @@ -14,7 +14,6 @@ from blinkpy.helpers.util import ( http_req, create_session, BlinkAuthenticationException, BlinkException, BlinkURLHandler) -from blinkpy.helpers.constants import PROJECT_URL import tests.mock_responses as mresp USERNAME = 'foobar' From 4b91fcb61544b0085e2b7eb40b32c1be68c96dbb Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Tue, 20 Nov 2018 21:20:35 -0500 Subject: [PATCH 18/20] Improved video page debug logging --- blinkpy/sync_module.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/blinkpy/sync_module.py b/blinkpy/sync_module.py index c106e70b..2a5e54ed 100644 --- a/blinkpy/sync_module.py +++ b/blinkpy/sync_module.py @@ -141,9 +141,10 @@ def get_videos(self, start_page=0, end_page=1): if not this_page: break videos.append(this_page) - + _LOGGER.debug("Getting videos from page %s through %s", + start_page, + end_page) for page in videos: - _LOGGER.debug("Retrieved video page %s", page) for entry in page: camera_name = entry['camera_name'] clip_addr = entry['address'] @@ -174,5 +175,5 @@ def get_videos(self, start_page=0, end_page=1): } ] self.record_dates = all_dates - + _LOGGER.debug("Retrieved a total of %s records".format(len(all_dates))) return self.videos From 1b571c7d4b191483171a0da5e509c48eccb2e37d Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Tue, 20 Nov 2018 21:21:42 -0500 Subject: [PATCH 19/20] Fix logging string format --- blinkpy/sync_module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blinkpy/sync_module.py b/blinkpy/sync_module.py index 2a5e54ed..ce4611cf 100644 --- a/blinkpy/sync_module.py +++ b/blinkpy/sync_module.py @@ -175,5 +175,5 @@ def get_videos(self, start_page=0, end_page=1): } ] self.record_dates = all_dates - _LOGGER.debug("Retrieved a total of %s records".format(len(all_dates))) + _LOGGER.debug("Retrieved a total of %s records", len(all_dates)) return self.videos From 7ee57b2c6bc16b37ceab978a81d9a67c11a7f36a Mon Sep 17 00:00:00 2001 From: Kevin Fronczak Date: Tue, 20 Nov 2018 21:40:18 -0500 Subject: [PATCH 20/20] Version bump --- CHANGES.rst | 28 ++++++++++++++++++---------- blinkpy/helpers/constants.py | 4 ++-- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index d5234d74..0636d7cd 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,6 +3,14 @@ Changelog A list of changes between each release +0.10.3 (2018-11-18) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +- Use networks endpoint rather than homecreen to retrieve arm/disarm status (`@md-reddevil `__) +- Fix incorrect command status endpoint (`@md-reddevil `__) +- Add extra debug logging +- Remove error prior to re-authorization (only log error when re-auth failed) + + 0.10.2 (2018-10-30) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Set minimum required version of the requests library to 2.20.0 due to vulnerability in earlier releases. @@ -11,19 +19,19 @@ A list of changes between each release 0.10.1 (2018-10-18) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Fix re-authorization bug (fixes `#101 `_) +- Fix re-authorization bug (fixes `#101 `__) - Log an error if saving video that doesn't exist 0.10.0 (2018-10-16) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Moved all API calls to own module for easier maintainability - Added network ids to sync module and cameras to allow for multi-network use -- Removed dependency on video existance prior to camera setup (fixes `#93 `_) +- Removed dependency on video existance prior to camera setup (fixes `#93 `__) - Camera wifi_strength now reported in wifi "bars" rather than dBm due to API endpoint change - Use homescreen thumbnail as fallback in case it's not in the camera endpoint - Removed "armed" and "status" attributes from camera (status of camera only reported by "motion_enabled" now) - Added serial number attributes to sync module and cameras -- Check network_id from login response and verify that network is onboarded (fixes `#90 `_) +- Check network_id from login response and verify that network is onboarded (fixes `#90 `__) - Check if retrieved clip is "None" prior to storing in cache 0.9.0 (2018-09-27) @@ -55,26 +63,26 @@ A list of changes between each release 0.8.0 (2018-05-21) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Added support for battery voltage level (fixes `#64 `_) +- Added support for battery voltage level (fixes `#64 `__) - Added motion detection per camera - Added fully accessible camera configuration dict -- Added celcius property to camera (fixes `#60 `_) +- Added celcius property to camera (fixes `#60 `__) 0.7.1 (2018-05-09) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -- Fixed pip 10 import issue during setup (`@fronzbot `_) +- Fixed pip 10 import issue during setup (`@fronzbot `__) 0.7.0 (2018-02-08) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Fixed style errors for bumped pydocstring and pylint versions -- Changed Blink.cameras dictionary to be case-insensitive (fixes `#35 `_) -- Changed api endpoint for video extraction (fixes `#35 `_ and `#41 `_) +- Changed Blink.cameras dictionary to be case-insensitive (fixes `#35 `__) +- Changed api endpoint for video extraction (fixes `#35 `__ and `#41 `__) - Removed last_motion() function from Blink class - Refactored code for better organization - Moved some request calls out of @property methods (enables future CLI support) - Renamed get_summary() method to summary and changed to @property - Added ability to download most recent video clip -- Improved camera arm/disarm handling (`@b10m `_) +- Improved camera arm/disarm handling (`@b10m `__) - Added authentication to ``login()`` function and deprecated ``setup_system()`` in favor of ``start()`` - Added ``attributes`` dictionary to camera object @@ -83,7 +91,7 @@ A list of changes between each release - Removed redundent properties that only called hidden variables - Revised request wrapper function to be more intelligent - Added tests to ensure exceptions are caught and handled (100% coverage!) -- Added auto-reauthorization (token refresh) when a request fails due to an expired token (`@tySwift93 `_) +- Added auto-reauthorization (token refresh) when a request fails due to an expired token (`@tySwift93 `__) - Added battery level string to reduce confusion with the way Blink reports battery level as integer from 0 to 3 0.5.2 (2017-03-12) diff --git a/blinkpy/helpers/constants.py b/blinkpy/helpers/constants.py index c0e1538f..67b6f5a6 100644 --- a/blinkpy/helpers/constants.py +++ b/blinkpy/helpers/constants.py @@ -3,8 +3,8 @@ import os MAJOR_VERSION = 0 -MINOR_VERSION = 11 -PATCH_VERSION = '0.dev' +MINOR_VERSION = 10 +PATCH_VERSION = 3 __version__ = '{}.{}.{}'.format(MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION)