66 lines
1.6 KiB
Python
66 lines
1.6 KiB
Python
import uuid
|
|
from typing import List, Optional
|
|
from pydantic import BaseModel
|
|
|
|
from ppt_generator.models.content_type_models import (
|
|
CONTENT_TYPE_MAPPING,
|
|
Type1Content,
|
|
Type2Content,
|
|
Type3Content,
|
|
Type4Content,
|
|
Type5Content,
|
|
Type6Content,
|
|
Type7Content,
|
|
Type8Content,
|
|
Type9Content,
|
|
)
|
|
|
|
|
|
class SlideModel(BaseModel):
|
|
id: Optional[str] = None
|
|
index: int
|
|
type: int
|
|
design_index: Optional[int] = None
|
|
images: Optional[List[str]] = None
|
|
icons: Optional[List[str]] = None
|
|
presentation: str
|
|
content: (
|
|
Type1Content
|
|
| Type2Content
|
|
| Type3Content
|
|
| Type4Content
|
|
| Type5Content
|
|
| Type6Content
|
|
| Type7Content
|
|
| Type8Content
|
|
| Type9Content
|
|
)
|
|
properties: Optional[dict] = None
|
|
|
|
@classmethod
|
|
def from_dict(cls, data):
|
|
slide_model = cls(**data)
|
|
content = data["content"]
|
|
slide_model.content = CONTENT_TYPE_MAPPING[slide_model.type](**content)
|
|
return slide_model
|
|
|
|
def to_create_dict(self, auto_id: bool = False):
|
|
temp = self.model_dump(mode="json")
|
|
if not self.id:
|
|
if auto_id:
|
|
temp["id"] = str(uuid.uuid4())
|
|
else:
|
|
temp.pop("id")
|
|
return temp
|
|
|
|
@property
|
|
def images_count(self):
|
|
if not hasattr(self.content, "image_prompts"):
|
|
return 0
|
|
return len(self.content.image_prompts or [])
|
|
|
|
@property
|
|
def icons_count(self):
|
|
if not hasattr(self.content, "icon_queries"):
|
|
return 0
|
|
return len(self.content.icon_queries or [])
|