diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..0cd8f35 --- /dev/null +++ b/setup.py @@ -0,0 +1,16 @@ +from setuptools import setup, find_packages + +setup( + name='vfrecovery', + version='2.0', + packages=find_packages(), + include_package_data=True, + install_requires=[ + 'Click', + ], + entry_points={ + 'console_scripts': [ + 'vfrecovery = vfrecovery.command_line_interface.virtualfleet_recovery:base_command_line_interface', + ], + }, +) \ No newline at end of file diff --git a/vfrecovery/__init__.py b/vfrecovery/__init__.py index 1f36d3d..f6db858 100644 --- a/vfrecovery/__init__.py +++ b/vfrecovery/__init__.py @@ -1,2 +1,4 @@ -# from importlib.metadata import version -# __version__ = version("vfrecovery") +from importlib.metadata import version +__version__ = version("vfrecovery") + +from vfrecovery.python_interface.predict import predict diff --git a/vfrecovery/command_line_interface/__init__.py b/vfrecovery/command_line_interface/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vfrecovery/command_line_interface/group_describe.py b/vfrecovery/command_line_interface/group_describe.py new file mode 100644 index 0000000..2b1069f --- /dev/null +++ b/vfrecovery/command_line_interface/group_describe.py @@ -0,0 +1,28 @@ +import click + + +@click.group() +def cli_group_describe() -> None: + pass + +@cli_group_describe.command( + "describe", + short_help="Describe VirtualFleet-Recovery predictions", + help=""" + Returns data about an existing VirtualFleet-Recovery prediction + + Data could be a JSON file, specific metrics or images + """, + epilog=""" + Examples: + + \b + vfrecovery describe 6903091 112 + """, # noqa + ) +@click.argument('WMO') +@click.argument('CYC') +def describe( + wmo: int, + cyc: int): + click.echo(f"Return description for {wmo} {cyc}") \ No newline at end of file diff --git a/vfrecovery/command_line_interface/group_predict.py b/vfrecovery/command_line_interface/group_predict.py new file mode 100644 index 0000000..c3ec036 --- /dev/null +++ b/vfrecovery/command_line_interface/group_predict.py @@ -0,0 +1,39 @@ +import click +from typing import Union, List +from vfrecovery.core_functions.predict import predict_function + +@click.group() +def cli_group_predict() -> None: + pass + +@cli_group_predict.command( + "predict", + short_help="Execute VirtualFleet-Recovery predictions", + help=""" + Execute VirtualFleet-Recovery predictor and return results as a JSON string + """, + epilog=""" + Examples: + + \b + vfrecovery predict 6903091 112 + """, # noqa + ) +@click.option( + "-n", "--n_predictions", + type=int, + required=False, + default=1, + show_default=True, + is_flag=False, + help="Number of profiles to simulate", +) +@click.argument('WMO') +@click.argument('CYC', nargs=-1) +def predict( + wmo: int, + cyc: Union[int, List], + n_predictions) -> None: + # click.echo(f"Prediction for {wmo} {cyc}") + results = predict_function(wmo, cyc, n_predictions=n_predictions) + click.echo(results) diff --git a/vfrecovery/command_line_interface/virtualfleet_recovery.py b/vfrecovery/command_line_interface/virtualfleet_recovery.py new file mode 100644 index 0000000..b38adac --- /dev/null +++ b/vfrecovery/command_line_interface/virtualfleet_recovery.py @@ -0,0 +1,24 @@ +import click + +from vfrecovery.command_line_interface.group_describe import cli_group_describe +from vfrecovery.command_line_interface.group_predict import cli_group_predict + +@click.command( + cls=click.CommandCollection, + sources=[ + cli_group_describe, + cli_group_predict, + ], + context_settings=dict(help_option_names=["-h", "--help"]), +) +@click.version_option(None, "-V", "--version", package_name="vfrecovery") +def base_command_line_interface(): + pass + + +def command_line_interface(): + base_command_line_interface(windows_expand_args=False) + + +if __name__ == "__main__": + command_line_interface() diff --git a/vfrecovery/core_functions/__init__.py b/vfrecovery/core_functions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vfrecovery/core_functions/predict.py b/vfrecovery/core_functions/predict.py new file mode 100644 index 0000000..7049385 --- /dev/null +++ b/vfrecovery/core_functions/predict.py @@ -0,0 +1,21 @@ + +def predict_function( + wmo: int, + cyc: int, + n_predictions: int = 1, +): + """ + Execute VirtualFleet-Recovery predictor and return results as a JSON string + + Inputs + ------ + wmo + cyc + n_predictions + + Returns + ------- + data + + """ # noqa + return {'wmo': wmo, 'cyc': cyc} diff --git a/vfrecovery/python_interface/predict.py b/vfrecovery/python_interface/predict.py new file mode 100644 index 0000000..da128b9 --- /dev/null +++ b/vfrecovery/python_interface/predict.py @@ -0,0 +1,29 @@ +import json +from vfrecovery.core_functions.predict import predict_function + + +def predict( + wmo: int, + cyc: int, + n_predictions, +): + """ + Execute VirtualFleet-Recovery predictor and return results as a JSON string + + Inputs + ------ + wmo + cyc + n_predictions + + Returns + ------- + data + + """ # noqa + results_json = predict_function( + wmo, cyc, + n_predictions=n_predictions, + ) + results = json.loads(results_json) + return results