def test_character_bazaar_from_content_current_all_filters_selected(self): bazaar = CharacterBazaar.from_content( self.load_resource(FILE_BAZAAR_CURRENT_ALL_FILTERS)) self.assertIsNotNone(bazaar) self.assertEqual(1, bazaar.page) self.assertEqual(4, bazaar.total_pages) self.assertEqual(92, bazaar.results_count) self.assertEqual(25, len(bazaar.entries)) self.assertIsNotNone(bazaar.url) auction = bazaar.entries[0] self.assertEqual(82526, auction.auction_id) self.assertEqual(57000, auction.bid) self.assertEqual(BidType.MINIMUM, auction.bid_type) self.assertIsNotNone(auction.character_url) self.assertIsNotNone(bazaar.filters) self.assertEqual('Antica', bazaar.filters.world) self.assertEqual(PvpTypeFilter.OPEN_PVP, bazaar.filters.pvp_type) self.assertEqual(BattlEyeTypeFilter.PROTECTED, bazaar.filters.battleye) self.assertEqual(VocationAuctionFilter.KNIGHT, bazaar.filters.vocation) self.assertEqual(1, bazaar.filters.min_level) self.assertEqual(1000, bazaar.filters.max_level) self.assertEqual(SkillFilter.MAGIC_LEVEL, bazaar.filters.skill) self.assertEqual(1, bazaar.filters.min_skill_level) self.assertEqual(50, bazaar.filters.max_skill_level) self.assertEqual(AuctionOrderBy.SHIELDING, bazaar.filters.order_by) self.assertEqual(AuctionOrder.HIGHEST_LATEST, bazaar.filters.order) self.assertEqual(AuctionSearchType.ITEM_WILDCARD, bazaar.filters.search_type)
def test_character_bazaar_from_content_history(self): bazaar = CharacterBazaar.from_content( self.load_resource(FILE_BAZAAR_HISTORY)) self.assertIsNotNone(bazaar) self.assertEqual(1, bazaar.page) self.assertEqual(1449, bazaar.total_pages) self.assertEqual(36219, bazaar.results_count) self.assertEqual(25, len(bazaar.entries)) self.assertIsNotNone(bazaar.url) auction = bazaar.entries[0] self.assertEqual(325058, auction.auction_id) self.assertEqual(900, auction.bid) self.assertEqual("Rcrazy Illuminati", auction.name) self.assertEqual(255, auction.level) self.assertEqual("Celebra", auction.world) self.assertEqual(Vocation.MASTER_SORCERER, auction.vocation) self.assertEqual(Sex.MALE, auction.sex) self.assertEqual(BidType.WINNING, auction.bid_type) self.assertIsNotNone(auction.character_url) self.assertEqual(1, len(auction.displayed_items)) self.assertEqual(143, auction.outfit.outfit_id) first_item = auction.displayed_items[0] self.assertEqual(1, first_item.count) self.assertEqual(25700, first_item.item_id) self.assertEqual("dream blossom staff", first_item.name) self.assertIsNotNone(first_item.image_url) self.assertIsNone(bazaar.filters)
def test_character_bazaar_from_content_current_no_filters_selected(self): bazaar = CharacterBazaar.from_content( self.load_resource(FILE_BAZAAR_CURRENT)) self.assertIsNotNone(bazaar) self.assertEqual(300, bazaar.page) self.assertEqual(482, bazaar.total_pages) self.assertEqual(12031, bazaar.results_count) self.assertEqual(25, len(bazaar.entries)) self.assertIsNotNone(bazaar.url) auction = bazaar.entries[0] self.assertEqual(30237, auction.auction_id) self.assertEqual(800, auction.bid) self.assertEqual(BidType.MINIMUM, auction.bid_type) self.assertIsNotNone(auction.character_url) self.assertEqual(0, len(auction.displayed_items)) self.assertIsNotNone(bazaar.filters) self.assertIsNone(bazaar.filters.world) self.assertIsNone(bazaar.filters.pvp_type) self.assertIsNone(bazaar.filters.battleye) self.assertIsNone(bazaar.filters.vocation) self.assertIsNone(bazaar.filters.min_level) self.assertIsNone(bazaar.filters.max_level) self.assertIsNone(bazaar.filters.skill) self.assertIsNone(bazaar.filters.min_skill_level) self.assertIsNone(bazaar.filters.max_skill_level) self.assertEqual(AuctionOrder.LOWEST_EARLIEST, bazaar.filters.order)
async def fetch_auction_history(self, page=1): """Fetches the auction history of the bazaar. .. versionadded:: 3.3.0 Parameters ---------- page: :class:`int` The page to display. Returns ------- :class:`TibiaResponse` of :class:`CharacterBazaar` The character bazaar containing the auction history. Raises ------ Forbidden If a 403 Forbidden error was returned. This usually means that Tibia.com is rate-limiting the client because of too many requests. NetworkError If there's any connection errors during the request. ValueError If the page number is not 1 or greater. """ if not page: raise ValueError('page must be 1 or greater.') response = await self._request( "GET", CharacterBazaar.get_auctions_history_url(page)) start_time = time.perf_counter() auction_history = CharacterBazaar.from_content(response.content) parsing_time = time.perf_counter() - start_time return TibiaResponse(response, auction_history, parsing_time)
async def fetch_current_auctions(self, page=1, filters=None): """Fetches the current auctions in the bazaar .. versionadded:: 3.3.0 Parameters ---------- page: :class:`int` The desired page to display. filters: :class:`AuctionFilters` The filtering criteria to use. Returns ------- :class:`TibiaResponse` of :class:`CharacterBazaar` The current auctions. Raises ------ Forbidden If a 403 Forbidden error was returned. This usually means that Tibia.com is rate-limiting the client because of too many requests. NetworkError If there's any connection errors during the request. ValueError If the page number is not 1 or greater. """ if not page: raise ValueError('page must be 1 or greater.') response = await self._request( "GET", CharacterBazaar.get_current_auctions_url(page, filters)) start_time = time.perf_counter() current_auctions = CharacterBazaar.from_content(response.content) parsing_time = time.perf_counter() - start_time return TibiaResponse(response, current_auctions, parsing_time)
def test_bazaar_current_changes(self): content = self.load_resource( "website_changes/6_char_bazaar_current_auctions.txt") char_bazaar = CharacterBazaar.from_content(content) self.assertEqual(BazaarType.CURRENT, char_bazaar.type) self.assertEqual(94, char_bazaar.total_pages) self.assertEqual(2339, char_bazaar.results_count) self.assertEqual(1, char_bazaar.page) first_entry = char_bazaar.entries[0] self.assertEqual(564217, first_entry.auction_id) self.assertEqual("Quaak", first_entry.name) self.assertEqual(664, first_entry.level) self.assertEqual("Estela", first_entry.world) self.assertEqual(Vocation.ROYAL_PALADIN, first_entry.vocation) self.assertEqual(AuctionStatus.IN_PROGRESS, first_entry.status) self.assertEqual(128, first_entry.outfit.outfit_id) self.assertEqual(17000, first_entry.bid) self.assertEqual(BidType.MINIMUM, first_entry.bid_type)
def test_character_bazaar_from_content_empty(self): bazaar = CharacterBazaar.from_content( self.load_resource(FILE_BAZAAR_CURRENT_EMPTY)) self.assertIsNotNone(bazaar) self.assertFalse(bazaar.entries)
def test_character_bazaar_from_content_unrelated(self): """Testing parsing an unrelated tibia.com section""" content = self.load_resource(self.FILE_UNRELATED_SECTION) with self.assertRaises(InvalidContent): CharacterBazaar.from_content(content)