parent
be92e1d754
commit
cf174de2b5
|
|
@ -1,7 +1,11 @@
|
||||||
from fastapi import Depends, HTTPException, Request, Query
|
import tempfile
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from fastapi import Depends, HTTPException, Request, Query, UploadFile, File
|
||||||
from typing import Literal, Tuple, Union
|
from typing import Literal, Tuple, Union
|
||||||
|
|
||||||
from tortoise.exceptions import DoesNotExist
|
from tortoise.exceptions import DoesNotExist
|
||||||
|
from tortoise.transactions import in_transaction
|
||||||
|
|
||||||
from app.models.base import User
|
from app.models.base import User
|
||||||
from app.models.fr import DefinitionFr
|
from app.models.fr import DefinitionFr
|
||||||
|
|
@ -10,6 +14,7 @@ from app.api.admin.router import admin_router
|
||||||
import app.models.fr as fr
|
import app.models.fr as fr
|
||||||
import app.models.jp as jp
|
import app.models.jp as jp
|
||||||
from app.schemas.admin_schemas import CreateWord, UpdateWordSet, UpdateWord, SearchWordRequest
|
from app.schemas.admin_schemas import CreateWord, UpdateWordSet, UpdateWord, SearchWordRequest
|
||||||
|
from scripts.update_fr import import_wordlist_fr, import_def_fr
|
||||||
|
|
||||||
|
|
||||||
@admin_router.get("/dict")
|
@admin_router.get("/dict")
|
||||||
|
|
@ -106,7 +111,7 @@ async def search_word(
|
||||||
async def adjust_dict(
|
async def adjust_dict(
|
||||||
request: Request,
|
request: Request,
|
||||||
updated_contents: UpdateWordSet,
|
updated_contents: UpdateWordSet,
|
||||||
admin_user: Tuple[User, dict] = Depends(get_current_user)
|
admin_user: Tuple[User, dict] = Depends(is_admin_user)
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
只关心更新的内容,不关心未改变的内容。
|
只关心更新的内容,不关心未改变的内容。
|
||||||
|
|
@ -167,11 +172,11 @@ async def adjust_dict(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@admin_router.post("/dict/add")
|
@admin_router.post("/dict/add", deprecated=False)
|
||||||
async def add_dict(
|
async def add_dict(
|
||||||
request: Request,
|
request: Request,
|
||||||
new_word: CreateWord,
|
new_word: CreateWord,
|
||||||
admin_user: Tuple[User, dict] = Depends(get_current_user)
|
admin_user: Tuple[User, dict] = Depends(is_admin_user),
|
||||||
) -> None:
|
) -> None:
|
||||||
if not admin_user[0].is_admin:
|
if not admin_user[0].is_admin:
|
||||||
raise HTTPException(status_code=403, detail="非管理员,无权限访问")
|
raise HTTPException(status_code=403, detail="非管理员,无权限访问")
|
||||||
|
|
@ -198,3 +203,31 @@ async def add_dict(
|
||||||
raise HTTPException(status_code=409, detail="释义已存在")
|
raise HTTPException(status_code=409, detail="释义已存在")
|
||||||
else:
|
else:
|
||||||
raise HTTPException(status_code=400, detail="暂不支持语言类型")
|
raise HTTPException(status_code=400, detail="暂不支持语言类型")
|
||||||
|
|
||||||
|
|
||||||
|
@admin_router.post("/dict/update_by_xlsx", deprecated=False)
|
||||||
|
async def update_by_xlsx(
|
||||||
|
file: UploadFile = File(...),
|
||||||
|
admin_user: Tuple[User, dict] = Depends(is_admin_user),
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
上传法语词典Excel文件并导入至数据库
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not file.filename.endswith((".xlsx", ".xls")):
|
||||||
|
raise HTTPException(status_code=400, detail="文件格式必须为Excel(.xlsx或.xls)")
|
||||||
|
|
||||||
|
try:
|
||||||
|
suffix = Path(file.filename).suffix
|
||||||
|
with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp:
|
||||||
|
content = await file.read()
|
||||||
|
tmp.write(content)
|
||||||
|
tmp_path = Path(tmp.name)
|
||||||
|
|
||||||
|
async with in_transaction():
|
||||||
|
await import_wordlist_fr(path=tmp_path)
|
||||||
|
await import_def_fr(path=tmp_path)
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=500, detail=f"导入失败:{str(e)}")
|
||||||
|
|
||||||
|
return {"message": "导入成功"}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ from pathlib import Path
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from tortoise import Tortoise
|
from tortoise import Tortoise
|
||||||
from tortoise.exceptions import MultipleObjectsReturned
|
from tortoise.exceptions import MultipleObjectsReturned
|
||||||
|
from fastapi import UploadFile
|
||||||
|
|
||||||
from app.models.fr import DefinitionFr, WordlistFr
|
from app.models.fr import DefinitionFr, WordlistFr
|
||||||
from settings import TORTOISE_ORM
|
from settings import TORTOISE_ORM
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue