diff --git a/setup.py b/setup.py index 7c6f2eb8..acd0941c 100755 --- a/setup.py +++ b/setup.py @@ -1,74 +1,76 @@ #!/usr/bin/env python3 # Copyright (C) 2015-2018 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information from setuptools import setup, find_packages from os import path from io import open here = path.abspath(path.dirname(__file__)) # Get the long description from the README file with open(path.join(here, 'README.md'), encoding='utf-8') as f: long_description = f.read() def parse_requirements(name=None): if name: reqf = 'requirements-%s.txt' % name else: reqf = 'requirements.txt' requirements = [] if not path.exists(reqf): return requirements with open(reqf) as f: for line in f.readlines(): line = line.strip() if not line or line.startswith('#'): continue requirements.append(line) return requirements setup( name='swh.storage', description='Software Heritage storage manager', long_description=long_description, long_description_content_type='text/markdown', author='Software Heritage developers', author_email='swh-devel@inria.fr', url='https://forge.softwareheritage.org/diffusion/DSTO/', packages=find_packages(), scripts=[ 'bin/swh-storage-add-dir', ], entry_points=''' [console_scripts] swh-storage=swh.storage.cli:main + [swh.cli.subcommands] + storage=swh.storage.cli:storage ''', setup_requires=['vcversioner'], install_requires=parse_requirements() + parse_requirements('swh'), extras_require={ 'testing': parse_requirements('test'), 'schemata': ['SQLAlchemy'], }, vcversioner={}, include_package_data=True, classifiers=[ "Programming Language :: Python :: 3", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: OS Independent", "Development Status :: 5 - Production/Stable", ], project_urls={ 'Bug Reports': 'https://forge.softwareheritage.org/maniphest', 'Funding': 'https://www.softwareheritage.org/donate', 'Source': 'https://forge.softwareheritage.org/source/swh-storage', }, ) diff --git a/swh/storage/cli.py b/swh/storage/cli.py index 42bbf9ff..37f6c89e 100644 --- a/swh/storage/cli.py +++ b/swh/storage/cli.py @@ -1,25 +1,44 @@ # Copyright (C) 2015-2019 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information +import logging + import click +from swh.core.cli import CONTEXT_SETTINGS from swh.storage.api.server import load_and_check_config, app -@click.command() +@click.group(name='storage', context_settings=CONTEXT_SETTINGS) +@click.pass_context +def storage(ctx): + '''Software Heritage Storage tools.''' + pass + + +@storage.command(name='rpc-serve') @click.argument('config-path', required=1) @click.option('--host', default='0.0.0.0', help="Host to run the server") @click.option('--port', default=5002, type=click.INT, help="Binding port of the server") -@click.option('--debug/--nodebug', default=True, +@click.option('--debug/--no-debug', default=True, help="Indicates if the server should run in debug mode") -def main(config_path, host, port, debug): +def serve(config_path, host, port, debug): + '''Software Heritage Storage RPC (standalone) server. + + Do NOT use this in a production environment. + ''' api_cfg = load_and_check_config(config_path, type='any') app.config.update(api_cfg) app.run(host, port=int(port), debug=bool(debug)) +def main(): + logging.basicConfig() + return serve(auto_envvar_prefix='SWH_STORAGE') + + if __name__ == '__main__': main()