Spaces:
Running
Running
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) | |
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, | |
) | |
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, | |
) | |