notebooks/parameterize_script/util/argument_parsing.py (40 lines of code) (raw):
# Copyright 2023 Google LLC
#
# 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.
from typing import Optional, Sequence
import argparse
from parameterize_script.script_name import ScriptName
import parameterize_script.util.notebook_constants as constants
def get_script_name(args: Optional[Sequence[str]] = None) -> ScriptName:
"""
Parses the script name option from the program arguments.
This will print the command help and exit if the --script
argument is missing.
Args:
args (Optional[Sequence[str]]): The program arguments.
By default, command line arguments will be used.
Returns:
str: The value of the --script argument
"""
parser: argparse.ArgumentParser = argparse.ArgumentParser(add_help=False)
parser.add_argument(
"--script",
dest="script_name",
type=str,
required=False,
default=None,
choices=ScriptName.choices(),
help="The name of the script to run",
)
known_args: argparse.Namespace
known_args, _ = parser.parse_known_args(args=args)
if known_args.script_name is None:
parser.print_help()
parser.exit()
return ScriptName.from_string(known_args.script_name)
def get_common_args(parser: argparse.ArgumentParser) -> str:
"""
Adds common arguments to the parser.
"""
# Parses the output notebook option from the arguments.
parser.add_argument(
f"--{constants.OUTPUT_NOTEBOOK_ARG}",
dest=constants.OUTPUT_NOTEBOOK_ARG,
required=False,
default=None,
help="Path to save executed notebook (Default: None). "
"If not provided, no notebook is saved",
)
# Parses the log level option from the arguments.
parser.add_argument(
f"--{constants.LOG_LEVEL_ARG}",
dest=constants.LOG_LEVEL_ARG,
type=str,
required=False,
default="INFO",
choices=["NOTSET", "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
help="Papermill's Execute Notebook log level (Default: INFO)",
)
return parser