Spaces:
Running
Running
| 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 | |
| def validate_flow_id(cls, value): | |
| if value is None: | |
| return value | |
| if isinstance(value, str): | |
| value = UUID(value) | |
| return value | |
| 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 | |