#!/usr/bin/env python3 import os import sys import re from pathlib import Path def _find_files(project_root): path_exclude_pattern = r"\.git($|\/)|venv|_build" file_exclude_pattern = r"fill_template_vars\.py|\.swp$" filepaths = [] for dir_path, _dir_names, file_names in os.walk(project_root): if not re.search(path_exclude_pattern, dir_path): for file in file_names: if not re.search(file_exclude_pattern, file): filepaths.append(str(Path(dir_path, file))) return filepaths def _replace(pattern, replacement, project_root): print(f"Replacing values: {pattern}") for file in _find_files(project_root): try: with open(file) as f: content = f.read() content = re.sub(pattern, replacement, content) with open(file, "w") as f: f.write(content) except UnicodeDecodeError: pass def main(): project_root = Path(os.path.realpath(sys.argv[0])).parent.parent module_name = input("What is your python module name? ") pypi_input = input(f"What is your pypi package name? (default: {module_name}) ") pypi_name = pypi_input or module_name repo_input = input(f"What is your github project name? (default: {pypi_name}) ") repo_name = repo_input or pypi_name rtd_input = input( f"What is your readthedocs.org project name? (default: {pypi_name}) " ) rtd_name = rtd_input or pypi_name project_input = input( f"What is your project name (ex: at the top of the README)? (default: {repo_name}) " ) project_name = project_input or repo_name short_description = input("What is a one-liner describing the project? ") _replace("", module_name, project_root) _replace("", pypi_name, project_root) _replace("", repo_name, project_root) _replace("", rtd_name, project_root) _replace("", project_name, project_root) _replace("", short_description, project_root) os.makedirs(project_root / module_name, exist_ok=True) Path(project_root / module_name / "__init__.py").touch() Path(project_root / module_name / "py.typed").touch() if __name__ == "__main__": main()