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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
# This is a Python script that is used to do a lot of things. It can be thought
# of as a manager script for this project. It is used to install requirements,
# run sorter, linter, start and build the project and more. It will be a
# constantly evolving script as the project evolves.
import logging as logger
import os
import subprocess
import sys
logger.basicConfig(stream=sys.stdout, level=logger.DEBUG)
def install_pip(package_name):
# check if package is installed
check_command = "pip3 show " + package_name
try:
output = subprocess.check_output(check_command, shell=True)
except:
logger.info(f"Installing {package_name}...")
subprocess.check_call(
[sys.executable, "-m", "pip", "-q", "install", package_name]
)
PACKAGES = ["black", "isort", "click", "inquirer", "pyyaml"]
def install_packages():
install_pip(" ".join(PACKAGES))
import click
import inquirer
class Setup:
def shell_run(self, command):
output = subprocess.check_output(command, shell=True)
return output.decode("utf-8")
def start(self):
if not os.path.exists(".venv"):
self.shell_run("python3 -m venv .venv")
logger.info("Virtual environment created.")
self.git()
def git(self):
username = self.shell_run("git config --global user.name")
if username == "":
questions = [
inquirer.Confirm(
"set_username",
message="Do you want to set git author name?",
default=True,
),
]
answers = inquirer.prompt(questions)
if answers["set_username"]:
username = inquirer.text(
message="Enter git author name (not username): "
)
self.shell_run(f'git config --global user.name "{username}"')
else:
logger.warn("Git author name not set.")
email = self.shell_run("git config --global user.email")
if email == "":
questions = [
inquirer.Confirm(
"set_email",
message="Do you want to set git author email?",
default=True,
),
]
answers = inquirer.prompt(questions)
if answers["set_email"]:
email = inquirer.text(message="Enter git author email: ")
self.shell_run(f'git config --global user.email "{email}"')
else:
logger.warn("Git author email not set.")
self.configure()
def configure(self):
configure_path = "bin/configure"
script = """#!{}
alias commit="./commit.sh"
alias setup="python3 setup.py"
echo "Added aliases for commit and setup."
echo ""
echo "Run 'setup' to start the setup again. Run 'setup -h' for more options."
echo "Run 'commit' to commit changes. Run 'commit -h' for help."
""".format(
os.environ["SHELL"]
)
with open(configure_path, "w") as f:
f.write(script)
configure_st = os.stat(configure_path)
os.chmod(configure_path, configure_st.st_mode | 0o111)
print(
"""Configuration script created.
You may want to configure aliases for commit and setup scripts.
To do so, run the configurator binary:
source bin/configure
You may also want to activate the virtual environment, if you haven't already:
source .venv/bin/activate
"""
)
CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"])
@click.group(context_settings=CONTEXT_SETTINGS)
def cli():
pass
@click.command(help="Start the setup.")
def start():
Setup().start()
cli.add_command(start)
@click.command(help="Install requirements.")
def install():
logger.info("Installing requirements...")
install_packages()
logger.info("Requirements installed.")
cli.add_command(install)
@click.command(help="Generate alias configuration script.")
def configure():
Setup().configure()
cli.add_command(configure)
if __name__ == "__main__":
cli()
|