59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
|
|
from datetime import datetime
|
||
|
|
from pydantic import BaseModel, Field, HttpUrl
|
||
|
|
|
||
|
|
|
||
|
|
class RemoteMountCreate(BaseModel):
|
||
|
|
name: str = Field(..., min_length=1, max_length=255)
|
||
|
|
base_url: HttpUrl
|
||
|
|
username: str | None = Field(default=None, max_length=255)
|
||
|
|
password: str | None = Field(default=None, max_length=2000)
|
||
|
|
root_path: str = Field(default="/", min_length=1, max_length=1000)
|
||
|
|
|
||
|
|
|
||
|
|
class RemoteMountOut(BaseModel):
|
||
|
|
id: str
|
||
|
|
name: str
|
||
|
|
mount_type: str
|
||
|
|
base_url: str
|
||
|
|
username: str | None
|
||
|
|
root_path: str
|
||
|
|
is_active: bool
|
||
|
|
last_sync_at: str | None
|
||
|
|
created_at: datetime
|
||
|
|
updated_at: datetime
|
||
|
|
|
||
|
|
model_config = {"from_attributes": True}
|
||
|
|
|
||
|
|
|
||
|
|
class RemoteNodeOut(BaseModel):
|
||
|
|
path: str
|
||
|
|
name: str
|
||
|
|
is_dir: bool
|
||
|
|
size: int | None = None
|
||
|
|
modified_at: str | None = None
|
||
|
|
etag: str | None = None
|
||
|
|
children: list["RemoteNodeOut"] = []
|
||
|
|
|
||
|
|
|
||
|
|
class RemoteMountTreeOut(BaseModel):
|
||
|
|
mount_id: str
|
||
|
|
root_path: str
|
||
|
|
nodes: list[RemoteNodeOut]
|
||
|
|
|
||
|
|
|
||
|
|
class RemoteSyncRequest(BaseModel):
|
||
|
|
remote_path: str = Field(..., min_length=1, max_length=2000)
|
||
|
|
local_folder_id: str = Field(..., min_length=1, max_length=36)
|
||
|
|
mode: str = Field(default="file", pattern="^(file|folder)$")
|
||
|
|
|
||
|
|
|
||
|
|
class RemoteSyncResultOut(BaseModel):
|
||
|
|
synced: int
|
||
|
|
skipped: int
|
||
|
|
failed: int
|
||
|
|
document_ids: list[str]
|
||
|
|
errors: list[str]
|
||
|
|
|
||
|
|
|
||
|
|
RemoteNodeOut.model_rebuild()
|