diff --git a/python/ray/tune/commands.py b/python/ray/tune/commands.py index c9d458e43e8a..5abf49858dd1 100644 --- a/python/ray/tune/commands.py +++ b/python/ray/tune/commands.py @@ -48,6 +48,8 @@ except subprocess.CalledProcessError: TERM_HEIGHT, TERM_WIDTH = 100, 100 +EDITOR = os.getenv('EDITOR', 'vim') + def _check_tabulate(): """Checks whether tabulate is installed.""" @@ -230,3 +232,27 @@ def list_experiments(project_path, info_df = info_df.sort_values(by=sort) print_format_output(info_df) + + +def add_note(path, filename="note.txt"): + """Opens a txt file at the given path where user can add and save notes. + + Args: + path (str): Directory where note will be saved. + filename (str): Name of note. Defaults to "note.txt" + """ + path = os.path.expanduser(path) + assert os.path.isdir(path), "{} is not a valid directory.".format(path) + + filepath = os.path.join(path, filename) + exists = os.path.isfile(filepath) + + try: + subprocess.call([EDITOR, filepath]) + except Exception as exc: + logger.error("Editing note failed!") + raise exc + if exists: + print("Note updated at:", filepath) + else: + print("Note created at:", filepath) diff --git a/python/ray/tune/scripts.py b/python/ray/tune/scripts.py index f815d9ed80d1..3b810ee3ae5c 100644 --- a/python/ray/tune/scripts.py +++ b/python/ray/tune/scripts.py @@ -29,10 +29,23 @@ def list_experiments(project_path, sort): commands.list_experiments(project_path, sort) +@cli.command() +@click.argument("path", required=True, type=str) +@click.option( + "--filename", + default="note.txt", + type=str, + help='Specify filename for note.') +def add_note(path, filename): + """Adds user notes as a text file at the given path.""" + commands.add_note(path, filename) + + cli.add_command(list_trials, name="ls") cli.add_command(list_trials, name="list-trials") cli.add_command(list_experiments, name="lsx") cli.add_command(list_experiments, name="list-experiments") +cli.add_command(add_note, name="add-note") def main():