diff --git a/spacy/cli/package.py b/spacy/cli/package.py index 59b45ab5f..6a0f36ff9 100644 --- a/spacy/cli/package.py +++ b/spacy/cli/package.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import json import shutil +import requests from pathlib import Path from .. import about @@ -14,7 +15,11 @@ def package(input_dir, output_dir, force): output_path = Path(output_dir) check_dirs(input_path, output_path) + template_setup = get_template('setup.py') + template_init = get_template('en_model_name/__init__.py') + template_manifest = 'include meta.json' meta = generate_meta() + model_name = meta['lang'] + '_' + meta['name'] model_name_v = model_name + '-' + meta['version'] main_path = output_path / model_name_v @@ -23,13 +28,13 @@ def package(input_dir, output_dir, force): create_dirs(package_path, force) shutil.copytree(input_path, package_path / model_name_v) create_file(main_path / 'meta.json', json.dumps(meta, indent=2)) - create_file(main_path / 'setup.py', TEMPLATE_SETUP.strip()) - create_file(main_path / 'MANIFEST.in', TEMPLATE_MANIFEST.strip()) - create_file(package_path / '__init__.py', TEMPLATE_INIT.strip()) + create_file(main_path / 'setup.py', template_setup) + create_file(main_path / 'MANIFEST.in', template_manifest) + create_file(package_path / '__init__.py', template_init) util.print_msg( main_path.as_posix(), - "To build the package, run python setup.py sdist in that directory.", + "To build the package, run `python setup.py sdist` in that directory.", title="Successfully created package {p}".format(p=model_name_v)) @@ -60,7 +65,7 @@ def generate_meta(): settings = [('lang', 'Model language', 'en'), ('name', 'Model name', 'model'), ('version', 'Model version', '0.0.0'), - ('spacy_version', 'Required spaCy version', '>=2.0.0,<3.0.0'), + ('spacy_version', 'Required spaCy version', '>=1.7.0,<2.0.0'), ('description', 'Model description', False), ('author', 'Author', False), ('email', 'Author email', False), @@ -76,85 +81,11 @@ def generate_meta(): return meta -TEMPLATE_MANIFEST = """ -include meta.json -""" - - -TEMPLATE_SETUP = """ -#!/usr/bin/env python -# coding: utf8 -from __future__ import unicode_literals - -import io -import json -from os import path, walk -from shutil import copy -from setuptools import setup - - -def load_meta(fp): - with io.open(fp, encoding='utf8') as f: - return json.load(f) - - -def list_files(data_dir): - output = [] - for root, _, filenames in walk(data_dir): - for filename in filenames: - if not filename.startswith('.'): - output.append(path.join(root, filename)) - output = [path.relpath(p, path.dirname(data_dir)) for p in output] - output.append('meta.json') - return output - - -def setup_package(): - root = path.abspath(path.dirname(__file__)) - meta_path = path.join(root, 'meta.json') - meta = load_meta(meta_path) - model_name = str(meta['lang'] + '_' + meta['name']) - model_dir = path.join(model_name, model_name + '-' + meta['version']) - - copy(meta_path, path.join(root, model_name)) - copy(meta_path, path.join(root, model_dir)) - - setup( - name=model_name, - description=meta['description'], - author=meta['author'], - author_email=meta['email'], - url=meta['url'], - version=meta['version'], - license=meta['license'], - packages=[model_name], - package_data={model_name: list_files(model_dir)}, - install_requires=['spacy' + meta['spacy_version']], - zip_safe=False, - ) - - -if __name__ == '__main__': - setup_package() -""" - - -TEMPLATE_INIT = """ -from pathlib import Path -from spacy.util import get_lang_class -import pkg_resources -import json - - -def load_meta(): - with (Path(__file__).parent / 'meta.json').open() as f: - return json.load(f) - - -def load(**kwargs): - meta = load_meta() - version = meta['version'] - data_dir = pkg_resources.resource_filename(__name__, __name__ + '-' + version) - lang = get_lang_class(meta['lang']) - return lang(path=Path(data_dir), **kwargs) -""" +def get_template(filepath): + url = 'https://raw.githubusercontent.com/explosion/spacy-dev-resources/master/templates/model/' + r = requests.get(url + filepath) + if r.status_code != 200: + util.sys_exit( + "Couldn't fetch template files from GitHub.", + title="Server error ({c})".format(c=r.status_code)) + return r.text