Skip to content

Commit

Permalink
Use click for main, info and checks cli
Browse files Browse the repository at this point in the history
  • Loading branch information
cdeil committed Dec 19, 2017
1 parent de040b3 commit 306495e
Show file tree
Hide file tree
Showing 9 changed files with 136 additions and 204 deletions.
13 changes: 10 additions & 3 deletions gammapy/__main__.py
@@ -1,6 +1,13 @@
# Licensed under a 3-clause BSD style license - see LICENSE.rst
import sys
"""Top-level script environment for Gammapy.
This is what's executed when you run:
from .scripts.cli import main
python -m gammapy
See https://docs.python.org/3/library/__main__.html
"""
import sys
from .scripts.main import cli

sys.exit(main())
sys.exit(cli())
3 changes: 0 additions & 3 deletions gammapy/scripts/__init__.py
Expand Up @@ -3,9 +3,6 @@
Gammapy command line and GUI tools.
"""

from .check import *
from .info import *

from .data_select import *

from .image_bin import *
Expand Down
21 changes: 12 additions & 9 deletions gammapy/scripts/check.py
Expand Up @@ -7,23 +7,26 @@
from __future__ import absolute_import, division, print_function, unicode_literals
import logging
import warnings
import click
from .. import test

log = logging.getLogger(__name__)


def cmd_check(args, parser):
"""Check subcommand"""
parser.print_help()
@click.group('check')
def cli_check():
"""Run checks for Gammapy"""


def cmd_tests(args, parser):
"""Check command to run Gammapy tests."""
import gammapy
gammapy.test(args.package, verbose=True)
@cli_check.command('runtests')
def cli_check_runtests():
"""Run Gammapy tests"""
test(verbose=True)


def cmd_log_examples(args, parser):
"""Check command to run some example code that generates log output."""
@cli_check.command('logging')
def cli_check_logging():
"""Check logging"""
log.debug('this is log.debug() output')
log.info('this is log.info() output')
log.warning('this is log.warning() output')
Expand Down
132 changes: 0 additions & 132 deletions gammapy/scripts/cli.py

This file was deleted.

65 changes: 33 additions & 32 deletions gammapy/scripts/info.py
Expand Up @@ -3,37 +3,40 @@
import os
import logging
import importlib
import click
from ..conftest import PYTEST_HEADER_MODULES
from .. import version

GAMMAPY_ENV_VARIABLES = ['GAMMAPY_EXTRA', 'HGPS_DATA', 'GAMMAPY_FERMI_LAT_DATA',
'CTADATA', 'CALDB', 'GAMMA_CAT']


log = logging.getLogger(__name__)


def cmd_info(args, parser):
"""Info command to display various info on Gammapy to the console."""
no_args = True

if args.version or args.all:
GAMMAPY_ENV_VARIABLES = [
'GAMMAPY_EXTRA',
'HGPS_DATA',
'GAMMAPY_FERMI_LAT_DATA',
'CTADATA',
'CALDB',
'GAMMA_CAT',
]


@click.command(name='info')
@click.option('--version/--no-version', default=True, help='Show version info')
@click.option('--dependencies/--no-dependencies', default=True, help='Show dependencies info')
@click.option('--system/--no-system', default=True, help='Show system info')
def cli_info(version, dependencies, system):
"""Display information about Gammapy
"""
if version:
info = get_info_version()
print_info(info=info, title='Gammapy current install')
no_args = False

if args.dependencies or args.all:
if dependencies:
info = get_info_dependencies()
print_info(info=info, title='Gammapy dependencies')
no_args = False

if args.system or args.all:
if system:
info = get_info_system()
print_info(info=info, title='Gammapy environment variables')
no_args = False

if no_args:
print(parser.description)


def print_info(info, title):
Expand All @@ -48,11 +51,11 @@ def print_info(info, title):

def get_info_version():
"""Get detailed info about Gammapy version."""
info_version = {}
info_version['version'] = version.version
info_version['release'] = str(version.release)
info_version['githash'] = version.githash
return info_version
return {
'version': version.version,
'release': str(version.release),
'githash': version.githash,
}


def get_info_dependencies():
Expand All @@ -61,18 +64,16 @@ def get_info_dependencies():
for label, name in PYTEST_HEADER_MODULES.items():
try:
module = importlib.import_module(name)
version = module.__version__
module_version = module.__version__
except ImportError:
version = 'not available'
info_dependencies[label] = version
module_version = 'not available'
info_dependencies[label] = module_version
return info_dependencies


def get_info_system():
"""Get info about Gammapy environment variables."""
info_system = {}

for name in GAMMAPY_ENV_VARIABLES:
info_system[name] = os.environ.get(name, 'not set')

return info_system
return {
name: os.environ.get(name, 'not set')
for name in GAMMAPY_ENV_VARIABLES
}
48 changes: 48 additions & 0 deletions gammapy/scripts/main.py
@@ -0,0 +1,48 @@
# Licensed under a 3-clause BSD style license - see LICENSE.rst
from __future__ import absolute_import, division, print_function, unicode_literals
import warnings
import logging
import click
from .. import version


# We implement the --version following the example from here:
# http://click.pocoo.org/5/options/#callbacks-and-eager-options
def print_version(ctx, param, value):
if not value or ctx.resilient_parsing:
return
print('gammapy version {}'.format(version.version))
ctx.exit()


# http://click.pocoo.org/5/documentation/#help-parameter-customization
CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])


@click.group(context_settings=CONTEXT_SETTINGS)
@click.option('--log-level', default='info', help='Logging verbosity level',
type=click.Choice(['debug', 'info', 'warning', 'error']))
@click.option('--ignore-warnings', is_flag=True, help='Ignore warnings?')
@click.option('--version', is_flag=True, callback=print_version,
expose_value=False, is_eager=True, help='Print version and exit')
def cli(log_level, ignore_warnings):
"""Gammapy command line interface.
Gammapy is a Python package for gamma-ray astronomy.
For further information, see http://gammapy.org/
"""
logging.basicConfig(level=log_level.upper())

if ignore_warnings:
warnings.simplefilter('ignore')


from .info import cli_info
cli.add_command(cli_info)

from .check import cli_check
cli.add_command(cli_check)

if __name__ == '__main__':
cli()
21 changes: 14 additions & 7 deletions gammapy/scripts/tests/test_info.py
@@ -1,12 +1,19 @@
# Licensed under a 3-clause BSD style license - see LICENSE.rst
from __future__ import absolute_import, division, print_function, unicode_literals
from click.testing import CliRunner
from ..main import cli

from ..cli import main

def test_cli_info_help():
result = CliRunner().invoke(cli, ['info', '--help'])
assert result.exit_code == 0
assert 'Usage' in result.output

def test_cmd_info(capsys):
main(['info', '--all'])
out, err = capsys.readouterr()
assert "Gammapy current install" in out
assert "Gammapy dependencies" in out
assert "Gammapy environment variables" in out

def test_cli_info_no_args():
# No arguments should print all infos
result = CliRunner().invoke(cli, ['info'])
assert result.exit_code == 0
assert "Gammapy current install" in result.output
assert "Gammapy dependencies" in result.output
assert "Gammapy environment variables" in result.output

0 comments on commit 306495e

Please sign in to comment.