Files
demo_sites/builder/management/commands/seed_templates.py
2026-05-17 18:29:30 -05:00

50 lines
1.9 KiB
Python

import json
from pathlib import Path
from django.core.management.base import BaseCommand
from builder.models import TemplateOption
from builder.template_registry import discover_client_templates
class Command(BaseCommand):
help = "Seed template options from templates/template_* folders and site_catalog/templates.json"
def handle(self, *args, **options):
root = Path(__file__).resolve().parents[4]
catalog_path = root / "site_catalog" / "templates.json"
discovered = {item["slug"]: item for item in discover_client_templates()}
catalog_items: dict[str, dict] = {}
if catalog_path.exists():
for item in json.loads(catalog_path.read_text(encoding="utf-8")):
catalog_items[item["slug"]] = item
merged_slugs = set(discovered) | set(catalog_items)
count = 0
for slug in sorted(merged_slugs):
discovered_item = discovered.get(slug, {})
catalog_item = catalog_items.get(slug, {})
merged = {**discovered_item, **catalog_item}
if not merged.get("source_folder"):
self.stdout.write(self.style.WARNING(f"Skipping {slug}: no source_folder."))
continue
TemplateOption.objects.update_or_create(
slug=slug,
defaults={
"name": merged.get("name", slug),
"description": merged.get("description", ""),
"supports_basic": merged.get("supports_basic", True),
"supports_django": merged.get("supports_django", True),
"source_folder": merged["source_folder"],
"is_active": merged.get("is_active", True),
},
)
count += 1
TemplateOption.objects.exclude(slug__in=merged_slugs).update(is_active=False)
self.stdout.write(self.style.SUCCESS(f"Seeded {count} template option(s)."))