DengFengLai's picture
DF.
0a1b571
raw
history blame
3.3 kB
from typing import Annotated, Optional
from fastapi import Depends, File, Form
from loguru import logger
from hibiapi.api.sauce import (
DeduplicateType,
HostUrl,
NetRequest,
SauceConstants,
SauceEndpoint,
UploadFileIO,
)
from hibiapi.utils.routing import SlashRouter
if (not SauceConstants.API_KEY) or (not all(map(str.strip, SauceConstants.API_KEY))):
logger.warning("Sauce API key not set, SauceNAO endpoint will be unavailable")
SauceConstants.CONFIG["enabled"].set(False)
__mount__, __config__ = "sauce", SauceConstants.CONFIG
router = SlashRouter(tags=["SauceNAO"])
SauceAPIRoot = NetRequest()
async def request_client():
async with SauceAPIRoot as client:
yield SauceEndpoint(client)
@router.get("/")
async def sauce_url(
endpoint: Annotated[SauceEndpoint, Depends(request_client)],
url: HostUrl,
size: int = 30,
deduplicate: DeduplicateType = DeduplicateType.ALL,
database: Optional[int] = None,
enabled_mask: Optional[int] = None,
disabled_mask: Optional[int] = None,
):
"""
## Name: `sauce_url`
> 使用SauceNAO检索网络图片
---
### Required:
- ***HostUrl*** **`url`**
- Description: 图片URL
---
### Optional:
- ***int*** `size` = `30`
- Description: 搜索结果数目
- ***DeduplicateType*** `deduplicate` = `DeduplicateType.ALL`
- Description: 结果去重模式
- ***Optional[int]*** `database` = `None`
- Description: 检索的数据库ID, 999为全部检索
- ***Optional[int]*** `enabled_mask` = `None`
- Description: 启用的检索数据库
- ***Optional[int]*** `disabled_mask` = `None`
- Description: 禁用的检索数据库
"""
return await endpoint.search(
url=url,
size=size,
deduplicate=deduplicate,
database=database,
enabled_mask=enabled_mask,
disabled_mask=disabled_mask,
)
@router.post("/")
async def sauce_form(
endpoint: Annotated[SauceEndpoint, Depends(request_client)],
file: bytes = File(..., max_length=SauceConstants.IMAGE_MAXIMUM_SIZE),
size: int = Form(30),
deduplicate: Annotated[DeduplicateType, Form()] = DeduplicateType.ALL,
database: Optional[int] = Form(None),
enabled_mask: Optional[int] = Form(None),
disabled_mask: Optional[int] = Form(None),
):
"""
## Name: `sauce_form`
> 使用SauceNAO检索表单上传图片
---
### Required:
- ***bytes*** `file`
- Description: 上传的图片
---
### Optional:
- ***int*** `size` = `30`
- Description: 搜索结果数目
- ***DeduplicateType*** `deduplicate` = `DeduplicateType.ALL`
- Description: 结果去重模式
- ***Optional[int]*** `database` = `None`
- Description: 检索的数据库ID, 999为全部检索
- ***Optional[int]*** `enabled_mask` = `None`
- Description: 启用的检索数据库
- ***Optional[int]*** `disabled_mask` = `None`
- Description: 禁用的检索数据库
"""
return await endpoint.search(
file=UploadFileIO(file),
size=size,
deduplicate=deduplicate,
database=database,
disabled_mask=disabled_mask,
enabled_mask=enabled_mask,
)