Fetch shortcuts from GitHub and improve error handling

This commit is contained in:
ines 2017-04-26 18:00:28 +02:00
parent c2006166d3
commit 527d51ac9a
2 changed files with 19 additions and 11 deletions

View File

@ -13,4 +13,4 @@ __license__ = 'MIT'
__docs__ = 'https://spacy.io/docs/usage' __docs__ = 'https://spacy.io/docs/usage'
__download_url__ = 'https://github.com/explosion/spacy-models/releases/download' __download_url__ = 'https://github.com/explosion/spacy-models/releases/download'
__compatibility__ = 'https://raw.githubusercontent.com/explosion/spacy-models/master/compatibility.json' __compatibility__ = 'https://raw.githubusercontent.com/explosion/spacy-models/master/compatibility.json'
__shortcuts__ = {'en': 'en_core_web_sm', 'de': 'de_core_news_md', 'vectors': 'en_vectors_glove_md'} __shortcuts__ = 'https://raw.githubusercontent.com/explosion/spacy-models/master/shortcuts.json'

View File

@ -17,37 +17,45 @@ def download(model=None, direct=False):
if direct: if direct:
download_model('{m}/{m}.tar.gz'.format(m=model)) download_model('{m}/{m}.tar.gz'.format(m=model))
else: else:
model_name = about.__shortcuts__[model] if model in about.__shortcuts__ else model model_name = check_shortcut(model)
compatibility = get_compatibility() compatibility = get_compatibility()
version = get_version(model_name, compatibility) version = get_version(model_name, compatibility)
download_model('{m}-{v}/{m}-{v}.tar.gz'.format(m=model_name, v=version)) download_model('{m}-{v}/{m}-{v}.tar.gz'.format(m=model_name, v=version))
link_package(model_name, model, force=True) link_package(model_name, model, force=True)
def get_compatibility(): def get_json(url, desc):
version = about.__version__ r = requests.get(url)
r = requests.get(about.__compatibility__)
if r.status_code != 200: if r.status_code != 200:
util.sys_exit( util.sys_exit(
"Couldn't fetch compatibility table. Please find the right model for " "Couldn't fetch {d}. Please find the right model for your spaCy "
"your spaCy installation (v{v}), and download it manually:".format(v=version), "installation (v{v}), and download it manually:".format(d=desc, v=about.__version__),
"python -m spacy.download [full model name + version] --direct", "python -m spacy.download [full model name + version] --direct",
title="Server error ({c})".format(c=r.status_code)) title="Server error ({c})".format(c=r.status_code))
return r.json()
comp = r.json()['spacy']
def check_shortcut(model):
shortcuts = get_json(about.__shortcuts__, "available shortcuts")
return shortcuts.get(model, model)
def get_compatibility():
version = about.__version__
comp_table = get_json(about.__compatibility__, "compatibility table")
comp = comp_table['spacy']
if version not in comp: if version not in comp:
util.sys_exit( util.sys_exit(
"No compatible models found for v{v} of spaCy.".format(v=version), "No compatible models found for v{v} of spaCy.".format(v=version),
title="Compatibility error") title="Compatibility error")
else: return comp[version]
return comp[version]
def get_version(model, comp): def get_version(model, comp):
if model not in comp: if model not in comp:
util.sys_exit( util.sys_exit(
"No compatible model found for " "No compatible model found for "
"{m} (spaCy v{v}).".format(m=model, v=about.__version__), "'{m}' (spaCy v{v}).".format(m=model, v=about.__version__),
title="Compatibility error") title="Compatibility error")
return comp[model][0] return comp[model][0]