async def get_info(self, id: int) -> Optional[Info]: info_json = cast( Optional[HitomiInfoJSON], await self.collection.find_one({"id": id}, {"_id": 0}), ) if info_json: return Info.from_dict(info_json) return None
async def get_info_list(self, offset: int = 0, limit: int = 15) -> list[Info]: offset = offset * limit info_jsons = cast( list[HitomiInfoJSON], await self.collection.find({}, { "_id": 0 }).sort("id", -1).skip(offset).limit(limit).to_list(15), ) return [Info.from_dict(json_info) for json_info in info_jsons]
async def get_random_info(self) -> Info: info_json = cast( HitomiInfoJSON, await self.collection.aggregate([ { "$sample": { "size": 1 } }, { "$project": { "_id": 0 } }, ]).next(), ) return Info.from_dict(info_json)
async def search(self, querys: list[str], offset: int = 0, limit: int = 15) -> tuple[list[Info], int]: offset = offset * limit title, query = self.parse_query(querys) pipeline = self.make_pipeline(title, query, offset, limit) try: results: dict[str, Any] = await self.collection.aggregate(pipeline ).next() except StopAsyncIteration: results = {"list": [], "count": 0} return [ Info.from_dict(cast(HitomiInfoJSON, result)) for result in results["list"] ], results["count"]
async def startup_test(heliotrope: Heliotrope, loop: AbstractEventLoop): await heliotrope.ctx.orm.add_galleryinfo(Galleryinfo.from_dict(galleryinfo) ) await heliotrope.ctx.odm.add_info(Info.from_dict(info))