Tai Truong
fix readme
d202ada
from datetime import datetime, timezone
from typing import TYPE_CHECKING
from uuid import UUID, uuid4
from pydantic import field_serializer, field_validator
from sqlmodel import JSON, Column, Field, Relationship, SQLModel
if TYPE_CHECKING:
from langflow.services.database.models.flow.model import Flow
from langflow.utils.util_strings import truncate_long_strings
class TransactionBase(SQLModel):
timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
vertex_id: str = Field(nullable=False)
target_id: str | None = Field(default=None)
inputs: dict | None = Field(default=None, sa_column=Column(JSON))
outputs: dict | None = Field(default=None, sa_column=Column(JSON))
status: str = Field(nullable=False)
error: str | None = Field(default=None)
flow_id: UUID = Field(foreign_key="flow.id")
# Needed for Column(JSON)
class Config:
arbitrary_types_allowed = True
@field_validator("flow_id", mode="before")
@classmethod
def validate_flow_id(cls, value):
if value is None:
return value
if isinstance(value, str):
value = UUID(value)
return value
@field_serializer("outputs")
def serialize_outputs(self, data) -> dict:
return truncate_long_strings(data)
class TransactionTable(TransactionBase, table=True): # type: ignore[call-arg]
__tablename__ = "transaction"
id: UUID | None = Field(default_factory=uuid4, primary_key=True)
flow: "Flow" = Relationship(back_populates="transactions")
class TransactionReadResponse(TransactionBase):
transaction_id: UUID
flow_id: UUID