update
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
build_services.py — Service page generator for floorithardwoodfloors.com
|
||||
Reads data/services.json + services/_template.html
|
||||
Outputs flat .html files: services/{slug}.html
|
||||
|
||||
Usage:
|
||||
python3 build_services.py
|
||||
python3 build_services.py --slug floor-refinishing
|
||||
python3 build_services.py --list
|
||||
"""
|
||||
|
||||
import json
|
||||
import sys
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
|
||||
SITE_ROOT = Path(__file__).parent
|
||||
DATA_FILE = SITE_ROOT / "data" / "services.json"
|
||||
TEMPLATE_FILE = SITE_ROOT / "services" / "_template.html"
|
||||
OUTPUT_DIR = SITE_ROOT / "services"
|
||||
|
||||
|
||||
def render_page(service: dict, template: str) -> str:
|
||||
html = template
|
||||
for key, value in service.items():
|
||||
if isinstance(value, str):
|
||||
html = html.replace(f"{{{{{key}}}}}", value)
|
||||
return html
|
||||
|
||||
|
||||
def build_one(service: dict, template: str, verbose: bool = True) -> Path:
|
||||
slug = service["slug"]
|
||||
output_path = OUTPUT_DIR / f"{slug}.html"
|
||||
html = render_page(service, template)
|
||||
output_path.write_text(html, encoding="utf-8")
|
||||
if verbose:
|
||||
print(f" Built: services/{slug}.html ({service.get('service_name', slug)})")
|
||||
return output_path
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Build flat service HTML pages from JSON database.")
|
||||
parser.add_argument("--slug", help="Build a single service by slug (e.g. floor-refinishing)")
|
||||
parser.add_argument("--list", action="store_true", help="List all services in database")
|
||||
args = parser.parse_args()
|
||||
|
||||
if not DATA_FILE.exists():
|
||||
print(f"ERROR: data file not found: {DATA_FILE}")
|
||||
sys.exit(1)
|
||||
if not TEMPLATE_FILE.exists():
|
||||
print(f"ERROR: template not found: {TEMPLATE_FILE}")
|
||||
sys.exit(1)
|
||||
|
||||
services = json.loads(DATA_FILE.read_text(encoding="utf-8"))
|
||||
template = TEMPLATE_FILE.read_text(encoding="utf-8")
|
||||
|
||||
if args.list:
|
||||
print(f"\nServices in database ({len(services)} total):")
|
||||
for svc in services:
|
||||
print(f" {svc['slug']:30s} {svc.get('service_name','')}")
|
||||
return
|
||||
|
||||
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
if args.slug:
|
||||
matches = [s for s in services if s["slug"] == args.slug]
|
||||
if not matches:
|
||||
print(f"ERROR: slug '{args.slug}' not found in database.")
|
||||
sys.exit(1)
|
||||
print(f"\nBuilding single service: {args.slug}")
|
||||
build_one(matches[0], template)
|
||||
else:
|
||||
print(f"\nBuilding {len(services)} service pages...")
|
||||
built = []
|
||||
for svc in services:
|
||||
path = build_one(svc, template)
|
||||
built.append(path)
|
||||
print(f"\nDone. {len(built)} pages written to services/")
|
||||
|
||||
print(f"Completed at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user