Skip to content

Commit

Permalink
cli exception handling
Browse files Browse the repository at this point in the history
  • Loading branch information
antonymayi committed Mar 5, 2022
1 parent 9b46a09 commit a9b6715
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 17 deletions.
2 changes: 1 addition & 1 deletion forml/__init__.py
Expand Up @@ -18,7 +18,7 @@
"""
ForML top level.
"""
__version__ = '0.4.dev3'
__version__ = '0.4.dev4'
__author__ = 'ForML Authors'

from forml.conf import logging
Expand Down
19 changes: 14 additions & 5 deletions forml/cli/__init__.py
Expand Up @@ -18,11 +18,12 @@
"""
ForML command line interface.
"""

import sys
import typing

import click

import forml
from forml import conf

from . import _model, _project, _registry
Expand All @@ -36,12 +37,20 @@
type=click.Choice(['debug', 'info', 'warning', 'error'], case_sensitive=False),
help='Global loglevel to use.',
)
def main(config: typing.Optional[str], loglevel: typing.Optional[str]): # pylint: disable=unused-argument
def group(config: typing.Optional[str], loglevel: typing.Optional[str]): # pylint: disable=unused-argument
"""Lifecycle Management for Datascience Projects."""
if config:
conf.PARSER.read(config)


main.add_command(_model.main)
main.add_command(_project.main)
main.add_command(_registry.main)
group.add_command(_model.group)
group.add_command(_project.group)
group.add_command(_registry.group)


def main() -> None:
"""Cli wrapper for handling ForML exceptions."""
try:
group() # pylint: disable=no-value-for-parameter
except forml.AnyError as err:
print(err, file=sys.stderr)
10 changes: 5 additions & 5 deletions forml/cli/_model.py
Expand Up @@ -64,7 +64,7 @@ def launcher(
@click.option('-I', '--feed', multiple=True, type=str, help='Input feed references.')
@click.option('-O', '--sink', type=str, help='Output sink reference.')
@click.pass_context
def main(
def group(
context: core.Context,
runner: typing.Optional[str],
registry: typing.Optional[str],
Expand All @@ -75,7 +75,7 @@ def main(
context.obj = Model(runner, registry, feed, sink)


@main.command()
@group.command()
@click.argument('project', required=True)
@click.argument('release', required=False)
@click.argument('generation', required=False)
Expand All @@ -94,7 +94,7 @@ def tune(
raise forml.MissingError(f'Tuning project {project}... not implemented')


@main.command()
@group.command()
@click.argument('project', required=True)
@click.argument('release', required=False)
@click.argument('generation', required=False)
Expand All @@ -113,7 +113,7 @@ def train(
model.launcher(project, release, generation).train(lower, upper)


@main.command()
@group.command()
@click.argument('project', required=True)
@click.argument('release', required=False)
@click.argument('generation', required=False)
Expand All @@ -132,7 +132,7 @@ def apply(
model.launcher(project, release, generation).apply(lower, upper)


@main.command(name='eval')
@group.command(name='eval')
@click.argument('project', required=True)
@click.argument('release', required=False)
@click.argument('generation', required=False)
Expand Down
6 changes: 3 additions & 3 deletions forml/cli/_project.py
Expand Up @@ -35,15 +35,15 @@ class Project(typing.NamedTuple):
@click.group(name='project')
@click.option('--path', type=click.Path(exists=True, dir_okay=True), help='Project root directory.')
@click.pass_context
def main(context: core.Context, path: typing.Optional[str]):
def group(context: core.Context, path: typing.Optional[str]):
"""Project command group."""
context.obj = Project(path)


@main.command()
@group.command()
@click.argument('name', required=True)
@click.option('--package', type=str, help='Full python package path to be used.')
@click.pass_obj
def init(project: Project, name: str) -> None:
def init(project: Project, name: str, package: typing.Optional[str]) -> None:
"""Create skeleton for a new project."""
raise forml.MissingError(f'Creating project {name}... not implemented')
4 changes: 2 additions & 2 deletions forml/cli/_registry.py
Expand Up @@ -65,12 +65,12 @@ def lprint(listing: typing.Iterable[typing.Any]) -> None:
@click.group(name='registry')
@click.option('-P', '--provider', type=str, help='Persistent registry reference.')
@click.pass_context
def main(context: core.Context, provider: typing.Optional[str]):
def group(context: core.Context, provider: typing.Optional[str]):
"""Model registry command group."""
context.obj = Registry(provider)


@main.command(name='list')
@group.command(name='list')
@click.argument('project', required=False)
@click.argument('release', required=False)
@click.pass_obj
Expand Down
2 changes: 1 addition & 1 deletion tests/cli/test_cli.py
Expand Up @@ -36,5 +36,5 @@ def cfg_file() -> pathlib.Path:
def test_main(cfg_file: pathlib.Path):
"""Basic cli test."""
runner = testing.CliRunner()
result = runner.invoke(cli.main, ['--config', str(cfg_file), 'project'])
result = runner.invoke(cli.group, ['--config', str(cfg_file), 'project'])
assert result.exit_code == 0

0 comments on commit a9b6715

Please sign in to comment.