From aa3a00af2bfec4db4403eed256281498863cdf24 Mon Sep 17 00:00:00 2001 From: seriaati Date: Sat, 21 Sep 2024 07:31:37 +0800 Subject: [PATCH 1/5] Set cache's default value to False in chronicle components --- genshin/client/components/chronicle/genshin.py | 8 ++++---- genshin/client/components/chronicle/honkai.py | 2 +- genshin/client/components/chronicle/starrail.py | 6 +++--- genshin/client/components/chronicle/zzz.py | 12 ++++++------ 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/genshin/client/components/chronicle/genshin.py b/genshin/client/components/chronicle/genshin.py index 514052fb..a7e41556 100644 --- a/genshin/client/components/chronicle/genshin.py +++ b/genshin/client/components/chronicle/genshin.py @@ -24,7 +24,7 @@ async def _request_genshin_record( method: str = "GET", lang: typing.Optional[str] = None, payload: typing.Optional[typing.Mapping[str, typing.Any]] = None, - cache: bool = True, + cache: bool = False, ) -> typing.Mapping[str, typing.Any]: """Get an arbitrary honkai object.""" payload = dict(payload or {}) @@ -173,7 +173,7 @@ async def get_genshin_notes( ) -> models.Notes: """Get genshin real-time notes.""" try: - data = await self._request_genshin_record("dailyNote", uid, lang=lang, cache=False) + data = await self._request_genshin_record("dailyNote", uid, lang=lang) except errors.DataNotPublic as e: # error raised only when real-time notes are not enabled if uid and (await self._get_uid(types.Game.GENSHIN)) != uid: @@ -182,7 +182,7 @@ async def get_genshin_notes( raise errors.GenshinException(e.response, "Real-time notes are not enabled.") from e await self.update_settings(3, True, game=types.Game.GENSHIN) - data = await self._request_genshin_record("dailyNote", uid, lang=lang, cache=False) + data = await self._request_genshin_record("dailyNote", uid, lang=lang) return models.Notes(**data) @@ -215,7 +215,7 @@ async def _get_genshin_tcg_page( limit=limit, need_stats="false", ) - data = await self._request_genshin_record("gcg/cardList", uid, lang=lang, payload=params, cache=False) + data = await self._request_genshin_record("gcg/cardList", uid, lang=lang, payload=params) return [ (models.TCGCharacterCard(**i) if i["card_type"] == models.TCGCardType.CHARACTER else models.TCGCard(**i)) for i in data["card_list"] diff --git a/genshin/client/components/chronicle/honkai.py b/genshin/client/components/chronicle/honkai.py index 47c8c25d..91e1b708 100644 --- a/genshin/client/components/chronicle/honkai.py +++ b/genshin/client/components/chronicle/honkai.py @@ -20,7 +20,7 @@ async def _request_honkai_record( uid: typing.Optional[int] = None, *, lang: typing.Optional[str] = None, - cache: bool = True, + cache: bool = False, ) -> typing.Mapping[str, typing.Any]: """Get an arbitrary honkai object.""" uid = uid or await self._get_uid(types.Game.HONKAI) diff --git a/genshin/client/components/chronicle/starrail.py b/genshin/client/components/chronicle/starrail.py index 576ce05f..e4568206 100644 --- a/genshin/client/components/chronicle/starrail.py +++ b/genshin/client/components/chronicle/starrail.py @@ -22,7 +22,7 @@ async def _request_starrail_record( method: str = "GET", lang: typing.Optional[str] = None, payload: typing.Optional[typing.Mapping[str, typing.Any]] = None, - cache: bool = True, + cache: bool = False, ) -> typing.Mapping[str, typing.Any]: """Get an arbitrary starrail object.""" payload = dict(payload or {}) @@ -66,7 +66,7 @@ async def get_starrail_notes( ) -> models.StarRailNote: """Get starrail real-time notes.""" try: - data = await self._request_starrail_record("note", uid, lang=lang, cache=False) + data = await self._request_starrail_record("note", uid, lang=lang) except errors.DataNotPublic as e: # error raised only when real-time notes are not enabled if uid and (await self._get_uid(types.Game.STARRAIL)) != uid: @@ -75,7 +75,7 @@ async def get_starrail_notes( raise errors.GenshinException(e.response, "Real-time notes are not enabled.") from e await self.update_settings(3, True, game=types.Game.STARRAIL) - data = await self._request_starrail_record("note", uid, lang=lang, cache=False) + data = await self._request_starrail_record("note", uid, lang=lang) return models.StarRailNote(**data) diff --git a/genshin/client/components/chronicle/zzz.py b/genshin/client/components/chronicle/zzz.py index 9c15687c..bf1d7c4d 100644 --- a/genshin/client/components/chronicle/zzz.py +++ b/genshin/client/components/chronicle/zzz.py @@ -21,7 +21,7 @@ async def _request_zzz_record( method: str = "GET", lang: typing.Optional[str] = None, payload: typing.Optional[typing.Mapping[str, typing.Any]] = None, - cache: bool = True, + cache: bool = False, ) -> typing.Mapping[str, typing.Any]: """Get an arbitrary ZZZ object.""" payload = dict(payload or {}) @@ -65,7 +65,7 @@ async def get_zzz_notes( ) -> models.ZZZNotes: """Get ZZZ sticky notes (real-time notes).""" try: - data = await self._request_zzz_record("note", uid, lang=lang, cache=False) + data = await self._request_zzz_record("note", uid, lang=lang) except errors.DataNotPublic as e: # error raised only when real-time notes are not enabled if uid and (await self._get_uid(types.Game.ZZZ)) != uid: @@ -74,7 +74,7 @@ async def get_zzz_notes( raise errors.GenshinException(e.response, "Real-time notes are not enabled.") from e await self.update_settings(3, True, game=types.Game.ZZZ) - data = await self._request_zzz_record("note", uid, lang=lang, cache=False) + data = await self._request_zzz_record("note", uid, lang=lang) return models.ZZZNotes(**data) @@ -85,21 +85,21 @@ async def get_zzz_user( lang: typing.Optional[str] = None, ) -> models.ZZZUserStats: """Get ZZZ user stats.""" - data = await self._request_zzz_record("index", uid, lang=lang, cache=False) + data = await self._request_zzz_record("index", uid, lang=lang) return models.ZZZUserStats(**data) async def get_zzz_agents( self, uid: typing.Optional[int] = None, *, lang: typing.Optional[str] = None ) -> typing.Sequence[models.ZZZPartialAgent]: """Get all owned ZZZ characters (only brief info).""" - data = await self._request_zzz_record("avatar/basic", uid, lang=lang, cache=False) + data = await self._request_zzz_record("avatar/basic", uid, lang=lang) return [models.ZZZPartialAgent(**item) for item in data["avatar_list"]] async def get_bangboos( self, uid: typing.Optional[int] = None, *, lang: typing.Optional[str] = None ) -> typing.Sequence[models.ZZZBaseBangboo]: """Get all owned ZZZ bangboos.""" - data = await self._request_zzz_record("buddy/info", uid, lang=lang, cache=False) + data = await self._request_zzz_record("buddy/info", uid, lang=lang) return [models.ZZZBaseBangboo(**item) for item in data["list"]] @typing.overload From a4e7c96c8a98e3a5f7b9e384a014e4853053d75b Mon Sep 17 00:00:00 2001 From: seriaati Date: Sat, 21 Sep 2024 20:59:55 +0800 Subject: [PATCH 2/5] Fix validation error on ShiyuDefenseMonster --- genshin/models/zzz/chronicle/challenge.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/genshin/models/zzz/chronicle/challenge.py b/genshin/models/zzz/chronicle/challenge.py index 700ff379..6bf34ed5 100644 --- a/genshin/models/zzz/chronicle/challenge.py +++ b/genshin/models/zzz/chronicle/challenge.py @@ -63,9 +63,16 @@ class ShiyuDefenseMonster(APIModel): id: int name: str - weakness: ZZZElementType = Aliased("weak_element_type") + weakness: typing.Union[ZZZElementType, int] = Aliased("weak_element_type") level: int + @pydantic.validator("weakness", pre=True) + def __convert_weakness(cls, v: int) -> typing.Union[ZZZElementType, int]: + try: + return ZZZElementType(v) + except ValueError: + return v + class ShiyuDefenseNode(APIModel): """Shiyu Defense node model.""" From aa950340c622b4c74ec3e8a17cc9b7aaeec9d926 Mon Sep 17 00:00:00 2001 From: seriaati Date: Sat, 21 Sep 2024 22:26:32 +0800 Subject: [PATCH 3/5] Change field names for ShiyuDefenseBuff --- genshin/models/zzz/chronicle/challenge.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/genshin/models/zzz/chronicle/challenge.py b/genshin/models/zzz/chronicle/challenge.py index 6bf34ed5..e60a503c 100644 --- a/genshin/models/zzz/chronicle/challenge.py +++ b/genshin/models/zzz/chronicle/challenge.py @@ -54,8 +54,8 @@ def icon(self) -> str: class ShiyuDefenseBuff(APIModel): """Shiyu Defense buff model.""" - title: str - text: str + name: str = Aliased("title") + description: str = Aliased("text") class ShiyuDefenseMonster(APIModel): From 8d299c91fd4071e3d973576c394c3bebc3741f93 Mon Sep 17 00:00:00 2001 From: seriaati Date: Sat, 21 Sep 2024 22:42:54 +0800 Subject: [PATCH 4/5] Set begin_time and end_time as non optional for ShiyuDefense --- genshin/models/zzz/chronicle/challenge.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/genshin/models/zzz/chronicle/challenge.py b/genshin/models/zzz/chronicle/challenge.py index e60a503c..8e5a8455 100644 --- a/genshin/models/zzz/chronicle/challenge.py +++ b/genshin/models/zzz/chronicle/challenge.py @@ -121,8 +121,8 @@ class ShiyuDefense(APIModel): """ZZZ Shiyu Defense model.""" schedule_id: int - begin_time: typing.Optional[datetime.datetime] = Aliased("hadal_begin_time") - end_time: typing.Optional[datetime.datetime] = Aliased("hadal_end_time") + begin_time: datetime.datetime = Aliased("hadal_begin_time") + end_time: datetime.datetime = Aliased("hadal_end_time") has_data: bool ratings: typing.Mapping[typing.Literal["S", "A", "B"], int] = Aliased("rating_list") floors: typing.List[ShiyuDefenseFloor] = Aliased("all_floor_detail") From cfa263c2f7b492c1be12a1621c7ad2c4a8dafd78 Mon Sep 17 00:00:00 2001 From: seriaati Date: Sat, 21 Sep 2024 23:07:06 +0800 Subject: [PATCH 5/5] Revert: Set begin_time and end_time as non optional for ShiyuDefense --- genshin/models/zzz/chronicle/challenge.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/genshin/models/zzz/chronicle/challenge.py b/genshin/models/zzz/chronicle/challenge.py index 8e5a8455..e60a503c 100644 --- a/genshin/models/zzz/chronicle/challenge.py +++ b/genshin/models/zzz/chronicle/challenge.py @@ -121,8 +121,8 @@ class ShiyuDefense(APIModel): """ZZZ Shiyu Defense model.""" schedule_id: int - begin_time: datetime.datetime = Aliased("hadal_begin_time") - end_time: datetime.datetime = Aliased("hadal_end_time") + begin_time: typing.Optional[datetime.datetime] = Aliased("hadal_begin_time") + end_time: typing.Optional[datetime.datetime] = Aliased("hadal_end_time") has_data: bool ratings: typing.Mapping[typing.Literal["S", "A", "B"], int] = Aliased("rating_list") floors: typing.List[ShiyuDefenseFloor] = Aliased("all_floor_detail")