def perform_quickstart(args): '''Ask the user for required information to initialize a project with the desired configuration automatically. ''' def get_default_template_language(): for option, default_value in DEFAULT_SETTINGS['general']: if option == 'template language': return default_value # the following instruction text is copied from #http://bitbucket.org/birkenfeld/sphinx/src/tip/sphinx/quickstart.py#cl-788 print('''Please enter values for the following settings (just press Enter to accept a default value, if one is given in brackets).''') prompts = [ ('project directory', getcwd()), ('name of the project', None), ('template language', get_default_template_language())] answers = [] for prompt, default_value in prompts: try: if default_value is None: full_prompt = '{0} (required!): '.format(prompt) else: full_prompt = '{0} [{1}]: '.format(prompt, default_value) answer = raw_input(full_prompt) or default_value # give the user a 2nd chance to enter a value if the default value # is None and the user hit enter anyway if answer is None: print('Error: the {0} is required'.format(prompt)) answer = raw_input(full_prompt) if not answer: raise EOFError answers.append(answer) except EOFError: sys.exit('interrupted') template_language = answers.pop() project = Project(*answers) template_specific_prompts = DEFAULT_SETTINGS.get(template_language, []) template_specific_answers = [] for option, default_value in template_specific_prompts: try: prompt = '{0} [{1}]: '.format(option, default_value) answer = raw_input(prompt) or default_value template_specific_answers.append(answer) except EOFError: sys.exit('interrupted') project.init() config_items = izip(template_specific_prompts, template_specific_answers) defaultless_config_items = map(itemgetter(0), config_items) project.update_config( 'general', [('template language', template_language)]) project.update_config(template_language, defaultless_config_items) project.create_default_template()
def init_project(args): project = Project(args.project_directory, args.name) project.init()