Skip to main content
Glama
tables.py5.62 kB
"""Pydantic models for Tables app responses.""" from typing import Any, Dict, List, Optional from pydantic import BaseModel, Field from .base import BaseResponse, IdResponse, StatusResponse class TableColumn(BaseModel): """Model for a table column definition.""" id: int = Field(description="Column ID") title: str = Field(description="Column title") type: str = Field(description="Column type (text, number, datetime, etc.)") subtype: Optional[str] = Field(None, description="Column subtype") mandatory: bool = Field(default=False, description="Whether column is mandatory") description: Optional[str] = Field(None, description="Column description") text_default: Optional[str] = Field(None, description="Default text value") text_allowed_pattern: Optional[str] = Field( None, description="Allowed text pattern" ) text_max_length: Optional[int] = Field(None, description="Maximum text length") number_default: Optional[float] = Field(None, description="Default number value") number_min: Optional[float] = Field(None, description="Minimum number value") number_max: Optional[float] = Field(None, description="Maximum number value") number_decimals: Optional[int] = Field(None, description="Number of decimal places") datetime_default: Optional[str] = Field(None, description="Default datetime value") selection_options: List[str] = Field( default_factory=list, description="Selection options" ) selection_default: Optional[str] = Field( None, description="Default selection value" ) class TableRow(BaseModel): """Model for a table row.""" id: int = Field(description="Row ID") created_by: Optional[str] = Field(None, description="User who created the row") created_at: Optional[str] = Field(None, description="Row creation timestamp") last_edit_by: Optional[str] = Field( None, description="User who last edited the row" ) last_edit_at: Optional[str] = Field(None, description="Last edit timestamp") data: Dict[int, Any] = Field(description="Row data keyed by column ID") class TableView(BaseModel): """Model for a table view.""" id: int = Field(description="View ID") title: str = Field(description="View title") emoji: Optional[str] = Field(None, description="View emoji") description: Optional[str] = Field(None, description="View description") columns: List[int] = Field( default_factory=list, description="List of column IDs in this view" ) sort: List[Dict[str, Any]] = Field( default_factory=list, description="Sort configuration" ) filter: List[Dict[str, Any]] = Field( default_factory=list, description="Filter configuration" ) class Table(BaseModel): """Model for a Nextcloud table.""" id: int = Field(description="Table ID") title: str = Field(description="Table title") emoji: Optional[str] = Field(None, description="Table emoji") ownership: str = Field(description="Table ownership") owner_display_name: str = Field(description="Display name of table owner") created_by: Optional[str] = Field(None, description="User who created the table") created_at: Optional[str] = Field(None, description="Table creation timestamp") last_edit_by: Optional[str] = Field( None, description="User who last edited the table" ) last_edit_at: Optional[str] = Field(None, description="Last edit timestamp") row_count: int = Field(default=0, description="Number of rows in the table") has_shares: bool = Field(default=False, description="Whether table is shared") archived: bool = Field(default=False, description="Whether table is archived") is_shared: bool = Field( default=False, description="Whether table is shared with current user" ) on_share_permissions: Optional[Dict[str, Any]] = Field( None, description="Share permissions" ) class TableSchema(BaseModel): """Model for complete table schema including columns and views.""" table: Table = Field(description="Table information") columns: List[TableColumn] = Field(description="Table columns") views: List[TableView] = Field(description="Table views") class ListTablesResponse(BaseResponse): """Response model for listing tables.""" tables: List[Table] = Field(description="List of available tables") total_count: int = Field(description="Total number of tables") class GetSchemaResponse(BaseResponse): """Response model for getting table schema.""" table_schema: TableSchema = Field(description="Table schema information") class ReadTableResponse(BaseResponse): """Response model for reading table rows.""" rows: List[TableRow] = Field(description="Table rows") table_id: int = Field(description="Table ID") total_count: Optional[int] = Field( None, description="Total number of rows (if known)" ) offset: Optional[int] = Field(None, description="Offset used for pagination") limit: Optional[int] = Field(None, description="Limit used for pagination") class CreateRowResponse(IdResponse): """Response model for row creation.""" row: TableRow = Field(description="The created row") table_id: int = Field(description="Table ID the row was created in") class UpdateRowResponse(BaseResponse): """Response model for row updates.""" row: TableRow = Field(description="The updated row") class DeleteRowResponse(StatusResponse): """Response model for row deletion.""" deleted_id: int = Field(description="ID of the deleted row")

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/No-Smoke/nextcloud-mcp-comprehensive'

If you have feedback or need assistance with the MCP directory API, please join our Discord server