diff --git a/api/configs/middleware/__init__.py b/api/configs/middleware/__init__.py index 0fe8a2da15..387feaa055 100644 --- a/api/configs/middleware/__init__.py +++ b/api/configs/middleware/__init__.py @@ -64,8 +64,9 @@ class StorageConfig(BaseSettings): "local", ] = Field( description="Type of storage to use." - " Options: 'opendal', '(deprecated) local', 's3', 'aliyun-oss', 'azure-blob', 'baidu-obs', 'clickzetta-volume', " - "'google-storage', 'huawei-obs', 'oci-storage', 'tencent-cos', 'volcengine-tos', 'supabase'. Default is 'opendal'.", + " Options: 'opendal', '(deprecated) local', 's3', 'aliyun-oss', 'azure-blob', 'baidu-obs', " + "'clickzetta-volume', 'google-storage', 'huawei-obs', 'oci-storage', 'tencent-cos', " + "'volcengine-tos', 'supabase'. Default is 'opendal'.", default="opendal", ) diff --git a/api/extensions/storage/clickzetta_volume/clickzetta_volume_storage.py b/api/extensions/storage/clickzetta_volume/clickzetta_volume_storage.py index b83ddce800..53e4a383bc 100644 --- a/api/extensions/storage/clickzetta_volume/clickzetta_volume_storage.py +++ b/api/extensions/storage/clickzetta_volume/clickzetta_volume_storage.py @@ -140,7 +140,7 @@ class ClickZettaVolumeStorage(BaseStorage): ) logger.debug("ClickZetta connection established") except Exception as e: - logger.error(f"Failed to connect to ClickZetta: {e}") + logger.exception("Failed to connect to ClickZetta") raise def _init_permission_manager(self): @@ -151,7 +151,7 @@ class ClickZettaVolumeStorage(BaseStorage): ) logger.debug("Permission manager initialized") except Exception as e: - logger.error(f"Failed to initialize permission manager: {e}") + logger.exception("Failed to initialize permission manager") raise def _get_volume_path(self, filename: str, dataset_id: Optional[str] = None) -> str: @@ -212,7 +212,7 @@ class ClickZettaVolumeStorage(BaseStorage): return cursor.fetchall() return None except Exception as e: - logger.error(f"SQL execution failed: {sql}, Error: {e}") + logger.exception(f"SQL execution failed: {sql}") raise def _ensure_table_volume_exists(self, dataset_id: str) -> None: @@ -521,5 +521,5 @@ class ClickZettaVolumeStorage(BaseStorage): return result except Exception as e: - logger.error(f"Error scanning path {path}: {e}") + logger.exception(f"Error scanning path {path}") return [] diff --git a/api/extensions/storage/clickzetta_volume/file_lifecycle.py b/api/extensions/storage/clickzetta_volume/file_lifecycle.py index 5fca1d56cf..ccb36ff9aa 100644 --- a/api/extensions/storage/clickzetta_volume/file_lifecycle.py +++ b/api/extensions/storage/clickzetta_volume/file_lifecycle.py @@ -146,7 +146,7 @@ class FileLifecycleManager: return file_metadata except Exception as e: - logger.error(f"Failed to save file with lifecycle: {e}") + logger.exception("Failed to save file with lifecycle") raise def get_file_metadata(self, filename: str) -> Optional[FileMetadata]: @@ -164,7 +164,7 @@ class FileLifecycleManager: return FileMetadata.from_dict(metadata_dict[filename]) return None except Exception as e: - logger.error(f"Failed to get file metadata for {filename}: {e}") + logger.exception(f"Failed to get file metadata for {filename}") return None def list_file_versions(self, filename: str) -> list[FileMetadata]: @@ -205,7 +205,7 @@ class FileLifecycleManager: return sorted(versions, key=lambda x: x.version, reverse=True) except Exception as e: - logger.error(f"Failed to list file versions for {filename}: {e}") + logger.exception(f"Failed to list file versions for {filename}") return [] def restore_version(self, filename: str, version: int) -> bool: @@ -238,7 +238,7 @@ class FileLifecycleManager: return self.save_with_lifecycle(filename, version_data, {"restored_from": str(version)}) except Exception as e: - logger.error(f"Failed to restore {filename} to version {version}: {e}") + logger.exception(f"Failed to restore {filename} to version {version}") return False def archive_file(self, filename: str) -> bool: @@ -271,7 +271,7 @@ class FileLifecycleManager: return True except Exception as e: - logger.error(f"Failed to archive file {filename}: {e}") + logger.exception(f"Failed to archive file {filename}") return False def soft_delete_file(self, filename: str) -> bool: @@ -315,7 +315,7 @@ class FileLifecycleManager: return True except Exception as e: - logger.error(f"Failed to soft delete file {filename}: {e}") + logger.exception(f"Failed to soft delete file {filename}") return False def cleanup_old_versions(self, max_versions: int = 5, max_age_days: int = 30) -> int: @@ -374,7 +374,7 @@ class FileLifecycleManager: return cleaned_count except Exception as e: - logger.error(f"Failed to cleanup old versions: {e}") + logger.exception("Failed to cleanup old versions") return 0 def get_storage_statistics(self) -> dict[str, any]: @@ -429,7 +429,7 @@ class FileLifecycleManager: return stats except Exception as e: - logger.error(f"Failed to get storage statistics: {e}") + logger.exception("Failed to get storage statistics") return {} def _create_version_backup(self, filename: str, metadata: dict): @@ -466,7 +466,7 @@ class FileLifecycleManager: self._storage.save(self._metadata_file, metadata_content.encode("utf-8")) logger.debug("Metadata saved successfully") except Exception as e: - logger.error(f"Failed to save metadata: {e}") + logger.exception("Failed to save metadata") raise def _calculate_checksum(self, data: bytes) -> str: @@ -508,6 +508,6 @@ class FileLifecycleManager: return self._permission_manager.validate_operation(mapped_operation, self._dataset_id) except Exception as e: - logger.error(f"Permission check failed for {filename} operation {operation}: {e}") + logger.exception(f"Permission check failed for {filename} operation {operation}") # 安全默认:权限检查失败时拒绝访问 return False diff --git a/api/extensions/storage/clickzetta_volume/volume_permissions.py b/api/extensions/storage/clickzetta_volume/volume_permissions.py index 99838bcdf6..859738a57c 100644 --- a/api/extensions/storage/clickzetta_volume/volume_permissions.py +++ b/api/extensions/storage/clickzetta_volume/volume_permissions.py @@ -24,7 +24,7 @@ class VolumePermission(Enum): class VolumePermissionManager: """Volume权限管理器""" - def __init__(self, connection_or_config, volume_type: str = None, volume_name: Optional[str] = None): + def __init__(self, connection_or_config, volume_type: str | None = None, volume_name: Optional[str] = None): """初始化权限管理器 Args: @@ -85,7 +85,7 @@ class VolumePermissionManager: return False except Exception as e: - logger.error(f"Permission check failed: {e}") + logger.exception("Permission check failed") return False def _check_user_volume_permission(self, operation: VolumePermission) -> bool: @@ -119,7 +119,7 @@ class VolumePermissionManager: return False except Exception as e: - logger.error(f"User Volume permission check failed: {e}") + logger.exception("User Volume permission check failed") # 对于User Volume,如果权限检查失败,可能是配置问题,给出更友好的错误提示 logger.info("User Volume permission check failed, but permission checking is disabled in this version") return False @@ -154,7 +154,7 @@ class VolumePermissionManager: return has_permission except Exception as e: - logger.error(f"Table volume permission check failed for {table_name}: {e}") + logger.exception(f"Table volume permission check failed for {table_name}") return False def _check_external_volume_permission(self, operation: VolumePermission) -> bool: @@ -208,7 +208,7 @@ class VolumePermissionManager: return has_permission except Exception as e: - logger.error(f"External volume permission check failed for {self._volume_name}: {e}") + logger.exception(f"External volume permission check failed for {self._volume_name}") logger.info("External Volume permission check failed, but permission checking is disabled in this version") return False @@ -284,7 +284,7 @@ class VolumePermissionManager: self._current_username = result[0] return self._current_username except Exception as e: - logger.error(f"Failed to get current username: {e}") + logger.exception("Failed to get current username") return "unknown" @@ -510,7 +510,7 @@ class VolumePermissionManager: return False except Exception as e: - logger.error(f"Permission inheritance check failed: {e}") + logger.exception("Permission inheritance check failed") return False def _contains_path_traversal(self, file_path: str) -> bool: @@ -567,11 +567,7 @@ class VolumePermissionManager: file_path_lower = file_path.lower() - for pattern in sensitive_patterns: - if pattern in file_path_lower: - return True - - return False + return any(pattern in file_path_lower for pattern in sensitive_patterns) def validate_operation(self, operation: str, dataset_id: Optional[str] = None) -> bool: """验证操作权限