53 lines
1.4 KiB
Python
53 lines
1.4 KiB
Python
import re
|
|
from typing import Any
|
|
|
|
PLACEHOLDER_RE = re.compile(
|
|
r"\{\{\{\{IMAGE:(.*?)\}\}\}\}|\{\{IMAGE:(.*?)\}\}",
|
|
re.DOTALL,
|
|
)
|
|
|
|
|
|
def parse_image_placeholders(content: str, max_images: int) -> list[dict[str, Any]]:
|
|
items: list[dict[str, Any]] = []
|
|
for match in PLACEHOLDER_RE.finditer(content or ""):
|
|
description = (match.group(1) or match.group(2) or "").strip()
|
|
if not description:
|
|
continue
|
|
items.append(
|
|
{
|
|
"index": len(items),
|
|
"description": description,
|
|
"placeholder": match.group(0),
|
|
"start_offset": match.start(),
|
|
}
|
|
)
|
|
if len(items) >= max_images:
|
|
break
|
|
return items
|
|
|
|
|
|
def build_initial_image_assets(
|
|
placeholders: list[dict[str, Any]],
|
|
provider: str,
|
|
style: str,
|
|
size: str,
|
|
now_iso: str,
|
|
) -> list[dict[str, Any]]:
|
|
return [
|
|
{
|
|
"index": item["index"],
|
|
"placeholder": item["placeholder"],
|
|
"description": item["description"],
|
|
"prompt": None,
|
|
"url": None,
|
|
"status": "pending",
|
|
"provider": provider,
|
|
"style": style,
|
|
"size": size,
|
|
"error": None,
|
|
"created_at": now_iso,
|
|
"updated_at": now_iso,
|
|
}
|
|
for item in placeholders
|
|
]
|