Files
Pulse/Scripts/BackendBootstraper.py
2025-08-27 23:36:32 +02:00

71 lines
2.4 KiB
Python

import os
import shutil
import argparse
def main():
parser = argparse.ArgumentParser(
description="Bootstraps a new backend."
)
parser.add_argument("name", help="Backend's name")
parser.add_argument("fn_name", help="Backend's function names")
args = parser.parse_args()
base_name = "Template"
src_dir = os.path.abspath("Backend" + base_name)
dest_dir = os.path.abspath("../Sources/Backends/" + args.name)
if not os.path.isdir(src_dir):
raise SystemExit(f"Source directory '{base_name}' not found in current path.")
if os.path.exists(dest_dir):
raise SystemExit(f"Destination already exists: {dest_dir}")
fn_name = args.fn_name
name = args.name
name_upper = name.upper()
# Copy template directory
shutil.copytree(src_dir, dest_dir)
# Walk through destination and replace names/contents
for root, dirs, files in os.walk(dest_dir, topdown=False):
# Process files
for fname in files:
fpath = os.path.join(root, fname)
# Replace contents in text files
try:
with open(fpath, "rb") as fb:
head = fb.read(2048)
is_binary = b"\x00" in head
except Exception:
is_binary = True
if not is_binary:
try:
with open(fpath, "r", encoding="utf-8") as f:
text = f.read()
new_text = text.replace("TemplateName", fn_name).replace("TEMPLATE", name_upper).replace("Template", name)
if new_text != text:
with open(fpath, "w", encoding="utf-8") as f:
f.write(new_text)
except UnicodeDecodeError:
pass
# Rename file if needed
new_fname = fname.replace("TEMPLATE", name_upper).replace("Template", name)
if new_fname != fname:
os.replace(fpath, os.path.join(root, new_fname))
# Process directories
for dname in dirs:
old_dpath = os.path.join(root, dname)
new_dname = dname.replace("TEMPLATE", name_upper).replace("Template", name)
if new_dname != dname:
os.replace(old_dpath, os.path.join(root, new_dname))
print(f"✅ Project created at: {dest_dir}")
if __name__ == '__main__':
main()