def configure_role(): print('\n\nROLE CONFIGURATION:\n===================') for folder_name, folder in folders.items(): if read_user_yes_no(folder['question'], default_value=u'yes'): try: # this file has to be there, git doesn't store empty folders. os.remove(os.path.join(folder_name, '.empty')) except OSError: pass if 'hint' in folder: with open('{}/main.yml'.format(folder_name), 'a') as fp: if 'pre_hint' in folder: if read_user_yes_no(folder['pre_hint'], default_value=u'yes'): fp.write(folder['pre_action']) else: continue action_name = input(folder['hint']) while action_name: fp.write(folder['action'].format(action_name)) action_name = input(folder['hint']) else: shutil.rmtree(folder_name)
def configure_role(): print('\n\nROLE CONFIGURATION:\n===================') for folder_name, folder in folders.items(): if read_user_yes_no(folder['question'], default_value=u'yes'): try: # this file has to be there, git doesn't store empty folders. os.remove(os.path.join(folder_name, '.empty')) except OSError: pass if 'hint' in folder: with open('{}/main.yml'.format(folder_name), 'a') as fp: if 'pre_hint' in folder: if read_user_yes_no(folder['pre_hint'], default_value=u'yes'): # NOQA fp.write(folder['pre_action']) else: continue action_name = input(folder['hint']) while action_name: fp.write(folder['action'].format(action_name)) action_name = input(folder['hint']) else: shutil.rmtree(folder_name)
def prompt_and_delete(path, no_input=False): """ Ask user if it's okay to delete the previously-downloaded file/directory. If yes, delete it. If no, checks to see if the old version should be reused. If yes, it's reused; otherwise, Cookiecutter exits. :param path: Previously downloaded zipfile. :param no_input: Suppress prompt to delete repo and just delete it. :return: True if the content was deleted """ # Suppress prompt if called via API if no_input: ok_to_delete = True else: question = ("You've downloaded {} before. " "Is it okay to delete and re-download it?").format(path) ok_to_delete = read_user_yes_no(question, 'yes') if ok_to_delete: if os.path.isdir(path): rmtree(path) else: os.remove(path) return True else: ok_to_reuse = read_user_yes_no( "Do you want to re-use the existing version?", 'yes') if ok_to_reuse: return False sys.exit()
def configure_role(): print('\n\nROLE CONFIGURATION:\n===================') for folder_name, folder in folders.items(): if read_user_yes_no(folder['question'], default_value=u'yes'): # try: # # this file has to be there, git doesn't store empty folders. # os.remove(os.path.join(folder_name, '.empty')) # except OSError: # pass if 'hint' in folder: file_name = folder['file_name'] with open('{}/{}'.format(folder_name, file_name), 'a') as fp: if 'pre_hint' in folder: if read_user_yes_no(folder['pre_hint'], default_value=u'yes'): fp.write(folder['pre_action']) else: continue action_name = input(folder['hint']) while action_name: if folder_name == defaults_folder_name: fp.write(ansible_role_name.replace('.', '_') + '_' + folder['action'].format(action_name)) else: fp.write(folder['action'].format(action_name)) action_name = input(folder['hint']) else: shutil.rmtree(folder_name)
def configure_role(): print('\n\nMODULE CONFIGURATION:\n=====================') if read_user_yes_no(components['awsconfig']['question'], 'Yes'): if 'fiename' in action: if 'append' in action: with open(action['filename'], 'a') as f: f.write(action['append'])
def test_click_invocation(mocker): prompt = mocker.patch("click.prompt") prompt.return_value = DEFAULT assert read_user_yes_no(QUESTION, DEFAULT) == DEFAULT click.prompt.assert_called_once_with(QUESTION, default=DEFAULT, type=click.BOOL)
def prompt_user(): # Prompt user for input for key, value in defaults.items(): if not key.startswith("_"): if isinstance(value, list): defaults[key] = prompt.read_user_choice(key, value) elif isinstance(value, str): defaults[key] = prompt.read_user_variable(key, value) # adjust defaults based on special conditions if key.endswith("import_type"): defaults["import"] = defaults["installed"][defaults[key]] elif key.endswith("import"): defaults["project_name"] = defaults[key] defaults["repository_name"] = ( defaults[key].replace(" ", "_") + "_Rainmeter_Skin" ) # promt user to pick skin to load if importing an installed skin if ( defaults["import_type"] == "Skin" and defaults["import"] != "Create a new skin" ): # now ask the user which skin to load on-install skin_configs = [] for dirpath, _, filenames in os.walk( defaults["_skins_path"] + os.sep + defaults[key] ): for f in filenames: if f.endswith(".ini"): skin_configs.append( dirpath.replace( defaults["_skins_path"] + os.sep, "", ) + os.sep + f ) defaults["_load_skin"] = prompt.read_user_choice( "skin to load", skin_configs ) elif key.endswith("project_name"): defaults["repository_name"] = ( defaults[key].replace(" ", "_") + "_Rainmeter_Skin" ) elif key.endswith("req_windows_version"): defaults["req_windows_version"] = defaults["_windows_version_alias"][defaults[key]] elif key.endswith("req_rainmeter_version"): # restrict windows version based on rainmeter version if float(defaults[key][:3]) >= 4.0: defaults["req_windows_version"].remove("Windows XP") defaults["req_windows_version"].remove("Windows Vista") if vcs.is_vcs_installed("git"): print("git is installed") init_commit = prompt.read_user_yes_no("Create initial commit? (y/n)", "y") if isinstance(init_commit, str): init_commit = True if init_commit == "y" else False defaults["_init_commit"] = init_commit
def configure_role(): print('\n\nROLE CONFIGURATION:\n===================') for folder_name, folder in folders.items(): if read_user_yes_no(folder['question'], default_value=u'yes'): try: # this file has to be there, git doesn't store empty folders. os.remove(os.path.join(folder_name, '.empty')) except OSError: pass if 'hint' in folder: file_name = folder['file_name'] with open('{}/{}'.format(folder_name, file_name), 'a') as fp: if 'pre_hint' in folder: if read_user_yes_no(folder['pre_hint'], default_value=u'yes'): fp.write(folder['pre_action']) else: continue action_name = input(folder['hint']) while action_name: if folder_name == defaults_folder_name: fp.write( ansible_role_name.replace('.', '_') + '_' + folder['action'].format(action_name)) elif folder_name == integration_test_folder_name: role_data = action_name.split(':') if len(role_data) != 2: raise ValueError( 'Cannot parse requirement: {}'.format( action_name)) fp.write(folder['action'].format( role_data[0], role_data[1])) else: fp.write(folder['action'].format(action_name)) action_name = input(folder['hint']) else: shutil.rmtree(folder_name)
def test_click_invocation(mocker): prompt = mocker.patch('click.prompt') prompt.return_value = DEFAULT assert read_user_yes_no(QUESTION, DEFAULT) == DEFAULT click.prompt.assert_called_once_with( QUESTION, default=DEFAULT, type=click.BOOL )
def test_click_invocation(mocker): """Test click function called correctly by cookiecutter. Test for boolean type invocation. """ prompt = mocker.patch('click.prompt') prompt.return_value = DEFAULT assert read_user_yes_no(QUESTION, DEFAULT) == DEFAULT click.prompt.assert_called_once_with(QUESTION, default=DEFAULT, type=click.BOOL)
def check_remote_repository_updates(): template_dir = '{{ cookiecutter._template }}' if not is_git_repository(template_dir): print( "Template dir is not absolute dir or not Git repo; skipping freshness check" ) return print('Template dir:', template_dir) print('Checking for latest template version via git') subprocess.call(["git", "fetch"], cwd=template_dir) print('') # Warn user if the version of the template that's being used is not the latest available local_sha = subprocess.check_output(["git", "rev-parse", "@"], cwd=template_dir).decode().strip() local_branch = subprocess.check_output( ["git", "rev-parse", "--abbrev-ref", "@"], cwd=template_dir).decode().strip() if local_branch == 'HEAD': remote_branch = 'master' # default to master else: remote_branch = local_branch try: remote_sha = subprocess.check_output( ["git", "rev-parse", "origin/{}".format(remote_branch)], cwd=template_dir).decode().strip() except subprocess.CalledProcessError: # The branch is probably not pushed remote_sha = None # Print out the template version info print('local commit: {}; branch: {}'.format(local_sha, local_branch)) print('remote commit: {}; branch: {}'.format(remote_sha, remote_branch)) print() if local_sha != remote_sha: if not read_user_yes_no( 'The template version you are using is not the latest available, are you sure you want to continue?', default_value='yes'): print("Bye!") sys.exit(1)
def check_remote_repository_updates(): template_dir = '{{ cookiecutter._template }}' if not is_git_repository(template_dir): print("Template dir is not absolute dir or not Git repo; skipping freshness check") return print('Template dir:', template_dir) print('Checking for latest template version via git') subprocess.call(["git", "fetch"], cwd=template_dir) print('') # Warn user if the version of the template that's being used is not the latest available local_sha = subprocess.check_output(["git", "rev-parse", "@"], cwd=template_dir).decode().strip() local_branch = subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "@"], cwd=template_dir).decode().strip() if local_branch == 'HEAD': remote_branch = 'master' # default to master else: remote_branch = local_branch try: remote_sha = subprocess.check_output(["git", "rev-parse", "origin/{}".format(remote_branch)], cwd=template_dir).decode().strip() except subprocess.CalledProcessError: # The branch is probably not pushed remote_sha = None # Print out the template version info print('local commit: {}; branch: {}'.format(local_sha, local_branch)) print('remote commit: {}; branch: {}'.format(remote_sha, remote_branch)) print() if local_sha != remote_sha: if not read_user_yes_no( 'The template version you are using is not the latest available, are you sure you want to continue?', default_value='yes'): print("Bye!") sys.exit(1)