tamar-file-hub-client 0.0.9__py3-none-any.whl → 0.0.11__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- file_hub_client/rpc/gen/file_service_pb2.py +28 -28
- file_hub_client/rpc/gen/taple_service_pb2.py +174 -174
- file_hub_client/rpc/protos/file_service.proto +1 -0
- file_hub_client/rpc/protos/taple_service.proto +4 -4
- file_hub_client/schemas/taple.py +412 -412
- file_hub_client/services/file/async_blob_service.py +3 -1
- file_hub_client/services/file/sync_blob_service.py +3 -1
- file_hub_client/services/taple/async_taple_service.py +2285 -2291
- file_hub_client/services/taple/base_taple_service.py +367 -352
- file_hub_client/services/taple/sync_taple_service.py +11 -17
- {tamar_file_hub_client-0.0.9.dist-info → tamar_file_hub_client-0.0.11.dist-info}/METADATA +1 -1
- {tamar_file_hub_client-0.0.9.dist-info → tamar_file_hub_client-0.0.11.dist-info}/RECORD +14 -14
- {tamar_file_hub_client-0.0.9.dist-info → tamar_file_hub_client-0.0.11.dist-info}/WHEEL +0 -0
- {tamar_file_hub_client-0.0.9.dist-info → tamar_file_hub_client-0.0.11.dist-info}/top_level.txt +0 -0
file_hub_client/schemas/taple.py
CHANGED
@@ -1,413 +1,413 @@
|
|
1
|
-
"""
|
2
|
-
Taple 相关数据模型
|
3
|
-
"""
|
4
|
-
from datetime import datetime
|
5
|
-
from typing import Optional, List, Dict, Any
|
6
|
-
from pydantic import BaseModel, Field
|
7
|
-
|
8
|
-
|
9
|
-
class Table(BaseModel):
|
10
|
-
"""表格信息模型"""
|
11
|
-
id: str = Field(..., description="表格ID")
|
12
|
-
file_id: str = Field(..., description="关联文件ID")
|
13
|
-
org_id: str = Field(..., description="组织ID")
|
14
|
-
user_id: str = Field(..., description="用户ID")
|
15
|
-
name: Optional[str] = Field(None, description="表格名称")
|
16
|
-
description: Optional[str] = Field(None, description="表格描述")
|
17
|
-
created_by_role: str = Field(..., description="创建者角色")
|
18
|
-
created_by: str = Field(..., description="创建者ID")
|
19
|
-
created_at: datetime = Field(..., description="创建时间")
|
20
|
-
updated_at: datetime = Field(..., description="更新时间")
|
21
|
-
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
22
|
-
|
23
|
-
class Config:
|
24
|
-
json_encoders = {
|
25
|
-
datetime: lambda v: v.isoformat()
|
26
|
-
}
|
27
|
-
|
28
|
-
|
29
|
-
class Sheet(BaseModel):
|
30
|
-
"""工作表信息模型"""
|
31
|
-
id: str = Field(..., description="工作表ID")
|
32
|
-
table_id: str = Field(..., description="所属表格ID")
|
33
|
-
org_id: str = Field(..., description="组织ID")
|
34
|
-
user_id: str = Field(..., description="用户ID")
|
35
|
-
name: str = Field(..., description="工作表名称")
|
36
|
-
description: Optional[str] = Field(None, description="工作表描述")
|
37
|
-
position: int = Field(..., description="工作表位置")
|
38
|
-
version: int = Field(..., description="版本号")
|
39
|
-
created_by_role: str = Field(..., description="创建者角色")
|
40
|
-
created_by: str = Field(..., description="创建者ID")
|
41
|
-
created_at: datetime = Field(..., description="创建时间")
|
42
|
-
updated_at: datetime = Field(..., description="更新时间")
|
43
|
-
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
44
|
-
|
45
|
-
class Config:
|
46
|
-
json_encoders = {
|
47
|
-
datetime: lambda v: v.isoformat()
|
48
|
-
}
|
49
|
-
|
50
|
-
|
51
|
-
class Column(BaseModel):
|
52
|
-
"""列信息模型"""
|
53
|
-
id: str = Field(..., description="列ID")
|
54
|
-
sheet_id: str = Field(..., description="所属工作表ID")
|
55
|
-
org_id: str = Field(..., description="组织ID")
|
56
|
-
user_id: str = Field(..., description="用户ID")
|
57
|
-
column_key: str = Field(..., description="列索引key")
|
58
|
-
name: str = Field(..., description="列名称")
|
59
|
-
column_type: str = Field(..., description="列数据类型")
|
60
|
-
description: Optional[str] = Field(None, description="列描述信息")
|
61
|
-
position: int = Field(..., description="列位置")
|
62
|
-
width: Optional[int] = Field(None, description="列宽度")
|
63
|
-
hidden: Optional[bool] = Field(None, description="是否隐藏")
|
64
|
-
properties: Optional[Dict[str, Any]] = Field(None, description="列属性")
|
65
|
-
version: int = Field(..., description="版本号")
|
66
|
-
created_by_role: str = Field(..., description="创建者角色")
|
67
|
-
created_by: str = Field(..., description="创建者ID")
|
68
|
-
created_at: datetime = Field(..., description="创建时间")
|
69
|
-
updated_at: datetime = Field(..., description="更新时间")
|
70
|
-
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
71
|
-
|
72
|
-
class Config:
|
73
|
-
json_encoders = {
|
74
|
-
datetime: lambda v: v.isoformat()
|
75
|
-
}
|
76
|
-
|
77
|
-
|
78
|
-
class Row(BaseModel):
|
79
|
-
"""行信息模型"""
|
80
|
-
id: str = Field(..., description="行ID")
|
81
|
-
sheet_id: str = Field(..., description="所属工作表ID")
|
82
|
-
org_id: str = Field(..., description="组织ID")
|
83
|
-
user_id: str = Field(..., description="用户ID")
|
84
|
-
row_key: str = Field(..., description="行索引key")
|
85
|
-
position: int = Field(..., description="行位置")
|
86
|
-
height: Optional[int] = Field(None, description="行高度")
|
87
|
-
hidden: Optional[bool] = Field(None, description="是否隐藏")
|
88
|
-
version: int = Field(..., description="版本号")
|
89
|
-
created_by_role: str = Field(..., description="创建者角色")
|
90
|
-
created_by: str = Field(..., description="创建者ID")
|
91
|
-
created_at: datetime = Field(..., description="创建时间")
|
92
|
-
updated_at: datetime = Field(..., description="更新时间")
|
93
|
-
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
94
|
-
|
95
|
-
class Config:
|
96
|
-
json_encoders = {
|
97
|
-
datetime: lambda v: v.isoformat()
|
98
|
-
}
|
99
|
-
|
100
|
-
|
101
|
-
class Cell(BaseModel):
|
102
|
-
"""单元格信息模型"""
|
103
|
-
id: str = Field(..., description="单元格ID")
|
104
|
-
sheet_id: str = Field(..., description="所属工作表ID")
|
105
|
-
column_id: str = Field(..., description="所属列ID")
|
106
|
-
row_id: str = Field(..., description="所属行ID")
|
107
|
-
org_id: str = Field(..., description="组织ID")
|
108
|
-
user_id: str = Field(..., description="用户ID")
|
109
|
-
column_key: str = Field(..., description="列索引key")
|
110
|
-
row_key: str = Field(..., description="行索引key")
|
111
|
-
raw_value: Optional[str] = Field(None, description="原始值")
|
112
|
-
formatted_value: Optional[str] = Field(None, description="格式化值")
|
113
|
-
formula: Optional[str] = Field(None, description="公式")
|
114
|
-
styles: Optional[Dict[str, Any]] = Field(None, description="样式")
|
115
|
-
data_type: Optional[str] = Field(None, description="数据类型")
|
116
|
-
version: int = Field(..., description="版本号")
|
117
|
-
created_by_role: str = Field(..., description="创建者角色")
|
118
|
-
created_by: str = Field(..., description="创建者ID")
|
119
|
-
created_at: datetime = Field(..., description="创建时间")
|
120
|
-
updated_at: datetime = Field(..., description="更新时间")
|
121
|
-
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
122
|
-
|
123
|
-
class Config:
|
124
|
-
json_encoders = {
|
125
|
-
datetime: lambda v: v.isoformat()
|
126
|
-
}
|
127
|
-
|
128
|
-
|
129
|
-
class MergedCell(BaseModel):
|
130
|
-
"""合并单元格信息模型"""
|
131
|
-
id: str = Field(..., description="合并单元格ID")
|
132
|
-
sheet_id: str = Field(..., description="所属工作表ID")
|
133
|
-
org_id: str = Field(..., description="组织ID")
|
134
|
-
user_id: str = Field(..., description="用户ID")
|
135
|
-
start_column_id: str = Field(..., description="起始列ID")
|
136
|
-
end_column_id: str = Field(..., description="结束列ID")
|
137
|
-
start_row_id: str = Field(..., description="起始行ID")
|
138
|
-
end_row_id: str = Field(..., description="结束行ID")
|
139
|
-
created_at: datetime = Field(..., description="创建时间")
|
140
|
-
updated_at: datetime = Field(..., description="更新时间")
|
141
|
-
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
142
|
-
|
143
|
-
class Config:
|
144
|
-
json_encoders = {
|
145
|
-
datetime: lambda v: v.isoformat()
|
146
|
-
}
|
147
|
-
|
148
|
-
|
149
|
-
class TableView(BaseModel):
|
150
|
-
"""表格视图信息模型"""
|
151
|
-
id: str = Field(..., description="视图ID")
|
152
|
-
table_id: str = Field(..., description="所属表格ID")
|
153
|
-
sheet_id: str = Field(..., description="所属工作表ID")
|
154
|
-
org_id: str = Field(..., description="组织ID")
|
155
|
-
user_id: str = Field(..., description="用户ID")
|
156
|
-
file_id: str = Field(..., description="关联文件ID")
|
157
|
-
|
158
|
-
# 视图配置字段
|
159
|
-
filter_criteria: Optional[Dict[str, Any]] = Field(None, description="过滤条件(JSON)")
|
160
|
-
sort_criteria: Optional[Dict[str, Any]] = Field(None, description="排序条件(JSON)")
|
161
|
-
visible_columns: Optional[
|
162
|
-
group_criteria: Optional[Dict[str, Any]] = Field(None, description="分组条件(JSON)")
|
163
|
-
|
164
|
-
# 创建者信息
|
165
|
-
created_by_role: str = Field(..., description="创建者角色:user-用户;agent-智能体")
|
166
|
-
created_by: str = Field(..., description="创建者ID")
|
167
|
-
|
168
|
-
# 视图基本信息
|
169
|
-
view_name: str = Field(..., description="视图名称")
|
170
|
-
view_type: str = Field(..., description="视图类型:table-表格视图; gantt-甘特图; calendar-日历视图等")
|
171
|
-
|
172
|
-
# 视图状态
|
173
|
-
is_hidden: bool = Field(False, description="是否隐藏")
|
174
|
-
is_default: bool = Field(False, description="是否默认视图")
|
175
|
-
|
176
|
-
# 扩展配置
|
177
|
-
config: Optional[Dict[str, Any]] = Field(None, description="视图扩展配置(JSON)")
|
178
|
-
|
179
|
-
# 时间戳
|
180
|
-
created_at: datetime = Field(..., description="创建时间")
|
181
|
-
updated_at: datetime = Field(..., description="更新时间")
|
182
|
-
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
183
|
-
|
184
|
-
class Config:
|
185
|
-
json_encoders = {
|
186
|
-
datetime: lambda v: v.isoformat()
|
187
|
-
}
|
188
|
-
|
189
|
-
|
190
|
-
# 请求和响应模型
|
191
|
-
class CellUpdate(BaseModel):
|
192
|
-
"""单元格更新模型"""
|
193
|
-
column_key: str = Field(..., description="列索引key")
|
194
|
-
row_key: str = Field(..., description="行索引key")
|
195
|
-
raw_value: Optional[str] = Field(None, description="原始值")
|
196
|
-
formula: Optional[str] = Field(None, description="公式")
|
197
|
-
styles: Optional[Dict[str, Any]] = Field(None, description="样式")
|
198
|
-
|
199
|
-
|
200
|
-
# 响应模型
|
201
|
-
class TableResponse(BaseModel):
|
202
|
-
"""表格响应模型"""
|
203
|
-
table: Table = Field(..., description="表格信息")
|
204
|
-
|
205
|
-
|
206
|
-
class SheetResponse(BaseModel):
|
207
|
-
"""工作表响应模型"""
|
208
|
-
sheet: Sheet = Field(..., description="工作表信息")
|
209
|
-
|
210
|
-
|
211
|
-
class ColumnResponse(BaseModel):
|
212
|
-
"""列响应模型"""
|
213
|
-
column: Optional[Column] = Field(None, description="列信息")
|
214
|
-
current_version: Optional[int] = Field(None, description="当前版本号")
|
215
|
-
applied_immediately: Optional[bool] = Field(None, description="是否立即应用")
|
216
|
-
|
217
|
-
|
218
|
-
class RowResponse(BaseModel):
|
219
|
-
"""行响应模型"""
|
220
|
-
row: Optional[Row] = Field(None, description="行信息")
|
221
|
-
current_version: Optional[int] = Field(None, description="当前版本号")
|
222
|
-
applied_immediately: Optional[bool] = Field(None, description="是否立即应用")
|
223
|
-
success: Optional[bool] = Field(None, description="操作是否成功")
|
224
|
-
error_message: Optional[str] = Field(None, description="错误信息")
|
225
|
-
conflict_info: Optional['ConflictInfo'] = Field(None, description="冲突信息")
|
226
|
-
|
227
|
-
|
228
|
-
class CellResponse(BaseModel):
|
229
|
-
"""单元格响应模型"""
|
230
|
-
cell: Optional[Cell] = Field(None, description="单元格信息")
|
231
|
-
current_version: Optional[int] = Field(None, description="当前版本号")
|
232
|
-
applied_immediately: Optional[bool] = Field(None, description="是否立即应用")
|
233
|
-
success: Optional[bool] = Field(None, description="操作是否成功")
|
234
|
-
error_message: Optional[str] = Field(None, description="错误信息")
|
235
|
-
conflict_info: Optional['ConflictInfo'] = Field(None, description="冲突信息")
|
236
|
-
|
237
|
-
|
238
|
-
class MergedCellResponse(BaseModel):
|
239
|
-
"""合并单元格响应模型"""
|
240
|
-
merged_cell: MergedCell = Field(..., description="合并单元格信息")
|
241
|
-
|
242
|
-
|
243
|
-
class ViewResponse(BaseModel):
|
244
|
-
"""视图响应模型"""
|
245
|
-
view: TableView = Field(..., description="视图信息")
|
246
|
-
|
247
|
-
|
248
|
-
# 列表响应模型
|
249
|
-
class ListSheetsResponse(BaseModel):
|
250
|
-
"""工作表列表响应模型"""
|
251
|
-
sheets: List[Sheet] = Field(..., description="工作表列表")
|
252
|
-
|
253
|
-
|
254
|
-
class ListColumnsResponse(BaseModel):
|
255
|
-
"""列列表响应模型"""
|
256
|
-
columns: List[Column] = Field(..., description="列列表")
|
257
|
-
|
258
|
-
|
259
|
-
class ListRowsResponse(BaseModel):
|
260
|
-
"""行列表响应模型"""
|
261
|
-
rows: List[Row] = Field(..., description="行列表")
|
262
|
-
total: int = Field(..., description="总数")
|
263
|
-
|
264
|
-
|
265
|
-
class BatchCreateRowsResponse(BaseModel):
|
266
|
-
"""批量创建行响应模型"""
|
267
|
-
rows: List[Row] = Field(..., description="创建的行列表")
|
268
|
-
|
269
|
-
|
270
|
-
class BatchUpdateCellsResponse(BaseModel):
|
271
|
-
"""批量更新单元格响应模型"""
|
272
|
-
cells: List[Cell] = Field(..., description="更新的单元格列表")
|
273
|
-
|
274
|
-
|
275
|
-
class GetCellsByRangeResponse(BaseModel):
|
276
|
-
"""按范围获取单元格响应模型"""
|
277
|
-
cells: List[Cell] = Field(..., description="单元格列表")
|
278
|
-
|
279
|
-
|
280
|
-
class ListMergedCellsResponse(BaseModel):
|
281
|
-
"""合并单元格列表响应模型"""
|
282
|
-
merged_cells: List[MergedCell] = Field(..., description="合并单元格列表")
|
283
|
-
|
284
|
-
|
285
|
-
class ListViewsResponse(BaseModel):
|
286
|
-
"""视图列表响应模型"""
|
287
|
-
views: List[TableView] = Field(..., description="视图列表")
|
288
|
-
|
289
|
-
|
290
|
-
class GetSheetVersionResponse(BaseModel):
|
291
|
-
"""获取工作表版本响应模型"""
|
292
|
-
sheet_id: str = Field(..., description="工作表ID")
|
293
|
-
version: int = Field(..., description="当前版本号")
|
294
|
-
metadata: Optional[Sheet] = Field(None, description="工作表元数据")
|
295
|
-
|
296
|
-
|
297
|
-
class GetSheetDataResponse(BaseModel):
|
298
|
-
"""获取工作表数据响应模型"""
|
299
|
-
sheet_id: str = Field(..., description="工作表ID")
|
300
|
-
version: int = Field(..., description="当前版本号")
|
301
|
-
metadata: Optional[Sheet] = Field(None, description="工作表元数据")
|
302
|
-
columns: List[Column] = Field(default_factory=list, description="列数据")
|
303
|
-
rows: List[Row] = Field(default_factory=list, description="行数据")
|
304
|
-
cells: List[Cell] = Field(default_factory=list, description="单元格数据")
|
305
|
-
last_updated: Optional[datetime] = Field(None, description="最后更新时间")
|
306
|
-
|
307
|
-
class Config:
|
308
|
-
json_encoders = {
|
309
|
-
datetime: lambda v: v.isoformat()
|
310
|
-
}
|
311
|
-
|
312
|
-
|
313
|
-
class ConflictInfo(BaseModel):
|
314
|
-
"""冲突信息模型"""
|
315
|
-
has_conflict: bool = Field(..., description="是否有冲突")
|
316
|
-
server_version: int = Field(..., description="服务器版本号")
|
317
|
-
conflict_type: str = Field(..., description="冲突类型")
|
318
|
-
conflicted_columns: List[str] = Field(default_factory=list, description="冲突的列")
|
319
|
-
resolution_suggestion: Optional[str] = Field(None, description="解决建议")
|
320
|
-
|
321
|
-
|
322
|
-
class BatchEditSheetResponse(BaseModel):
|
323
|
-
"""批量编辑工作表响应模型"""
|
324
|
-
success: bool = Field(..., description="是否成功")
|
325
|
-
batch_id: str = Field(..., description="批次ID")
|
326
|
-
current_version: int = Field(..., description="当前版本号")
|
327
|
-
results: List[Any] = Field(default_factory=list, description="操作结果")
|
328
|
-
error_message: Optional[str] = Field(None, description="错误信息")
|
329
|
-
conflict_info: Optional[ConflictInfo] = Field(None, description="冲突信息")
|
330
|
-
|
331
|
-
|
332
|
-
class CloneTableDataResponse(BaseModel):
|
333
|
-
"""克隆表格数据响应模型"""
|
334
|
-
success: bool = Field(..., description="是否成功")
|
335
|
-
new_table_id: str = Field(..., description="新创建的表格ID")
|
336
|
-
new_file_id: str = Field(..., description="新创建的文件ID")
|
337
|
-
sheets_cloned: int = Field(..., description="克隆的工作表数量")
|
338
|
-
cells_cloned: int = Field(..., description="克隆的单元格数量")
|
339
|
-
error_message: Optional[str] = Field(None, description="错误信息")
|
340
|
-
created_at: datetime = Field(..., description="创建时间")
|
341
|
-
|
342
|
-
class Config:
|
343
|
-
json_encoders = {
|
344
|
-
datetime: lambda v: v.isoformat()
|
345
|
-
}
|
346
|
-
|
347
|
-
|
348
|
-
class ExportTableDataResponse(BaseModel):
|
349
|
-
"""导出表格数据响应模型"""
|
350
|
-
success: bool = Field(..., description="是否成功")
|
351
|
-
export_id: str = Field(..., description="导出记录ID")
|
352
|
-
file_url: str = Field(..., description="GCS文件URL(内部使用)")
|
353
|
-
download_url: str = Field(..., description="下载链接(带签名的临时链接)")
|
354
|
-
file_size: int = Field(..., description="文件大小(字节)")
|
355
|
-
file_name: str = Field(..., description="导出的文件名")
|
356
|
-
format: str = Field(..., description="导出格式") # Changed from 'ExportFormat' to str
|
357
|
-
sheets_exported: int = Field(..., description="导出的工作表数量")
|
358
|
-
error_message: Optional[str] = Field(None, description="错误信息")
|
359
|
-
created_at: datetime = Field(..., description="导出时间")
|
360
|
-
expires_at: datetime = Field(..., description="下载链接过期时间")
|
361
|
-
|
362
|
-
class Config:
|
363
|
-
json_encoders = {
|
364
|
-
datetime: lambda v: v.isoformat()
|
365
|
-
}
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
class TableViewResponse(BaseModel):
|
371
|
-
"""表格视图响应模型"""
|
372
|
-
view: TableView = Field(..., description="视图信息")
|
373
|
-
|
374
|
-
|
375
|
-
class BatchCreateTableViewResult(BaseModel):
|
376
|
-
"""批量创建表格视图结果模型"""
|
377
|
-
success: bool = Field(..., description="是否成功")
|
378
|
-
view: Optional[TableView] = Field(None, description="成功时返回创建的视图")
|
379
|
-
error_message: Optional[str] = Field(None, description="失败时的错误信息")
|
380
|
-
view_name: Optional[str] = Field(None, description="视图名称(用于标识是哪个视图)")
|
381
|
-
|
382
|
-
|
383
|
-
class BatchCreateTableViewsResponse(BaseModel):
|
384
|
-
"""批量创建表格视图响应模型"""
|
385
|
-
results: List[BatchCreateTableViewResult] = Field(default_factory=list, description="批量创建结果")
|
386
|
-
success_count: int = Field(..., description="成功创建的数量")
|
387
|
-
failed_count: int = Field(..., description="失败的数量")
|
388
|
-
|
389
|
-
|
390
|
-
class ListTableViewsResponse(BaseModel):
|
391
|
-
"""列出表格视图响应模型"""
|
392
|
-
views: List[TableView] = Field(default_factory=list, description="视图列表")
|
393
|
-
total_count: int = Field(..., description="总数量")
|
394
|
-
|
395
|
-
|
396
|
-
class ImportTableDataResponse(BaseModel):
|
397
|
-
"""导入表格数据响应模型"""
|
398
|
-
success: bool = Field(..., description="是否成功")
|
399
|
-
table_id: str = Field(..., description="导入的表格ID(新建或现有)")
|
400
|
-
file_id: Optional[str] = Field(None, description="创建的文件ID(如果创建了新表格)")
|
401
|
-
sheets_imported: int = Field(..., description="导入的工作表数量")
|
402
|
-
rows_imported: int = Field(..., description="导入的行数")
|
403
|
-
cells_imported: int = Field(..., description="导入的单元格数量")
|
404
|
-
sheet_results: List[Dict[str, Any]] = Field(default_factory=list, description="每个工作表的导入结果")
|
405
|
-
error_message: Optional[str] = Field(None, description="错误信息(如果失败)")
|
406
|
-
warnings: List[Dict[str, Any]] = Field(default_factory=list, description="警告信息")
|
407
|
-
created_at: datetime = Field(..., description="导入时间")
|
408
|
-
processing_time_ms: int = Field(..., description="处理时间(毫秒)")
|
409
|
-
|
410
|
-
class Config:
|
411
|
-
json_encoders = {
|
412
|
-
datetime: lambda v: v.isoformat()
|
1
|
+
"""
|
2
|
+
Taple 相关数据模型
|
3
|
+
"""
|
4
|
+
from datetime import datetime
|
5
|
+
from typing import Optional, List, Dict, Any
|
6
|
+
from pydantic import BaseModel, Field
|
7
|
+
|
8
|
+
|
9
|
+
class Table(BaseModel):
|
10
|
+
"""表格信息模型"""
|
11
|
+
id: str = Field(..., description="表格ID")
|
12
|
+
file_id: str = Field(..., description="关联文件ID")
|
13
|
+
org_id: str = Field(..., description="组织ID")
|
14
|
+
user_id: str = Field(..., description="用户ID")
|
15
|
+
name: Optional[str] = Field(None, description="表格名称")
|
16
|
+
description: Optional[str] = Field(None, description="表格描述")
|
17
|
+
created_by_role: str = Field(..., description="创建者角色")
|
18
|
+
created_by: str = Field(..., description="创建者ID")
|
19
|
+
created_at: datetime = Field(..., description="创建时间")
|
20
|
+
updated_at: datetime = Field(..., description="更新时间")
|
21
|
+
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
22
|
+
|
23
|
+
class Config:
|
24
|
+
json_encoders = {
|
25
|
+
datetime: lambda v: v.isoformat()
|
26
|
+
}
|
27
|
+
|
28
|
+
|
29
|
+
class Sheet(BaseModel):
|
30
|
+
"""工作表信息模型"""
|
31
|
+
id: str = Field(..., description="工作表ID")
|
32
|
+
table_id: str = Field(..., description="所属表格ID")
|
33
|
+
org_id: str = Field(..., description="组织ID")
|
34
|
+
user_id: str = Field(..., description="用户ID")
|
35
|
+
name: str = Field(..., description="工作表名称")
|
36
|
+
description: Optional[str] = Field(None, description="工作表描述")
|
37
|
+
position: int = Field(..., description="工作表位置")
|
38
|
+
version: int = Field(..., description="版本号")
|
39
|
+
created_by_role: str = Field(..., description="创建者角色")
|
40
|
+
created_by: str = Field(..., description="创建者ID")
|
41
|
+
created_at: datetime = Field(..., description="创建时间")
|
42
|
+
updated_at: datetime = Field(..., description="更新时间")
|
43
|
+
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
44
|
+
|
45
|
+
class Config:
|
46
|
+
json_encoders = {
|
47
|
+
datetime: lambda v: v.isoformat()
|
48
|
+
}
|
49
|
+
|
50
|
+
|
51
|
+
class Column(BaseModel):
|
52
|
+
"""列信息模型"""
|
53
|
+
id: str = Field(..., description="列ID")
|
54
|
+
sheet_id: str = Field(..., description="所属工作表ID")
|
55
|
+
org_id: str = Field(..., description="组织ID")
|
56
|
+
user_id: str = Field(..., description="用户ID")
|
57
|
+
column_key: str = Field(..., description="列索引key")
|
58
|
+
name: str = Field(..., description="列名称")
|
59
|
+
column_type: str = Field(..., description="列数据类型")
|
60
|
+
description: Optional[str] = Field(None, description="列描述信息")
|
61
|
+
position: int = Field(..., description="列位置")
|
62
|
+
width: Optional[int] = Field(None, description="列宽度")
|
63
|
+
hidden: Optional[bool] = Field(None, description="是否隐藏")
|
64
|
+
properties: Optional[Dict[str, Any]] = Field(None, description="列属性")
|
65
|
+
version: int = Field(..., description="版本号")
|
66
|
+
created_by_role: str = Field(..., description="创建者角色")
|
67
|
+
created_by: str = Field(..., description="创建者ID")
|
68
|
+
created_at: datetime = Field(..., description="创建时间")
|
69
|
+
updated_at: datetime = Field(..., description="更新时间")
|
70
|
+
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
71
|
+
|
72
|
+
class Config:
|
73
|
+
json_encoders = {
|
74
|
+
datetime: lambda v: v.isoformat()
|
75
|
+
}
|
76
|
+
|
77
|
+
|
78
|
+
class Row(BaseModel):
|
79
|
+
"""行信息模型"""
|
80
|
+
id: str = Field(..., description="行ID")
|
81
|
+
sheet_id: str = Field(..., description="所属工作表ID")
|
82
|
+
org_id: str = Field(..., description="组织ID")
|
83
|
+
user_id: str = Field(..., description="用户ID")
|
84
|
+
row_key: str = Field(..., description="行索引key")
|
85
|
+
position: int = Field(..., description="行位置")
|
86
|
+
height: Optional[int] = Field(None, description="行高度")
|
87
|
+
hidden: Optional[bool] = Field(None, description="是否隐藏")
|
88
|
+
version: int = Field(..., description="版本号")
|
89
|
+
created_by_role: str = Field(..., description="创建者角色")
|
90
|
+
created_by: str = Field(..., description="创建者ID")
|
91
|
+
created_at: datetime = Field(..., description="创建时间")
|
92
|
+
updated_at: datetime = Field(..., description="更新时间")
|
93
|
+
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
94
|
+
|
95
|
+
class Config:
|
96
|
+
json_encoders = {
|
97
|
+
datetime: lambda v: v.isoformat()
|
98
|
+
}
|
99
|
+
|
100
|
+
|
101
|
+
class Cell(BaseModel):
|
102
|
+
"""单元格信息模型"""
|
103
|
+
id: str = Field(..., description="单元格ID")
|
104
|
+
sheet_id: str = Field(..., description="所属工作表ID")
|
105
|
+
column_id: str = Field(..., description="所属列ID")
|
106
|
+
row_id: str = Field(..., description="所属行ID")
|
107
|
+
org_id: str = Field(..., description="组织ID")
|
108
|
+
user_id: str = Field(..., description="用户ID")
|
109
|
+
column_key: str = Field(..., description="列索引key")
|
110
|
+
row_key: str = Field(..., description="行索引key")
|
111
|
+
raw_value: Optional[str] = Field(None, description="原始值")
|
112
|
+
formatted_value: Optional[str] = Field(None, description="格式化值")
|
113
|
+
formula: Optional[str] = Field(None, description="公式")
|
114
|
+
styles: Optional[Dict[str, Any]] = Field(None, description="样式")
|
115
|
+
data_type: Optional[str] = Field(None, description="数据类型")
|
116
|
+
version: int = Field(..., description="版本号")
|
117
|
+
created_by_role: str = Field(..., description="创建者角色")
|
118
|
+
created_by: str = Field(..., description="创建者ID")
|
119
|
+
created_at: datetime = Field(..., description="创建时间")
|
120
|
+
updated_at: datetime = Field(..., description="更新时间")
|
121
|
+
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
122
|
+
|
123
|
+
class Config:
|
124
|
+
json_encoders = {
|
125
|
+
datetime: lambda v: v.isoformat()
|
126
|
+
}
|
127
|
+
|
128
|
+
|
129
|
+
class MergedCell(BaseModel):
|
130
|
+
"""合并单元格信息模型"""
|
131
|
+
id: str = Field(..., description="合并单元格ID")
|
132
|
+
sheet_id: str = Field(..., description="所属工作表ID")
|
133
|
+
org_id: str = Field(..., description="组织ID")
|
134
|
+
user_id: str = Field(..., description="用户ID")
|
135
|
+
start_column_id: str = Field(..., description="起始列ID")
|
136
|
+
end_column_id: str = Field(..., description="结束列ID")
|
137
|
+
start_row_id: str = Field(..., description="起始行ID")
|
138
|
+
end_row_id: str = Field(..., description="结束行ID")
|
139
|
+
created_at: datetime = Field(..., description="创建时间")
|
140
|
+
updated_at: datetime = Field(..., description="更新时间")
|
141
|
+
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
142
|
+
|
143
|
+
class Config:
|
144
|
+
json_encoders = {
|
145
|
+
datetime: lambda v: v.isoformat()
|
146
|
+
}
|
147
|
+
|
148
|
+
|
149
|
+
class TableView(BaseModel):
|
150
|
+
"""表格视图信息模型"""
|
151
|
+
id: str = Field(..., description="视图ID")
|
152
|
+
table_id: str = Field(..., description="所属表格ID")
|
153
|
+
sheet_id: str = Field(..., description="所属工作表ID")
|
154
|
+
org_id: str = Field(..., description="组织ID")
|
155
|
+
user_id: str = Field(..., description="用户ID")
|
156
|
+
file_id: str = Field(..., description="关联文件ID")
|
157
|
+
|
158
|
+
# 视图配置字段
|
159
|
+
filter_criteria: Optional[Dict[str, Any]] = Field(None, description="过滤条件(JSON)")
|
160
|
+
sort_criteria: Optional[Dict[str, Any]] = Field(None, description="排序条件(JSON)")
|
161
|
+
visible_columns: Optional[Dict[str, bool]] = Field(None, description="可见列配置(字典格式 {column_id: bool})")
|
162
|
+
group_criteria: Optional[Dict[str, Any]] = Field(None, description="分组条件(JSON)")
|
163
|
+
|
164
|
+
# 创建者信息
|
165
|
+
created_by_role: str = Field(..., description="创建者角色:user-用户;agent-智能体")
|
166
|
+
created_by: str = Field(..., description="创建者ID")
|
167
|
+
|
168
|
+
# 视图基本信息
|
169
|
+
view_name: str = Field(..., description="视图名称")
|
170
|
+
view_type: str = Field(..., description="视图类型:table-表格视图; gantt-甘特图; calendar-日历视图等")
|
171
|
+
|
172
|
+
# 视图状态
|
173
|
+
is_hidden: bool = Field(False, description="是否隐藏")
|
174
|
+
is_default: bool = Field(False, description="是否默认视图")
|
175
|
+
|
176
|
+
# 扩展配置
|
177
|
+
config: Optional[Dict[str, Any]] = Field(None, description="视图扩展配置(JSON)")
|
178
|
+
|
179
|
+
# 时间戳
|
180
|
+
created_at: datetime = Field(..., description="创建时间")
|
181
|
+
updated_at: datetime = Field(..., description="更新时间")
|
182
|
+
deleted_at: Optional[datetime] = Field(None, description="删除时间")
|
183
|
+
|
184
|
+
class Config:
|
185
|
+
json_encoders = {
|
186
|
+
datetime: lambda v: v.isoformat()
|
187
|
+
}
|
188
|
+
|
189
|
+
|
190
|
+
# 请求和响应模型
|
191
|
+
class CellUpdate(BaseModel):
|
192
|
+
"""单元格更新模型"""
|
193
|
+
column_key: str = Field(..., description="列索引key")
|
194
|
+
row_key: str = Field(..., description="行索引key")
|
195
|
+
raw_value: Optional[str] = Field(None, description="原始值")
|
196
|
+
formula: Optional[str] = Field(None, description="公式")
|
197
|
+
styles: Optional[Dict[str, Any]] = Field(None, description="样式")
|
198
|
+
|
199
|
+
|
200
|
+
# 响应模型
|
201
|
+
class TableResponse(BaseModel):
|
202
|
+
"""表格响应模型"""
|
203
|
+
table: Table = Field(..., description="表格信息")
|
204
|
+
|
205
|
+
|
206
|
+
class SheetResponse(BaseModel):
|
207
|
+
"""工作表响应模型"""
|
208
|
+
sheet: Sheet = Field(..., description="工作表信息")
|
209
|
+
|
210
|
+
|
211
|
+
class ColumnResponse(BaseModel):
|
212
|
+
"""列响应模型"""
|
213
|
+
column: Optional[Column] = Field(None, description="列信息")
|
214
|
+
current_version: Optional[int] = Field(None, description="当前版本号")
|
215
|
+
applied_immediately: Optional[bool] = Field(None, description="是否立即应用")
|
216
|
+
|
217
|
+
|
218
|
+
class RowResponse(BaseModel):
|
219
|
+
"""行响应模型"""
|
220
|
+
row: Optional[Row] = Field(None, description="行信息")
|
221
|
+
current_version: Optional[int] = Field(None, description="当前版本号")
|
222
|
+
applied_immediately: Optional[bool] = Field(None, description="是否立即应用")
|
223
|
+
success: Optional[bool] = Field(None, description="操作是否成功")
|
224
|
+
error_message: Optional[str] = Field(None, description="错误信息")
|
225
|
+
conflict_info: Optional['ConflictInfo'] = Field(None, description="冲突信息")
|
226
|
+
|
227
|
+
|
228
|
+
class CellResponse(BaseModel):
|
229
|
+
"""单元格响应模型"""
|
230
|
+
cell: Optional[Cell] = Field(None, description="单元格信息")
|
231
|
+
current_version: Optional[int] = Field(None, description="当前版本号")
|
232
|
+
applied_immediately: Optional[bool] = Field(None, description="是否立即应用")
|
233
|
+
success: Optional[bool] = Field(None, description="操作是否成功")
|
234
|
+
error_message: Optional[str] = Field(None, description="错误信息")
|
235
|
+
conflict_info: Optional['ConflictInfo'] = Field(None, description="冲突信息")
|
236
|
+
|
237
|
+
|
238
|
+
class MergedCellResponse(BaseModel):
|
239
|
+
"""合并单元格响应模型"""
|
240
|
+
merged_cell: MergedCell = Field(..., description="合并单元格信息")
|
241
|
+
|
242
|
+
|
243
|
+
class ViewResponse(BaseModel):
|
244
|
+
"""视图响应模型"""
|
245
|
+
view: TableView = Field(..., description="视图信息")
|
246
|
+
|
247
|
+
|
248
|
+
# 列表响应模型
|
249
|
+
class ListSheetsResponse(BaseModel):
|
250
|
+
"""工作表列表响应模型"""
|
251
|
+
sheets: List[Sheet] = Field(..., description="工作表列表")
|
252
|
+
|
253
|
+
|
254
|
+
class ListColumnsResponse(BaseModel):
|
255
|
+
"""列列表响应模型"""
|
256
|
+
columns: List[Column] = Field(..., description="列列表")
|
257
|
+
|
258
|
+
|
259
|
+
class ListRowsResponse(BaseModel):
|
260
|
+
"""行列表响应模型"""
|
261
|
+
rows: List[Row] = Field(..., description="行列表")
|
262
|
+
total: int = Field(..., description="总数")
|
263
|
+
|
264
|
+
|
265
|
+
class BatchCreateRowsResponse(BaseModel):
|
266
|
+
"""批量创建行响应模型"""
|
267
|
+
rows: List[Row] = Field(..., description="创建的行列表")
|
268
|
+
|
269
|
+
|
270
|
+
class BatchUpdateCellsResponse(BaseModel):
|
271
|
+
"""批量更新单元格响应模型"""
|
272
|
+
cells: List[Cell] = Field(..., description="更新的单元格列表")
|
273
|
+
|
274
|
+
|
275
|
+
class GetCellsByRangeResponse(BaseModel):
|
276
|
+
"""按范围获取单元格响应模型"""
|
277
|
+
cells: List[Cell] = Field(..., description="单元格列表")
|
278
|
+
|
279
|
+
|
280
|
+
class ListMergedCellsResponse(BaseModel):
|
281
|
+
"""合并单元格列表响应模型"""
|
282
|
+
merged_cells: List[MergedCell] = Field(..., description="合并单元格列表")
|
283
|
+
|
284
|
+
|
285
|
+
class ListViewsResponse(BaseModel):
|
286
|
+
"""视图列表响应模型"""
|
287
|
+
views: List[TableView] = Field(..., description="视图列表")
|
288
|
+
|
289
|
+
|
290
|
+
class GetSheetVersionResponse(BaseModel):
|
291
|
+
"""获取工作表版本响应模型"""
|
292
|
+
sheet_id: str = Field(..., description="工作表ID")
|
293
|
+
version: int = Field(..., description="当前版本号")
|
294
|
+
metadata: Optional[Sheet] = Field(None, description="工作表元数据")
|
295
|
+
|
296
|
+
|
297
|
+
class GetSheetDataResponse(BaseModel):
|
298
|
+
"""获取工作表数据响应模型"""
|
299
|
+
sheet_id: str = Field(..., description="工作表ID")
|
300
|
+
version: int = Field(..., description="当前版本号")
|
301
|
+
metadata: Optional[Sheet] = Field(None, description="工作表元数据")
|
302
|
+
columns: List[Column] = Field(default_factory=list, description="列数据")
|
303
|
+
rows: List[Row] = Field(default_factory=list, description="行数据")
|
304
|
+
cells: List[Cell] = Field(default_factory=list, description="单元格数据")
|
305
|
+
last_updated: Optional[datetime] = Field(None, description="最后更新时间")
|
306
|
+
|
307
|
+
class Config:
|
308
|
+
json_encoders = {
|
309
|
+
datetime: lambda v: v.isoformat()
|
310
|
+
}
|
311
|
+
|
312
|
+
|
313
|
+
class ConflictInfo(BaseModel):
|
314
|
+
"""冲突信息模型"""
|
315
|
+
has_conflict: bool = Field(..., description="是否有冲突")
|
316
|
+
server_version: int = Field(..., description="服务器版本号")
|
317
|
+
conflict_type: str = Field(..., description="冲突类型")
|
318
|
+
conflicted_columns: List[str] = Field(default_factory=list, description="冲突的列")
|
319
|
+
resolution_suggestion: Optional[str] = Field(None, description="解决建议")
|
320
|
+
|
321
|
+
|
322
|
+
class BatchEditSheetResponse(BaseModel):
|
323
|
+
"""批量编辑工作表响应模型"""
|
324
|
+
success: bool = Field(..., description="是否成功")
|
325
|
+
batch_id: str = Field(..., description="批次ID")
|
326
|
+
current_version: int = Field(..., description="当前版本号")
|
327
|
+
results: List[Any] = Field(default_factory=list, description="操作结果")
|
328
|
+
error_message: Optional[str] = Field(None, description="错误信息")
|
329
|
+
conflict_info: Optional[ConflictInfo] = Field(None, description="冲突信息")
|
330
|
+
|
331
|
+
|
332
|
+
class CloneTableDataResponse(BaseModel):
|
333
|
+
"""克隆表格数据响应模型"""
|
334
|
+
success: bool = Field(..., description="是否成功")
|
335
|
+
new_table_id: str = Field(..., description="新创建的表格ID")
|
336
|
+
new_file_id: str = Field(..., description="新创建的文件ID")
|
337
|
+
sheets_cloned: int = Field(..., description="克隆的工作表数量")
|
338
|
+
cells_cloned: int = Field(..., description="克隆的单元格数量")
|
339
|
+
error_message: Optional[str] = Field(None, description="错误信息")
|
340
|
+
created_at: datetime = Field(..., description="创建时间")
|
341
|
+
|
342
|
+
class Config:
|
343
|
+
json_encoders = {
|
344
|
+
datetime: lambda v: v.isoformat()
|
345
|
+
}
|
346
|
+
|
347
|
+
|
348
|
+
class ExportTableDataResponse(BaseModel):
|
349
|
+
"""导出表格数据响应模型"""
|
350
|
+
success: bool = Field(..., description="是否成功")
|
351
|
+
export_id: str = Field(..., description="导出记录ID")
|
352
|
+
file_url: str = Field(..., description="GCS文件URL(内部使用)")
|
353
|
+
download_url: str = Field(..., description="下载链接(带签名的临时链接)")
|
354
|
+
file_size: int = Field(..., description="文件大小(字节)")
|
355
|
+
file_name: str = Field(..., description="导出的文件名")
|
356
|
+
format: str = Field(..., description="导出格式") # Changed from 'ExportFormat' to str
|
357
|
+
sheets_exported: int = Field(..., description="导出的工作表数量")
|
358
|
+
error_message: Optional[str] = Field(None, description="错误信息")
|
359
|
+
created_at: datetime = Field(..., description="导出时间")
|
360
|
+
expires_at: datetime = Field(..., description="下载链接过期时间")
|
361
|
+
|
362
|
+
class Config:
|
363
|
+
json_encoders = {
|
364
|
+
datetime: lambda v: v.isoformat()
|
365
|
+
}
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
|
370
|
+
class TableViewResponse(BaseModel):
|
371
|
+
"""表格视图响应模型"""
|
372
|
+
view: TableView = Field(..., description="视图信息")
|
373
|
+
|
374
|
+
|
375
|
+
class BatchCreateTableViewResult(BaseModel):
|
376
|
+
"""批量创建表格视图结果模型"""
|
377
|
+
success: bool = Field(..., description="是否成功")
|
378
|
+
view: Optional[TableView] = Field(None, description="成功时返回创建的视图")
|
379
|
+
error_message: Optional[str] = Field(None, description="失败时的错误信息")
|
380
|
+
view_name: Optional[str] = Field(None, description="视图名称(用于标识是哪个视图)")
|
381
|
+
|
382
|
+
|
383
|
+
class BatchCreateTableViewsResponse(BaseModel):
|
384
|
+
"""批量创建表格视图响应模型"""
|
385
|
+
results: List[BatchCreateTableViewResult] = Field(default_factory=list, description="批量创建结果")
|
386
|
+
success_count: int = Field(..., description="成功创建的数量")
|
387
|
+
failed_count: int = Field(..., description="失败的数量")
|
388
|
+
|
389
|
+
|
390
|
+
class ListTableViewsResponse(BaseModel):
|
391
|
+
"""列出表格视图响应模型"""
|
392
|
+
views: List[TableView] = Field(default_factory=list, description="视图列表")
|
393
|
+
total_count: int = Field(..., description="总数量")
|
394
|
+
|
395
|
+
|
396
|
+
class ImportTableDataResponse(BaseModel):
|
397
|
+
"""导入表格数据响应模型"""
|
398
|
+
success: bool = Field(..., description="是否成功")
|
399
|
+
table_id: str = Field(..., description="导入的表格ID(新建或现有)")
|
400
|
+
file_id: Optional[str] = Field(None, description="创建的文件ID(如果创建了新表格)")
|
401
|
+
sheets_imported: int = Field(..., description="导入的工作表数量")
|
402
|
+
rows_imported: int = Field(..., description="导入的行数")
|
403
|
+
cells_imported: int = Field(..., description="导入的单元格数量")
|
404
|
+
sheet_results: List[Dict[str, Any]] = Field(default_factory=list, description="每个工作表的导入结果")
|
405
|
+
error_message: Optional[str] = Field(None, description="错误信息(如果失败)")
|
406
|
+
warnings: List[Dict[str, Any]] = Field(default_factory=list, description="警告信息")
|
407
|
+
created_at: datetime = Field(..., description="导入时间")
|
408
|
+
processing_time_ms: int = Field(..., description="处理时间(毫秒)")
|
409
|
+
|
410
|
+
class Config:
|
411
|
+
json_encoders = {
|
412
|
+
datetime: lambda v: v.isoformat()
|
413
413
|
}
|