RedditVideoMakerBot/utils/checker.py

77 lines
2.5 KiB

#!/usr/bin/env python
import os
from rich.console import Console
import re
import dotenv
from utils.console import handle_input
console = Console()
success = True
def check_env() -> bool:
if not os.path.exists(".env.template"):
console.print("[red]Couldn't find .env.template. Unable to check variables.")
return False
with open(".env.template", "r") as template:
# req_envs = [env.split("=")[0] for env in template.readlines() if "=" in env]
matching = {}
explanations = {}
req_envs = []
var_optional = False
for line in template.readlines():
if "=" in line and var_optional is not True:
req_envs.append(line.split("=")[0])
elif "#OPTIONAL" in line:
var_optional = True
elif line.startswith("#MATCH_REGEX "):
matching[req_envs[-1]] = line.removeprefix("#MATCH_REGEX ")[:-1]
var_optional = False
elif line.startswith("#EXPLANATION "):
explanations[req_envs[-1]] = line.removeprefix("#EXPLANATION ")[:-1]
var_optional = False
else:
var_optional = False
missing = []
incorrect = []
dotenv.load_dotenv()
for env in req_envs:
value = os.getenv(env)
if value is None:
missing.append(env)
continue
if env in matching.keys():
env, re.match(matching[env], value) is None and incorrect.append(env)
if len(missing):
for i in range(len(missing)):
try:
missing[i] = missing[i] + ": " + explanations[missing[i]]
except KeyError:
pass
console.print(
f"[red]{'These variables are'*(len(missing) > 1) or 'This variable is'} non-optional and missing: \n\n"
+ "\n\n".join(missing)
)
success = False
if len(incorrect):
console.print(
f"[red]{'These variables are'*(len(incorrect) > 1) or 'This variable is'} set incorrectly: "
+ "\n".join(incorrect)
)
success = False
# if success is True:
# return True
# console.print("[green]Do you want to enter the missing variables by hand(y/n)")
# if not input().casefold().startswith("y"):
# console.print("[red]Aborting: Unresolved missing variables")
# return success
# with open(".env", "a") as env_file:
# for env in missing:
# pass
return success
if __name__ == "__main__":
check_env()