tamar-file-hub-client 0.1.3__py3-none-any.whl → 0.1.5__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/client.py +24 -4
- file_hub_client/rpc/async_client.py +31 -4
- file_hub_client/rpc/gen/file_service_pb2.py +30 -12
- file_hub_client/rpc/gen/file_service_pb2_grpc.py +173 -0
- file_hub_client/rpc/interceptors.py +578 -580
- file_hub_client/rpc/protos/file_service.proto +68 -1
- file_hub_client/rpc/sync_client.py +31 -4
- file_hub_client/schemas/__init__.py +10 -0
- file_hub_client/schemas/context.py +171 -160
- file_hub_client/schemas/file.py +171 -126
- file_hub_client/services/file/async_blob_service.py +260 -8
- file_hub_client/services/file/async_file_service.py +217 -0
- file_hub_client/services/file/sync_blob_service.py +261 -8
- file_hub_client/services/file/sync_file_service.py +217 -0
- file_hub_client/utils/__init__.py +14 -0
- file_hub_client/utils/file_utils.py +186 -153
- file_hub_client/utils/ip_detector.py +226 -0
- file_hub_client/utils/logging.py +335 -318
- {tamar_file_hub_client-0.1.3.dist-info → tamar_file_hub_client-0.1.5.dist-info}/METADATA +178 -2
- {tamar_file_hub_client-0.1.3.dist-info → tamar_file_hub_client-0.1.5.dist-info}/RECORD +22 -21
- {tamar_file_hub_client-0.1.3.dist-info → tamar_file_hub_client-0.1.5.dist-info}/WHEEL +0 -0
- {tamar_file_hub_client-0.1.3.dist-info → tamar_file_hub_client-0.1.5.dist-info}/top_level.txt +0 -0
file_hub_client/client.py
CHANGED
@@ -157,7 +157,7 @@ class AsyncTamarFileHubClient:
|
|
157
157
|
self._taple_service = AsyncTapleService(self._client)
|
158
158
|
return self._taple_service
|
159
159
|
|
160
|
-
def set_user_context(self, org_id: str, user_id: str, role: Role = Role.ACCOUNT, actor_id: Optional[str] = None):
|
160
|
+
def set_user_context(self, org_id: str, user_id: str, role: Role = Role.ACCOUNT, actor_id: Optional[str] = None, user_ip: Optional[str] = None):
|
161
161
|
"""
|
162
162
|
设置用户上下文信息
|
163
163
|
|
@@ -166,8 +166,18 @@ class AsyncTamarFileHubClient:
|
|
166
166
|
user_id: 用户ID
|
167
167
|
role: 用户角色(默认为 ACCOUNT)
|
168
168
|
actor_id: 操作者ID(如果不同于 user_id)
|
169
|
+
user_ip: 用户IP地址(实际请求用户的IP,如前端用户的IP)
|
169
170
|
"""
|
170
|
-
self._client.set_user_context(org_id, user_id, role, actor_id)
|
171
|
+
self._client.set_user_context(org_id, user_id, role, actor_id, user_ip)
|
172
|
+
|
173
|
+
def set_user_ip(self, user_ip: Optional[str]):
|
174
|
+
"""
|
175
|
+
设置或更新用户IP地址
|
176
|
+
|
177
|
+
Args:
|
178
|
+
user_ip: 用户IP地址(实际请求用户的IP,如前端用户的IP)
|
179
|
+
"""
|
180
|
+
self._client.set_user_ip(user_ip)
|
171
181
|
|
172
182
|
def get_user_context(self) -> Optional[UserContext]:
|
173
183
|
"""获取当前用户上下文"""
|
@@ -364,7 +374,7 @@ class TamarFileHubClient:
|
|
364
374
|
self._taple_service = SyncTapleService(self._client)
|
365
375
|
return self._taple_service
|
366
376
|
|
367
|
-
def set_user_context(self, org_id: str, user_id: str, role: Role = Role.ACCOUNT, actor_id: Optional[str] = None):
|
377
|
+
def set_user_context(self, org_id: str, user_id: str, role: Role = Role.ACCOUNT, actor_id: Optional[str] = None, user_ip: Optional[str] = None):
|
368
378
|
"""
|
369
379
|
设置用户上下文信息
|
370
380
|
|
@@ -373,8 +383,18 @@ class TamarFileHubClient:
|
|
373
383
|
user_id: 用户ID
|
374
384
|
role: 用户角色(默认为 ACCOUNT)
|
375
385
|
actor_id: 操作者ID(如果不同于 user_id)
|
386
|
+
user_ip: 用户IP地址(实际请求用户的IP,如前端用户的IP)
|
387
|
+
"""
|
388
|
+
self._client.set_user_context(org_id, user_id, role, actor_id, user_ip)
|
389
|
+
|
390
|
+
def set_user_ip(self, user_ip: Optional[str]):
|
391
|
+
"""
|
392
|
+
设置或更新用户IP地址
|
393
|
+
|
394
|
+
Args:
|
395
|
+
user_ip: 用户IP地址(实际请求用户的IP,如前端用户的IP)
|
376
396
|
"""
|
377
|
-
self._client.
|
397
|
+
self._client.set_user_ip(user_ip)
|
378
398
|
|
379
399
|
def get_user_context(self) -> Optional[UserContext]:
|
380
400
|
"""获取当前用户上下文"""
|
@@ -281,8 +281,17 @@ class AsyncGrpcClient:
|
|
281
281
|
# 添加默认元数据
|
282
282
|
metadata.update(self.default_metadata)
|
283
283
|
|
284
|
-
#
|
285
|
-
|
284
|
+
# 自动检测用户真实IP
|
285
|
+
from ..utils.ip_detector import get_current_user_ip
|
286
|
+
auto_detected_ip = get_current_user_ip()
|
287
|
+
if auto_detected_ip and 'x-user-ip' not in metadata:
|
288
|
+
# 只有在没有设置过user_ip的情况下才使用自动检测的IP
|
289
|
+
metadata['x-user-ip'] = auto_detected_ip
|
290
|
+
|
291
|
+
# 添加/覆盖传入的元数据,但跳过None值以避免覆盖有效的默认值
|
292
|
+
for k, v in kwargs.items():
|
293
|
+
if v is not None:
|
294
|
+
metadata[k] = v
|
286
295
|
|
287
296
|
# 处理 request_id(优先级:显式传入 > metadata中的x-request-id > RequestContext > 自动生成)
|
288
297
|
if request_id is not None:
|
@@ -314,7 +323,7 @@ class AsyncGrpcClient:
|
|
314
323
|
"""
|
315
324
|
self.default_metadata.update(kwargs)
|
316
325
|
|
317
|
-
def set_user_context(self, org_id: str, user_id: str, role: Role = Role.ACCOUNT, actor_id: Optional[str] = None):
|
326
|
+
def set_user_context(self, org_id: str, user_id: str, role: Role = Role.ACCOUNT, actor_id: Optional[str] = None, user_ip: Optional[str] = None):
|
318
327
|
"""
|
319
328
|
设置用户上下文信息
|
320
329
|
|
@@ -323,16 +332,34 @@ class AsyncGrpcClient:
|
|
323
332
|
user_id: 用户ID
|
324
333
|
role: 用户角色(默认为 ACCOUNT)
|
325
334
|
actor_id: 操作者ID(如果不同于 user_id)
|
335
|
+
user_ip: 用户IP地址(实际请求用户的IP,如前端用户的IP)
|
326
336
|
"""
|
327
337
|
self._user_context = UserContext(
|
328
338
|
org_id=org_id,
|
329
339
|
user_id=user_id,
|
330
340
|
role=role,
|
331
|
-
actor_id=actor_id
|
341
|
+
actor_id=actor_id,
|
342
|
+
user_ip=user_ip
|
332
343
|
)
|
333
344
|
# 更新到默认元数据
|
334
345
|
self.update_default_metadata(**self._user_context.to_metadata())
|
335
346
|
|
347
|
+
def set_user_ip(self, user_ip: Optional[str]):
|
348
|
+
"""
|
349
|
+
设置或更新用户IP地址
|
350
|
+
|
351
|
+
Args:
|
352
|
+
user_ip: 用户IP地址(实际请求用户的IP,如前端用户的IP)
|
353
|
+
"""
|
354
|
+
if self._user_context:
|
355
|
+
self._user_context.user_ip = user_ip
|
356
|
+
# 先移除旧的x-user-ip(如果存在)
|
357
|
+
self.default_metadata.pop('x-user-ip', None)
|
358
|
+
# 更新到默认元数据(只有非None值会被添加)
|
359
|
+
self.update_default_metadata(**self._user_context.to_metadata())
|
360
|
+
else:
|
361
|
+
raise ValueError("必须先调用 set_user_context 设置用户上下文,然后才能设置用户IP")
|
362
|
+
|
336
363
|
def get_user_context(self) -> Optional[UserContext]:
|
337
364
|
"""获取当前用户上下文"""
|
338
365
|
return self._user_context
|
@@ -26,7 +26,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__
|
|
26
26
|
from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
|
27
27
|
|
28
28
|
|
29
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12\x66ile_service.proto\x12\x04\x66ile\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xab\x01\n\x04\x46ile\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tfolder_id\x18\x02 \x01(\t\x12\x11\n\tfile_name\x18\x03 \x01(\t\x12\x11\n\tfile_type\x18\x04 \x01(\t\x12.\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xb7\x02\n\nUploadFile\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tfolder_id\x18\x02 \x01(\t\x12\x0f\n\x07\x66ile_id\x18\x03 \x01(\t\x12\x14\n\x0cstorage_type\x18\x04 \x01(\t\x12\x13\n\x0bstored_name\x18\x05 \x01(\t\x12\x13\n\x0bstored_path\x18\x06 \x01(\t\x12\x11\n\tfile_name\x18\x07 \x01(\t\x12\x11\n\tfile_size\x18\x08 \x01(\x03\x12\x10\n\x08\x66ile_ext\x18\t \x01(\t\x12\x11\n\tmime_type\x18\n \x01(\t\x12\x0e\n\x06status\x18\x0b \x01(\t\x12.\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\r \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x9f\x02\n\x11UploadFileRequest\x12\x16\n\tfolder_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tfile_name\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\x0c\x12\x11\n\tfile_type\x18\x04 \x01(\t\x12\x11\n\tmime_type\x18\x05 \x01(\t\x12\x19\n\x0cis_temporary\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x65xpire_seconds\x18\x07 \x01(\x05H\x02\x88\x01\x01\x12#\n\x16keep_original_filename\x18\x08 \x01(\x08H\x03\x88\x01\x01\x42\x0c\n\n_folder_idB\x0f\n\r_is_temporaryB\x11\n\x0f_expire_secondsB\x19\n\x17_keep_original_filename\"\xb3\x02\n\x10UploadUrlRequest\x12\x16\n\tfolder_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tfile_name\x18\x02 \x01(\t\x12\x11\n\tfile_type\x18\x03 \x01(\t\x12\x11\n\tmime_type\x18\x04 \x01(\t\x12\x11\n\tfile_size\x18\x05 \x01(\x03\x12\x11\n\tfile_hash\x18\x06 \x01(\t\x12\x19\n\x0cis_temporary\x18\x07 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x65xpire_seconds\x18\x08 \x01(\x05H\x02\x88\x01\x01\x12#\n\x16keep_original_filename\x18\t \x01(\x08H\x03\x88\x01\x01\x42\x0c\n\n_folder_idB\x0f\n\r_is_temporaryB\x11\n\x0f_expire_secondsB\x19\n\x17_keep_original_filename\")\n\x16UploadCompletedRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\"u\n\x12\x44ownloadUrlRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x13\n\x06is_cdn\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0e\x65xpire_seconds\x18\x02 \x01(\x05H\x01\x88\x01\x01\x42\t\n\x07_is_cdnB\x11\n\x0f_expire_seconds\"\xd4\x01\n\x10ShareLinkRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x11\n\tis_public\x18\x02 \x01(\x08\x12\x14\n\x0c\x61\x63\x63\x65ss_scope\x18\x03 \x01(\t\x12\x1b\n\x0e\x65xpire_seconds\x18\x04 \x01(\x05H\x00\x88\x01\x01\x12\x17\n\nmax_access\x18\x05 \x01(\x05H\x01\x88\x01\x01\x12\x1b\n\x0eshare_password\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x11\n\x0f_expire_secondsB\r\n\x0b_max_accessB\x11\n\x0f_share_password\"\x82\x01\n\x10\x46ileVisitRequest\x12\x15\n\rfile_share_id\x18\x01 \x01(\t\x12\x13\n\x0b\x61\x63\x63\x65ss_type\x18\x02 \x01(\t\x12\x17\n\x0f\x61\x63\x63\x65ss_duration\x18\x03 \x01(\x05\x12)\n\x08metadata\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\"!\n\x0eGetFileRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\"6\n\x11RenameFileRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"$\n\x11\x44\x65leteFileRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\"\x8d\x02\n\x10ListFilesRequest\x12\x16\n\tfolder_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tfile_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\tfile_type\x18\x03 \x03(\t\x12\x1c\n\x0f\x63reated_by_role\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x17\n\ncreated_by\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpage_size\x18\x06 \x01(\x05H\x04\x88\x01\x01\x12\x11\n\x04page\x18\x07 \x01(\x05H\x05\x88\x01\x01\x42\x0c\n\n_folder_idB\x0c\n\n_file_nameB\x12\n\x10_created_by_roleB\r\n\x0b_created_byB\x0c\n\n_page_sizeB\x07\n\x05_page\"{\n\x17\x42\x61tchDownloadUrlRequest\x12\x10\n\x08\x66ile_ids\x18\x01 \x03(\t\x12\x13\n\x06is_cdn\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0e\x65xpire_seconds\x18\x03 \x01(\x05H\x01\x88\x01\x01\x42\t\n\x07_is_cdnB\x11\n\x0f_expire_seconds\"#\n\x10GetGcsUrlRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\")\n\x15\x42\x61tchGetGcsUrlRequest\x12\x10\n\x08\x66ile_ids\x18\x01 \x03(\t\"U\n\x12UploadFileResponse\x12\x18\n\x04\x66ile\x18\x01 \x01(\x0b\x32\n.file.File\x12%\n\x0bupload_file\x18\x02 \x01(\x0b\x32\x10.file.UploadFile\"a\n\x11UploadUrlResponse\x12\x18\n\x04\x66ile\x18\x01 \x01(\x0b\x32\n.file.File\x12%\n\x0bupload_file\x18\x02 \x01(\x0b\x32\x10.file.UploadFile\x12\x0b\n\x03url\x18\x03 \x01(\t\"\"\n\x13\x44ownloadUrlResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\"*\n\x11ShareLinkResponse\x12\x15\n\rfile_share_id\x18\x01 \x01(\t\"-\n\x10\x46ileListResponse\x12\x19\n\x05\x66iles\x18\x01 \x03(\x0b\x32\n.file.File\"g\n\x0fGetFileResponse\x12\x18\n\x04\x66ile\x18\x01 \x01(\x0b\x32\n.file.File\x12*\n\x0bupload_file\x18\x02 \x01(\x0b\x32\x10.file.UploadFileH\x00\x88\x01\x01\x42\x0e\n\x0c_upload_file\"H\n\x18\x42\x61tchDownloadUrlResponse\x12,\n\rdownload_urls\x18\x01 \x03(\x0b\x32\x15.file.DownloadUrlInfo\"
|
29
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12\x66ile_service.proto\x12\x04\x66ile\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"\xab\x01\n\x04\x46ile\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tfolder_id\x18\x02 \x01(\t\x12\x11\n\tfile_name\x18\x03 \x01(\t\x12\x11\n\tfile_type\x18\x04 \x01(\t\x12.\n\ncreated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xb7\x02\n\nUploadFile\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tfolder_id\x18\x02 \x01(\t\x12\x0f\n\x07\x66ile_id\x18\x03 \x01(\t\x12\x14\n\x0cstorage_type\x18\x04 \x01(\t\x12\x13\n\x0bstored_name\x18\x05 \x01(\t\x12\x13\n\x0bstored_path\x18\x06 \x01(\t\x12\x11\n\tfile_name\x18\x07 \x01(\t\x12\x11\n\tfile_size\x18\x08 \x01(\x03\x12\x10\n\x08\x66ile_ext\x18\t \x01(\t\x12\x11\n\tmime_type\x18\n \x01(\t\x12\x0e\n\x06status\x18\x0b \x01(\t\x12.\n\ncreated_at\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\r \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x9f\x02\n\x11UploadFileRequest\x12\x16\n\tfolder_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tfile_name\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\x0c\x12\x11\n\tfile_type\x18\x04 \x01(\t\x12\x11\n\tmime_type\x18\x05 \x01(\t\x12\x19\n\x0cis_temporary\x18\x06 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x65xpire_seconds\x18\x07 \x01(\x05H\x02\x88\x01\x01\x12#\n\x16keep_original_filename\x18\x08 \x01(\x08H\x03\x88\x01\x01\x42\x0c\n\n_folder_idB\x0f\n\r_is_temporaryB\x11\n\x0f_expire_secondsB\x19\n\x17_keep_original_filename\"\xb3\x02\n\x10UploadUrlRequest\x12\x16\n\tfolder_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x11\n\tfile_name\x18\x02 \x01(\t\x12\x11\n\tfile_type\x18\x03 \x01(\t\x12\x11\n\tmime_type\x18\x04 \x01(\t\x12\x11\n\tfile_size\x18\x05 \x01(\x03\x12\x11\n\tfile_hash\x18\x06 \x01(\t\x12\x19\n\x0cis_temporary\x18\x07 \x01(\x08H\x01\x88\x01\x01\x12\x1b\n\x0e\x65xpire_seconds\x18\x08 \x01(\x05H\x02\x88\x01\x01\x12#\n\x16keep_original_filename\x18\t \x01(\x08H\x03\x88\x01\x01\x42\x0c\n\n_folder_idB\x0f\n\r_is_temporaryB\x11\n\x0f_expire_secondsB\x19\n\x17_keep_original_filename\")\n\x16UploadCompletedRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\"u\n\x12\x44ownloadUrlRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x13\n\x06is_cdn\x18\x03 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0e\x65xpire_seconds\x18\x02 \x01(\x05H\x01\x88\x01\x01\x42\t\n\x07_is_cdnB\x11\n\x0f_expire_seconds\"\xd4\x01\n\x10ShareLinkRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x11\n\tis_public\x18\x02 \x01(\x08\x12\x14\n\x0c\x61\x63\x63\x65ss_scope\x18\x03 \x01(\t\x12\x1b\n\x0e\x65xpire_seconds\x18\x04 \x01(\x05H\x00\x88\x01\x01\x12\x17\n\nmax_access\x18\x05 \x01(\x05H\x01\x88\x01\x01\x12\x1b\n\x0eshare_password\x18\x06 \x01(\tH\x02\x88\x01\x01\x42\x11\n\x0f_expire_secondsB\r\n\x0b_max_accessB\x11\n\x0f_share_password\"\x82\x01\n\x10\x46ileVisitRequest\x12\x15\n\rfile_share_id\x18\x01 \x01(\t\x12\x13\n\x0b\x61\x63\x63\x65ss_type\x18\x02 \x01(\t\x12\x17\n\x0f\x61\x63\x63\x65ss_duration\x18\x03 \x01(\x05\x12)\n\x08metadata\x18\x04 \x01(\x0b\x32\x17.google.protobuf.Struct\"!\n\x0eGetFileRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\"6\n\x11RenameFileRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\"$\n\x11\x44\x65leteFileRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\"\x8d\x02\n\x10ListFilesRequest\x12\x16\n\tfolder_id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tfile_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x11\n\tfile_type\x18\x03 \x03(\t\x12\x1c\n\x0f\x63reated_by_role\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x17\n\ncreated_by\x18\x05 \x01(\tH\x03\x88\x01\x01\x12\x16\n\tpage_size\x18\x06 \x01(\x05H\x04\x88\x01\x01\x12\x11\n\x04page\x18\x07 \x01(\x05H\x05\x88\x01\x01\x42\x0c\n\n_folder_idB\x0c\n\n_file_nameB\x12\n\x10_created_by_roleB\r\n\x0b_created_byB\x0c\n\n_page_sizeB\x07\n\x05_page\"{\n\x17\x42\x61tchDownloadUrlRequest\x12\x10\n\x08\x66ile_ids\x18\x01 \x03(\t\x12\x13\n\x06is_cdn\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x1b\n\x0e\x65xpire_seconds\x18\x03 \x01(\x05H\x01\x88\x01\x01\x42\t\n\x07_is_cdnB\x11\n\x0f_expire_seconds\"#\n\x10GetGcsUrlRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\")\n\x15\x42\x61tchGetGcsUrlRequest\x12\x10\n\x08\x66ile_ids\x18\x01 \x03(\t\"U\n\x12UploadFileResponse\x12\x18\n\x04\x66ile\x18\x01 \x01(\x0b\x32\n.file.File\x12%\n\x0bupload_file\x18\x02 \x01(\x0b\x32\x10.file.UploadFile\"a\n\x11UploadUrlResponse\x12\x18\n\x04\x66ile\x18\x01 \x01(\x0b\x32\n.file.File\x12%\n\x0bupload_file\x18\x02 \x01(\x0b\x32\x10.file.UploadFile\x12\x0b\n\x03url\x18\x03 \x01(\t\"\"\n\x13\x44ownloadUrlResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\"*\n\x11ShareLinkResponse\x12\x15\n\rfile_share_id\x18\x01 \x01(\t\"-\n\x10\x46ileListResponse\x12\x19\n\x05\x66iles\x18\x01 \x03(\x0b\x32\n.file.File\"g\n\x0fGetFileResponse\x12\x18\n\x04\x66ile\x18\x01 \x01(\x0b\x32\n.file.File\x12*\n\x0bupload_file\x18\x02 \x01(\x0b\x32\x10.file.UploadFileH\x00\x88\x01\x01\x42\x0e\n\x0c_upload_file\"H\n\x18\x42\x61tchDownloadUrlResponse\x12,\n\rdownload_urls\x18\x01 \x03(\x0b\x32\x15.file.DownloadUrlInfo\"`\n\x0f\x44ownloadUrlInfo\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x0b\n\x03url\x18\x02 \x01(\t\x12\x11\n\tmime_type\x18\x03 \x01(\t\x12\x12\n\x05\x65rror\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_error\"7\n\x11GetGcsUrlResponse\x12\x0f\n\x07gcs_url\x18\x01 \x01(\t\x12\x11\n\tmime_type\x18\x02 \x01(\t\"<\n\x16\x42\x61tchGetGcsUrlResponse\x12\"\n\x08gcs_urls\x18\x01 \x03(\x0b\x32\x10.file.GcsUrlInfo\"_\n\nGcsUrlInfo\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x0f\n\x07gcs_url\x18\x02 \x01(\t\x12\x11\n\tmime_type\x18\x03 \x01(\t\x12\x12\n\x05\x65rror\x18\x04 \x01(\tH\x00\x88\x01\x01\x42\x08\n\x06_error\"+\n\x18\x43ompressionStatusRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\"\x84\x01\n\x19\x43ompressionStatusResponse\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x1a\n\rerror_message\x18\x02 \x01(\tH\x00\x88\x01\x01\x12)\n\x08variants\x18\x03 \x03(\x0b\x32\x17.file.CompressedVariantB\x10\n\x0e_error_message\"Q\n\x12GetVariantsRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x19\n\x0cvariant_type\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x0f\n\r_variant_type\"@\n\x13GetVariantsResponse\x12)\n\x08variants\x18\x01 \x03(\x0b\x32\x17.file.CompressedVariant\"\xc7\x02\n\x11\x43ompressedVariant\x12\x14\n\x0cvariant_name\x18\x01 \x01(\t\x12\x14\n\x0cvariant_type\x18\x02 \x01(\t\x12\x12\n\nmedia_type\x18\x03 \x01(\t\x12\r\n\x05width\x18\x04 \x01(\x05\x12\x0e\n\x06height\x18\x05 \x01(\x05\x12\x11\n\tfile_size\x18\x06 \x01(\x03\x12\x0e\n\x06\x66ormat\x18\x07 \x01(\t\x12\x14\n\x07quality\x18\x08 \x01(\x05H\x00\x88\x01\x01\x12\x15\n\x08\x64uration\x18\t \x01(\x01H\x01\x88\x01\x01\x12\x14\n\x07\x62itrate\x18\n \x01(\x03H\x02\x88\x01\x01\x12\x10\n\x03\x66ps\x18\x0b \x01(\x05H\x03\x88\x01\x01\x12\x19\n\x11\x63ompression_ratio\x18\x0c \x01(\x01\x12\x13\n\x0bstored_path\x18\r \x01(\tB\n\n\x08_qualityB\x0b\n\t_durationB\n\n\x08_bitrateB\x06\n\x04_fps\"Y\n\x14RecompressionRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x1c\n\x0f\x66orce_reprocess\x18\x02 \x01(\x08H\x00\x88\x01\x01\x42\x12\n\x10_force_reprocess\"8\n\x15RecompressionResponse\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x0e\n\x06status\x18\x02 \x01(\t\"\x92\x01\n\x19VariantDownloadUrlRequest\x12\x0f\n\x07\x66ile_id\x18\x01 \x01(\t\x12\x14\n\x0cvariant_name\x18\x02 \x01(\t\x12\x1b\n\x0e\x65xpire_seconds\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x13\n\x06is_cdn\x18\x04 \x01(\x08H\x01\x88\x01\x01\x42\x11\n\x0f_expire_secondsB\t\n\x07_is_cdn\"\x8c\x01\n\x1aVariantDownloadUrlResponse\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x12\n\x05\x65rror\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x32\n\x0cvariant_info\x18\x03 \x01(\x0b\x32\x17.file.CompressedVariantH\x01\x88\x01\x01\x42\x08\n\x06_errorB\x0f\n\r_variant_info\"\x07\n\x05\x45mpty2\x87\n\n\x0b\x46ileService\x12?\n\nUploadFile\x12\x17.file.UploadFileRequest\x1a\x18.file.UploadFileResponse\x12\x44\n\x11GenerateUploadUrl\x12\x16.file.UploadUrlRequest\x1a\x17.file.UploadUrlResponse\x12M\n\x1aGenerateResumableUploadUrl\x12\x16.file.UploadUrlRequest\x1a\x17.file.UploadUrlResponse\x12\x43\n\x16\x43onfirmUploadCompleted\x12\x1c.file.UploadCompletedRequest\x1a\x0b.file.Empty\x12J\n\x13GenerateDownloadUrl\x12\x18.file.DownloadUrlRequest\x1a\x19.file.DownloadUrlResponse\x12Y\n\x18\x42\x61tchGenerateDownloadUrl\x12\x1d.file.BatchDownloadUrlRequest\x1a\x1e.file.BatchDownloadUrlResponse\x12<\n\tGetGcsUrl\x12\x16.file.GetGcsUrlRequest\x1a\x17.file.GetGcsUrlResponse\x12K\n\x0e\x42\x61tchGetGcsUrl\x12\x1b.file.BatchGetGcsUrlRequest\x1a\x1c.file.BatchGetGcsUrlResponse\x12\x44\n\x11GenerateShareLink\x12\x16.file.ShareLinkRequest\x1a\x17.file.ShareLinkResponse\x12\x30\n\tVisitFile\x12\x16.file.FileVisitRequest\x1a\x0b.file.Empty\x12\x36\n\x07GetFile\x12\x14.file.GetFileRequest\x1a\x15.file.GetFileResponse\x12\x31\n\nRenameFile\x12\x17.file.RenameFileRequest\x1a\n.file.File\x12\x32\n\nDeleteFile\x12\x17.file.DeleteFileRequest\x1a\x0b.file.Empty\x12;\n\tListFiles\x12\x16.file.ListFilesRequest\x1a\x16.file.FileListResponse\x12W\n\x14GetCompressionStatus\x12\x1e.file.CompressionStatusRequest\x1a\x1f.file.CompressionStatusResponse\x12L\n\x15GetCompressedVariants\x12\x18.file.GetVariantsRequest\x1a\x19.file.GetVariantsResponse\x12O\n\x14TriggerRecompression\x12\x1a.file.RecompressionRequest\x1a\x1b.file.RecompressionResponse\x12_\n\x1aGenerateVariantDownloadUrl\x12\x1f.file.VariantDownloadUrlRequest\x1a .file.VariantDownloadUrlResponseb\x06proto3')
|
30
30
|
|
31
31
|
_globals = globals()
|
32
32
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -78,15 +78,33 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
78
78
|
_globals['_BATCHDOWNLOADURLRESPONSE']._serialized_start=2713
|
79
79
|
_globals['_BATCHDOWNLOADURLRESPONSE']._serialized_end=2785
|
80
80
|
_globals['_DOWNLOADURLINFO']._serialized_start=2787
|
81
|
-
_globals['_DOWNLOADURLINFO']._serialized_end=
|
82
|
-
_globals['_GETGCSURLRESPONSE']._serialized_start=
|
83
|
-
_globals['_GETGCSURLRESPONSE']._serialized_end=
|
84
|
-
_globals['_BATCHGETGCSURLRESPONSE']._serialized_start=
|
85
|
-
_globals['_BATCHGETGCSURLRESPONSE']._serialized_end=
|
86
|
-
_globals['_GCSURLINFO']._serialized_start=
|
87
|
-
_globals['_GCSURLINFO']._serialized_end=
|
88
|
-
_globals['
|
89
|
-
_globals['
|
90
|
-
_globals['
|
91
|
-
_globals['
|
81
|
+
_globals['_DOWNLOADURLINFO']._serialized_end=2883
|
82
|
+
_globals['_GETGCSURLRESPONSE']._serialized_start=2885
|
83
|
+
_globals['_GETGCSURLRESPONSE']._serialized_end=2940
|
84
|
+
_globals['_BATCHGETGCSURLRESPONSE']._serialized_start=2942
|
85
|
+
_globals['_BATCHGETGCSURLRESPONSE']._serialized_end=3002
|
86
|
+
_globals['_GCSURLINFO']._serialized_start=3004
|
87
|
+
_globals['_GCSURLINFO']._serialized_end=3099
|
88
|
+
_globals['_COMPRESSIONSTATUSREQUEST']._serialized_start=3101
|
89
|
+
_globals['_COMPRESSIONSTATUSREQUEST']._serialized_end=3144
|
90
|
+
_globals['_COMPRESSIONSTATUSRESPONSE']._serialized_start=3147
|
91
|
+
_globals['_COMPRESSIONSTATUSRESPONSE']._serialized_end=3279
|
92
|
+
_globals['_GETVARIANTSREQUEST']._serialized_start=3281
|
93
|
+
_globals['_GETVARIANTSREQUEST']._serialized_end=3362
|
94
|
+
_globals['_GETVARIANTSRESPONSE']._serialized_start=3364
|
95
|
+
_globals['_GETVARIANTSRESPONSE']._serialized_end=3428
|
96
|
+
_globals['_COMPRESSEDVARIANT']._serialized_start=3431
|
97
|
+
_globals['_COMPRESSEDVARIANT']._serialized_end=3758
|
98
|
+
_globals['_RECOMPRESSIONREQUEST']._serialized_start=3760
|
99
|
+
_globals['_RECOMPRESSIONREQUEST']._serialized_end=3849
|
100
|
+
_globals['_RECOMPRESSIONRESPONSE']._serialized_start=3851
|
101
|
+
_globals['_RECOMPRESSIONRESPONSE']._serialized_end=3907
|
102
|
+
_globals['_VARIANTDOWNLOADURLREQUEST']._serialized_start=3910
|
103
|
+
_globals['_VARIANTDOWNLOADURLREQUEST']._serialized_end=4056
|
104
|
+
_globals['_VARIANTDOWNLOADURLRESPONSE']._serialized_start=4059
|
105
|
+
_globals['_VARIANTDOWNLOADURLRESPONSE']._serialized_end=4199
|
106
|
+
_globals['_EMPTY']._serialized_start=4201
|
107
|
+
_globals['_EMPTY']._serialized_end=4208
|
108
|
+
_globals['_FILESERVICE']._serialized_start=4211
|
109
|
+
_globals['_FILESERVICE']._serialized_end=5498
|
92
110
|
# @@protoc_insertion_point(module_scope)
|
@@ -106,6 +106,26 @@ class FileServiceStub(object):
|
|
106
106
|
request_serializer=file__service__pb2.ListFilesRequest.SerializeToString,
|
107
107
|
response_deserializer=file__service__pb2.FileListResponse.FromString,
|
108
108
|
_registered_method=True)
|
109
|
+
self.GetCompressionStatus = channel.unary_unary(
|
110
|
+
'/file.FileService/GetCompressionStatus',
|
111
|
+
request_serializer=file__service__pb2.CompressionStatusRequest.SerializeToString,
|
112
|
+
response_deserializer=file__service__pb2.CompressionStatusResponse.FromString,
|
113
|
+
_registered_method=True)
|
114
|
+
self.GetCompressedVariants = channel.unary_unary(
|
115
|
+
'/file.FileService/GetCompressedVariants',
|
116
|
+
request_serializer=file__service__pb2.GetVariantsRequest.SerializeToString,
|
117
|
+
response_deserializer=file__service__pb2.GetVariantsResponse.FromString,
|
118
|
+
_registered_method=True)
|
119
|
+
self.TriggerRecompression = channel.unary_unary(
|
120
|
+
'/file.FileService/TriggerRecompression',
|
121
|
+
request_serializer=file__service__pb2.RecompressionRequest.SerializeToString,
|
122
|
+
response_deserializer=file__service__pb2.RecompressionResponse.FromString,
|
123
|
+
_registered_method=True)
|
124
|
+
self.GenerateVariantDownloadUrl = channel.unary_unary(
|
125
|
+
'/file.FileService/GenerateVariantDownloadUrl',
|
126
|
+
request_serializer=file__service__pb2.VariantDownloadUrlRequest.SerializeToString,
|
127
|
+
response_deserializer=file__service__pb2.VariantDownloadUrlResponse.FromString,
|
128
|
+
_registered_method=True)
|
109
129
|
|
110
130
|
|
111
131
|
class FileServiceServicer(object):
|
@@ -197,6 +217,31 @@ class FileServiceServicer(object):
|
|
197
217
|
context.set_details('Method not implemented!')
|
198
218
|
raise NotImplementedError('Method not implemented!')
|
199
219
|
|
220
|
+
def GetCompressionStatus(self, request, context):
|
221
|
+
"""压缩服务相关API
|
222
|
+
"""
|
223
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
224
|
+
context.set_details('Method not implemented!')
|
225
|
+
raise NotImplementedError('Method not implemented!')
|
226
|
+
|
227
|
+
def GetCompressedVariants(self, request, context):
|
228
|
+
"""Missing associated documentation comment in .proto file."""
|
229
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
230
|
+
context.set_details('Method not implemented!')
|
231
|
+
raise NotImplementedError('Method not implemented!')
|
232
|
+
|
233
|
+
def TriggerRecompression(self, request, context):
|
234
|
+
"""Missing associated documentation comment in .proto file."""
|
235
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
236
|
+
context.set_details('Method not implemented!')
|
237
|
+
raise NotImplementedError('Method not implemented!')
|
238
|
+
|
239
|
+
def GenerateVariantDownloadUrl(self, request, context):
|
240
|
+
"""Missing associated documentation comment in .proto file."""
|
241
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
242
|
+
context.set_details('Method not implemented!')
|
243
|
+
raise NotImplementedError('Method not implemented!')
|
244
|
+
|
200
245
|
|
201
246
|
def add_FileServiceServicer_to_server(servicer, server):
|
202
247
|
rpc_method_handlers = {
|
@@ -270,6 +315,26 @@ def add_FileServiceServicer_to_server(servicer, server):
|
|
270
315
|
request_deserializer=file__service__pb2.ListFilesRequest.FromString,
|
271
316
|
response_serializer=file__service__pb2.FileListResponse.SerializeToString,
|
272
317
|
),
|
318
|
+
'GetCompressionStatus': grpc.unary_unary_rpc_method_handler(
|
319
|
+
servicer.GetCompressionStatus,
|
320
|
+
request_deserializer=file__service__pb2.CompressionStatusRequest.FromString,
|
321
|
+
response_serializer=file__service__pb2.CompressionStatusResponse.SerializeToString,
|
322
|
+
),
|
323
|
+
'GetCompressedVariants': grpc.unary_unary_rpc_method_handler(
|
324
|
+
servicer.GetCompressedVariants,
|
325
|
+
request_deserializer=file__service__pb2.GetVariantsRequest.FromString,
|
326
|
+
response_serializer=file__service__pb2.GetVariantsResponse.SerializeToString,
|
327
|
+
),
|
328
|
+
'TriggerRecompression': grpc.unary_unary_rpc_method_handler(
|
329
|
+
servicer.TriggerRecompression,
|
330
|
+
request_deserializer=file__service__pb2.RecompressionRequest.FromString,
|
331
|
+
response_serializer=file__service__pb2.RecompressionResponse.SerializeToString,
|
332
|
+
),
|
333
|
+
'GenerateVariantDownloadUrl': grpc.unary_unary_rpc_method_handler(
|
334
|
+
servicer.GenerateVariantDownloadUrl,
|
335
|
+
request_deserializer=file__service__pb2.VariantDownloadUrlRequest.FromString,
|
336
|
+
response_serializer=file__service__pb2.VariantDownloadUrlResponse.SerializeToString,
|
337
|
+
),
|
273
338
|
}
|
274
339
|
generic_handler = grpc.method_handlers_generic_handler(
|
275
340
|
'file.FileService', rpc_method_handlers)
|
@@ -660,3 +725,111 @@ class FileService(object):
|
|
660
725
|
timeout,
|
661
726
|
metadata,
|
662
727
|
_registered_method=True)
|
728
|
+
|
729
|
+
@staticmethod
|
730
|
+
def GetCompressionStatus(request,
|
731
|
+
target,
|
732
|
+
options=(),
|
733
|
+
channel_credentials=None,
|
734
|
+
call_credentials=None,
|
735
|
+
insecure=False,
|
736
|
+
compression=None,
|
737
|
+
wait_for_ready=None,
|
738
|
+
timeout=None,
|
739
|
+
metadata=None):
|
740
|
+
return grpc.experimental.unary_unary(
|
741
|
+
request,
|
742
|
+
target,
|
743
|
+
'/file.FileService/GetCompressionStatus',
|
744
|
+
file__service__pb2.CompressionStatusRequest.SerializeToString,
|
745
|
+
file__service__pb2.CompressionStatusResponse.FromString,
|
746
|
+
options,
|
747
|
+
channel_credentials,
|
748
|
+
insecure,
|
749
|
+
call_credentials,
|
750
|
+
compression,
|
751
|
+
wait_for_ready,
|
752
|
+
timeout,
|
753
|
+
metadata,
|
754
|
+
_registered_method=True)
|
755
|
+
|
756
|
+
@staticmethod
|
757
|
+
def GetCompressedVariants(request,
|
758
|
+
target,
|
759
|
+
options=(),
|
760
|
+
channel_credentials=None,
|
761
|
+
call_credentials=None,
|
762
|
+
insecure=False,
|
763
|
+
compression=None,
|
764
|
+
wait_for_ready=None,
|
765
|
+
timeout=None,
|
766
|
+
metadata=None):
|
767
|
+
return grpc.experimental.unary_unary(
|
768
|
+
request,
|
769
|
+
target,
|
770
|
+
'/file.FileService/GetCompressedVariants',
|
771
|
+
file__service__pb2.GetVariantsRequest.SerializeToString,
|
772
|
+
file__service__pb2.GetVariantsResponse.FromString,
|
773
|
+
options,
|
774
|
+
channel_credentials,
|
775
|
+
insecure,
|
776
|
+
call_credentials,
|
777
|
+
compression,
|
778
|
+
wait_for_ready,
|
779
|
+
timeout,
|
780
|
+
metadata,
|
781
|
+
_registered_method=True)
|
782
|
+
|
783
|
+
@staticmethod
|
784
|
+
def TriggerRecompression(request,
|
785
|
+
target,
|
786
|
+
options=(),
|
787
|
+
channel_credentials=None,
|
788
|
+
call_credentials=None,
|
789
|
+
insecure=False,
|
790
|
+
compression=None,
|
791
|
+
wait_for_ready=None,
|
792
|
+
timeout=None,
|
793
|
+
metadata=None):
|
794
|
+
return grpc.experimental.unary_unary(
|
795
|
+
request,
|
796
|
+
target,
|
797
|
+
'/file.FileService/TriggerRecompression',
|
798
|
+
file__service__pb2.RecompressionRequest.SerializeToString,
|
799
|
+
file__service__pb2.RecompressionResponse.FromString,
|
800
|
+
options,
|
801
|
+
channel_credentials,
|
802
|
+
insecure,
|
803
|
+
call_credentials,
|
804
|
+
compression,
|
805
|
+
wait_for_ready,
|
806
|
+
timeout,
|
807
|
+
metadata,
|
808
|
+
_registered_method=True)
|
809
|
+
|
810
|
+
@staticmethod
|
811
|
+
def GenerateVariantDownloadUrl(request,
|
812
|
+
target,
|
813
|
+
options=(),
|
814
|
+
channel_credentials=None,
|
815
|
+
call_credentials=None,
|
816
|
+
insecure=False,
|
817
|
+
compression=None,
|
818
|
+
wait_for_ready=None,
|
819
|
+
timeout=None,
|
820
|
+
metadata=None):
|
821
|
+
return grpc.experimental.unary_unary(
|
822
|
+
request,
|
823
|
+
target,
|
824
|
+
'/file.FileService/GenerateVariantDownloadUrl',
|
825
|
+
file__service__pb2.VariantDownloadUrlRequest.SerializeToString,
|
826
|
+
file__service__pb2.VariantDownloadUrlResponse.FromString,
|
827
|
+
options,
|
828
|
+
channel_credentials,
|
829
|
+
insecure,
|
830
|
+
call_credentials,
|
831
|
+
compression,
|
832
|
+
wait_for_ready,
|
833
|
+
timeout,
|
834
|
+
metadata,
|
835
|
+
_registered_method=True)
|