mirror of
https://github.com/Kbz-8/Pulse.git
synced 2026-01-10 15:03:34 +00:00
71 lines
2.4 KiB
Python
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()
|