From 24319226191a65c99c0ba45a6f8d4deb047b5888 Mon Sep 17 00:00:00 2001 From: Felix Yan Date: Wed, 4 Nov 2015 18:15:40 +0800 Subject: [PATCH] Add support for CPAN --- README.rst | 7 +++++++ nvchecker/get_version.py | 1 + nvchecker/source/cpan.py | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 nvchecker/source/cpan.py diff --git a/README.rst b/README.rst index d2063f8..a22262c 100644 --- a/README.rst +++ b/README.rst @@ -159,6 +159,13 @@ Check `RubyGems `_ for updates. gems The name used on RubyGems, e.g. ``sass``. +Check CPAN +-------------- +Check `MetaCPAN `_ for updates. + +cpan + The name used on CPAN, e.g. ``YAML``. + Check Local Pacman Database --------------------------- This is used when you run ``nvchecker`` on an Arch Linux system and the program always keeps up with a package in your configured repositories for `Pacman`_. diff --git a/nvchecker/get_version.py b/nvchecker/get_version.py index 472d93f..d1f96fb 100644 --- a/nvchecker/get_version.py +++ b/nvchecker/get_version.py @@ -5,6 +5,7 @@ logger = logging.getLogger(__name__) handler_precedence = ( 'github', 'gitcafe', 'aur', 'pypi', 'archpkg', 'gems', 'pacman', 'cmd', 'bitbucket', 'gcode_hg', 'gcode_svn', 'regex', 'manual', 'vcs', + 'cpan', ) def get_version(name, conf, callback): diff --git a/nvchecker/source/cpan.py b/nvchecker/source/cpan.py new file mode 100644 index 0000000..dd999f2 --- /dev/null +++ b/nvchecker/source/cpan.py @@ -0,0 +1,18 @@ +import json +from functools import partial + +from tornado.httpclient import AsyncHTTPClient + +# Using metacpan +CPAN_URL = 'https://api.metacpan.org/release/%s' + +def get_version(name, conf, callback): + repo = conf.get('cpan') or name + url = CPAN_URL % repo + AsyncHTTPClient().fetch(url, user_agent='lilydjwg/nvchecker', + callback=partial(_cpan_done, name, callback)) + +def _cpan_done(name, callback, res): + data = json.loads(res.body.decode('utf-8')) + version = data['version'] + callback(name, version)