def _load_config(config_file: str) -> ConfigParser: """Load from config_file, or create new with defaults.""" try: return load_config_from_files([config_file]) except: return get_default_config()
def create(config_file, profile): """Create and/or update cloud client configuration file.""" # determine the config file path if config_file: click.echo("Using configuration file: {}".format(config_file)) else: # path not given, try to detect; or use default, but allow user to override config_file = get_configfile_path() if config_file: click.echo( "Found existing configuration file: {}".format(config_file)) else: config_file = get_default_configfile_path() click.echo( "Configuration file not found; the default location is: {}". format(config_file)) config_file = default_text_input("Configuration file path", config_file) config_file = os.path.expanduser(config_file) # create config_file path config_base = os.path.dirname(config_file) if config_base and not os.path.exists(config_base): if click.confirm("Configuration file path does not exist. Create it?", abort=True): try: os.makedirs(config_base) except Exception as e: click.echo("Error creating configuration path: {}".format(e)) return 1 # try loading existing config, or use defaults try: config = load_config_from_files([config_file]) except: config = get_default_config() # determine profile if profile: click.echo("Using profile: {}".format(profile)) else: existing = config.sections() if existing: profiles = 'create new or choose from: {}'.format( ', '.join(existing)) default_profile = '' else: profiles = 'create new' default_profile = 'prod' profile = default_text_input("Profile (%s)" % profiles, default_profile, optional=False) if not config.has_section(profile): config.add_section(profile) # fill out the profile variables variables = 'endpoint token client solver proxy'.split() prompts = [ 'API endpoint URL', 'Authentication token', 'Default client class (qpu or sw)', 'Default solver' ] for var, prompt in zip(variables, prompts): default_val = config.get(profile, var, fallback=None) val = default_text_input(prompt, default_val) if val: val = os.path.expandvars(val) if val != default_val: config.set(profile, var, val) try: with open(config_file, 'w') as fp: config.write(fp) except Exception as e: click.echo("Error writing to configuration file: {}".format(e)) return 2 click.echo("Configuration saved.") return 0
def configure(config_file, profile): """Create and/or update cloud client configuration file.""" # determine the config file path if config_file: print("Using config file:", config_file) else: # path not given, try to detect; or use default, but allow user to override config_file = detect_configfile_path() if config_file: print("Found existing config file:", config_file) else: config_file = get_default_configfile_path() print("Config file not found, the default location is:", config_file) config_file = readline_input("Confirm config file path (editable): ", config_file) # try loading existing config, or use defaults try: config = load_config_from_file(config_file) except ValueError: config = get_default_config() # determine profile if profile: print("Using profile:", profile) else: existing = config.sections() if existing: profiles = 'create new or choose from: {}'.format( ', '.join(existing)) default_profile = '' else: profiles = 'create new' default_profile = 'prod' while not profile: profile = readline_input("Profile (%s): " % profiles, default_profile) if not profile: print("Profile name can't be empty.") if not config.has_section(profile): config.add_section(profile) # fill out the profile variables variables = 'endpoint token client solver proxy'.split() prompts = [ 'API endpoint URL (editable): ', 'Auth token (editable): ', 'Client class (qpu or sw): ', 'Solver (can be left blank): ', 'Proxy URL (can be left blank): ' ] for var, prompt in zip(variables, prompts): default_val = config.get(profile, var, fallback=None) val = readline_input(prompt, default_val) if val != default_val: config.set(profile, var, val) with open(config_file, 'w') as fp: config.write(fp) print("Config saved.") return 0