Skip to content

Commit b7c2d62

Browse files
committed
Adjuted parser for upcoming Tibia.com changes
1 parent 96b9637 commit b7c2d62

10 files changed

+6122
-1
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
strategy:
1010
max-parallel: 4
1111
matrix:
12-
python-version: [3.6, 3.7, 3.8]
12+
python-version: [3.6, 3.7, 3.8, 3.9]
1313

1414
steps:
1515
- uses: actions/checkout@v1

tests/resources/website_changes/1_community_highscores.txt

Lines changed: 814 additions & 0 deletions
Large diffs are not rendered by default.

tests/resources/website_changes/2_community_characters_bobeek.txt

Lines changed: 844 additions & 0 deletions
Large diffs are not rendered by default.

tests/resources/website_changes/3_community_world_adra.txt

Lines changed: 814 additions & 0 deletions
Large diffs are not rendered by default.

tests/resources/website_changes/4_community_guilds_adra.txt

Lines changed: 961 additions & 0 deletions
Large diffs are not rendered by default.

tests/resources/website_changes/5_community_guilds_world_adra_bloste+solutions.txt

Lines changed: 912 additions & 0 deletions
Large diffs are not rendered by default.

tests/resources/website_changes/6_char_bazaar_current_auctions.txt

Lines changed: 826 additions & 0 deletions
Large diffs are not rendered by default.

tests/resources/website_changes/7_char_bazaar_current_auctions_auctionid_312647.txt

Lines changed: 833 additions & 0 deletions
Large diffs are not rendered by default.

tests/tests_new_changes.py

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
import unittest
2+
3+
from tests.tests_tibiapy import TestCommons
4+
from tibiapy import Highscores, Vocation, Category, VocationFilter, Character, AccountStatus, World, WorldLocation, \
5+
TransferType, PvpType, ListedGuild, Guild, CharacterBazaar, BazaarType, AuctionStatus, BidType, AuctionDetails
6+
7+
8+
class TestNewChanges(TestCommons, unittest.TestCase):
9+
def test_highscore_changes(self):
10+
content = self.load_resource("website_changes/1_community_highscores.txt")
11+
highscores = Highscores.from_content(content)
12+
13+
self.assertIsNone(highscores.world)
14+
self.assertEqual(Category.EXPERIENCE, highscores.category)
15+
self.assertEqual(VocationFilter.ALL, highscores.vocation)
16+
self.assertEqual(1000, highscores.results_count)
17+
self.assertEqual(1, highscores.page)
18+
self.assertEqual(20, highscores.total_pages)
19+
first_entry = highscores.entries[0]
20+
self.assertEqual("Goraca", first_entry.name)
21+
self.assertEqual(Vocation.MASTER_SORCERER, first_entry.vocation)
22+
self.assertEqual(1736, first_entry.level)
23+
self.assertEqual(86_900_348_387, first_entry.value)
24+
25+
def test_character_changes(self):
26+
content = self.load_resource("website_changes/2_community_characters_bobeek.txt")
27+
character = Character.from_content(content)
28+
29+
self.assertEqual("Bobeek", character.name)
30+
self.assertIsNotNone(character.guild_membership)
31+
self.assertEqual("Hill", character.guild_membership.name)
32+
self.assertEqual("King", character.guild_membership.rank)
33+
self.assertEqual("Goraca", character.married_to)
34+
self.assertEqual(character.guild_name, character.guild_membership.name)
35+
self.assertEqual(character.guild_rank, character.guild_membership.rank)
36+
self.assertEqual(AccountStatus.PREMIUM_ACCOUNT, character.account_status)
37+
self.assertEqual(1027, character.achievement_points)
38+
self.assertIsNone(character.deletion_date)
39+
self.assertIsNotNone(character.deaths)
40+
self.assertEqual(1, character.deaths.__len__())
41+
self.assertEqual(character.url, Character.get_url(character.name))
42+
self.assertEqual(2, len(character.other_characters))
43+
self.assertFalse(character.hidden)
44+
45+
def test_world_changes(self):
46+
content = self.load_resource("website_changes/3_community_world_adra.txt")
47+
world = World.from_content(content)
48+
49+
self.assertEqual("Adra", world.name)
50+
self.assertEqual("Offline", world.status)
51+
self.assertEqual(TransferType.BLOCKED, world.transfer_type)
52+
self.assertEqual(PvpType.OPEN_PVP, world.pvp_type)
53+
self.assertEqual(WorldLocation.EUROPE, world.location)
54+
55+
def test_world_guilds_changes(self):
56+
content = self.load_resource("website_changes/4_community_guilds_adra.txt")
57+
guilds = ListedGuild.list_from_content(content)
58+
59+
self.assertEqual(14, len(guilds))
60+
guild = guilds[0]
61+
62+
self.assertEqual("Bloste Solutions", guild.name)
63+
self.assertEqual("Adra", guild.world)
64+
self.assertTrue(guild.active)
65+
self.assertIsNone(guild.description)
66+
67+
def test_guild_changes(self):
68+
content = self.load_resource("website_changes/5_community_guilds_world_adra_bloste+solutions.txt")
69+
guild = Guild.from_content(content)
70+
71+
self.assertEqual("Bloste Solutions", guild.name)
72+
self.assertIsNone(guild.description)
73+
self.assertTrue(guild.open_applications)
74+
self.assertEqual(12, len(guild.members))
75+
self.assertEqual("Adra", guild.world)
76+
self.assertIsNone(guild.guildhall)
77+
leader = guild.members[0]
78+
self.assertEqual("Servantinho", leader.name)
79+
self.assertEqual("Leader", leader.rank)
80+
self.assertEqual(31, leader.level)
81+
self.assertEqual(Vocation.ELITE_KNIGHT, leader.vocation)
82+
self.assertIsNone(leader.title)
83+
84+
def test_bazaar_current_changes(self):
85+
content = self.load_resource("website_changes/6_char_bazaar_current_auctions.txt")
86+
char_bazaar = CharacterBazaar.from_content(content)
87+
88+
self.assertEqual(BazaarType.CURRENT, char_bazaar.type)
89+
self.assertEqual(141, char_bazaar.total_pages)
90+
self.assertEqual(3515, char_bazaar.results_count)
91+
self.assertEqual(1, char_bazaar.page)
92+
first_entry = char_bazaar.entries[0]
93+
self.assertEqual(306828, first_entry.auction_id)
94+
self.assertEqual("Perfect Biruley", first_entry.name)
95+
self.assertEqual(569, first_entry.level)
96+
self.assertEqual("Olera", first_entry.world)
97+
self.assertEqual(Vocation.KNIGHT, first_entry.vocation)
98+
self.assertEqual(AuctionStatus.IN_PROGRESS, first_entry.status)
99+
self.assertEqual(129, first_entry.outfit.outfit_id)
100+
self.assertEqual(14500, first_entry.bid)
101+
self.assertEqual(BidType.MINIMUM, first_entry.bid_type)
102+
103+
def test_bazaar_auction_changes(self):
104+
content = self.load_resource("website_changes/7_char_bazaar_current_auctions_auctionid_312647.txt")
105+
auction = AuctionDetails.from_content(content)
106+
107+
self.assertEqual("Lethal Nightmarez", auction.name)
108+
self.assertEqual(30, auction.level)
109+
self.assertEqual("Serdebra", auction.world)
110+
self.assertEqual(Vocation.KNIGHT, auction.vocation)
111+
self.assertEqual(AuctionStatus.IN_PROGRESS, auction.status)
112+
self.assertEqual(134, auction.outfit.outfit_id)
113+
self.assertEqual(57, auction.bid)
114+
self.assertEqual(BidType.MINIMUM, auction.bid_type)
115+

tibiapy/highscores.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ def _parse_entries_table(self, table):
227227
cols_raw = row.find_all('td')
228228
if "There is currently no data" in cols_raw[0].text:
229229
break
230+
if len(cols_raw) <= 2:
231+
break
230232
self._parse_entry(cols_raw)
231233

232234
def _parse_filters_table(self, table):

0 commit comments

Comments
 (0)