| from pydantic import BaseModel, Field, field_validator |
| from pydantic_settings import BaseSettings, SettingsConfigDict |
| from typing import List, Optional |
|
|
| |
| |
| |
|
|
| class NodeVersion(BaseModel): |
| changelog: str |
| dependencies: List[str] |
| deprecated: bool |
| id: str |
| version: str |
| download_url: str |
|
|
|
|
| class Node(BaseModel): |
| id: str |
| name: str |
| description: str |
| author: Optional[str] = None |
| license: Optional[str] = None |
| icon: Optional[str] = None |
| repository: Optional[str] = None |
| tags: List[str] = Field(default_factory=list) |
| latest_version: Optional[NodeVersion] = None |
|
|
|
|
| class PublishNodeVersionResponse(BaseModel): |
| node_version: NodeVersion |
| signedUrl: str |
|
|
|
|
| class URLs(BaseModel): |
| homepage: str = Field(default="", alias="Homepage") |
| documentation: str = Field(default="", alias="Documentation") |
| repository: str = Field(default="", alias="Repository") |
| issues: str = Field(default="", alias="Issues") |
|
|
|
|
| class Model(BaseModel): |
| location: str |
| model_url: str |
|
|
|
|
| class ComfyConfig(BaseModel): |
| publisher_id: str = Field(default="", alias="PublisherId") |
| display_name: str = Field(default="", alias="DisplayName") |
| icon: str = Field(default="", alias="Icon") |
| models: List[Model] = Field(default_factory=list, alias="Models") |
| includes: List[str] = Field(default_factory=list) |
| web: Optional[str] = None |
| banner_url: str = "" |
|
|
| class License(BaseModel): |
| file: str = "" |
| text: str = "" |
|
|
|
|
| class ProjectConfig(BaseModel): |
| name: str = "" |
| description: str = "" |
| version: str = "1.0.0" |
| requires_python: str = Field(default=">= 3.9", alias="requires-python") |
| dependencies: List[str] = Field(default_factory=list) |
| license: License = Field(default_factory=License) |
| urls: URLs = Field(default_factory=URLs) |
| supported_os: List[str] = Field(default_factory=list) |
| supported_accelerators: List[str] = Field(default_factory=list) |
| supported_comfyui_version: str = "" |
| supported_comfyui_frontend_version: str = "" |
|
|
| @field_validator('license', mode='before') |
| @classmethod |
| def validate_license(cls, v): |
| if isinstance(v, str): |
| return License(text=v) |
| elif isinstance(v, dict): |
| return License(**v) |
| elif isinstance(v, License): |
| return v |
| else: |
| return License() |
|
|
|
|
| class PyProjectConfig(BaseModel): |
| project: ProjectConfig = Field(default_factory=ProjectConfig) |
| tool_comfy: ComfyConfig = Field(default_factory=ComfyConfig) |
|
|
|
|
| class PyProjectSettings(BaseSettings): |
| project: dict = Field(default_factory=dict) |
|
|
| tool: dict = Field(default_factory=dict) |
|
|
| model_config = SettingsConfigDict(extra='allow') |
|
|