feat: add version check func. add universal response func.

This commit is contained in:
EstrellaXD
2023-08-09 19:19:17 +08:00
parent ba7c9f6c69
commit e120a1c61a
8 changed files with 82 additions and 42 deletions

View File

@@ -1,6 +1,8 @@
from fastapi import APIRouter, Depends
from fastapi.responses import JSONResponse
from .response import u_response
from module.manager import TorrentManager
from module.models import Bangumi, BangumiUpdate
from module.security.api import get_current_user, UNAUTHORIZED
@@ -13,7 +15,8 @@ async def get_all_data(current_user=Depends(get_current_user)):
if not current_user:
raise UNAUTHORIZED
with TorrentManager() as manager:
return manager.bangumi.search_all()
resp = manager.bangumi.search_all()
return u_response(resp)
@router.get("/get/{bangumi_id}", response_model=Bangumi)
@@ -21,7 +24,8 @@ async def get_data(bangumi_id: str, current_user=Depends(get_current_user)):
if not current_user:
raise UNAUTHORIZED
with TorrentManager() as manager:
return manager.search_one(bangumi_id)
resp = manager.search_one(bangumi_id)
return u_response(resp)
@router.patch("/update/{bangumi_id}")
@@ -31,7 +35,8 @@ async def update_rule(
if not current_user:
raise UNAUTHORIZED
with TorrentManager() as manager:
return manager.update_rule(bangumi_id, data)
resp = manager.update_rule(bangumi_id, data)
return u_response(resp)
@router.delete("/delete/{bangumi_id}")
@@ -41,7 +46,8 @@ async def delete_rule(
if not current_user:
raise UNAUTHORIZED
with TorrentManager() as manager:
return manager.delete_rule(bangumi_id, file)
resp = manager.delete_rule(bangumi_id, file)
return u_response(resp)
@router.delete("/disable/{bangumi_id}")

View File

@@ -3,7 +3,7 @@ from fastapi.responses import JSONResponse
from module.models.response import ResponseModel
def universal_response(response_model: ResponseModel):
def u_response(response_model: ResponseModel):
return JSONResponse(
status_code=response_model.status_code,
content={

View File

@@ -18,9 +18,9 @@ class BangumiDatabase:
self.session.commit()
logger.debug(f"[Database] Insert {data.official_title} into database.")
def add_all(self, data: list[Bangumi]):
self.session.add_all(data)
logger.debug(f"[Database] Insert {len(data)} bangumi into database.")
def add_all(self, datas: list[Bangumi]):
self.session.add_all(datas)
logger.debug(f"[Database] Insert {len(datas)} bangumi into database.")
def update(self, data: Bangumi) -> bool:
db_data = self.session.get(Bangumi, data.id)

View File

@@ -1,6 +1,6 @@
import logging
from sqlmodel import Session, select, delete
from sqlmodel import Session, select, delete, and_
from module.models import RSSItem, RSSUpdate
@@ -49,7 +49,9 @@ class RSSDatabase:
return self.session.exec(select(RSSItem).where(RSSItem.enabled)).all()
def search_combine(self) -> list[RSSItem]:
return self.session.exec(select(RSSItem).where(RSSItem.combine)).all()
return self.session.exec(
select(RSSItem).where(and_(RSSItem.combine, RSSItem.enabled))
).all()
def delete(self, _id: int):
condition = delete(RSSItem).where(RSSItem.id == _id)

View File

@@ -4,7 +4,7 @@ from fastapi.responses import JSONResponse
from module.database import Database
from module.downloader import DownloadClient
from module.models import Bangumi, BangumiUpdate
from module.models import Bangumi, BangumiUpdate, ResponseModel
logger = logging.getLogger(__name__)
@@ -23,9 +23,19 @@ class TorrentManager(Database):
if hash_list:
client.delete_torrent(hash_list)
logger.info(f"Delete rule and torrents for {data.official_title}")
return f"Delete {data.official_title} torrents."
return ResponseModel(
status_code=200,
status=True,
msg_en=f"Delete rule and torrents for {data.official_title}",
msg_zh=f"删除 {data.official_title} 规则和种子",
)
else:
return f"Can't find {data.official_title} torrents."
return ResponseModel(
status_code=406,
status=False,
msg_en=f"Can't find torrents for {data.official_title}",
msg_zh=f"无法找到 {data.official_title} 的种子",
)
def delete_rule(self, _id: int | str, file: bool = False):
data = self.bangumi.search_id(int(_id))
@@ -37,20 +47,20 @@ class TorrentManager(Database):
self.bangumi.delete_one(int(_id))
if file:
torrent_message = self.delete_torrents(data, client)
return JSONResponse(
status_code=200,
content={
"msg": f"Delete {data.official_title} rule. {torrent_message}"
},
)
return torrent_message
logger.info(f"[Manager] Delete rule for {data.official_title}")
return JSONResponse(
return ResponseModel(
status_code=200,
content={"msg": f"Delete rule for {data.official_title}"},
status=True,
msg_en=f"Delete rule for {data.official_title}",
msg_zh=f"删除 {data.official_title} 规则",
)
else:
return JSONResponse(
status_code=406, content={"msg": f"Can't find id {_id}"}
return ResponseModel(
status_code=406,
status=False,
msg_en=f"Can't find id {_id}",
msg_zh=f"无法找到 id {_id}",
)
def disable_rule(self, _id: str | int, file: bool = False):
@@ -69,15 +79,18 @@ class TorrentManager(Database):
},
)
logger.info(f"[Manager] Disable rule for {data.official_title}")
return JSONResponse(
return ResponseModel(
status_code=200,
content={
"msg": f"Disable {data.official_title} rule.",
},
status=True,
msg_en=f"Disable rule for {data.official_title}",
msg_zh=f"禁用 {data.official_title} 规则",
)
else:
return JSONResponse(
status_code=406, content={"msg": f"Can't find id {_id}"}
return ResponseModel(
status_code=406,
status=False,
msg_en=f"Can't find id {_id}",
msg_zh=f"无法找到 id {_id}",
)
def enable_rule(self, _id: str | int):
@@ -86,22 +99,30 @@ class TorrentManager(Database):
data.deleted = False
self.bangumi.update(data)
logger.info(f"[Manager] Enable rule for {data.official_title}")
return JSONResponse(
return ResponseModel(
status_code=200,
content={
"msg": f"Enable {data.official_title} rule.",
},
status=True,
msg_en=f"Enable rule for {data.official_title}",
msg_zh=f"启用 {data.official_title} 规则",
)
else:
return JSONResponse(
status_code=406, content={"msg": f"Can't find bangumi id {_id}"}
return ResponseModel(
status_code=406,
status=False,
msg_en=f"Can't find id {_id}",
msg_zh=f"无法找到 id {_id}",
)
def update_rule(self, bangumi_id, data: BangumiUpdate):
old_data = self.bangumi.search_id(bangumi_id)
if not old_data:
logger.error(f"[Manager] Can't find data with {bangumi_id}")
return {"status": False, "msg": f"Can't find data with {bangumi_id}"}
return ResponseModel(
status_code=406,
status=False,
msg_en=f"Can't find data with {bangumi_id}",
msg_zh=f"无法找到 id {bangumi_id} 的数据",
)
else:
# Move torrent
match_list = self.__match_torrents_list(old_data.save_path)
@@ -110,11 +131,11 @@ class TorrentManager(Database):
if match_list:
client.move_torrent(match_list, path)
self.bangumi.update(data)
return JSONResponse(
return ResponseModel(
status_code=200,
content={
"msg": f"Set new path for {data.official_title}",
},
status=True,
msg_en=f"Update rule for {data.official_title}",
msg_zh=f"更新 {data.official_title} 规则",
)
def search_all_bangumi(self):

View File

@@ -2,4 +2,5 @@ from .bangumi import Bangumi, Episode, BangumiUpdate, Notification
from .config import Config
from .rss import RSSItem, RSSUpdate
from .torrent import EpisodeFile, SubtitleFile, Torrent, TorrentUpdate
from .user import UserLogin, User
from .user import UserLogin, User, UserUpdate
from .response import ResponseModel

View File

@@ -10,7 +10,6 @@ class Torrent(SQLModel, table=True):
name: str = Field("", alias="name")
url: str = Field("https://example.com/torrent", alias="url")
homepage: Optional[str] = Field(None, alias="homepage")
save_path: Optional[str] = Field(None, alias="saved_path")
downloaded: bool = Field(False, alias="downloaded")

View File

@@ -0,0 +1,11 @@
from module.conf import VERSION
def version_check() -> bool:
with open("config/version.txt", "rw") as f:
version = f.read()
if VERSION > version:
f.write(VERSION)
return False
else:
return True