"""File-related models for SharePoint."""
from datetime import datetime
from pydantic import BaseModel, Field
class FileMetadata(BaseModel):
"""File metadata from SharePoint."""
id: str = Field(description="Unique file identifier")
name: str = Field(description="File name")
size: int = Field(description="File size in bytes")
mime_type: str | None = Field(default=None, description="MIME type")
web_url: str = Field(description="URL to access file in browser")
created_at: datetime = Field(description="Creation timestamp")
modified_at: datetime = Field(description="Last modification timestamp")
created_by: str | None = Field(default=None, description="Creator display name")
modified_by: str | None = Field(default=None, description="Last modifier display name")
class FileContent(BaseModel):
"""File content result."""
name: str = Field(description="File name")
mime_type: str = Field(description="MIME type")
content: str = Field(description="Base64 encoded for binary, plain text for text files")
is_text: bool = Field(description="Whether content is plain text or base64")
class FileListResult(BaseModel):
"""Paginated file list result."""
files: list[FileMetadata] = Field(description="List of files")
next_cursor: str | None = Field(default=None, description="Cursor for next page")
total_count: int | None = Field(default=None, description="Total count if available")
class UploadResult(BaseModel):
"""Result of file upload."""
id: str = Field(description="Uploaded file identifier")
name: str = Field(description="File name")
web_url: str = Field(description="URL to access file")
size: int = Field(description="File size in bytes")
class SharingLink(BaseModel):
"""Generated sharing link."""
link_url: str = Field(description="Sharing link URL")
link_type: str = Field(description="Link type: view, edit, or embed")
expires_at: datetime | None = Field(default=None, description="Expiration timestamp")
class SearchResult(BaseModel):
"""Search result item."""
id: str = Field(description="File identifier")
name: str = Field(description="File name")
site_name: str = Field(description="Site where file is located")
web_url: str = Field(description="URL to access file")
snippet: str | None = Field(default=None, description="Content snippet with match")