File: fill_template_vars.py

package info (click to toggle)
python-py-ecc 8.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 796 kB
  • sloc: python: 4,896; makefile: 237
file content (71 lines) | stat: -rw-r--r-- 2,317 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/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>", module_name, project_root)
    _replace("<PYPI_NAME>", pypi_name, project_root)
    _replace("<REPO_NAME>", repo_name, project_root)
    _replace("<RTD_NAME>", rtd_name, project_root)
    _replace("<PROJECT_NAME>", project_name, project_root)
    _replace("<SHORT_DESCRIPTION>", 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()