| from typing import Optional |
| from uuid import UUID, uuid4 |
|
|
| from sqlalchemy import Text, UniqueConstraint |
| from sqlmodel import Column, Field, Relationship, SQLModel |
|
|
| from langflow.services.database.models.flow.model import Flow, FlowRead |
| from langflow.services.database.models.user.model import User |
|
|
|
|
| class FolderBase(SQLModel): |
| name: str = Field(index=True) |
| description: str | None = Field(default=None, sa_column=Column(Text)) |
|
|
|
|
| class Folder(FolderBase, table=True): |
| id: UUID | None = Field(default_factory=uuid4, primary_key=True) |
| parent_id: UUID | None = Field(default=None, foreign_key="folder.id") |
|
|
| parent: Optional["Folder"] = Relationship( |
| back_populates="children", |
| sa_relationship_kwargs={"remote_side": "Folder.id"}, |
| ) |
| children: list["Folder"] = Relationship(back_populates="parent") |
| user_id: UUID | None = Field(default=None, foreign_key="user.id") |
| user: User = Relationship(back_populates="folders") |
| flows: list[Flow] = Relationship( |
| back_populates="folder", sa_relationship_kwargs={"cascade": "all, delete, delete-orphan"} |
| ) |
|
|
| __table_args__ = (UniqueConstraint("user_id", "name", name="unique_folder_name"),) |
|
|
|
|
| class FolderCreate(FolderBase): |
| components_list: list[UUID] | None = None |
| flows_list: list[UUID] | None = None |
|
|
|
|
| class FolderRead(FolderBase): |
| id: UUID |
| parent_id: UUID | None = Field() |
|
|
|
|
| class FolderReadWithFlows(FolderBase): |
| id: UUID |
| parent_id: UUID | None = Field() |
| flows: list[FlowRead] = Field(default=[]) |
|
|
|
|
| class FolderUpdate(SQLModel): |
| name: str | None = None |
| description: str | None = None |
| parent_id: UUID | None = None |
| components: list[UUID] = Field(default_factory=list) |
| flows: list[UUID] = Field(default_factory=list) |
|
|