diff --git a/README.rst b/README.rst index b3d29d5..1e12772 100644 --- a/README.rst +++ b/README.rst @@ -166,6 +166,13 @@ Check `NPM Registry `_ for updates. npm The name used on NPM Registry, e.g. ``coffee-script``. +Check Hackage +---------- +Check `Hackage `_ for updates. + +hackage + The name used on Hackage, e.g. ``pandoc``. + 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 ec7ea4b..6b5741b 100644 --- a/nvchecker/get_version.py +++ b/nvchecker/get_version.py @@ -5,7 +5,7 @@ logger = logging.getLogger(__name__) handler_precedence = ( 'github', 'gitcafe', 'aur', 'pypi', 'archpkg', 'gems', 'pacman', 'cmd', 'bitbucket', 'gcode_hg', 'gcode_svn', 'regex', 'manual', 'vcs', - 'npm', + 'npm', 'hackage', ) def get_version(name, conf, callback): diff --git a/nvchecker/source/hackage.py b/nvchecker/source/hackage.py new file mode 100644 index 0000000..edfe7f8 --- /dev/null +++ b/nvchecker/source/hackage.py @@ -0,0 +1,17 @@ +import json +from functools import partial + +from tornado.httpclient import AsyncHTTPClient + +HACKAGE_URL = 'https://hackage.haskell.org/package/%s/preferred.json' + +def get_version(name, conf, callback): + repo = conf.get('hackage') or name + url = HACKAGE_URL % repo + AsyncHTTPClient().fetch(url, user_agent='lilydjwg/nvchecker', + callback=partial(_hackage_done, name, callback)) + +def _hackage_done(name, callback, res): + data = json.loads(res.body.decode('utf-8')) + version = data['normal-version'][0] + callback(name, version)