tamar-file-hub-client 0.0.7__py3-none-any.whl → 0.0.9__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.
@@ -29,85 +29,6 @@ class AsyncBlobService(BaseFileService):
29
29
  self.http_uploader = AsyncHttpUploader()
30
30
  self.http_downloader = AsyncHttpDownloader()
31
31
 
32
- async def _generate_resumable_upload_url(
33
- self,
34
- file_name: str,
35
- file_size: int,
36
- folder_id: Optional[str] = None,
37
- file_type: str = "dat",
38
- mime_type: Optional[str] = None,
39
- file_hash: Optional[str] = None,
40
- is_temporary: Optional[bool] = False,
41
- expire_seconds: Optional[int] = None,
42
- request_id: Optional[str] = None,
43
- **metadata
44
- ) -> UploadUrlResponse:
45
- """
46
- 生成断点续传URL
47
-
48
- Args:
49
- file_name: 文件名
50
- file_size: 文件大小
51
- folder_id: 文件夹ID
52
- file_type: 文件类型
53
- mime_type: MIME类型
54
- file_hash: 文件哈希
55
- is_temporary: 是否为临时文件
56
- expire_seconds: 过期秒数
57
- **metadata: 额外的元数据(如 x-org-id, x-user-id 等)
58
-
59
- Returns:
60
- 上传URL响应
61
- """
62
- from ...rpc.gen import file_service_pb2, file_service_pb2_grpc
63
-
64
- stub = await self.client.get_stub(file_service_pb2_grpc.FileServiceStub)
65
-
66
- request = file_service_pb2.UploadUrlRequest(
67
- file_name=file_name,
68
- file_size=file_size,
69
- file_type=file_type,
70
- mime_type=mime_type or "application/octet-stream",
71
- file_hash=file_hash,
72
- is_temporary=is_temporary,
73
- expire_seconds=expire_seconds if is_temporary and expire_seconds else None,
74
- )
75
-
76
- if folder_id:
77
- request.folder_id = folder_id
78
-
79
- # 构建元数据
80
- grpc_metadata = self.client.build_metadata(request_id=request_id, **metadata)
81
-
82
- response = await stub.GenerateResumableUploadUrl(request, metadata=grpc_metadata)
83
-
84
- return UploadUrlResponse(
85
- file=self._convert_file_info(response.file),
86
- upload_file=self._convert_upload_file_info(response.upload_file),
87
- upload_url=response.url
88
- )
89
-
90
- async def _confirm_upload_completed(self, file_id: str, request_id: Optional[str] = None,
91
- **metadata) -> None:
92
- """
93
- 确认上传完成
94
-
95
- Args:
96
- file_id: 文件ID
97
- request_id: 请求ID(可选,如果不提供则自动生成)
98
- **metadata: 额外的元数据(如 x-org-id, x-user-id 等)
99
- """
100
- from ...rpc.gen import file_service_pb2, file_service_pb2_grpc
101
-
102
- stub = await self.client.get_stub(file_service_pb2_grpc.FileServiceStub)
103
-
104
- request = file_service_pb2.UploadCompletedRequest(file_id=file_id)
105
-
106
- # 构建元数据
107
- grpc_metadata = self.client.build_metadata(request_id=request_id, **metadata)
108
-
109
- await stub.ConfirmUploadCompleted(request, metadata=grpc_metadata)
110
-
111
32
  @retry_with_backoff(max_retries=3)
112
33
  async def _upload_file(
113
34
  self,
@@ -228,7 +149,7 @@ class AsyncBlobService(BaseFileService):
228
149
  )
229
150
 
230
151
  # 确认上传完成
231
- await self._confirm_upload_completed(
152
+ await self.confirm_upload_completed(
232
153
  file_id=upload_url_resp.file.id,
233
154
  request_id=request_id,
234
155
  **metadata
@@ -256,7 +177,7 @@ class AsyncBlobService(BaseFileService):
256
177
  ) -> FileUploadResponse:
257
178
  """断点续传实现"""
258
179
  # 获取断点续传URL,以及对应的文件和上传文件信息
259
- upload_url_resp = await self._generate_resumable_upload_url(
180
+ upload_url_resp = await self.generate_resumable_upload_url(
260
181
  file_name=file_name,
261
182
  file_size=file_size,
262
183
  folder_id=folder_id,
@@ -292,7 +213,7 @@ class AsyncBlobService(BaseFileService):
292
213
  )
293
214
 
294
215
  # 确认上传完成
295
- await self._confirm_upload_completed(
216
+ await self.confirm_upload_completed(
296
217
  file_id=upload_url_resp.file.id,
297
218
  request_id=request_id,
298
219
  **metadata
@@ -304,6 +225,85 @@ class AsyncBlobService(BaseFileService):
304
225
  upload_file=upload_url_resp.upload_file
305
226
  )
306
227
 
228
+ async def confirm_upload_completed(self, file_id: str, request_id: Optional[str] = None,
229
+ **metadata) -> None:
230
+ """
231
+ 确认上传完成
232
+
233
+ Args:
234
+ file_id: 文件ID
235
+ request_id: 请求ID(可选,如果不提供则自动生成)
236
+ **metadata: 额外的元数据(如 x-org-id, x-user-id 等)
237
+ """
238
+ from ...rpc.gen import file_service_pb2, file_service_pb2_grpc
239
+
240
+ stub = await self.client.get_stub(file_service_pb2_grpc.FileServiceStub)
241
+
242
+ request = file_service_pb2.UploadCompletedRequest(file_id=file_id)
243
+
244
+ # 构建元数据
245
+ grpc_metadata = self.client.build_metadata(request_id=request_id, **metadata)
246
+
247
+ await stub.ConfirmUploadCompleted(request, metadata=grpc_metadata)
248
+
249
+ async def generate_resumable_upload_url(
250
+ self,
251
+ file_name: str,
252
+ file_size: int,
253
+ folder_id: Optional[str] = None,
254
+ file_type: str = "dat",
255
+ mime_type: Optional[str] = None,
256
+ file_hash: Optional[str] = None,
257
+ is_temporary: Optional[bool] = False,
258
+ expire_seconds: Optional[int] = None,
259
+ request_id: Optional[str] = None,
260
+ **metadata
261
+ ) -> UploadUrlResponse:
262
+ """
263
+ 生成断点续传URL
264
+
265
+ Args:
266
+ file_name: 文件名
267
+ file_size: 文件大小
268
+ folder_id: 文件夹ID
269
+ file_type: 文件类型
270
+ mime_type: MIME类型
271
+ file_hash: 文件哈希
272
+ is_temporary: 是否为临时文件
273
+ expire_seconds: 过期秒数
274
+ **metadata: 额外的元数据(如 x-org-id, x-user-id 等)
275
+
276
+ Returns:
277
+ 上传URL响应
278
+ """
279
+ from ...rpc.gen import file_service_pb2, file_service_pb2_grpc
280
+
281
+ stub = await self.client.get_stub(file_service_pb2_grpc.FileServiceStub)
282
+
283
+ request = file_service_pb2.UploadUrlRequest(
284
+ file_name=file_name,
285
+ file_size=file_size,
286
+ file_type=file_type,
287
+ mime_type=mime_type or "application/octet-stream",
288
+ file_hash=file_hash,
289
+ is_temporary=is_temporary,
290
+ expire_seconds=expire_seconds if is_temporary and expire_seconds else None,
291
+ )
292
+
293
+ if folder_id:
294
+ request.folder_id = folder_id
295
+
296
+ # 构建元数据
297
+ grpc_metadata = self.client.build_metadata(request_id=request_id, **metadata)
298
+
299
+ response = await stub.GenerateResumableUploadUrl(request, metadata=grpc_metadata)
300
+
301
+ return UploadUrlResponse(
302
+ file=self._convert_file_info(response.file),
303
+ upload_file=self._convert_upload_file_info(response.upload_file),
304
+ upload_url=response.url
305
+ )
306
+
307
307
  async def generate_upload_url(
308
308
  self,
309
309
  file_name: str,
@@ -27,85 +27,6 @@ class SyncBlobService(BaseFileService):
27
27
  self.http_uploader = HttpUploader()
28
28
  self.http_downloader = HttpDownloader()
29
29
 
30
- def _generate_resumable_upload_url(
31
- self,
32
- file_name: str,
33
- file_size: int,
34
- folder_id: Optional[str] = None,
35
- file_type: str = "dat",
36
- mime_type: str = None,
37
- file_hash: str = None,
38
- is_temporary: Optional[bool] = False,
39
- expire_seconds: Optional[int] = None,
40
- request_id: Optional[str] = None,
41
- **metadata
42
- ) -> UploadUrlResponse:
43
- """
44
- 生成断点续传URL
45
-
46
- Args:
47
- file_name: 文件名
48
- file_size: 文件大小
49
- folder_id: 文件夹ID
50
- file_type: 文件类型
51
- mime_type: MIME类型
52
- file_hash: 文件哈希
53
- is_temporary: 是否为临时文件
54
- expire_seconds: 过期秒数
55
- **metadata: 额外的元数据(如 x-org-id, x-user-id 等)
56
-
57
- Returns:
58
- 上传URL响应
59
- """
60
- from ...rpc.gen import file_service_pb2, file_service_pb2_grpc
61
-
62
- stub = self.client.get_stub(file_service_pb2_grpc.FileServiceStub)
63
-
64
- request = file_service_pb2.UploadUrlRequest(
65
- file_name=file_name,
66
- file_size=file_size,
67
- file_type=file_type,
68
- mime_type=mime_type or "application/octet-stream",
69
- file_hash=file_hash,
70
- is_temporary=is_temporary,
71
- expire_seconds=expire_seconds if is_temporary and expire_seconds else None,
72
- )
73
-
74
- if folder_id:
75
- request.folder_id = folder_id
76
-
77
- # 构建元数据
78
- grpc_metadata = self.client.build_metadata(request_id=request_id, **metadata)
79
-
80
- response = stub.GenerateResumableUploadUrl(request, metadata=grpc_metadata)
81
-
82
- return UploadUrlResponse(
83
- file=self._convert_file_info(response.file),
84
- upload_file=self._convert_upload_file_info(response.upload_file),
85
- upload_url=response.url
86
- )
87
-
88
- def _confirm_upload_completed(self, file_id: str, request_id: Optional[str] = None,
89
- **metadata) -> None:
90
- """
91
- 确认上传完成
92
-
93
- Args:
94
- file_id: 文件ID
95
- request_id: 请求ID(可选,如果不提供则自动生成)
96
- **metadata: 额外的元数据(如 x-org-id, x-user-id 等)
97
- """
98
- from ...rpc.gen import file_service_pb2, file_service_pb2_grpc
99
-
100
- stub = self.client.get_stub(file_service_pb2_grpc.FileServiceStub)
101
-
102
- request = file_service_pb2.UploadCompletedRequest(file_id=file_id)
103
-
104
- # 构建元数据
105
- grpc_metadata = self.client.build_metadata(request_id=request_id, **metadata)
106
-
107
- stub.ConfirmUploadCompleted(request, metadata=grpc_metadata)
108
-
109
30
  @retry_with_backoff(max_retries=3)
110
31
  def _upload_file(
111
32
  self,
@@ -225,7 +146,7 @@ class SyncBlobService(BaseFileService):
225
146
  )
226
147
 
227
148
  # 确认上传完成
228
- self._confirm_upload_completed(
149
+ self.confirm_upload_completed(
229
150
  file_id=upload_url_resp.file.id,
230
151
  request_id=request_id,
231
152
  **metadata
@@ -253,7 +174,7 @@ class SyncBlobService(BaseFileService):
253
174
  ) -> FileUploadResponse:
254
175
  """断点续传实现"""
255
176
  # 获取断点续传URL,以及对应的文件和上传文件信息
256
- upload_url_resp = self._generate_resumable_upload_url(
177
+ upload_url_resp = self.generate_resumable_upload_url(
257
178
  file_name=file_name,
258
179
  file_size=file_size,
259
180
  folder_id=folder_id,
@@ -290,7 +211,7 @@ class SyncBlobService(BaseFileService):
290
211
  )
291
212
 
292
213
  # 确认上传完成
293
- self._confirm_upload_completed(
214
+ self.confirm_upload_completed(
294
215
  file_id=upload_url_resp.file.id,
295
216
  request_id=request_id,
296
217
  **metadata
@@ -302,6 +223,85 @@ class SyncBlobService(BaseFileService):
302
223
  upload_file=upload_url_resp.upload_file
303
224
  )
304
225
 
226
+ def confirm_upload_completed(self, file_id: str, request_id: Optional[str] = None,
227
+ **metadata) -> None:
228
+ """
229
+ 确认上传完成
230
+
231
+ Args:
232
+ file_id: 文件ID
233
+ request_id: 请求ID(可选,如果不提供则自动生成)
234
+ **metadata: 额外的元数据(如 x-org-id, x-user-id 等)
235
+ """
236
+ from ...rpc.gen import file_service_pb2, file_service_pb2_grpc
237
+
238
+ stub = self.client.get_stub(file_service_pb2_grpc.FileServiceStub)
239
+
240
+ request = file_service_pb2.UploadCompletedRequest(file_id=file_id)
241
+
242
+ # 构建元数据
243
+ grpc_metadata = self.client.build_metadata(request_id=request_id, **metadata)
244
+
245
+ stub.ConfirmUploadCompleted(request, metadata=grpc_metadata)
246
+
247
+ def generate_resumable_upload_url(
248
+ self,
249
+ file_name: str,
250
+ file_size: int,
251
+ folder_id: Optional[str] = None,
252
+ file_type: str = "dat",
253
+ mime_type: str = None,
254
+ file_hash: str = None,
255
+ is_temporary: Optional[bool] = False,
256
+ expire_seconds: Optional[int] = None,
257
+ request_id: Optional[str] = None,
258
+ **metadata
259
+ ) -> UploadUrlResponse:
260
+ """
261
+ 生成断点续传URL
262
+
263
+ Args:
264
+ file_name: 文件名
265
+ file_size: 文件大小
266
+ folder_id: 文件夹ID
267
+ file_type: 文件类型
268
+ mime_type: MIME类型
269
+ file_hash: 文件哈希
270
+ is_temporary: 是否为临时文件
271
+ expire_seconds: 过期秒数
272
+ **metadata: 额外的元数据(如 x-org-id, x-user-id 等)
273
+
274
+ Returns:
275
+ 上传URL响应
276
+ """
277
+ from ...rpc.gen import file_service_pb2, file_service_pb2_grpc
278
+
279
+ stub = self.client.get_stub(file_service_pb2_grpc.FileServiceStub)
280
+
281
+ request = file_service_pb2.UploadUrlRequest(
282
+ file_name=file_name,
283
+ file_size=file_size,
284
+ file_type=file_type,
285
+ mime_type=mime_type or "application/octet-stream",
286
+ file_hash=file_hash,
287
+ is_temporary=is_temporary,
288
+ expire_seconds=expire_seconds if is_temporary and expire_seconds else None,
289
+ )
290
+
291
+ if folder_id:
292
+ request.folder_id = folder_id
293
+
294
+ # 构建元数据
295
+ grpc_metadata = self.client.build_metadata(request_id=request_id, **metadata)
296
+
297
+ response = stub.GenerateResumableUploadUrl(request, metadata=grpc_metadata)
298
+
299
+ return UploadUrlResponse(
300
+ file=self._convert_file_info(response.file),
301
+ upload_file=self._convert_upload_file_info(response.upload_file),
302
+ upload_url=response.url
303
+ )
304
+
305
305
  def generate_upload_url(
306
306
  self,
307
307
  file_name: str,