Spaces:
Running
Running
File size: 3,298 Bytes
0a1b571 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
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,
)
|