Spaces:
Running
Running
from enum import Enum | |
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator | |
VALID_TYPES = ["date", "number", "text", "json", "integer", "int", "float", "str", "string", "boolean"] | |
class FormatterType(str, Enum): | |
date = "date" | |
text = "text" | |
number = "number" | |
json = "json" | |
boolean = "boolean" | |
class Column(BaseModel): | |
model_config = ConfigDict(populate_by_name=True) | |
name: str | |
display_name: str = Field(default="") | |
sortable: bool = Field(default=True) | |
filterable: bool = Field(default=True) | |
formatter: FormatterType | str | None = Field(default=None, alias="type") | |
description: str | None = None | |
default: str | None = None | |
def set_display_name(self): | |
if not self.display_name: | |
self.display_name = self.name | |
return self | |
def validate_formatter(cls, value): | |
if value in {"integer", "int", "float"}: | |
value = FormatterType.number | |
if value in {"str", "string"}: | |
value = FormatterType.text | |
if value == "dict": | |
value = FormatterType.json | |
if isinstance(value, str): | |
return FormatterType(value) | |
if isinstance(value, FormatterType): | |
return value | |
msg = f"Invalid formatter type: {value}. Valid types are: {FormatterType}" | |
raise ValueError(msg) | |
class TableSchema(BaseModel): | |
columns: list[Column] | |