Update project configuration files, and API routes accordingly. Add SQLite runtime file ignores to .gitignore for better file management.
This commit is contained in:
103
scripts/update_headers.py
Normal file
103
scripts/update_headers.py
Normal file
@@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Update HexaHost file headers — fixed-width box, readable ASCII."""
|
||||
from __future__ import annotations
|
||||
|
||||
import pathlib
|
||||
import re
|
||||
|
||||
ROOT = pathlib.Path(__file__).resolve().parent.parent
|
||||
|
||||
# Clear, readable banner — spells "HexaHost" literally
|
||||
ASCII_LINES = [
|
||||
"+-+-+-+-+-+-+-+-+",
|
||||
"|H|e|x|a|H|o|s|t|",
|
||||
"+-+-+-+-+-+-+-+-+",
|
||||
]
|
||||
|
||||
INNER = 66 # chars between ║ … ║ (total line length = 70 for .py)
|
||||
|
||||
|
||||
def box_line(content: str, ts: bool = False) -> str:
|
||||
padded = content.center(INNER)
|
||||
if len(padded) != INNER:
|
||||
raise ValueError(f"Line width {len(padded)} != {INNER}: {content!r}")
|
||||
if ts:
|
||||
line = f" * ║{padded}║"
|
||||
assert len(line) == 71, line
|
||||
return line
|
||||
line = f"# ║{padded}║"
|
||||
assert len(line) == 70, line
|
||||
return line
|
||||
|
||||
|
||||
def py_header() -> str:
|
||||
lines = [
|
||||
"# ╔══════════════════════════════════════════════════════════════════╗",
|
||||
box_line(""),
|
||||
]
|
||||
lines.extend(box_line(art) for art in ASCII_LINES)
|
||||
lines.extend([
|
||||
box_line(""),
|
||||
box_line("© 2026 HexaHost — All Rights Reserved"),
|
||||
box_line(""),
|
||||
box_line("discord ── https://discord.gg/hexahost"),
|
||||
box_line("github ── https://github.com/theoneandonlymace"),
|
||||
box_line(""),
|
||||
"# ╚══════════════════════════════════════════════════════════════════╝",
|
||||
])
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def ts_header() -> str:
|
||||
lines = [
|
||||
"/**",
|
||||
" * ╔══════════════════════════════════════════════════════════════════╗",
|
||||
box_line("", ts=True),
|
||||
]
|
||||
lines.extend(box_line(art, ts=True) for art in ASCII_LINES)
|
||||
lines.extend([
|
||||
box_line("", ts=True),
|
||||
box_line("© 2026 HexaHost — All Rights Reserved", ts=True),
|
||||
box_line("", ts=True),
|
||||
box_line("discord ── https://discord.gg/hexahost", ts=True),
|
||||
box_line("github ── https://github.com/theoneandonlymace", ts=True),
|
||||
box_line("", ts=True),
|
||||
" * ╚══════════════════════════════════════════════════════════════════╝",
|
||||
" */",
|
||||
])
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
PY_HEADER_RE = re.compile(r"^# ╔═+[\s\S]*?^# ╚═+╝\n?", re.MULTILINE)
|
||||
TS_HEADER_RE = re.compile(r"^/\*\*\n \* ╔═+[\s\S]*? \*/\n?", re.MULTILINE)
|
||||
|
||||
|
||||
def update_file(path: pathlib.Path) -> bool:
|
||||
text = path.read_text(encoding="utf-8")
|
||||
if path.suffix in {".ts", ".tsx"}:
|
||||
if not TS_HEADER_RE.search(text):
|
||||
return False
|
||||
new_text = TS_HEADER_RE.sub(ts_header() + "\n", text, count=1)
|
||||
else:
|
||||
if not PY_HEADER_RE.search(text):
|
||||
return False
|
||||
new_text = PY_HEADER_RE.sub(py_header() + "\n", text, count=1)
|
||||
if new_text != text:
|
||||
path.write_text(new_text, encoding="utf-8")
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def main() -> None:
|
||||
updated = 0
|
||||
for pattern in ("bot/**/*.py", "dashboard/**/*.ts", "dashboard/**/*.tsx"):
|
||||
for path in ROOT.glob(pattern):
|
||||
if "node_modules" in path.parts:
|
||||
continue
|
||||
if update_file(path):
|
||||
updated += 1
|
||||
print(f"Updated {updated} file headers")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user