50 lines
1.9 KiB
Python
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)."))
|