tamar-file-hub-client 0.0.3__tar.gz → 0.0.4__tar.gz
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.
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/PKG-INFO +1 -1
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/file/async_blob_service.py +19 -9
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/file/sync_blob_service.py +21 -12
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/setup.py +1 -1
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/tamar_file_hub_client.egg-info/PKG-INFO +1 -1
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/MANIFEST.in +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/README.md +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/client.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/enums/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/enums/export_format.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/enums/role.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/enums/upload_mode.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/errors/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/errors/exceptions.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/py.typed +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/async_client.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/gen/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/gen/file_service_pb2.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/gen/file_service_pb2_grpc.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/gen/folder_service_pb2.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/gen/folder_service_pb2_grpc.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/gen/taple_service_pb2.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/gen/taple_service_pb2_grpc.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/generate_grpc.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/interceptors.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/protos/file_service.proto +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/protos/folder_service.proto +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/protos/taple_service.proto +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/sync_client.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/schemas/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/schemas/context.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/schemas/file.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/schemas/folder.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/schemas/taple.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/file/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/file/async_file_service.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/file/base_file_service.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/file/sync_file_service.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/folder/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/folder/async_folder_service.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/folder/sync_folder_service.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/taple/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/taple/async_taple_service.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/taple/base_taple_service.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/taple/idempotent_taple_mixin.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/taple/sync_taple_service.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/__init__.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/converter.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/download_helper.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/file_utils.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/idempotency.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/logging.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/retry.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/smart_retry.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/upload_helper.py +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/setup.cfg +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/tamar_file_hub_client.egg-info/SOURCES.txt +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/tamar_file_hub_client.egg-info/dependency_links.txt +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/tamar_file_hub_client.egg-info/requires.txt +0 -0
- {tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/tamar_file_hub_client.egg-info/top_level.txt +0 -0
@@ -401,12 +401,12 @@ class AsyncBlobService(BaseFileService):
|
|
401
401
|
# 参数验证:必须提供 file 或 url 之一
|
402
402
|
if file is None and not url:
|
403
403
|
raise ValidationError("必须提供 file 或 url 参数之一")
|
404
|
-
|
404
|
+
|
405
405
|
# 如果提供了URL,先下载文件
|
406
406
|
if url:
|
407
407
|
# 下载文件到内存
|
408
408
|
downloaded_content = await self.http_downloader.download(url)
|
409
|
-
|
409
|
+
|
410
410
|
# 如果没有指定文件名,从URL中提取
|
411
411
|
if not file_name:
|
412
412
|
from urllib.parse import urlparse
|
@@ -414,22 +414,32 @@ class AsyncBlobService(BaseFileService):
|
|
414
414
|
parsed_url = urlparse(url)
|
415
415
|
url_path = PathLib(parsed_url.path)
|
416
416
|
file_name = url_path.name if url_path.name else f"download_{hashlib.md5(url.encode()).hexdigest()[:8]}"
|
417
|
-
|
417
|
+
|
418
418
|
# 使用下载的内容作为file参数
|
419
419
|
file = downloaded_content
|
420
|
-
|
420
|
+
|
421
421
|
# 提取文件信息(bytes会返回默认的MIME类型,我们稍后会基于文件名重新计算)
|
422
|
-
|
423
|
-
|
422
|
+
_, content, file_size, _, _, file_hash = self._extract_file_info(file)
|
423
|
+
|
424
424
|
# file_name已经在上面设置了(要么是用户指定的,要么是从URL提取的)
|
425
425
|
extracted_file_name = file_name
|
426
|
-
|
426
|
+
|
427
427
|
# 基于文件名计算文件类型和MIME类型
|
428
|
-
file_type = Path(extracted_file_name).suffix.lstrip('.').lower() if Path(
|
428
|
+
file_type = Path(extracted_file_name).suffix.lstrip('.').lower() if Path(
|
429
|
+
extracted_file_name).suffix else 'dat'
|
429
430
|
mime_type = get_file_mime_type(Path(extracted_file_name))
|
430
431
|
else:
|
431
432
|
# 解析文件参数,提取文件信息
|
432
|
-
extracted_file_name, content, file_size,
|
433
|
+
extracted_file_name, content, file_size, extract_mime_type, extract_file_type, file_hash = self._extract_file_info(
|
434
|
+
file)
|
435
|
+
if file_name:
|
436
|
+
extracted_file_name = file_name
|
437
|
+
mime_type = get_file_mime_type(file_name)
|
438
|
+
file_type = Path(extracted_file_name).suffix.lstrip('.').lower() if Path(
|
439
|
+
extracted_file_name).suffix else 'dat'
|
440
|
+
else:
|
441
|
+
mime_type = extract_mime_type
|
442
|
+
file_type = extract_file_type
|
433
443
|
|
434
444
|
# 根据文件大小自动选择上传模式
|
435
445
|
if mode == UploadMode.NORMAL:
|
@@ -387,24 +387,25 @@ class SyncBlobService(BaseFileService):
|
|
387
387
|
expire_seconds: 过期秒数
|
388
388
|
url: 要下载并上传的URL(可选)
|
389
389
|
file_name: 当使用url参数时指定的文件名(可选)
|
390
|
+
mime_type: 文件mine-type,当传入的是二进制内容时必传
|
390
391
|
request_id: 请求ID(可选,如果不提供则自动生成)
|
391
392
|
**metadata: 额外的元数据
|
392
393
|
|
393
394
|
Returns:
|
394
395
|
文件信息
|
395
|
-
|
396
|
+
|
396
397
|
Note:
|
397
398
|
必须提供 file 或 url 参数之一
|
398
399
|
"""
|
399
400
|
# 参数验证:必须提供 file 或 url 之一
|
400
401
|
if file is None and not url:
|
401
402
|
raise ValidationError("必须提供 file 或 url 参数之一")
|
402
|
-
|
403
|
+
|
403
404
|
# 如果提供了URL,先下载文件
|
404
405
|
if url:
|
405
406
|
# 下载文件到内存
|
406
407
|
downloaded_content = self.http_downloader.download(url)
|
407
|
-
|
408
|
+
|
408
409
|
# 如果没有指定文件名,从URL中提取
|
409
410
|
if not file_name:
|
410
411
|
from urllib.parse import urlparse
|
@@ -412,24 +413,32 @@ class SyncBlobService(BaseFileService):
|
|
412
413
|
parsed_url = urlparse(url)
|
413
414
|
url_path = PathLib(parsed_url.path)
|
414
415
|
file_name = url_path.name if url_path.name else f"download_{hashlib.md5(url.encode()).hexdigest()[:8]}"
|
415
|
-
|
416
|
+
|
416
417
|
# 使用下载的内容作为file参数
|
417
418
|
file = downloaded_content
|
418
|
-
|
419
|
+
|
419
420
|
# 提取文件信息(bytes会返回默认的MIME类型,我们稍后会基于文件名重新计算)
|
420
|
-
|
421
|
-
|
421
|
+
_, content, file_size, _, _, file_hash = self._extract_file_info(file)
|
422
|
+
|
422
423
|
# file_name已经在上面设置了(要么是用户指定的,要么是从URL提取的)
|
423
424
|
extracted_file_name = file_name
|
424
|
-
|
425
|
+
|
425
426
|
# 基于文件名计算文件类型和MIME类型
|
426
|
-
file_type = Path(extracted_file_name).suffix.lstrip('.').lower() if Path(
|
427
|
+
file_type = Path(extracted_file_name).suffix.lstrip('.').lower() if Path(
|
428
|
+
extracted_file_name).suffix else 'dat'
|
427
429
|
mime_type = get_file_mime_type(Path(extracted_file_name))
|
428
430
|
else:
|
429
431
|
# 解析文件参数,提取文件信息
|
430
|
-
extracted_file_name, content, file_size,
|
431
|
-
|
432
|
-
|
432
|
+
extracted_file_name, content, file_size, extract_mime_type, extract_file_type, file_hash = self._extract_file_info(
|
433
|
+
file)
|
434
|
+
if file_name:
|
435
|
+
extracted_file_name = file_name
|
436
|
+
mime_type = get_file_mime_type(file_name)
|
437
|
+
file_type = Path(extracted_file_name).suffix.lstrip('.').lower() if Path(
|
438
|
+
extracted_file_name).suffix else 'dat'
|
439
|
+
else:
|
440
|
+
mime_type = extract_mime_type
|
441
|
+
file_type = extract_file_type
|
433
442
|
|
434
443
|
# 根据文件大小自动选择上传模式
|
435
444
|
if mode == UploadMode.NORMAL:
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
2
2
|
|
3
3
|
setup(
|
4
4
|
name="tamar-file-hub-client",
|
5
|
-
version="0.0.
|
5
|
+
version="0.0.4",
|
6
6
|
description="A Python SDK for gRPC-based file management system",
|
7
7
|
long_description=open("README.md", encoding="utf-8").read(),
|
8
8
|
long_description_content_type="text/markdown",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/enums/__init__.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/enums/export_format.py
RENAMED
File without changes
|
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/enums/upload_mode.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/errors/__init__.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/errors/exceptions.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/async_client.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/gen/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/generate_grpc.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/interceptors.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/rpc/sync_client.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/schemas/__init__.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/schemas/context.py
RENAMED
File without changes
|
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/schemas/folder.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/schemas/taple.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/services/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/__init__.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/converter.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/download_helper.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/file_utils.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/idempotency.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/logging.py
RENAMED
File without changes
|
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/smart_retry.py
RENAMED
File without changes
|
{tamar_file_hub_client-0.0.3 → tamar_file_hub_client-0.0.4}/file_hub_client/utils/upload_helper.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|