From 5ce870714cf492e996b68085f0904abaaf4016ca Mon Sep 17 00:00:00 2001 From: Evgeniy Alekseev Date: Sun, 8 Sep 2019 16:58:13 +0300 Subject: [PATCH] some life testing fixes --- src/service/api/views/common/bis_base.py | 2 +- src/service/api/views/common/player_base.py | 2 +- src/service/api/views/html/loot.py | 5 +++-- src/service/api/views/html/loot_suggest.py | 9 ++++----- src/service/api/views/html/player.py | 1 + src/service/core/ariyala_parser.py | 15 ++++++++++----- templates/loot_suggest.jinja2 | 5 ----- templates/party.jinja2 | 6 +++++- test/test_ariyala.py | 5 +++-- 9 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/service/api/views/common/bis_base.py b/src/service/api/views/common/bis_base.py index 92d1b71..d175fdf 100644 --- a/src/service/api/views/common/bis_base.py +++ b/src/service/api/views/common/bis_base.py @@ -37,7 +37,7 @@ class BiSBaseView(View): def bis_put(self, player_id: PlayerId, link: str) -> str: parser = AriyalaParser(self.request.app['config']) - items = parser.get(link) + items = parser.get(link, player_id.job.name) for piece in items: self.request.app['party'].set_item_bis(player_id, piece) self.request.app['party'].set_bis_link(player_id, link) diff --git a/src/service/api/views/common/player_base.py b/src/service/api/views/common/player_base.py index 361707e..56c64ac 100644 --- a/src/service/api/views/common/player_base.py +++ b/src/service/api/views/common/player_base.py @@ -24,7 +24,7 @@ class PlayerBaseView(View): if link: parser = AriyalaParser(self.request.app['config']) - items = parser.get(link) + items = parser.get(link, job.name) for piece in items: self.request.app['party'].set_item_bis(player_id, piece) diff --git a/src/service/api/views/html/loot.py b/src/service/api/views/html/loot.py index d341c24..4fd7fa7 100644 --- a/src/service/api/views/html/loot.py +++ b/src/service/api/views/html/loot.py @@ -12,6 +12,7 @@ from typing import Any, Dict, List from service.models.piece import Piece from service.models.player import Player, PlayerId +from service.models.upgrade import Upgrade from service.api.utils import wrap_exception, wrap_invalid_param from service.api.views.common.loot_base import LootBaseView @@ -32,7 +33,7 @@ class LootHtmlView(LootBaseView, PlayerBaseView): { 'player': player.player_id.pretty_name, 'piece': piece.name, - 'is_tome': 'yes' if piece.is_tome else 'no' # type: ignore + 'is_tome': 'yes' if getattr(piece, 'is_tome', True) else 'no' } for player in players for piece in player.loot @@ -44,7 +45,7 @@ class LootHtmlView(LootBaseView, PlayerBaseView): return { 'items': items, - 'pieces': Piece.available(), + 'pieces': Piece.available() + [upgrade.name for upgrade in Upgrade], 'players': [player.player_id.pretty_name for player in players], 'request_error': error } diff --git a/src/service/api/views/html/loot_suggest.py b/src/service/api/views/html/loot_suggest.py index 7d4cf3a..d6a1e94 100644 --- a/src/service/api/views/html/loot_suggest.py +++ b/src/service/api/views/html/loot_suggest.py @@ -11,7 +11,8 @@ from aiohttp_jinja2 import template from typing import Any, Dict, List, Union from service.models.piece import Piece -from service.models.player import Player, PlayerIdWithCounters +from service.models.player import PlayerIdWithCounters +from service.models.upgrade import Upgrade from service.api.utils import wrap_invalid_param from service.api.views.common.loot_base import LootBaseView @@ -23,8 +24,7 @@ class LootSuggestHtmlView(LootBaseView, PlayerBaseView): @template('loot_suggest.jinja2') async def get(self) -> Dict[str, Any]: return { - 'pieces': Piece.available(), - 'players': [player.player_id.pretty_name for player in self.player_get(None)], + 'pieces': Piece.available() + [upgrade.name for upgrade in Upgrade] } @template('loot_suggest.jinja2') @@ -46,8 +46,7 @@ class LootSuggestHtmlView(LootBaseView, PlayerBaseView): error = repr(e) return { - 'pieces': Piece.available(), - 'players': [player.player_id.pretty_name for player in self.player_get(None)], + 'pieces': Piece.available() + [upgrade.name for upgrade in Upgrade], 'suggest': [ { 'player': player.pretty_name, diff --git a/src/service/api/views/html/player.py b/src/service/api/views/html/player.py index 6bc1f25..af7f1ab 100644 --- a/src/service/api/views/html/player.py +++ b/src/service/api/views/html/player.py @@ -33,6 +33,7 @@ class PlayerHtmlView(PlayerBaseView): error = repr(e) return { + 'jobs': [job.name for job in Job], 'players': [ { 'job': player.job.name, diff --git a/src/service/core/ariyala_parser.py b/src/service/core/ariyala_parser.py index dda3220..7a80142 100644 --- a/src/service/core/ariyala_parser.py +++ b/src/service/core/ariyala_parser.py @@ -37,22 +37,27 @@ class AriyalaParser: return key return None - def get(self, url: str) -> List[Piece]: - items = self.get_ids(url) + def get(self, url: str, job: str) -> List[Piece]: + items = self.get_ids(url, job) return [ Piece.get({'piece': slot, 'is_tome': self.get_is_tome(item_id)}) # type: ignore for slot, item_id in items.items() ] - def get_ids(self, url: str) -> Dict[str, int]: + def get_ids(self, url: str, job: str) -> Dict[str, int]: norm_path = os.path.normpath(url) set_id = os.path.basename(norm_path) response = requests.get('{}/store.app'.format(self.ariyala_url), params={'identifier': set_id}) response.raise_for_status() data = response.json() - job = data['content'] - bis = data['datasets'][job]['normal']['items'] + # it has job in response but for some reasons job name differs sometimes from one in dictionary, + # e.g. http://ffxiv.ariyala.com/store.app?identifier=1AJB8 + api_job = data['content'] + try: + bis = data['datasets'][api_job]['normal']['items'] + except KeyError: + bis = data['datasets'][job]['normal']['items'] result: Dict[str, int] = {} for original_key, value in bis.items(): diff --git a/templates/loot_suggest.jinja2 b/templates/loot_suggest.jinja2 index d976dea..4b4dc63 100644 --- a/templates/loot_suggest.jinja2 +++ b/templates/loot_suggest.jinja2 @@ -11,11 +11,6 @@ {% include "search_line.jinja2" %}
- - + diff --git a/test/test_ariyala.py b/test/test_ariyala.py index 6c5dc87..ca2bd28 100644 --- a/test/test_ariyala.py +++ b/test/test_ariyala.py @@ -2,9 +2,10 @@ from typing import List from service.core.ariyala_parser import AriyalaParser from service.models.piece import Piece +from service.models.player import Player -def test_get(parser: AriyalaParser, bis_link: str, bis_set: List[Piece]) -> None: - items = parser.get(bis_link) +def test_get(parser: AriyalaParser, player: Player, bis_link: str, bis_set: List[Piece]) -> None: + items = parser.get(bis_link, player.job.name) assert items == bis_set