Source code for cedar.cli.options

""" cedar CLI options and defaults
"""
import logging
import os

import click

from .. import defaults


# =============================================================================
# Arguments
arg_tracking_name = click.argument('tracking_name', type=str)


# Types
type_path_file = click.Path(exists=True, dir_okay=False, resolve_path=True)

# Options
opt_browser = click.option(
    '--browser', is_flag=True,
    help='Open a web browser instead of terminal to authenticate')
opt_overwrite = click.option('--overwrite', is_flag=True,
                             help='Overwrite existing files')


opt_update_order = click.option(
    '--update', 'update_', is_flag=True,
    help='Update the tracking info before continuing')


# =============================================================================
# Print styling
def _click_style(bg, fg, **kwds_):
    def inner_(*args, **kwds):
        kwds.update(kwds_)
        return click.style(*args, bg=bg, fg=fg, **kwds)
    return inner_

STYLE_ERROR = _click_style(None, 'red')
STYLE_WARNING = _click_style(None, 'red')
STYLE_INFO = _click_style(None, None)
STYLE_DEBUG = _click_style(None, 'cyan')


# =============================================================================
# Configuration file
[docs]def fetch_config(ctx, fail_if_missing=True): """ Fetch ``config`` from a click context with error handling Parameters ---------- ctx : click.Context Click CLI context fail_if_missing : bool, optional Raise an exception if config is missing. Otherwise returns None Returns ------- dict Configuration data Raises ------ click.BadParameter Raised if configuration isn't available """ config_file = ctx.obj and ctx.obj.get('config_file', None) if config_file: return config_file elif fail_if_missing: ctx_, param = fetch_param(ctx, 'config_file') msg = ('Must specify configuration file. Pass it to the program as ' 'an option to the main program (`cedar -C CONFIG_FILE ...`) ' 'or using the environment variable ' f'(`{defaults.ENVVAR_CONFIG_FILE}=CONFIG_FILE cedar ...`)') raise click.BadParameter(msg, ctx=ctx_, param=param) else: return {}
opt_config_file = click.option( '--config_file', '-C', default=lambda: os.environ.get(defaults.ENVVAR_CONFIG_FILE, None), allow_from_autoenv=True, type=click.Path(exists=True, dir_okay=False, resolve_path=True), help='Configuration file' ) # HELPERS
[docs]def fetch_param(ctx, name): """ Try to fetch a click.Parameter from a click.Context (or its parents) """ # Try to raise error parent = ctx while parent is not None: params = {p.name: p for p in parent.command.params} if name in params: return parent, params[name] else: parent = getattr(parent, 'parent', None) return None, None