def config(ctx, view: bool, section: str) -> None: """ Configure your general settings and Github credentials for reuse. Available options (sections) are: \b - general: set your fullname, email and Github username - pat: set your Github personal access token for Github repository creation - all: calls general and pat """ if view: ConfigCommand.view_current_config() sys.exit(0) if section == 'general': # set the full_name and email for reuse in the creation process ConfigCommand.config_general_settings() elif section == 'pat': # set github username and encrypted personal access token ConfigCommand.config_pat() elif section == 'all': # set everything ConfigCommand.all_settings() # empty section argument causes a customized error elif not section: HelpErrorHandling.args_not_provided(ctx, 'config') # check if a similar section handle can be used/suggested else: ConfigCommand.similar_handle(section)
def create_template(self, path: Path, dot_cookietemple: Optional[dict]): """ Prompts the user for the publication type and forwards to subsequent prompts. Creates the pub template. """ # latex is default language self.pub_struct.pubtype = cookietemple_questionary_or_dot_cookietemple(function='select', question='Choose between the following publication types', choices=['thesis'], dot_cookietemple=dot_cookietemple, to_get_property='pubtype') if not os.path.exists(ConfigCommand.CONF_FILE_PATH): print('[bold red]Cannot find a Cookietemple config file! Is this your first time with Cookietemple?\n') print('[bold blue]Lets set your configs for Cookietemple and you are ready to go!\n') ConfigCommand.all_settings() # switch case statement to prompt the user to fetch template specific configurations switcher: Dict[str, Any] = { 'latex': self.common_latex_options, } switcher.get(self.pub_struct.language.lower(), lambda: 'Invalid language!')(dot_cookietemple) # type: ignore self.handle_pub_type(dot_cookietemple) self.pub_struct.is_github_repo, self.pub_struct.is_repo_private, self.pub_struct.is_github_orga, self.pub_struct.github_orga \ = prompt_github_repo(dot_cookietemple) if self.pub_struct.is_github_orga: self.pub_struct.github_username = self.pub_struct.github_orga # create the pub template super().create_template_with_subdomain(self.TEMPLATES_PUB_PATH, self.pub_struct.pubtype) # type: ignore # switch case statement to fetch the template version switcher_version = { 'latex': self.PUB_LATEX_TEMPLATE_VERSION, } self.pub_struct.template_version = switcher_version.get(self.pub_struct.language.lower(), lambda: 'Invalid language!') self.pub_struct.template_version, self.pub_struct.template_handle = switcher_version.get( self.pub_struct.language.lower(), lambda: 'Invalid language!'), f'pub-{self.pub_struct.pubtype}-{self.pub_struct.language.lower()}' # perform general operations like creating a GitHub repository and general linting, but skip common_files copying and rst linting super().process_common_operations(path=Path(path).resolve(), skip_common_files=True, skip_fix_underline=True, domain='pub', subdomain=self.pub_struct.pubtype, language=self.pub_struct.language, dot_cookietemple=dot_cookietemple)
def prompt_general_template_configuration(self, dot_cookietemple: Optional[dict]): """ Prompts the user for general options that are required by all templates. Options are saved in the creator context manager object. """ try: """ Check, if the dot_cookietemple dictionary contains the full name and email (this happens, when dry creating the template while syncing on TEMPLATE branch). If that's not the case, try to read them from the config file (created with the config command). If none of the approaches above succeed (no config file has been found and its not a dry create run), configure the basic credentials and proceed. """ if dot_cookietemple: self.creator_ctx.full_name = dot_cookietemple["full_name"] self.creator_ctx.email = dot_cookietemple["email"] else: self.creator_ctx.full_name = load_yaml_file(ConfigCommand.CONF_FILE_PATH)["full_name"] self.creator_ctx.email = load_yaml_file(ConfigCommand.CONF_FILE_PATH)["email"] except FileNotFoundError: # style and automatic use config console.print( "[bold red]Cannot find a cookietemple config file. Is this your first time using cookietemple?" ) # inform the user and config all settings (with PAT optional) console.print("[bold blue]Lets set your name, email and Github username and you´re ready to go!") ConfigCommand.all_settings() # load mail and full name path = Path(ConfigCommand.CONF_FILE_PATH) yaml = YAML(typ="safe") settings = yaml.load(path) # set full name and mail self.creator_ctx.full_name = settings["full_name"] self.creator_ctx.email = settings["email"] self.creator_ctx.project_name = cookietemple_questionary_or_dot_cookietemple( function="text", question="Project name", default="exploding-springfield", dot_cookietemple=dot_cookietemple, to_get_property="project_name", ).lower() # type: ignore if self.creator_ctx.language == "python": self.check_name_available("PyPi", dot_cookietemple) self.check_name_available("readthedocs.io", dot_cookietemple) self.creator_ctx.project_slug = self.creator_ctx.project_name.replace(" ", "_") # type: ignore self.creator_ctx.project_slug_no_hyphen = self.creator_ctx.project_slug.replace("-", "_") self.creator_ctx.project_short_description = cookietemple_questionary_or_dot_cookietemple( function="text", question="Short description of your project", default=f"{self.creator_ctx.project_name}" f". A cookietemple based .", dot_cookietemple=dot_cookietemple, to_get_property="project_short_description", ) poss_vers = cookietemple_questionary_or_dot_cookietemple( function="text", question="Initial version of your project", default="0.1.0", dot_cookietemple=dot_cookietemple, to_get_property="version", ) # make sure that the version has the right format while not re.match(r"(?<!.)\d+(?:\.\d+){2}(?:-SNAPSHOT)?(?!.)", poss_vers) and not dot_cookietemple: # type: ignore console.print( "[bold red]The version number entered does not match semantic versioning.\n" + r"Please enter the version in the format \[number].\[number].\[number]!" ) # noqa: W605 poss_vers = cookietemple_questionary_or_dot_cookietemple( function="text", question="Initial version of your project", default="0.1.0" ) self.creator_ctx.version = poss_vers self.creator_ctx.license = cookietemple_questionary_or_dot_cookietemple( function="select", question="License", choices=[ "MIT", "BSD", "ISC", "Apache2.0", "GNUv3", "Boost", "Affero", "CC0", "CCBY", "CCBYSA", "Eclipse", "WTFPL", "unlicence", "Not open source", ], default="MIT", dot_cookietemple=dot_cookietemple, to_get_property="license", ) if dot_cookietemple: self.creator_ctx.github_username = dot_cookietemple["github_username"] self.creator_ctx.creator_github_username = dot_cookietemple["creator_github_username"] else: self.creator_ctx.github_username = load_github_username() self.creator_ctx.creator_github_username = self.creator_ctx.github_username
def prompt_general_template_configuration( self, dot_cookietemple: Optional[dict]): """ Prompts the user for general options that are required by all templates. Options are saved in the creator context manager object. """ try: """ Check, if the dot_cookietemple dictionary contains the full name and email (this happens, when dry creating the template while syncing on TEMPLATE branch). If that's not the case, try to read them from the config file (created with the config command). If none of the approaches above succeed (no config file has been found and its not a dry create run), configure the basic credentials and proceed. """ if dot_cookietemple: self.creator_ctx.full_name = dot_cookietemple['full_name'] self.creator_ctx.email = dot_cookietemple['email'] else: self.creator_ctx.full_name = load_yaml_file( ConfigCommand.CONF_FILE_PATH)['full_name'] self.creator_ctx.email = load_yaml_file( ConfigCommand.CONF_FILE_PATH)['email'] except FileNotFoundError: # style and automatic use config console.print( '[bold red]Cannot find a cookietemple config file. Is this your first time using cookietemple?' ) # inform the user and config all settings (with PAT optional) console.print( '[bold blue]Lets set your name, email and Github username and you´re ready to go!' ) ConfigCommand.all_settings() # load mail and full name path = Path(ConfigCommand.CONF_FILE_PATH) yaml = YAML(typ='safe') settings = yaml.load(path) # set full name and mail self.creator_ctx.full_name = settings['full_name'] self.creator_ctx.email = settings['email'] self.creator_ctx.project_name = cookietemple_questionary_or_dot_cookietemple( function='text', question='Project name', default='exploding-springfield', dot_cookietemple=dot_cookietemple, to_get_property='project_name').lower() # type: ignore if self.creator_ctx.language == 'python': self.check_name_available("PyPi", dot_cookietemple) self.check_name_available("readthedocs.io", dot_cookietemple) self.creator_ctx.project_slug = self.creator_ctx.project_name.replace( ' ', '_') # type: ignore self.creator_ctx.project_slug_no_hyphen = self.creator_ctx.project_slug.replace( '-', '_') self.creator_ctx.project_short_description = cookietemple_questionary_or_dot_cookietemple( function='text', question='Short description of your project', default=f'{self.creator_ctx.project_name}' f'. A cookietemple based .', dot_cookietemple=dot_cookietemple, to_get_property='project_short_description') poss_vers = cookietemple_questionary_or_dot_cookietemple( function='text', question='Initial version of your project', default='0.1.0', dot_cookietemple=dot_cookietemple, to_get_property='version') # make sure that the version has the right format while not re.match(r'(?<!.)\d+(?:\.\d+){2}(?:-SNAPSHOT)?(?!.)', poss_vers) and not dot_cookietemple: # type: ignore console.print( '[bold red]The version number entered does not match semantic versioning.\n' + 'Please enter the version in the format \[number].\[number].\[number]!' ) # noqa: W605 poss_vers = cookietemple_questionary_or_dot_cookietemple( function='text', question='Initial version of your project', default='0.1.0') self.creator_ctx.version = poss_vers self.creator_ctx.license = cookietemple_questionary_or_dot_cookietemple( function='select', question='License', choices=[ 'MIT', 'BSD', 'ISC', 'Apache2.0', 'GNUv3', 'Boost', 'Affero', 'CC0', 'CCBY', 'CCBYSA', 'Eclipse', 'WTFPL', 'unlicence', 'Not open source' ], default='MIT', dot_cookietemple=dot_cookietemple, to_get_property='license') if dot_cookietemple: self.creator_ctx.github_username = dot_cookietemple[ 'github_username'] self.creator_ctx.creator_github_username = dot_cookietemple[ 'creator_github_username'] else: self.creator_ctx.github_username = load_github_username() self.creator_ctx.creator_github_username = self.creator_ctx.github_username