コード例 #1
0
    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
コード例 #2
0
    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]
コード例 #3
0
    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)
コード例 #4
0
    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"]
コード例 #5
0
ファイル: conftest.py プロジェクト: Saebasol/Heliotrope
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))