diff --git a/README.rst b/README.rst index 7bc4b15..3aaa936 100644 --- a/README.rst +++ b/README.rst @@ -189,6 +189,9 @@ sort_version_key ``vercmp``. Default value is ``parse_version``. ``parse_version`` use ``pkg_resources.parse_version``. ``vercmp`` use ``pyalpm.vercmp``. +proxy + The HTTP proxy to use. The format is ``host:port``, e.g. ``localhost:8087``. This requires `pycurl `_. + An environment variable ``NVCHECKER_GITHUB_TOKEN`` can be set to a GitHub OAuth token in order to request more frequently than anonymously. Check BitBucket @@ -284,6 +287,9 @@ Check `MetaCPAN `_ for updates. cpan The name used on CPAN, e.g. ``YAML``. +proxy + The HTTP proxy to use. The format is ``host:port``, e.g. ``localhost:8087``. This requires `pycurl `_. + Check Packagist --------------- Check `Packagist `_ for updates. diff --git a/nvchecker/source/github.py b/nvchecker/source/github.py index e1f79d9..e8f0614 100644 --- a/nvchecker/source/github.py +++ b/nvchecker/source/github.py @@ -4,6 +4,7 @@ from functools import partial from tornado.httpclient import AsyncHTTPClient, HTTPRequest +from .base import pycurl from ..sortversion import sort_version_keys GITHUB_URL = 'https://api.github.com/repos/%s/commits?sha=%s' @@ -26,7 +27,15 @@ def get_version(name, conf, callback): headers = {'Accept': "application/vnd.github.quicksilver-preview+json"} if 'NVCHECKER_GITHUB_TOKEN' in os.environ: headers['Authorization'] = 'token %s' % os.environ['NVCHECKER_GITHUB_TOKEN'] - request = HTTPRequest(url, headers=headers, user_agent='lilydjwg/nvchecker') + + kwargs = {} + if conf.get('proxy'): + if pycurl: + kwargs['proxy_host'] = "".join(conf['proxy'].split(':')[:-1]) + kwargs['proxy_port'] = int(conf['proxy'].split(':')[-1]) + else: + logger.warn('%s: proxy set but not used because pycurl is unavailable.', name) + request = HTTPRequest(url, headers=headers, user_agent='lilydjwg/nvchecker', **kwargs) AsyncHTTPClient().fetch(request, callback=partial(_github_done, name, use_latest_release, use_max_tag, ignored_tags, sort_version_key, callback)) diff --git a/nvchecker/source/simple_json.py b/nvchecker/source/simple_json.py index 211dff5..87beff0 100644 --- a/nvchecker/source/simple_json.py +++ b/nvchecker/source/simple_json.py @@ -3,13 +3,23 @@ from functools import partial from tornado.httpclient import AsyncHTTPClient +from .base import pycurl + def simple_json(urlpat, confkey, version_from_json): def get_version(name, conf, callback): repo = conf.get(confkey) or name url = urlpat % repo + kwargs = {} + if conf.get('proxy'): + if pycurl: + kwargs['proxy_host'] = "".join(conf['proxy'].split(':')[:-1]) + kwargs['proxy_port'] = int(conf['proxy'].split(':')[-1]) + else: + logger.warn('%s: proxy set but not used because pycurl is unavailable.', name) + AsyncHTTPClient().fetch(url, user_agent='lilydjwg/nvchecker', - callback=partial(_json_done, name, callback)) + callback=partial(_json_done, name, callback), **kwargs) def _json_done(name, callback, res): data = json.loads(res.body.decode('utf-8'))