57 lines
1.4 KiB
Python
57 lines
1.4 KiB
Python
import functools
|
|
from typing import Union
|
|
|
|
import click
|
|
|
|
|
|
def bool_cast(string: str) -> Union[bool, str]:
|
|
"""Cast a string to a boolean if possible, otherwise return the string."""
|
|
if string.lower() == "true" or string == "1":
|
|
return True
|
|
elif string.lower() == "false" or string == "0":
|
|
return False
|
|
else:
|
|
return string
|
|
|
|
|
|
class BoolOrStringParam(click.ParamType):
|
|
"""A click parameter that can be either a boolean or a string."""
|
|
|
|
name = "BOOL | TEXT"
|
|
|
|
def convert(self, value, param, ctx):
|
|
if isinstance(value, bool):
|
|
return value
|
|
else:
|
|
return bool_cast(value)
|
|
|
|
|
|
def add_common_job_options(func):
|
|
"""Decorator for adding CLI flags shared by all `ray job` commands."""
|
|
|
|
@click.option(
|
|
"--verify",
|
|
default=True,
|
|
show_default=True,
|
|
type=BoolOrStringParam(),
|
|
help=(
|
|
"Boolean indication to verify the server's TLS certificate or a path to"
|
|
" a file or directory of trusted certificates."
|
|
),
|
|
)
|
|
@click.option(
|
|
"--headers",
|
|
required=False,
|
|
type=str,
|
|
default=None,
|
|
help=(
|
|
"Used to pass headers through http/s to the Ray Cluster."
|
|
'please follow JSON formatting formatting {"key": "value"}'
|
|
),
|
|
)
|
|
@functools.wraps(func)
|
|
def wrapper(*args, **kwargs):
|
|
return func(*args, **kwargs)
|
|
|
|
return wrapper
|