Spaces:
Running
Running
from typing import Annotated | |
from fastapi.params import Query | |
class SearchPagingParams: | |
def __init__( | |
self, | |
count: Annotated[int, Query(ge=1, le=100, description="The number of results you want to get.")] = 10, | |
skip: Annotated[int, Query(ge=0, description="The number of results you want to skip.")] = 0 | |
): | |
self.count = count | |
self.skip = skip | |
class FilterParams: | |
def __init__( | |
self, | |
preferred_ratio: Annotated[ | |
float | None, Query(gt=0, description="The preferred aspect ratio of the image.")] = None, | |
ratio_tolerance: Annotated[ | |
float, Query(gt=0, lt=1, description="The tolerance of the aspect ratio.")] = 0.1, | |
min_width: Annotated[int | None, Query(geq=0, description="The minimum width of the image.")] = None, | |
min_height: Annotated[int | None, Query(geq=0, description="The minimum height of the image.")] = None, | |
starred: Annotated[bool | None, Query(description="Whether the image is starred.")] = None, | |
categories: Annotated[str | None, Query( | |
description="The categories whitelist of the image. Image with **any of** the given categories will " | |
"be included. The entries should be seperated by comma.", | |
examples=["stickers, cg"])] = None, | |
categories_negative: Annotated[ | |
str | None, Query( | |
description="The categories blacklist of the image. Image with **any of** the given categories " | |
"will be ignored. The entries should be seperated by comma.", | |
examples=["stickers, cg"])] = None, | |
): | |
self.preferred_ratio = preferred_ratio | |
self.ratio_tolerance = ratio_tolerance | |
self.min_width = min_width | |
self.min_height = min_height | |
self.starred = starred | |
self.categories = [t.strip() for t in categories.split(',') if t.strip()] if categories else None | |
self.categories_negative = [t.strip() for t in categories_negative.split(',') if | |
t.strip()] if categories_negative else None | |
self.ocr_text = None # For exact search | |
def min_ratio(self) -> float | None: | |
if self.preferred_ratio is None: | |
return None | |
return self.preferred_ratio * (1 - self.ratio_tolerance) | |
def max_ratio(self) -> float | None: | |
if self.preferred_ratio is None: | |
return None | |
return self.preferred_ratio * (1 + self.ratio_tolerance) | |