-
Notifications
You must be signed in to change notification settings - Fork 39
/
__main__.py
92 lines (79 loc) · 2.42 KB
/
__main__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# Copyright 2022 AI Singapore
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# https://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Workaround for running Peekingduck from project directory
"""
import logging
from pathlib import Path
import click
from peekingduck.cli import cli, run
@cli.command()
@click.option(
"--config_path",
default=None,
type=click.Path(),
help=(
"List of nodes to run. None assumes pipeline_config.yml is in the same "
"directory as __main__.py"
),
)
@click.option(
"--log_level",
default="info",
help="""Modify log level {"critical", "error", "warning", "info", "debug"}""",
)
@click.option(
"--num_iter",
default=None,
type=int,
help="Stop pipeline after running this number of iterations",
)
@click.option(
"--viewer",
default=False,
is_flag=True,
help="Launch PeekingDuck viewer",
)
@click.pass_context
def main(
context: click.Context,
config_path: str,
log_level: str,
num_iter: int,
viewer: bool,
) -> None:
"""Invokes the run() CLI command with some different defaults for
``node_config`` and ``nodes_parent_dir``.
"""
if config_path is None:
pkd_dir = Path(__file__).resolve().parent
if (pkd_dir / "pipeline_config.yml").is_file():
config_path = str(pkd_dir / "pipeline_config.yml")
elif (pkd_dir / "run_config.yml").is_file():
config_path = str(pkd_dir / "run_config.yml")
else:
config_path = str(pkd_dir / "pipeline_config.yml")
nodes_parent_dir = pkd_dir.name
else:
nodes_parent_dir = "src"
logger = logging.getLogger(__name__)
logger.info(f"Run path: {config_path}")
context.invoke(
run,
config_path=config_path,
node_config="None",
log_level=log_level,
num_iter=num_iter,
nodes_parent_dir=nodes_parent_dir,
viewer=viewer,
)
if __name__ == "__main__":
main() # pylint: disable=no-value-for-parameter