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/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 | None = None
97
- timestamps: LocalTimestamps | None = None
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: str | None = None
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: str = field(default="warrior", metadata=field_options(alias="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[str] = field(default_factory=list)
678
- dailys: list[str] = field(default_factory=list)
679
- todos: list[str] = field(default_factory=list)
680
- rewards: list[str] = field(default_factory=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 | None = None
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[str] = field(default_factory=list)
750
- guilds: list[str] = field(default_factory=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
- @dataclass(kw_only=True)
854
- class Task(DataClassORJSONMixin):
872
+ class Task(TypedDict("Task", {"type": NotRequired[TaskType]}), total=True):
855
873
  """Representation of a task."""
856
874
 
857
- class Config(BaseConfig):
858
- """Config."""
859
-
860
- omit_none = True
861
-
862
- text: str | None = None
863
- attribute: Attributes | None = None
864
- alias: str | None = None
865
- notes: str | None = None
866
- tags: list[UUID] | None = None
867
- collapseChecklist: bool | None = None
868
- date: datetime | None = None
869
- priority: TaskPriority | None = None
870
- reminders: list[Reminders] | None = None
871
- checklist: list[str] | None = None
872
- Type: TaskType | None = field(default=None, metadata=field_options(alias="type"))
873
- up: bool | None = None
874
- down: bool | None = None
875
- counterUp: int | None = None
876
- counterDown: int | None = None
877
- startDate: datetime | None = None
878
- frequency: Frequency | None = None
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: str = field(default="warrior", metadata=field_options(alias="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
- type: str | None = None
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(StatsUser, DataClassORJSONMixin):
1090
+ class HabiticaScoreResponse(HabiticaResponse, DataClassORJSONMixin):
1069
1091
  """Representation of a score response."""
1070
1092
 
1071
- delta: float | None = None
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: TasksOrderUser = field(default_factory=TasksOrderUser)
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 = "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