async def get_world(name, *, tries=5) -> Optional[World]: name = name.strip().title() if tries == 0: raise errors.NetworkError(f"get_world({name})") try: world = CACHE_WORLDS[name] return world except KeyError: pass try: async with aiohttp.ClientSession() as session: async with session.get(World.get_url_tibiadata(name)) as resp: content = await resp.text(encoding='ISO-8859-1') world = World.from_tibiadata(content) except (aiohttp.ClientError, asyncio.TimeoutError, tibiapy.TibiapyException): await asyncio.sleep(config.network_retry_delay) return await get_world(name, tries=tries - 1) CACHE_WORLDS[name] = world return world
def test_world_from_tibiadata_offline(self): """Testing parsing an offline world""" content = self._load_resource(FILE_WORLD_TIBIADATA_OFFLINE) world = World.from_tibiadata(content) self.assertIsInstance(world, World) self.assertEqual(world.name, "Antica") self.assertEqual(world.record_count, 1052) self.assertIsInstance(world.record_date, datetime.datetime) self.assertEqual(world.creation_date, "1997-01") self.assertEqual(world.creation_year, 1997) self.assertEqual(world.creation_month, 1) self.assertEqual(world.location, WorldLocation.EUROPE) self.assertEqual(world.pvp_type, PvpType.OPEN_PVP) self.assertEqual(world.transfer_type, TransferType.REGULAR) self.assertEqual(len(world.world_quest_titles), 5) self.assertFalse(world.premium_only) self.assertTrue(world.battleye_protected) self.assertIsInstance(world.battleye_date, datetime.date) self.assertFalse(world.experimental) self.assertEqual(len(world.online_players), world.online_count) self.assertEqual(World.get_url_tibiadata(world.name), world.url_tibiadata)
def test_world_from_tibiadata(self): """Testing parsing a world from TibiaData""" content = self._load_resource(FILE_WORLD_TIBIADATA) world = World.from_tibiadata(content) self.assertIsInstance(world, World) self.assertEqual(world.name, "Zuna") self.assertEqual(world.status, "Online") self.assertEqual(world.record_count, 106) self.assertIsInstance(world.record_date, datetime.datetime) self.assertEqual(world.creation_date, "2017-10") self.assertEqual(world.creation_year, 2017) self.assertEqual(world.creation_month, 10) self.assertEqual(world.location, WorldLocation.EUROPE) self.assertEqual(world.pvp_type, PvpType.HARDCORE_PVP) self.assertEqual(world.transfer_type, TransferType.LOCKED) self.assertEqual(len(world.world_quest_titles), 1) self.assertFalse(world.premium_only) self.assertFalse(world.battleye_protected) self.assertIsNone(world.battleye_date) self.assertTrue(world.experimental) self.assertEqual(len(world.online_players), world.online_count) self.assertEqual(World.get_url_tibiadata(world.name), world.url_tibiadata)