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 functools import partial
from tornado.httpclient import AsyncHTTPClient
from .simple_json import simple_json
# 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 _version_from_json(data):
return str(data['version'])
def _cpan_done(name, callback, res):
data = json.loads(res.body.decode('utf-8'))
version = str(data['version'])
callback(name, version)
get_version = simple_json(
CPAN_URL,
'cpan',
_version_from_json,
)

View file

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

View file

@ -1,17 +1,12 @@
import json
from functools import partial
from tornado.httpclient import AsyncHTTPClient
from .simple_json import simple_json
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 _version_from_json(data):
return data['normal-version'][0]
def _hackage_done(name, callback, res):
data = json.loads(res.body.decode('utf-8'))
version = data['normal-version'][0]
callback(name, version)
get_version = simple_json(
HACKAGE_URL,
'hackage',
_version_from_json,
)

View file

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

View file

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