From 0ebddbefa1e0fc4b4f7b4a4f479ffe9e12806b43 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Tue, 18 Aug 2015 22:43:10 +0200 Subject: [PATCH] http: Steal download helper from Stream extension --- mopidy/internal/http.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/mopidy/internal/http.py b/mopidy/internal/http.py index 6ff59590..e35b8561 100644 --- a/mopidy/internal/http.py +++ b/mopidy/internal/http.py @@ -1,9 +1,14 @@ from __future__ import absolute_import, unicode_literals +import logging +import time + import requests from mopidy import httpclient +logger = logging.getLogger(__name__) + def get_requests_session(proxy_config, user_agent): proxy = httpclient.format_proxy(proxy_config) @@ -14,3 +19,30 @@ def get_requests_session(proxy_config, user_agent): session.headers.update({'user-agent': full_user_agent}) return session + + +def download(session, uri, timeout=1.0, chunk_size=4096): + try: + response = session.get(uri, stream=True, timeout=timeout) + except requests.exceptions.Timeout: + logger.warning('Download of %r failed due to connection timeout after ' + '%.3fs', uri, timeout) + return None + except requests.exceptions.InvalidSchema: + logger.warning('%s has an unsupported schema.', uri) + return None + + content = [] + deadline = time.time() + timeout + for chunk in response.iter_content(chunk_size): + content.append(chunk) + if time.time() > deadline: + logger.warning('Download of %r failed due to download taking more ' + 'than %.3fs', uri, timeout) + return None + + if not response.ok: + logger.warning('Problem downloading %r: %s', uri, response.reason) + return None + + return b''.join(content)