|
|
from datetime import datetime, timezone |
|
|
from typing import TYPE_CHECKING |
|
|
from uuid import UUID, uuid4 |
|
|
|
|
|
from pydantic import ValidationInfo, field_validator |
|
|
from sqlmodel import JSON, Column, DateTime, Field, Relationship, SQLModel, func |
|
|
|
|
|
from langflow.services.variable.constants import CREDENTIAL_TYPE |
|
|
|
|
|
if TYPE_CHECKING: |
|
|
from langflow.services.database.models.user.model import User |
|
|
|
|
|
|
|
|
def utc_now(): |
|
|
return datetime.now(timezone.utc) |
|
|
|
|
|
|
|
|
class VariableBase(SQLModel): |
|
|
name: str = Field(description="Name of the variable") |
|
|
value: str = Field(description="Encrypted value of the variable") |
|
|
default_fields: list[str] | None = Field(sa_column=Column(JSON)) |
|
|
type: str | None = Field(None, description="Type of the variable") |
|
|
|
|
|
|
|
|
class Variable(VariableBase, table=True): |
|
|
id: UUID | None = Field( |
|
|
default_factory=uuid4, |
|
|
primary_key=True, |
|
|
description="Unique ID for the variable", |
|
|
) |
|
|
|
|
|
created_at: datetime | None = Field( |
|
|
default=None, |
|
|
sa_column=Column(DateTime(timezone=True), server_default=func.now(), nullable=True), |
|
|
description="Creation time of the variable", |
|
|
) |
|
|
updated_at: datetime | None = Field( |
|
|
default=None, |
|
|
sa_column=Column(DateTime(timezone=True), nullable=True), |
|
|
description="Last update time of the variable", |
|
|
) |
|
|
default_fields: list[str] | None = Field(sa_column=Column(JSON)) |
|
|
|
|
|
user_id: UUID = Field(description="User ID associated with this variable", foreign_key="user.id") |
|
|
user: "User" = Relationship(back_populates="variables") |
|
|
|
|
|
|
|
|
class VariableCreate(VariableBase): |
|
|
created_at: datetime | None = Field(default_factory=utc_now, description="Creation time of the variable") |
|
|
|
|
|
updated_at: datetime | None = Field(default_factory=utc_now, description="Creation time of the variable") |
|
|
|
|
|
|
|
|
class VariableRead(SQLModel): |
|
|
id: UUID |
|
|
name: str | None = Field(None, description="Name of the variable") |
|
|
type: str | None = Field(None, description="Type of the variable") |
|
|
value: str | None = Field(None, description="Encrypted value of the variable") |
|
|
default_fields: list[str] | None = Field(None, description="Default fields for the variable") |
|
|
|
|
|
@field_validator("value") |
|
|
@classmethod |
|
|
def validate_value(cls, value: str, info: ValidationInfo): |
|
|
if info.data.get("type") == CREDENTIAL_TYPE: |
|
|
return None |
|
|
return value |
|
|
|
|
|
|
|
|
class VariableUpdate(SQLModel): |
|
|
id: UUID |
|
|
name: str | None = Field(None, description="Name of the variable") |
|
|
value: str | None = Field(None, description="Encrypted value of the variable") |
|
|
default_fields: list[str] | None = Field(None, description="Default fields for the variable") |
|
|
|