Spaces:
Paused
Paused
| 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) | |