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,
    )