import base64 import re from pathlib import Path from crewai.flow.path_utils import safe_path_join, validate_path_exists class HTMLTemplateHandler: """Handles HTML template processing and generation for flow visualization diagrams.""" def __init__(self, template_path, logo_path): """ Initialize HTMLTemplateHandler with validated template and logo paths. Parameters ---------- template_path : str Path to the HTML template file. logo_path : str Path to the logo image file. Raises ------ ValueError If template or logo paths are invalid or files don't exist. """ try: self.template_path = validate_path_exists(template_path, "file") self.logo_path = validate_path_exists(logo_path, "file") except ValueError as e: raise ValueError(f"Invalid template or logo path: {e}") def read_template(self): """Read and return the HTML template file contents.""" with open(self.template_path, "r", encoding="utf-8") as f: return f.read() def encode_logo(self): """Convert the logo SVG file to base64 encoded string.""" with open(self.logo_path, "rb") as logo_file: logo_svg_data = logo_file.read() return base64.b64encode(logo_svg_data).decode("utf-8") def extract_body_content(self, html): """Extract and return content between body tags from HTML string.""" match = re.search("