|
1 |
| -from __future__ import print_function |
2 |
| - |
3 |
| -import urllib3.contrib.pyopenssl |
4 |
| -from pytradelib.utils import batch |
5 |
| - |
6 |
| -urllib3.contrib.pyopenssl.inject_into_urllib3() |
| 1 | +from __future__ import print_function |
7 | 2 |
|
8 | 3 | import requests
|
9 | 4 | import grequests
|
10 | 5 | from gevent import monkey
|
11 | 6 | monkey.patch_all()
|
12 | 7 |
|
| 8 | +from pytradelib.utils import batch |
13 | 9 | from pytradelib.logger import logger
|
14 | 10 |
|
15 | 11 |
|
16 | 12 | class Downloader(object):
|
17 |
| - def __init__(self, batch_size=100, sleep=None): |
| 13 | + def __init__(self, batch_size=25, sleep=None): |
18 | 14 | self._batch_size = batch_size
|
19 | 15 | self._sleep = sleep
|
20 | 16 |
|
@@ -55,20 +51,32 @@ def _download(self, url):
|
55 | 51 |
|
56 | 52 | def _bulk_download(self, urls):
|
57 | 53 | results = []
|
58 |
| - for batched_urls in batch(urls, self.batch_size, self.sleep): |
| 54 | + for i, batched_urls in enumerate(batch(urls, self.batch_size, self.sleep)): |
59 | 55 | for r in self.__bulk_download(batched_urls):
|
60 |
| - print('finished downloading ' + r.url) |
61 |
| - results.append( (r.url, r.content) ) |
| 56 | + results.append((r.url, r.content)) |
| 57 | + logger.debug('Downloaded %d of %d urls' % ( |
| 58 | + (i * self.batch_size) + self.batch_size, |
| 59 | + len(urls) |
| 60 | + )) |
| 61 | + logger.debug('got %d results' % len(results)) |
62 | 62 | return results
|
63 | 63 |
|
64 | 64 | def __bulk_download(self, urls, errors=None):
|
65 | 65 | errors = errors or []
|
| 66 | + |
| 67 | + def log_response(response, **kwargs): |
| 68 | + logger.info('Download completed: ' + response.url) |
| 69 | + |
66 | 70 | def exception_handler(req, ex):
|
67 | 71 | msg = 'Failed to download ' + req.url
|
68 | 72 | if isinstance(ex, requests.exceptions.Timeout):
|
69 | 73 | msg = 'Connection timed out: %(ex)s (%(url)s)' % {'ex': ex.__str__(), 'url': req.url}
|
70 | 74 | elif isinstance(ex, requests.exceptions.RequestException):
|
71 | 75 | msg = 'Error downloading: %(ex)s (%(url)s)' % {'ex': ex, 'url': req.url}
|
| 76 | + else: |
| 77 | + msg = ' '.join([msg, str(ex)]) |
72 | 78 | errors.append(req.url)
|
73 | 79 | logger.error(msg)
|
74 |
| - return grequests.map((grequests.get(url) for url in urls), exception_handler=exception_handler) |
| 80 | + |
| 81 | + return grequests.map((grequests.get(url, callback=log_response) for url in urls), |
| 82 | + exception_handler=exception_handler) |
0 commit comments