fix storage

This commit is contained in:
jxxghp
2024-07-02 18:31:17 +08:00
parent 8530d54fcc
commit b37e50480a
6 changed files with 59 additions and 25 deletions
+30 -1
View File
@@ -1,4 +1,4 @@
from typing import List from typing import List, Optional
from app import schemas from app import schemas
from app.db.systemconfig_oper import SystemConfigOper from app.db.systemconfig_oper import SystemConfigOper
@@ -21,3 +21,32 @@ class StorageHelper:
if not storage_confs: if not storage_confs:
return [] return []
return [schemas.StorageConf(**s) for s in storage_confs] return [schemas.StorageConf(**s) for s in storage_confs]
def get_storage(self, storage: str) -> Optional[schemas.StorageConf]:
"""
获取指定存储配置
"""
storagies = self.get_storagies()
for s in storagies:
if s.type == storage:
return s
return None
def set_storage(self, storage: str, conf: dict):
"""
设置存储配置
"""
storagies = self.get_storagies()
if not storagies:
storagies = [
schemas.StorageConf(
type=storage,
config=conf
)
]
else:
for s in storagies:
if s.type == storage:
s.config = conf
break
self.systemconfig.set(SystemConfigKey.Storages, [s.dict() for s in storagies])
+17 -1
View File
@@ -3,15 +3,31 @@ from pathlib import Path
from typing import Optional, List from typing import Optional, List
from app import schemas from app import schemas
from app.helper.storage import StorageHelper
class StorageBase(metaclass=ABCMeta): class StorageBase(metaclass=ABCMeta):
""" """
存储基类 存储基类
""" """
schema = None
transtype = {} transtype = {}
def __init__(self):
self.storagehelper = StorageHelper()
def get_config(self) -> Optional[schemas.StorageConf]:
"""
获取配置
"""
return self.storagehelper.get_storage(self.schema.value)
def set_config(self, conf: dict):
"""
设置配置
"""
self.storagehelper.set_storage(self.schema.value, conf)
def support_transtype(self) -> dict: def support_transtype(self) -> dict:
""" """
支持的整理方式 支持的整理方式
+6 -8
View File
@@ -9,10 +9,9 @@ from requests import Response
from app import schemas from app import schemas
from app.core.config import settings from app.core.config import settings
from app.db.systemconfig_oper import SystemConfigOper
from app.log import logger from app.log import logger
from app.modules.filemanager.storage import StorageBase from app.modules.filemanager.storage import StorageBase
from app.schemas.types import SystemConfigKey, StorageSchema from app.schemas.types import StorageSchema
from app.utils.http import RequestUtils from app.utils.http import RequestUtils
from app.utils.string import StringUtils from app.utils.string import StringUtils
from app.utils.system import SystemUtils from app.utils.system import SystemUtils
@@ -25,6 +24,7 @@ class AliPan(StorageBase):
# 存储类型 # 存储类型
schema = StorageSchema.Alipan schema = StorageSchema.Alipan
# 支持的整理方式 # 支持的整理方式
transtype = { transtype = {
"move": "移动" "move": "移动"
@@ -65,9 +65,6 @@ class AliPan(StorageBase):
# 上传文件完成 # 上传文件完成
upload_file_complete_url = "https://api.aliyundrive.com/v2/file/complete" upload_file_complete_url = "https://api.aliyundrive.com/v2/file/complete"
def __init__(self):
self.systemconfig = SystemConfigOper()
def __handle_error(self, res: Response, apiname: str, action: bool = True): def __handle_error(self, res: Response, apiname: str, action: bool = True):
""" """
统一处理和打印错误信息 统一处理和打印错误信息
@@ -103,7 +100,8 @@ class AliPan(StorageBase):
""" """
获取阿里云盘认证参数并初始化参数格式 获取阿里云盘认证参数并初始化参数格式
""" """
return self.systemconfig.get(SystemConfigKey.UserAliyunParams) or {} conf = self.get_config()
return conf.config if conf else {}
def __update_params(self, params: dict): def __update_params(self, params: dict):
""" """
@@ -111,13 +109,13 @@ class AliPan(StorageBase):
""" """
current_params = self.__auth_params current_params = self.__auth_params
current_params.update(params) current_params.update(params)
self.systemconfig.set(SystemConfigKey.UserAliyunParams, current_params) self.set_config(current_params)
def __clear_params(self): def __clear_params(self):
""" """
清除阿里云盘认证参数 清除阿里云盘认证参数
""" """
self.systemconfig.delete(SystemConfigKey.UserAliyunParams) self.set_config({})
def generate_qrcode(self) -> Optional[Tuple[dict, str]]: def generate_qrcode(self) -> Optional[Tuple[dict, str]]:
""" """
+6 -9
View File
@@ -8,10 +8,9 @@ from py115 import Cloud
from py115.types import LoginTarget, QrcodeSession, QrcodeStatus, Credential from py115.types import LoginTarget, QrcodeSession, QrcodeStatus, Credential
from app import schemas from app import schemas
from app.db.systemconfig_oper import SystemConfigOper
from app.log import logger from app.log import logger
from app.modules.filemanager.storage import StorageBase from app.modules.filemanager.storage import StorageBase
from app.schemas.types import SystemConfigKey, StorageSchema from app.schemas.types import StorageSchema
from app.utils.http import RequestUtils from app.utils.http import RequestUtils
from app.utils.singleton import Singleton from app.utils.singleton import Singleton
@@ -23,6 +22,7 @@ class U115Pan(StorageBase, metaclass=Singleton):
# 存储类型 # 存储类型
schema = StorageSchema.U115 schema = StorageSchema.U115
# 支持的整理方式 # 支持的整理方式
transtype = { transtype = {
"move": "移动" "move": "移动"
@@ -31,9 +31,6 @@ class U115Pan(StorageBase, metaclass=Singleton):
cloud: Optional[Cloud] = None cloud: Optional[Cloud] = None
_session: QrcodeSession = None _session: QrcodeSession = None
def __init__(self):
self.systemconfig = SystemConfigOper()
def __init_cloud(self) -> bool: def __init_cloud(self) -> bool:
""" """
初始化Cloud 初始化Cloud
@@ -56,22 +53,22 @@ class U115Pan(StorageBase, metaclass=Singleton):
""" """
获取已保存的115认证参数 获取已保存的115认证参数
""" """
cookie_dict = self.systemconfig.get(SystemConfigKey.User115Params) cookie_dict = self.get_config()
if not cookie_dict: if not cookie_dict:
return None return None
return Credential.from_dict(cookie_dict) return Credential.from_dict(cookie_dict.dict())
def __save_credentail(self, credential: Credential): def __save_credentail(self, credential: Credential):
""" """
设置115认证参数 设置115认证参数
""" """
self.systemconfig.set(SystemConfigKey.User115Params, credential.to_dict()) self.set_config(credential.to_dict())
def __clear_credential(self): def __clear_credential(self):
""" """
清除115认证参数 清除115认证参数
""" """
self.systemconfig.delete(SystemConfigKey.User115Params) self.set_config({})
def generate_qrcode(self) -> Optional[Tuple[dict, str]]: def generate_qrcode(self) -> Optional[Tuple[dict, str]]:
""" """
-2
View File
@@ -53,8 +53,6 @@ class StorageConf(BaseModel):
""" """
存储配置 存储配置
""" """
# 名称
name: Optional[str] = None
# 类型 local/alipan/u115/rclone # 类型 local/alipan/u115/rclone
type: Optional[str] = None type: Optional[str] = None
# 配置 # 配置
-4
View File
@@ -68,10 +68,6 @@ class SystemConfigKey(Enum):
Directories = "Directories" Directories = "Directories"
# 存储配置 # 存储配置
Storages = "Storages" Storages = "Storages"
# 阿里云盘认证参数
UserAliyunParams = "UserAliyunParams"
# 115网盘认证参数
User115Params = "User115Params"
# 搜索站点范围 # 搜索站点范围
IndexerSites = "IndexerSites" IndexerSites = "IndexerSites"
# 订阅站点范围 # 订阅站点范围