File: C:/Users/fred/anaconda3/Lib/site-packages/anaconda_project/internal/cli/command_commands.py
# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# Copyright (c) 2016, Anaconda, Inc. All rights reserved.
#
# Licensed under the terms of the BSD 3-Clause License.
# The full license is in the file LICENSE.txt, distributed with this software.
# -----------------------------------------------------------------------------
"""Commands related to the 'commands' section of anaconda-project.yml."""
from __future__ import absolute_import, print_function
import os
import platform
import sys
from anaconda_project.internal.cli.project_load import load_project
from anaconda_project import project_ops
from anaconda_project.internal.cli import console_utils
def _ask_command(command):
if not console_utils.stdin_is_interactive():
return None
if platform.system() == 'Windows':
other = 'windows'
else:
other = 'unix'
choices = {'b': 'bokeh_app', 'c': other, 'n': 'notebook'}
while True:
data = console_utils.console_input("Is `{}` a (B)okeh app, (N)otebook, or (C)ommand line? ".format(command))
data = data.lower().strip()
if len(data) == 0 or data[0] not in choices:
print("Please enter 'b', 'n', or 'c'.")
print(" A Bokeh app is the project-relative path to a Bokeh script or app directory.")
print(" A notebook file is the project-relative path to a .ipynb file.")
print(" A command line is any command you might type at the command prompt.")
continue
return choices[data]
def add_command(project_dir, name, command_type, command, env_spec_name, supports_http_options):
"""Add command to anaconda-project.yml.
Returns:
int exit code
"""
project = load_project(project_dir)
command_as_filename = os.path.join(project.directory_path, command)
if command_type is None and command.endswith(".ipynb") and os.path.isfile(command_as_filename):
command_type = 'notebook'
if command_type is None or command_type == 'ask':
command_type = _ask_command(name)
if command_type is None: # EOF, probably not an interactive console
print("Specify the --type option to add this command.", file=sys.stderr)
return 1
status = project_ops.add_command(project, name, command_type, command, env_spec_name, supports_http_options)
if not status:
console_utils.print_status_errors(status)
return 1
else:
print("Added a command '%s' to the project. Run it with `anaconda-project run %s`." % (name, name))
return 0
def remove_command(project_dir, name):
"""Remove a command from the project.
Returns:
int exit code
"""
project = load_project(project_dir)
status = project_ops.remove_command(project, name)
if not status:
console_utils.print_status_errors(status)
return 1
else:
print("Removed the command '{}' from the project.".format(name))
return 0
def list_commands(project_dir):
"""List the commands on the project.
Returns:
int exit code
"""
project = load_project(project_dir)
if console_utils.print_project_problems(project):
return 1
if project.commands:
print("Commands for project: {}\n".format(project_dir))
console_utils.print_names_and_descriptions(project.commands.values())
else:
print("No commands found for project: {}\n".format(project_dir))
return 0
def list_default_command(project_dir):
"""List only the default command on the project.
Returns:
int exit code
"""
project = load_project(project_dir)
if console_utils.print_project_problems(project):
return 1
if project.commands:
# print("Commands for project: {}\n".format(project_dir))
# console_utils.print_names_and_descriptions(project.commands.values())
print(project.default_command.name)
else:
print("No commands found for project: {}\n".format(project_dir))
return 0
def main(args):
"""Submit the add command with args and returns exit code."""
return add_command(args.directory, args.name, args.type, args.command, args.env_spec, args.supports_http_options)
def main_remove(args):
"""Submit the remove command with args and returns exit code."""
return remove_command(args.directory, args.name)
def main_list(args):
"""Start the list command with args and return exit code."""
return list_commands(args.directory)
def main_default(args):
"""Start the list default command with args and return exit code."""
return list_default_command(args.directory)