Habiticalib 0.1.0a2__py3-none-any.whl → 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- habiticalib/__init__.py +34 -2
- habiticalib/const.py +3 -1
- habiticalib/exceptions.py +13 -4
- habiticalib/helpers.py +25 -1
- habiticalib/lib.py +508 -25
- habiticalib/types.py +488 -66
- {habiticalib-0.1.0a2.dist-info → habiticalib-0.2.0.dist-info}/METADATA +3 -3
- habiticalib-0.2.0.dist-info/RECORD +11 -0
- {habiticalib-0.1.0a2.dist-info → habiticalib-0.2.0.dist-info}/WHEEL +1 -1
- habiticalib-0.1.0a2.dist-info/RECORD +0 -11
- {habiticalib-0.1.0a2.dist-info → habiticalib-0.2.0.dist-info}/licenses/LICENSE +0 -0
    
        habiticalib/types.py
    CHANGED
    
    | @@ -4,13 +4,13 @@ | |
| 4 4 | 
             
            from __future__ import annotations
         | 
| 5 5 |  | 
| 6 6 | 
             
            from dataclasses import dataclass, field
         | 
| 7 | 
            +
            import datetime as dt
         | 
| 7 8 | 
             
            from datetime import UTC, datetime
         | 
| 8 9 | 
             
            from enum import Enum, StrEnum
         | 
| 9 | 
            -
            from typing import Any
         | 
| 10 | 
            +
            from typing import Any, NotRequired, TypedDict
         | 
| 10 11 | 
             
            from uuid import UUID  # noqa: TCH003
         | 
| 11 12 |  | 
| 12 13 | 
             
            from mashumaro import field_options
         | 
| 13 | 
            -
            from mashumaro.config import BaseConfig
         | 
| 14 14 | 
             
            from mashumaro.mixins.orjson import DataClassORJSONMixin
         | 
| 15 15 |  | 
| 16 16 |  | 
| @@ -61,6 +61,7 @@ class LoginData: | |
| 61 61 | 
             
                apiToken: str
         | 
| 62 62 | 
             
                newUser: bool
         | 
| 63 63 | 
             
                username: str
         | 
| 64 | 
            +
                passwordResetCode: str | None = None
         | 
| 64 65 |  | 
| 65 66 |  | 
| 66 67 | 
             
            @dataclass(kw_only=True)
         | 
| @@ -74,27 +75,27 @@ class HabiticaLoginResponse(HabiticaResponse): | |
| 74 75 | 
             
            class LocalAuth:
         | 
| 75 76 | 
             
                """Auth local data."""
         | 
| 76 77 |  | 
| 77 | 
            -
                email: str
         | 
| 78 | 
            -
                username: str
         | 
| 79 | 
            -
                lowerCaseUsername: str
         | 
| 80 | 
            -
                has_password: bool
         | 
| 78 | 
            +
                email: str | None = None
         | 
| 79 | 
            +
                username: str | None = None
         | 
| 80 | 
            +
                lowerCaseUsername: str | None = None
         | 
| 81 | 
            +
                has_password: bool | None = None
         | 
| 81 82 |  | 
| 82 83 |  | 
| 83 84 | 
             
            @dataclass(kw_only=True)
         | 
| 84 85 | 
             
            class LocalTimestamps:
         | 
| 85 86 | 
             
                """Timestamps local data."""
         | 
| 86 87 |  | 
| 87 | 
            -
                created: datetime
         | 
| 88 | 
            -
                loggedin: datetime
         | 
| 89 | 
            -
                updated: datetime
         | 
| 88 | 
            +
                created: datetime | None = None
         | 
| 89 | 
            +
                loggedin: datetime | None = None
         | 
| 90 | 
            +
                updated: datetime | None = None
         | 
| 90 91 |  | 
| 91 92 |  | 
| 92 93 | 
             
            @dataclass(kw_only=True)
         | 
| 93 94 | 
             
            class AuthUser:
         | 
| 94 95 | 
             
                """User auth data."""
         | 
| 95 96 |  | 
| 96 | 
            -
                local: LocalAuth  | 
| 97 | 
            -
                timestamps: LocalTimestamps  | 
| 97 | 
            +
                local: LocalAuth = field(default_factory=LocalAuth)
         | 
| 98 | 
            +
                timestamps: LocalTimestamps = field(default_factory=LocalTimestamps)
         | 
| 98 99 | 
             
                facebook: dict | None = None
         | 
| 99 100 | 
             
                google: dict | None = None
         | 
| 100 101 | 
             
                apple: dict | None = None
         | 
| @@ -590,7 +591,7 @@ class PreferencesUser: | |
| 590 591 | 
             
                webhooks: dict = field(default_factory=dict)
         | 
| 591 592 | 
             
                improvementCategories: list[str] = field(default_factory=list)
         | 
| 592 593 | 
             
                timezoneOffsetAtLastCron: int | None = None
         | 
| 593 | 
            -
                language:  | 
| 594 | 
            +
                language: Language | None = None
         | 
| 594 595 |  | 
| 595 596 |  | 
| 596 597 | 
             
            @dataclass(kw_only=True)
         | 
| @@ -628,6 +629,15 @@ class TrainingStats: | |
| 628 629 | 
             
                Int: int | None = field(default=None, metadata=field_options(alias="int"))
         | 
| 629 630 |  | 
| 630 631 |  | 
| 632 | 
            +
            class HabiticaClass(StrEnum):
         | 
| 633 | 
            +
                """Habitica's player classes."""
         | 
| 634 | 
            +
             | 
| 635 | 
            +
                WARRIOR = "warrior"
         | 
| 636 | 
            +
                ROGUE = "rogue"
         | 
| 637 | 
            +
                MAGE = "wizard"
         | 
| 638 | 
            +
                HEALER = "healer"
         | 
| 639 | 
            +
             | 
| 640 | 
            +
             | 
| 631 641 | 
             
            @dataclass(kw_only=True)
         | 
| 632 642 | 
             
            class StatsUser:
         | 
| 633 643 | 
             
                """Stats user data."""
         | 
| @@ -639,7 +649,9 @@ class StatsUser: | |
| 639 649 | 
             
                exp: int | None = None
         | 
| 640 650 | 
             
                gp: float | None = None
         | 
| 641 651 | 
             
                lvl: int | None = None
         | 
| 642 | 
            -
                Class:  | 
| 652 | 
            +
                Class: HabiticaClass | None = field(
         | 
| 653 | 
            +
                    default=None, metadata=field_options(alias="class")
         | 
| 654 | 
            +
                )
         | 
| 643 655 | 
             
                points: int | None = None
         | 
| 644 656 | 
             
                Str: int | None = field(default=None, metadata=field_options(alias="str"))
         | 
| 645 657 | 
             
                con: int | None = None
         | 
| @@ -674,10 +686,10 @@ class InboxUser: | |
| 674 686 | 
             
            class TasksOrderUser:
         | 
| 675 687 | 
             
                """TasksOrder user data."""
         | 
| 676 688 |  | 
| 677 | 
            -
                habits: list[ | 
| 678 | 
            -
                dailys: list[ | 
| 679 | 
            -
                todos: list[ | 
| 680 | 
            -
                rewards: list[ | 
| 689 | 
            +
                habits: list[UUID] = field(default_factory=list)
         | 
| 690 | 
            +
                dailys: list[UUID] = field(default_factory=list)
         | 
| 691 | 
            +
                todos: list[UUID] = field(default_factory=list)
         | 
| 692 | 
            +
                rewards: list[UUID] = field(default_factory=list)
         | 
| 681 693 |  | 
| 682 694 |  | 
| 683 695 | 
             
            @dataclass(kw_only=True)
         | 
| @@ -717,7 +729,7 @@ class UserData: | |
| 717 729 |  | 
| 718 730 | 
             
                id: UUID | None = None
         | 
| 719 731 | 
             
                preferences: PreferencesUser = field(default_factory=PreferencesUser)
         | 
| 720 | 
            -
                flags: FlagsUser  | 
| 732 | 
            +
                flags: FlagsUser = field(default_factory=FlagsUser)
         | 
| 721 733 | 
             
                auth: AuthUser = field(default_factory=AuthUser)
         | 
| 722 734 | 
             
                achievements: AchievementsUser = field(default_factory=AchievementsUser)
         | 
| 723 735 | 
             
                backer: BackerUser = field(default_factory=BackerUser)
         | 
| @@ -746,8 +758,8 @@ class UserData: | |
| 746 758 | 
             
                balance: float | None = None
         | 
| 747 759 | 
             
                lastCron: datetime | None = None
         | 
| 748 760 | 
             
                needsCron: bool | None = None
         | 
| 749 | 
            -
                challenges: list[ | 
| 750 | 
            -
                guilds: list[ | 
| 761 | 
            +
                challenges: list[UUID] = field(default_factory=list)
         | 
| 762 | 
            +
                guilds: list[UUID] = field(default_factory=list)
         | 
| 751 763 | 
             
                newMessages: dict[str, bool] = field(default_factory=dict)
         | 
| 752 764 |  | 
| 753 765 |  | 
| @@ -758,6 +770,13 @@ class HabiticaUserResponse(HabiticaResponse): | |
| 758 770 | 
             
                data: UserData
         | 
| 759 771 |  | 
| 760 772 |  | 
| 773 | 
            +
            @dataclass(kw_only=True)
         | 
| 774 | 
            +
            class HabiticaGroupMembersResponse(HabiticaResponse):
         | 
| 775 | 
            +
                """Representation of a group members data response."""
         | 
| 776 | 
            +
             | 
| 777 | 
            +
                data: list[UserData]
         | 
| 778 | 
            +
             | 
| 779 | 
            +
             | 
| 761 780 | 
             
            @dataclass(kw_only=True)
         | 
| 762 781 | 
             
            class CompletedBy:
         | 
| 763 782 | 
             
                """Task group completedby data."""
         | 
| @@ -850,38 +869,31 @@ class Frequency(StrEnum): | |
| 850 869 | 
             
                YEARLY = "yearly"
         | 
| 851 870 |  | 
| 852 871 |  | 
| 853 | 
            -
             | 
| 854 | 
            -
            class Task(DataClassORJSONMixin):
         | 
| 872 | 
            +
            class Task(TypedDict("Task", {"type": NotRequired[TaskType]}), total=True):
         | 
| 855 873 | 
             
                """Representation of a task."""
         | 
| 856 874 |  | 
| 857 | 
            -
                 | 
| 858 | 
            -
             | 
| 859 | 
            -
             | 
| 860 | 
            -
             | 
| 861 | 
            -
             | 
| 862 | 
            -
                 | 
| 863 | 
            -
                 | 
| 864 | 
            -
                 | 
| 865 | 
            -
                 | 
| 866 | 
            -
                 | 
| 867 | 
            -
                 | 
| 868 | 
            -
                 | 
| 869 | 
            -
                 | 
| 870 | 
            -
                 | 
| 871 | 
            -
                 | 
| 872 | 
            -
                 | 
| 873 | 
            -
                 | 
| 874 | 
            -
                 | 
| 875 | 
            -
                 | 
| 876 | 
            -
                 | 
| 877 | 
            -
                 | 
| 878 | 
            -
                 | 
| 879 | 
            -
                everyX: int | None = None
         | 
| 880 | 
            -
                repeat: Repeat | None = None
         | 
| 881 | 
            -
                daysOfMonth: list[int] | None = None
         | 
| 882 | 
            -
                weeksOfMonth: list[int] | None = None
         | 
| 883 | 
            -
                completed: bool | None = None
         | 
| 884 | 
            -
                streak: int | None = None
         | 
| 875 | 
            +
                text: NotRequired[str]
         | 
| 876 | 
            +
                attribute: NotRequired[Attributes]
         | 
| 877 | 
            +
                alias: NotRequired[str]
         | 
| 878 | 
            +
                notes: NotRequired[str]
         | 
| 879 | 
            +
                tags: NotRequired[list[UUID]]
         | 
| 880 | 
            +
                collapseChecklist: NotRequired[bool]
         | 
| 881 | 
            +
                date: NotRequired[datetime | dt.date | None]
         | 
| 882 | 
            +
                priority: NotRequired[TaskPriority]
         | 
| 883 | 
            +
                reminders: NotRequired[list[Reminders]]
         | 
| 884 | 
            +
                checklist: NotRequired[list[str]]
         | 
| 885 | 
            +
                up: NotRequired[bool]
         | 
| 886 | 
            +
                down: NotRequired[bool]
         | 
| 887 | 
            +
                counterUp: NotRequired[int]
         | 
| 888 | 
            +
                counterDown: NotRequired[int]
         | 
| 889 | 
            +
                startDate: NotRequired[datetime | dt.date]
         | 
| 890 | 
            +
                frequency: NotRequired[Frequency]
         | 
| 891 | 
            +
                everyX: NotRequired[int]
         | 
| 892 | 
            +
                repeat: NotRequired[Repeat]
         | 
| 893 | 
            +
                daysOfMonth: NotRequired[list[int]]
         | 
| 894 | 
            +
                weeksOfMonth: NotRequired[list[int]]
         | 
| 895 | 
            +
                completed: NotRequired[bool]
         | 
| 896 | 
            +
                streak: NotRequired[int]
         | 
| 885 897 |  | 
| 886 898 |  | 
| 887 899 | 
             
            @dataclass(kw_only=True)
         | 
| @@ -979,7 +991,7 @@ class StatsUserStyles: | |
| 979 991 | 
             
                """Stats user styles data."""
         | 
| 980 992 |  | 
| 981 993 | 
             
                buffs: BuffsUserStyles = field(default_factory=BuffsUserStyles)
         | 
| 982 | 
            -
                Class:  | 
| 994 | 
            +
                Class: HabiticaClass = field(default=HabiticaClass.WARRIOR)
         | 
| 983 995 |  | 
| 984 996 |  | 
| 985 997 | 
             
            @dataclass(kw_only=True)
         | 
| @@ -1052,7 +1064,7 @@ class DropTmpScore: | |
| 1052 1064 | 
             
                canDrop: bool | None = None
         | 
| 1053 1065 | 
             
                value: int | None = None
         | 
| 1054 1066 | 
             
                key: str | None = None
         | 
| 1055 | 
            -
                 | 
| 1067 | 
            +
                Type: str | None = field(default=None, metadata=field_options(alias="type"))
         | 
| 1056 1068 | 
             
                dialog: str | None = None
         | 
| 1057 1069 |  | 
| 1058 1070 |  | 
| @@ -1064,12 +1076,21 @@ class TmpScore: | |
| 1064 1076 | 
             
                drop: DropTmpScore = field(default_factory=DropTmpScore)
         | 
| 1065 1077 |  | 
| 1066 1078 |  | 
| 1079 | 
            +
            @dataclass
         | 
| 1080 | 
            +
            class ScoreData(StatsUser):
         | 
| 1081 | 
            +
                """Scora data."""
         | 
| 1082 | 
            +
             | 
| 1083 | 
            +
                delta: float | None = None
         | 
| 1084 | 
            +
                tmp: TmpScore = field(
         | 
| 1085 | 
            +
                    default_factory=TmpScore, metadata=field_options(alias="_tmp")
         | 
| 1086 | 
            +
                )
         | 
| 1087 | 
            +
             | 
| 1088 | 
            +
             | 
| 1067 1089 | 
             
            @dataclass(kw_only=True)
         | 
| 1068 | 
            -
            class HabiticaScoreResponse( | 
| 1090 | 
            +
            class HabiticaScoreResponse(HabiticaResponse, DataClassORJSONMixin):
         | 
| 1069 1091 | 
             
                """Representation of a score response."""
         | 
| 1070 1092 |  | 
| 1071 | 
            -
                 | 
| 1072 | 
            -
                _tmp: TmpScore = field(default_factory=TmpScore)
         | 
| 1093 | 
            +
                data: ScoreData
         | 
| 1073 1094 |  | 
| 1074 1095 |  | 
| 1075 1096 | 
             
            @dataclass(kw_only=True)
         | 
| @@ -1086,6 +1107,25 @@ class HabiticaTagResponse(HabiticaResponse, DataClassORJSONMixin): | |
| 1086 1107 | 
             
                data: TagsUser
         | 
| 1087 1108 |  | 
| 1088 1109 |  | 
| 1110 | 
            +
            @dataclass(kw_only=True)
         | 
| 1111 | 
            +
            class QuestData:
         | 
| 1112 | 
            +
                """Quest data."""
         | 
| 1113 | 
            +
             | 
| 1114 | 
            +
                progress: ProgressQuest = field(default_factory=ProgressQuest)
         | 
| 1115 | 
            +
                active: bool = False
         | 
| 1116 | 
            +
                members: dict[str, bool | None]
         | 
| 1117 | 
            +
                extra: dict | None = None
         | 
| 1118 | 
            +
                key: str
         | 
| 1119 | 
            +
                leader: UUID | None = None
         | 
| 1120 | 
            +
             | 
| 1121 | 
            +
             | 
| 1122 | 
            +
            @dataclass(kw_only=True)
         | 
| 1123 | 
            +
            class HabiticaQuestResponse(HabiticaResponse, DataClassORJSONMixin):
         | 
| 1124 | 
            +
                """Representation of a quest response."""
         | 
| 1125 | 
            +
             | 
| 1126 | 
            +
                data: QuestData
         | 
| 1127 | 
            +
             | 
| 1128 | 
            +
             | 
| 1089 1129 | 
             
            @dataclass
         | 
| 1090 1130 | 
             
            class ChangeClassData:
         | 
| 1091 1131 | 
             
                """Change class data."""
         | 
| @@ -1107,7 +1147,14 @@ class HabiticaClassSystemResponse(HabiticaResponse, DataClassORJSONMixin): | |
| 1107 1147 | 
             
            class HabiticaTaskOrderResponse(HabiticaResponse):
         | 
| 1108 1148 | 
             
                """Representation of a reorder task response."""
         | 
| 1109 1149 |  | 
| 1110 | 
            -
                data:  | 
| 1150 | 
            +
                data: list[UUID] = field(default_factory=list)
         | 
| 1151 | 
            +
             | 
| 1152 | 
            +
             | 
| 1153 | 
            +
            @dataclass
         | 
| 1154 | 
            +
            class HabiticaSleepResponse(HabiticaResponse):
         | 
| 1155 | 
            +
                """Representation of a sleep response."""
         | 
| 1156 | 
            +
             | 
| 1157 | 
            +
                data: bool
         | 
| 1111 1158 |  | 
| 1112 1159 |  | 
| 1113 1160 | 
             
            class TaskFilter(StrEnum):
         | 
| @@ -1166,7 +1213,7 @@ class Skill(StrEnum): | |
| 1166 1213 | 
             
                VALOROUS_PRESENCE = "valorousPresence"
         | 
| 1167 1214 | 
             
                INTIMIDATING_GAZE = "intimidate"
         | 
| 1168 1215 | 
             
                # Rogue skills
         | 
| 1169 | 
            -
                PICKPOCKET = " | 
| 1216 | 
            +
                PICKPOCKET = "pickPocket"
         | 
| 1170 1217 | 
             
                BACKSTAB = "backStab"
         | 
| 1171 1218 | 
             
                TOOLS_OF_THE_TRADE = "toolsOfTrade"
         | 
| 1172 1219 | 
             
                STEALTH = "stealth"
         | 
| @@ -1187,15 +1234,6 @@ class Skill(StrEnum): | |
| 1187 1234 | 
             
                PETAL_FREE_POTION = "petalFreePotion"
         | 
| 1188 1235 |  | 
| 1189 1236 |  | 
| 1190 | 
            -
            class Class(StrEnum):
         | 
| 1191 | 
            -
                """Habitica's player classes."""
         | 
| 1192 | 
            -
             | 
| 1193 | 
            -
                WARRIOR = "warrior"
         | 
| 1194 | 
            -
                ROGUE = "rogue"
         | 
| 1195 | 
            -
                MAGE = "mage"
         | 
| 1196 | 
            -
                HEALER = "healer"
         | 
| 1197 | 
            -
             | 
| 1198 | 
            -
             | 
| 1199 1237 | 
             
            class Direction(StrEnum):
         | 
| 1200 1238 | 
             
                """Direction to score a task."""
         | 
| 1201 1239 |  | 
| @@ -1210,3 +1248,387 @@ class TaskPriority(Enum): | |
| 1210 1248 | 
             
                EASY = 1
         | 
| 1211 1249 | 
             
                MEDIUM = 1.5
         | 
| 1212 1250 | 
             
                HARD = 2
         | 
| 1251 | 
            +
             | 
| 1252 | 
            +
             | 
| 1253 | 
            +
            @dataclass
         | 
| 1254 | 
            +
            class AchievmentContent:
         | 
| 1255 | 
            +
                """Achievment content data."""
         | 
| 1256 | 
            +
             | 
| 1257 | 
            +
                icon: str
         | 
| 1258 | 
            +
                key: str
         | 
| 1259 | 
            +
                titleKey: str | None = None
         | 
| 1260 | 
            +
                textKey: str | None = None
         | 
| 1261 | 
            +
                singularTitleKey: str | None = None
         | 
| 1262 | 
            +
                singularTextKey: str | None = None
         | 
| 1263 | 
            +
                pluralTitleKey: str | None = None
         | 
| 1264 | 
            +
                pluralTextKey: str | None = None
         | 
| 1265 | 
            +
             | 
| 1266 | 
            +
             | 
| 1267 | 
            +
            @dataclass
         | 
| 1268 | 
            +
            class AnimalColorAchievementContent:
         | 
| 1269 | 
            +
                """animalColorAchievement content data."""
         | 
| 1270 | 
            +
             | 
| 1271 | 
            +
                color: str
         | 
| 1272 | 
            +
                petAchievement: str
         | 
| 1273 | 
            +
                petNotificationType: str
         | 
| 1274 | 
            +
                mountAchievement: str
         | 
| 1275 | 
            +
                mountNotificationType: str
         | 
| 1276 | 
            +
             | 
| 1277 | 
            +
             | 
| 1278 | 
            +
            @dataclass
         | 
| 1279 | 
            +
            class AnimalSetAchievementContent:
         | 
| 1280 | 
            +
                """animalSetAchievements content data."""
         | 
| 1281 | 
            +
             | 
| 1282 | 
            +
                Type: str = field(metadata=field_options(alias="type"))
         | 
| 1283 | 
            +
                species: list[str]
         | 
| 1284 | 
            +
                achievementKey: str
         | 
| 1285 | 
            +
                notificationType: str
         | 
| 1286 | 
            +
             | 
| 1287 | 
            +
             | 
| 1288 | 
            +
            @dataclass
         | 
| 1289 | 
            +
            class StableAchievementContent:
         | 
| 1290 | 
            +
                """stableAchievements content data."""
         | 
| 1291 | 
            +
             | 
| 1292 | 
            +
                masterAchievement: str
         | 
| 1293 | 
            +
                masterNotificationType: str
         | 
| 1294 | 
            +
             | 
| 1295 | 
            +
             | 
| 1296 | 
            +
            @dataclass
         | 
| 1297 | 
            +
            class PetSetCompleteAchievsContent:
         | 
| 1298 | 
            +
                """petSetCompleteAchievs content data."""
         | 
| 1299 | 
            +
             | 
| 1300 | 
            +
                color: str
         | 
| 1301 | 
            +
                petAchievement: str
         | 
| 1302 | 
            +
                petNotificationType: str
         | 
| 1303 | 
            +
             | 
| 1304 | 
            +
             | 
| 1305 | 
            +
            @dataclass
         | 
| 1306 | 
            +
            class QuestBossRage:
         | 
| 1307 | 
            +
                """QuestBossRage content data."""
         | 
| 1308 | 
            +
             | 
| 1309 | 
            +
                title: str
         | 
| 1310 | 
            +
                description: str
         | 
| 1311 | 
            +
                value: float
         | 
| 1312 | 
            +
                effect: str | None = None
         | 
| 1313 | 
            +
                healing: float | None = None
         | 
| 1314 | 
            +
             | 
| 1315 | 
            +
             | 
| 1316 | 
            +
            @dataclass
         | 
| 1317 | 
            +
            class QuestBoss:
         | 
| 1318 | 
            +
                """QuestBoss content data."""
         | 
| 1319 | 
            +
             | 
| 1320 | 
            +
                name: str
         | 
| 1321 | 
            +
                hp: float
         | 
| 1322 | 
            +
                Str: float = field(metadata=field_options(alias="str"))
         | 
| 1323 | 
            +
                Def: float = field(metadata=field_options(alias="def"))
         | 
| 1324 | 
            +
                rage: QuestBossRage | None = None
         | 
| 1325 | 
            +
             | 
| 1326 | 
            +
             | 
| 1327 | 
            +
            @dataclass
         | 
| 1328 | 
            +
            class QuestItem:
         | 
| 1329 | 
            +
                """QuestItem content data."""
         | 
| 1330 | 
            +
             | 
| 1331 | 
            +
                Type: str = field(metadata=field_options(alias="type"))
         | 
| 1332 | 
            +
                key: str
         | 
| 1333 | 
            +
                text: str
         | 
| 1334 | 
            +
             | 
| 1335 | 
            +
             | 
| 1336 | 
            +
            @dataclass
         | 
| 1337 | 
            +
            class QuestDrop:
         | 
| 1338 | 
            +
                """QuestDrop content data."""
         | 
| 1339 | 
            +
             | 
| 1340 | 
            +
                gp: float
         | 
| 1341 | 
            +
                exp: float
         | 
| 1342 | 
            +
                items: list[QuestItem] | None = None
         | 
| 1343 | 
            +
             | 
| 1344 | 
            +
             | 
| 1345 | 
            +
            @dataclass
         | 
| 1346 | 
            +
            class QuestCollect:
         | 
| 1347 | 
            +
                """QuestCollect content data."""
         | 
| 1348 | 
            +
             | 
| 1349 | 
            +
                text: str
         | 
| 1350 | 
            +
                count: int
         | 
| 1351 | 
            +
             | 
| 1352 | 
            +
             | 
| 1353 | 
            +
            @dataclass
         | 
| 1354 | 
            +
            class QuestUnlockCondition:
         | 
| 1355 | 
            +
                """QuestUnlockCondition content data."""
         | 
| 1356 | 
            +
             | 
| 1357 | 
            +
                condition: str
         | 
| 1358 | 
            +
                text: str
         | 
| 1359 | 
            +
             | 
| 1360 | 
            +
             | 
| 1361 | 
            +
            @dataclass
         | 
| 1362 | 
            +
            class QuestsContent:
         | 
| 1363 | 
            +
                """petSetCompleteAchievs content data."""
         | 
| 1364 | 
            +
             | 
| 1365 | 
            +
                text: str
         | 
| 1366 | 
            +
                notes: str
         | 
| 1367 | 
            +
             | 
| 1368 | 
            +
                completion: str
         | 
| 1369 | 
            +
                category: str
         | 
| 1370 | 
            +
             | 
| 1371 | 
            +
                drop: QuestDrop
         | 
| 1372 | 
            +
                key: str
         | 
| 1373 | 
            +
                goldValue: float | None = None
         | 
| 1374 | 
            +
                value: float | None = None
         | 
| 1375 | 
            +
                previous: str | None = None
         | 
| 1376 | 
            +
                prereqQuests: list[str] | None = None
         | 
| 1377 | 
            +
                collect: dict[str, QuestCollect] | None = None
         | 
| 1378 | 
            +
                unlockCondition: QuestUnlockCondition | None = None
         | 
| 1379 | 
            +
                boss: QuestBoss | None = None
         | 
| 1380 | 
            +
                group: str | None = None
         | 
| 1381 | 
            +
             | 
| 1382 | 
            +
             | 
| 1383 | 
            +
            @dataclass
         | 
| 1384 | 
            +
            class ItemListEntry:
         | 
| 1385 | 
            +
                """ItemListEntry content data."""
         | 
| 1386 | 
            +
             | 
| 1387 | 
            +
                localeKey: str
         | 
| 1388 | 
            +
                isEquipment: bool
         | 
| 1389 | 
            +
             | 
| 1390 | 
            +
             | 
| 1391 | 
            +
            @dataclass
         | 
| 1392 | 
            +
            class ItemListContent:
         | 
| 1393 | 
            +
                """ItemListContent content data."""
         | 
| 1394 | 
            +
             | 
| 1395 | 
            +
                weapon: ItemListEntry
         | 
| 1396 | 
            +
                armor: ItemListEntry
         | 
| 1397 | 
            +
                head: ItemListEntry
         | 
| 1398 | 
            +
                shield: ItemListEntry
         | 
| 1399 | 
            +
                back: ItemListEntry
         | 
| 1400 | 
            +
                body: ItemListEntry
         | 
| 1401 | 
            +
                headAccessory: ItemListEntry
         | 
| 1402 | 
            +
                eyewear: ItemListEntry
         | 
| 1403 | 
            +
                hatchingPotions: ItemListEntry
         | 
| 1404 | 
            +
                premiumHatchingPotions: ItemListEntry
         | 
| 1405 | 
            +
                eggs: ItemListEntry
         | 
| 1406 | 
            +
                quests: ItemListEntry
         | 
| 1407 | 
            +
                food: ItemListEntry
         | 
| 1408 | 
            +
                Saddle: ItemListEntry
         | 
| 1409 | 
            +
                bundles: ItemListEntry
         | 
| 1410 | 
            +
             | 
| 1411 | 
            +
             | 
| 1412 | 
            +
            @dataclass
         | 
| 1413 | 
            +
            class GearEntry:
         | 
| 1414 | 
            +
                """GearEntry content data."""
         | 
| 1415 | 
            +
             | 
| 1416 | 
            +
                text: str
         | 
| 1417 | 
            +
                notes: str
         | 
| 1418 | 
            +
                Int: int = field(metadata=field_options(alias="int"))
         | 
| 1419 | 
            +
                value: int
         | 
| 1420 | 
            +
                Type: str = field(metadata=field_options(alias="type"))
         | 
| 1421 | 
            +
                key: str
         | 
| 1422 | 
            +
                Set: str = field(metadata=field_options(alias="set"))
         | 
| 1423 | 
            +
                klass: str
         | 
| 1424 | 
            +
                index: str
         | 
| 1425 | 
            +
                Str: int = field(metadata=field_options(alias="str"))
         | 
| 1426 | 
            +
                per: int
         | 
| 1427 | 
            +
                con: int
         | 
| 1428 | 
            +
             | 
| 1429 | 
            +
             | 
| 1430 | 
            +
            @dataclass
         | 
| 1431 | 
            +
            class GearClass:
         | 
| 1432 | 
            +
                """GearClass content data."""
         | 
| 1433 | 
            +
             | 
| 1434 | 
            +
                base: dict[str, GearEntry] | None = None
         | 
| 1435 | 
            +
                warrior: dict[str, GearEntry] | None = None
         | 
| 1436 | 
            +
                wizard: dict[str, GearEntry] | None = None
         | 
| 1437 | 
            +
                rogue: dict[str, GearEntry] | None = None
         | 
| 1438 | 
            +
                special: dict[str, GearEntry] | None = None
         | 
| 1439 | 
            +
                armoire: dict[str, GearEntry] | None = None
         | 
| 1440 | 
            +
                mystery: dict[str, GearEntry] | None = None
         | 
| 1441 | 
            +
                healer: dict[str, GearEntry] | None = None
         | 
| 1442 | 
            +
             | 
| 1443 | 
            +
             | 
| 1444 | 
            +
            @dataclass
         | 
| 1445 | 
            +
            class GearType:
         | 
| 1446 | 
            +
                """GearType content data."""
         | 
| 1447 | 
            +
             | 
| 1448 | 
            +
                weapon: GearClass
         | 
| 1449 | 
            +
                armor: GearClass
         | 
| 1450 | 
            +
                head: GearClass
         | 
| 1451 | 
            +
                shield: GearClass
         | 
| 1452 | 
            +
                back: GearClass
         | 
| 1453 | 
            +
                body: GearClass
         | 
| 1454 | 
            +
                headAccessory: GearClass
         | 
| 1455 | 
            +
                eyewear: GearClass
         | 
| 1456 | 
            +
             | 
| 1457 | 
            +
             | 
| 1458 | 
            +
            @dataclass
         | 
| 1459 | 
            +
            class GearContent:
         | 
| 1460 | 
            +
                """GearContent content data."""
         | 
| 1461 | 
            +
             | 
| 1462 | 
            +
                tree: GearType
         | 
| 1463 | 
            +
                flat: dict[str, GearEntry]
         | 
| 1464 | 
            +
             | 
| 1465 | 
            +
             | 
| 1466 | 
            +
            @dataclass
         | 
| 1467 | 
            +
            class SpellEntry:
         | 
| 1468 | 
            +
                """SpellEntry content data."""
         | 
| 1469 | 
            +
             | 
| 1470 | 
            +
                text: str
         | 
| 1471 | 
            +
                mana: int
         | 
| 1472 | 
            +
                target: str
         | 
| 1473 | 
            +
                notes: str
         | 
| 1474 | 
            +
                key: str
         | 
| 1475 | 
            +
                previousPurchase: bool | None = None
         | 
| 1476 | 
            +
                limited: bool | None = None
         | 
| 1477 | 
            +
                lvl: int | None = None
         | 
| 1478 | 
            +
                value: int | None = None
         | 
| 1479 | 
            +
                immediateUse: bool | None = None
         | 
| 1480 | 
            +
                purchaseType: str | None = None
         | 
| 1481 | 
            +
                silent: bool | None = None
         | 
| 1482 | 
            +
             | 
| 1483 | 
            +
             | 
| 1484 | 
            +
            @dataclass
         | 
| 1485 | 
            +
            class SpellsClass:
         | 
| 1486 | 
            +
                """SpellsClass content data."""
         | 
| 1487 | 
            +
             | 
| 1488 | 
            +
                wizard: dict[str, SpellEntry]
         | 
| 1489 | 
            +
                warrior: dict[str, SpellEntry]
         | 
| 1490 | 
            +
                rogue: dict[str, SpellEntry]
         | 
| 1491 | 
            +
                healer: dict[str, SpellEntry]
         | 
| 1492 | 
            +
                special: dict[str, SpellEntry]
         | 
| 1493 | 
            +
             | 
| 1494 | 
            +
             | 
| 1495 | 
            +
            @dataclass
         | 
| 1496 | 
            +
            class CarTypes:
         | 
| 1497 | 
            +
                """CarTypes content data."""
         | 
| 1498 | 
            +
             | 
| 1499 | 
            +
                key: str
         | 
| 1500 | 
            +
                messageOptions: int
         | 
| 1501 | 
            +
                yearRound: bool = False
         | 
| 1502 | 
            +
             | 
| 1503 | 
            +
             | 
| 1504 | 
            +
            @dataclass
         | 
| 1505 | 
            +
            class SpecialItemEntry:
         | 
| 1506 | 
            +
                """Item content data."""
         | 
| 1507 | 
            +
             | 
| 1508 | 
            +
                key: str | None = None
         | 
| 1509 | 
            +
                text: str | None = None
         | 
| 1510 | 
            +
                notes: str | None = None
         | 
| 1511 | 
            +
                immediateUse: bool | None = None
         | 
| 1512 | 
            +
                limited: bool | None = None
         | 
| 1513 | 
            +
                mana: int | None = None
         | 
| 1514 | 
            +
                previousPurchase: bool | None = None
         | 
| 1515 | 
            +
                purchaseType: str | None = None
         | 
| 1516 | 
            +
                silent: bool | None = None
         | 
| 1517 | 
            +
                target: str | None = None
         | 
| 1518 | 
            +
                value: int | None = None
         | 
| 1519 | 
            +
             | 
| 1520 | 
            +
             | 
| 1521 | 
            +
            @dataclass
         | 
| 1522 | 
            +
            class EggEntry:
         | 
| 1523 | 
            +
                """Egg content data."""
         | 
| 1524 | 
            +
             | 
| 1525 | 
            +
                text: str | None = None
         | 
| 1526 | 
            +
                mountText: str | None = None
         | 
| 1527 | 
            +
                adjective: str | None = None
         | 
| 1528 | 
            +
                value: int | None = None
         | 
| 1529 | 
            +
                key: str | None = None
         | 
| 1530 | 
            +
                notes: str | None = None
         | 
| 1531 | 
            +
             | 
| 1532 | 
            +
             | 
| 1533 | 
            +
            @dataclass
         | 
| 1534 | 
            +
            class HatchingPotionEntry:
         | 
| 1535 | 
            +
                """Hatching potion content data."""
         | 
| 1536 | 
            +
             | 
| 1537 | 
            +
                value: int | None = None
         | 
| 1538 | 
            +
                key: str | None = None
         | 
| 1539 | 
            +
                text: str | None = None
         | 
| 1540 | 
            +
                notes: str | None = None
         | 
| 1541 | 
            +
                premium: bool | None = None
         | 
| 1542 | 
            +
                limited: bool | None = None
         | 
| 1543 | 
            +
                _addlNotes: str | None = None
         | 
| 1544 | 
            +
                wacky: bool | None = None
         | 
| 1545 | 
            +
             | 
| 1546 | 
            +
             | 
| 1547 | 
            +
            @dataclass
         | 
| 1548 | 
            +
            class PetEntry:
         | 
| 1549 | 
            +
                """Pet content data."""
         | 
| 1550 | 
            +
             | 
| 1551 | 
            +
                key: str | None = None
         | 
| 1552 | 
            +
                Type: str | None = field(default=None, metadata=field_options(alias="type"))
         | 
| 1553 | 
            +
                potion: str | None = None
         | 
| 1554 | 
            +
                egg: str | None = None
         | 
| 1555 | 
            +
                text: str | None = None
         | 
| 1556 | 
            +
             | 
| 1557 | 
            +
             | 
| 1558 | 
            +
            @dataclass
         | 
| 1559 | 
            +
            class InventoryItemEntry:
         | 
| 1560 | 
            +
                """Inventory item content data."""
         | 
| 1561 | 
            +
             | 
| 1562 | 
            +
                text: str | None = None
         | 
| 1563 | 
            +
                textA: str | None = None
         | 
| 1564 | 
            +
                textThe: str | None = None
         | 
| 1565 | 
            +
                target: str | None = None
         | 
| 1566 | 
            +
                value: int | None = None
         | 
| 1567 | 
            +
                key: str | None = None
         | 
| 1568 | 
            +
                notes: str | None = None
         | 
| 1569 | 
            +
                canDrop: bool | None = None
         | 
| 1570 | 
            +
             | 
| 1571 | 
            +
             | 
| 1572 | 
            +
            @dataclass
         | 
| 1573 | 
            +
            class ContentData:
         | 
| 1574 | 
            +
                """Content data."""
         | 
| 1575 | 
            +
             | 
| 1576 | 
            +
                achievements: dict[str, AchievmentContent]
         | 
| 1577 | 
            +
                questSeriesAchievements: dict[str, list[str]]
         | 
| 1578 | 
            +
                animalColorAchievements: list[AnimalColorAchievementContent]
         | 
| 1579 | 
            +
                animalSetAchievements: dict[str, AnimalSetAchievementContent]
         | 
| 1580 | 
            +
                stableAchievements: dict[str, StableAchievementContent]
         | 
| 1581 | 
            +
                petSetCompleteAchievs: list[PetSetCompleteAchievsContent]
         | 
| 1582 | 
            +
                quests: dict[str, QuestsContent]
         | 
| 1583 | 
            +
                questsByLevel: list[QuestsContent]
         | 
| 1584 | 
            +
                userCanOwnQuestCategories: list[str]
         | 
| 1585 | 
            +
                itemList: ItemListContent
         | 
| 1586 | 
            +
                gear: GearContent
         | 
| 1587 | 
            +
                spells: SpellsClass
         | 
| 1588 | 
            +
                audioThemes: list[str]
         | 
| 1589 | 
            +
                # mystery
         | 
| 1590 | 
            +
                officialPinnedItems: list
         | 
| 1591 | 
            +
                # bundles
         | 
| 1592 | 
            +
                # potion
         | 
| 1593 | 
            +
                # armoire
         | 
| 1594 | 
            +
                # events
         | 
| 1595 | 
            +
                # repeatingEvents
         | 
| 1596 | 
            +
                classes: list[str]
         | 
| 1597 | 
            +
                gearTypes: list[str]
         | 
| 1598 | 
            +
                cardTypes: dict[str, CarTypes]
         | 
| 1599 | 
            +
                special: dict[str, SpecialItemEntry]
         | 
| 1600 | 
            +
                dropEggs: dict[str, EggEntry]
         | 
| 1601 | 
            +
                questEggs: dict[str, EggEntry]
         | 
| 1602 | 
            +
                eggs: dict[str, EggEntry]
         | 
| 1603 | 
            +
                # timeTravelStable
         | 
| 1604 | 
            +
                dropHatchingPotions: dict[str, HatchingPotionEntry]
         | 
| 1605 | 
            +
                premiumHatchingPotions: dict[str, HatchingPotionEntry]
         | 
| 1606 | 
            +
                wackyHatchingPotions: dict[str, HatchingPotionEntry]
         | 
| 1607 | 
            +
                hatchingPotions: dict[str, HatchingPotionEntry]
         | 
| 1608 | 
            +
                pets: dict[str, bool]
         | 
| 1609 | 
            +
                premiumPets: dict[str, bool]
         | 
| 1610 | 
            +
                questPets: dict[str, bool]
         | 
| 1611 | 
            +
                specialPets: dict[str, str]
         | 
| 1612 | 
            +
                wackyPets: dict[str, bool]
         | 
| 1613 | 
            +
                petInfo: dict[str, PetEntry]
         | 
| 1614 | 
            +
                mounts: dict[str, bool]
         | 
| 1615 | 
            +
                premiumMounts: dict[str, bool]
         | 
| 1616 | 
            +
                questMounts: dict[str, bool]
         | 
| 1617 | 
            +
                specialMounts: dict[str, str]
         | 
| 1618 | 
            +
                mountInfo: dict[str, PetEntry]
         | 
| 1619 | 
            +
                food: dict[str, InventoryItemEntry]
         | 
| 1620 | 
            +
                # appearances
         | 
| 1621 | 
            +
                # backgrounds
         | 
| 1622 | 
            +
                # backgroundsFlat
         | 
| 1623 | 
            +
                # userDefaults
         | 
| 1624 | 
            +
                # tasksByCategory
         | 
| 1625 | 
            +
                # userDefaultsMobile
         | 
| 1626 | 
            +
                # faq
         | 
| 1627 | 
            +
                # loginIncentives
         | 
| 1628 | 
            +
             | 
| 1629 | 
            +
             | 
| 1630 | 
            +
            @dataclass
         | 
| 1631 | 
            +
            class HabiticaContentResponse(HabiticaResponse):
         | 
| 1632 | 
            +
                """Representation of a content response."""
         | 
| 1633 | 
            +
             | 
| 1634 | 
            +
                data: ContentData
         |