Merge pull request #323 from fronzbot/image-and-video-timeout

Add different timeout for video and image retrieval
This commit is contained in:
Kevin Fronczak
2020-07-02 11:40:31 -04:00
committed by GitHub
5 changed files with 29 additions and 9 deletions
+3 -3
View File
@@ -3,7 +3,7 @@
import logging
from json import dumps
from blinkpy.helpers.util import get_time, Throttle
from blinkpy.helpers.constants import DEFAULT_URL
from blinkpy.helpers.constants import DEFAULT_URL, TIMEOUT
_LOGGER = logging.getLogger(__name__)
@@ -284,7 +284,7 @@ def request_motion_detection_disable(blink, network, camera_id):
return http_post(blink, url)
def http_get(blink, url, stream=False, json=True, is_retry=False):
def http_get(blink, url, stream=False, json=True, is_retry=False, timeout=TIMEOUT):
"""
Perform an http get request.
@@ -304,7 +304,7 @@ def http_get(blink, url, stream=False, json=True, is_retry=False):
)
def http_post(blink, url, is_retry=False):
def http_post(blink, url, is_retry=False, timeout=TIMEOUT):
"""
Perform an http post request.
+5 -3
View File
@@ -4,7 +4,7 @@ from functools import partial
from requests import Request, Session, exceptions
from blinkpy import api
from blinkpy.helpers import util
from blinkpy.helpers.constants import BLINK_URL, LOGIN_ENDPOINT
from blinkpy.helpers.constants import BLINK_URL, LOGIN_ENDPOINT, TIMEOUT
_LOGGER = logging.getLogger(__name__)
@@ -56,7 +56,7 @@ class Auth:
def create_session(self):
"""Create a session for blink communication."""
sess = Session()
sess.get = partial(sess.get, timeout=10)
sess.get = partial(sess.get, timeout=TIMEOUT)
return sess
def prepare_request(self, url, headers, data, reqtype):
@@ -140,6 +140,7 @@ class Auth:
stream=False,
json_resp=True,
is_retry=False,
timeout=TIMEOUT,
):
"""
Perform server requests.
@@ -154,7 +155,7 @@ class Auth:
"""
req = self.prepare_request(url, headers, data, reqtype)
try:
response = self.session.send(req, stream=stream)
response = self.session.send(req, stream=stream, timeout=timeout)
return self.validate_response(response, json_resp)
except (exceptions.ConnectionError, exceptions.Timeout):
_LOGGER.error(
@@ -182,6 +183,7 @@ class Auth:
stream=stream,
json_resp=json_resp,
is_retry=True,
timeout=timeout,
)
_LOGGER.error("Unable to access %s after token refresh.", url)
except TokenRefreshFailed:
+8 -1
View File
@@ -29,6 +29,7 @@ from blinkpy.helpers.constants import (
DEFAULT_MOTION_INTERVAL,
DEFAULT_REFRESH,
MIN_THROTTLE_TIME,
TIMEOUT_MEDIA,
)
from blinkpy.helpers.constants import __version__
from blinkpy.auth import Auth, TokenRefreshFailed, LoginError
@@ -330,7 +331,13 @@ class Blink:
_LOGGER.info("%s already exists, skipping...", filename)
continue
response = api.http_get(self, url=clip_address, stream=True, json=False)
response = api.http_get(
self,
url=clip_address,
stream=True,
json=False,
timeout=TIMEOUT_MEDIA,
)
with open(filename, "wb") as vidfile:
copyfileobj(response.raw, vidfile)
+11 -2
View File
@@ -3,6 +3,7 @@
from shutil import copyfileobj
import logging
from blinkpy import api
from blinkpy.helpers.constants import TIMEOUT_MEDIA
_LOGGER = logging.getLogger(__name__)
@@ -182,11 +183,19 @@ class BlinkCamera:
if new_thumbnail is not None and (update_cached_image or force_cache):
self._cached_image = api.http_get(
self.sync.blink, url=self.thumbnail, stream=True, json=False
self.sync.blink,
url=self.thumbnail,
stream=True,
json=False,
timeout=TIMEOUT_MEDIA,
)
if clip_addr is not None and (update_cached_video or force_cache):
self._cached_video = api.http_get(
self.sync.blink, url=self.clip, stream=True, json=False
self.sync.blink,
url=self.clip,
stream=True,
json=False,
timeout=TIMEOUT_MEDIA,
)
def get_liveview(self):
+2
View File
@@ -65,3 +65,5 @@ DEFAULT_REFRESH = 30
MIN_THROTTLE_TIME = 2
SIZE_NOTIFICATION_KEY = 152
SIZE_UID = 16
TIMEOUT = 10
TIMEOUT_MEDIA = 90