From 7593a404473c2a1312174df566d9d9994597c28b Mon Sep 17 00:00:00 2001 From: szmalcher88-ai Date: Wed, 17 Jun 2026 00:10:19 +0200 Subject: [PATCH] Add Monk vocation tibiapy.enums.Vocation had no member for the Monk vocation, so a Monk / Exalted Monk character on a Char Bazaar page made try_enum(Vocation, "Monk") return None and the Auction model rejected the whole page with InvalidContentError. - Vocation: add MONK / EXALTED_MONK (+ base property maps Exalted Monk -> Monk) - AuctionVocationFilter.MONK, HighscoresProfession.MONKS, SpellVocationFilter.MONK - regression test in tests_enums.py + CHANGELOG entry Fixes #47 Co-Authored-By: Claude Opus 4.8 (1M context) --- CHANGELOG.rst | 6 ++++++ tests/tests_enums.py | 11 +++++++++++ tibiapy/enums.py | 7 +++++++ 3 files changed, 24 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 444c1527..f6dc6c1a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -6,6 +6,12 @@ Changelog Due to this library relying on external content, older versions are not guaranteed to work. Try to always use the latest version. +.. v6.4.0 + +6.4.0 (unreleased) +================== +- Add Monk vocation (``Vocation.MONK`` / ``Vocation.EXALTED_MONK``) and the matching ``AuctionVocationFilter``, ``HighscoresProfession`` and ``SpellVocationFilter`` entries. + .. v6.3.0 6.3.0 (2024-04-05) diff --git a/tests/tests_enums.py b/tests/tests_enums.py index afc906e8..6394d763 100644 --- a/tests/tests_enums.py +++ b/tests/tests_enums.py @@ -1,6 +1,7 @@ import tibiapy.enums from tests.tests_tibiapy import TestCommons from tibiapy.models import AuctionFilters +from tibiapy.utils import try_enum class TestEnums(TestCommons): @@ -30,3 +31,13 @@ def test_vocation_filter_from_name(self): self.assertEqual(tibiapy.enums.HighscoresProfession.ALL, tibiapy.enums.HighscoresProfession.from_name("anything")) self.assertIsNone(tibiapy.enums.HighscoresProfession.from_name("anything", all_fallback=False)) + + def test_vocation_includes_monk(self): + """Monk vocations must resolve, otherwise bazaar pages containing a Monk fail to parse.""" + self.assertEqual(tibiapy.enums.Vocation.MONK, tibiapy.enums.Vocation("Monk")) + self.assertEqual(tibiapy.enums.Vocation.EXALTED_MONK, tibiapy.enums.Vocation("Exalted Monk")) + self.assertEqual(tibiapy.enums.Vocation.MONK, tibiapy.enums.Vocation.EXALTED_MONK.base) + # The bazaar parser resolves vocations through try_enum; "Monk" previously returned None. + self.assertEqual(tibiapy.enums.Vocation.MONK, try_enum(tibiapy.enums.Vocation, "Monk")) + self.assertEqual(tibiapy.enums.Vocation.EXALTED_MONK, + try_enum(tibiapy.enums.Vocation, "Exalted Monk")) diff --git a/tibiapy/enums.py b/tibiapy/enums.py index e30e3aef..3962ff5f 100644 --- a/tibiapy/enums.py +++ b/tibiapy/enums.py @@ -212,6 +212,7 @@ class AuctionVocationFilter(NumericEnum): KNIGHT = 3 PALADIN = 4 SORCERER = 5 + MONK = 6 class AvailableForumSection(StringEnum): @@ -322,6 +323,7 @@ class HighscoresProfession(NumericEnum): PALADINS = 3 SORCERERS = 4 DRUIDS = 5 + MONKS = 6 @classmethod def from_name(cls, name: str, all_fallback: bool = True) -> Optional[Self]: @@ -479,6 +481,7 @@ class SpellVocationFilter(StringEnum): KNIGHT = "Knight" PALADIN = "Paladin" SORCERER = "Sorcerer" + MONK = "Monk" class ThreadStatus(Flag): @@ -555,10 +558,12 @@ class Vocation(StringEnum): KNIGHT = "Knight" PALADIN = "Paladin" SORCERER = "Sorcerer" + MONK = "Monk" ELDER_DRUID = "Elder Druid" ELITE_KNIGHT = "Elite Knight" ROYAL_PALADIN = "Royal Paladin" MASTER_SORCERER = "Master Sorcerer" + EXALTED_MONK = "Exalted Monk" @property def base(self) -> Self: @@ -571,6 +576,8 @@ def base(self) -> Self: return self.PALADIN if self == self.ELITE_KNIGHT: return self.KNIGHT + if self == self.EXALTED_MONK: + return self.MONK return self