aboutsummaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py100
1 files changed, 100 insertions, 0 deletions
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..8e69692
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,100 @@
+# 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
+
+import inquirer
+
+logger.basicConfig(stream=sys.stdout, level=logger.DEBUG)
+
+
+class Setup:
+ QUIET_INSTALL = "pip install -q -r requirements.txt"
+
+ 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.shell_run("source .venv/bin/activate")
+ logger.info("Virtual environment activated.")
+ logger.info("Installing requirements...")
+ self.shell_run(self.QUIET_INSTALL)
+ 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.finish()
+
+ def finish(self):
+ logger.info("Setup finished.")
+ 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."
+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(
+ """
+You may want to configure aliases for commit and setup scripts.
+To do so, run the configurator binary:
+
+ source bin/configure
+"""
+ )
+
+
+if __name__ == "__main__":
+ setup = Setup()
+ setup.start()