mirror of
https://github.com/Kbz-8/Pulse.git
synced 2026-01-11 15:33:34 +00:00
adding backend bootstrapper
This commit is contained in:
70
Scripts/BackendBootstraper.py
git.filemode.normal_file
70
Scripts/BackendBootstraper.py
git.filemode.normal_file
@@ -0,0 +1,70 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user