use a common module for sources with simple JSON API

closes #19
This commit is contained in:
lilydjwg 2015-11-04 22:42:32 +08:00
parent 13c1253c19
commit 1d3abf73b2
6 changed files with 59 additions and 65 deletions

View file

@ -1,18 +1,13 @@
import json from .simple_json import simple_json
from functools import partial
from tornado.httpclient import AsyncHTTPClient
# Using metacpan # Using metacpan
CPAN_URL = 'https://api.metacpan.org/release/%s' CPAN_URL = 'https://api.metacpan.org/release/%s'
def get_version(name, conf, callback): def _version_from_json(data):
repo = conf.get('cpan') or name return str(data['version'])
url = CPAN_URL % repo
AsyncHTTPClient().fetch(url, user_agent='lilydjwg/nvchecker',
callback=partial(_cpan_done, name, callback))
def _cpan_done(name, callback, res): get_version = simple_json(
data = json.loads(res.body.decode('utf-8')) CPAN_URL,
version = str(data['version']) 'cpan',
callback(name, version) _version_from_json,
)

View file

@ -1,17 +1,12 @@
import json from .simple_json import simple_json
from functools import partial
from tornado.httpclient import AsyncHTTPClient
GEMS_URL = 'https://rubygems.org/api/v1/versions/%s.json' GEMS_URL = 'https://rubygems.org/api/v1/versions/%s.json'
def get_version(name, conf, callback): def _version_from_json(data):
repo = conf.get('gems') or name return data[0]['number']
url = GEMS_URL % repo
AsyncHTTPClient().fetch(url, user_agent='lilydjwg/nvchecker',
callback=partial(_gems_done, name, callback))
def _gems_done(name, callback, res): get_version = simple_json(
data = json.loads(res.body.decode('utf-8')) GEMS_URL,
version = data[0]['number'] 'gems',
callback(name, version) _version_from_json,
)

View file

@ -1,17 +1,12 @@
import json from .simple_json import simple_json
from functools import partial
from tornado.httpclient import AsyncHTTPClient
HACKAGE_URL = 'https://hackage.haskell.org/package/%s/preferred.json' HACKAGE_URL = 'https://hackage.haskell.org/package/%s/preferred.json'
def get_version(name, conf, callback): def _version_from_json(data):
repo = conf.get('hackage') or name return data['normal-version'][0]
url = HACKAGE_URL % repo
AsyncHTTPClient().fetch(url, user_agent='lilydjwg/nvchecker',
callback=partial(_hackage_done, name, callback))
def _hackage_done(name, callback, res): get_version = simple_json(
data = json.loads(res.body.decode('utf-8')) HACKAGE_URL,
version = data['normal-version'][0] 'hackage',
callback(name, version) _version_from_json,
)

View file

@ -1,17 +1,12 @@
import json from .simple_json import simple_json
from functools import partial
from tornado.httpclient import AsyncHTTPClient
NPM_URL = 'https://registry.npmjs.org/%s' NPM_URL = 'https://registry.npmjs.org/%s'
def get_version(name, conf, callback): def _version_from_json(data):
repo = conf.get('npm') or name return data['dist-tags']['latest']
url = NPM_URL % repo
AsyncHTTPClient().fetch(url, user_agent='lilydjwg/nvchecker',
callback=partial(_npm_done, name, callback))
def _npm_done(name, callback, res): get_version = simple_json(
data = json.loads(res.body.decode('utf-8')) NPM_URL,
version = data['dist-tags']['latest'] 'npm',
callback(name, version) _version_from_json,
)

View file

@ -1,17 +1,12 @@
import json from .simple_json import simple_json
from functools import partial
from tornado.httpclient import AsyncHTTPClient
PYPI_URL = 'https://pypi.python.org/pypi/%s/json' PYPI_URL = 'https://pypi.python.org/pypi/%s/json'
def get_version(name, conf, callback): def _version_from_json(data):
repo = conf.get('pypi') or name return data['info']['version']
url = PYPI_URL % repo
AsyncHTTPClient().fetch(url, user_agent='lilydjwg/nvchecker',
callback=partial(_pypi_done, name, callback))
def _pypi_done(name, callback, res): get_version = simple_json(
data = json.loads(res.body.decode('utf-8')) PYPI_URL,
version = data['info']['version'] 'pypi',
callback(name, version) _version_from_json,
)

View file

@ -0,0 +1,19 @@
import json
from functools import partial
from tornado.httpclient import AsyncHTTPClient
def simple_json(urlpat, confkey, version_from_json):
def get_version(name, conf, callback):
repo = conf.get(confkey) or name
url = urlpat % repo
AsyncHTTPClient().fetch(url, user_agent='lilydjwg/nvchecker',
callback=partial(_json_done, name, callback))
def _json_done(name, callback, res):
data = json.loads(res.body.decode('utf-8'))
version = version_from_json(data)
callback(name, version)
return get_version