some life testing fixes

This commit is contained in:
Evgenii Alekseev 2019-09-08 16:58:13 +03:00
parent 5f5ce72600
commit 5ce870714c
9 changed files with 28 additions and 22 deletions

View File

@ -37,7 +37,7 @@ class BiSBaseView(View):
def bis_put(self, player_id: PlayerId, link: str) -> str: def bis_put(self, player_id: PlayerId, link: str) -> str:
parser = AriyalaParser(self.request.app['config']) parser = AriyalaParser(self.request.app['config'])
items = parser.get(link) items = parser.get(link, player_id.job.name)
for piece in items: for piece in items:
self.request.app['party'].set_item_bis(player_id, piece) self.request.app['party'].set_item_bis(player_id, piece)
self.request.app['party'].set_bis_link(player_id, link) self.request.app['party'].set_bis_link(player_id, link)

View File

@ -24,7 +24,7 @@ class PlayerBaseView(View):
if link: if link:
parser = AriyalaParser(self.request.app['config']) parser = AriyalaParser(self.request.app['config'])
items = parser.get(link) items = parser.get(link, job.name)
for piece in items: for piece in items:
self.request.app['party'].set_item_bis(player_id, piece) self.request.app['party'].set_item_bis(player_id, piece)

View File

@ -12,6 +12,7 @@ from typing import Any, Dict, List
from service.models.piece import Piece from service.models.piece import Piece
from service.models.player import Player, PlayerId 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.utils import wrap_exception, wrap_invalid_param
from service.api.views.common.loot_base import LootBaseView from service.api.views.common.loot_base import LootBaseView
@ -32,7 +33,7 @@ class LootHtmlView(LootBaseView, PlayerBaseView):
{ {
'player': player.player_id.pretty_name, 'player': player.player_id.pretty_name,
'piece': piece.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 player in players
for piece in player.loot for piece in player.loot
@ -44,7 +45,7 @@ class LootHtmlView(LootBaseView, PlayerBaseView):
return { return {
'items': items, 'items': items,
'pieces': Piece.available(), 'pieces': Piece.available() + [upgrade.name for upgrade in Upgrade],
'players': [player.player_id.pretty_name for player in players], 'players': [player.player_id.pretty_name for player in players],
'request_error': error 'request_error': error
} }

View File

@ -11,7 +11,8 @@ from aiohttp_jinja2 import template
from typing import Any, Dict, List, Union from typing import Any, Dict, List, Union
from service.models.piece import Piece 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.utils import wrap_invalid_param
from service.api.views.common.loot_base import LootBaseView from service.api.views.common.loot_base import LootBaseView
@ -23,8 +24,7 @@ class LootSuggestHtmlView(LootBaseView, PlayerBaseView):
@template('loot_suggest.jinja2') @template('loot_suggest.jinja2')
async def get(self) -> Dict[str, Any]: async def get(self) -> Dict[str, Any]:
return { return {
'pieces': Piece.available(), 'pieces': Piece.available() + [upgrade.name for upgrade in Upgrade]
'players': [player.player_id.pretty_name for player in self.player_get(None)],
} }
@template('loot_suggest.jinja2') @template('loot_suggest.jinja2')
@ -46,8 +46,7 @@ class LootSuggestHtmlView(LootBaseView, PlayerBaseView):
error = repr(e) error = repr(e)
return { return {
'pieces': Piece.available(), 'pieces': Piece.available() + [upgrade.name for upgrade in Upgrade],
'players': [player.player_id.pretty_name for player in self.player_get(None)],
'suggest': [ 'suggest': [
{ {
'player': player.pretty_name, 'player': player.pretty_name,

View File

@ -33,6 +33,7 @@ class PlayerHtmlView(PlayerBaseView):
error = repr(e) error = repr(e)
return { return {
'jobs': [job.name for job in Job],
'players': [ 'players': [
{ {
'job': player.job.name, 'job': player.job.name,

View File

@ -37,21 +37,26 @@ class AriyalaParser:
return key return key
return None return None
def get(self, url: str) -> List[Piece]: def get(self, url: str, job: str) -> List[Piece]:
items = self.get_ids(url) items = self.get_ids(url, job)
return [ return [
Piece.get({'piece': slot, 'is_tome': self.get_is_tome(item_id)}) # type: ignore Piece.get({'piece': slot, 'is_tome': self.get_is_tome(item_id)}) # type: ignore
for slot, item_id in items.items() 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) norm_path = os.path.normpath(url)
set_id = os.path.basename(norm_path) set_id = os.path.basename(norm_path)
response = requests.get('{}/store.app'.format(self.ariyala_url), params={'identifier': set_id}) response = requests.get('{}/store.app'.format(self.ariyala_url), params={'identifier': set_id})
response.raise_for_status() response.raise_for_status()
data = response.json() data = response.json()
job = data['content'] # 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'] bis = data['datasets'][job]['normal']['items']
result: Dict[str, int] = {} result: Dict[str, int] = {}

View File

@ -11,11 +11,6 @@
{% include "search_line.jinja2" %} {% include "search_line.jinja2" %}
<form action="/suggest" method="post"> <form action="/suggest" method="post">
<select name="player" id="player" title="player">
{% for player in players %}
<option>{{ player|e }}</option>
{% endfor %}
</select>
<select name="piece" id="piece" title="piece"> <select name="piece" id="piece" title="piece">
{% for piece in pieces %} {% for piece in pieces %}
<option>{{ piece|e }}</option> <option>{{ piece|e }}</option>

View File

@ -12,7 +12,11 @@
<form action="/party" method="post"> <form action="/party" method="post">
<input name="nick" id="nick" placeholder="player nick name" title="nick" type="text"/> <input name="nick" id="nick" placeholder="player nick name" title="nick" type="text"/>
<input name="job" id="job" placeholder="player job" title="job" type="text"/> <select name="job" id="job" title="job">
{% for job in jobs %}
<option>{{ job|e }}</option>
{% endfor %}
</select>
<input name="bis" id="bis" placeholder="player bis link" title="bis" type="text"/> <input name="bis" id="bis" placeholder="player bis link" title="bis" type="text"/>
<input name="priority" id="priority" placeholder="player priority" title="priority" type="number" value="0"/> <input name="priority" id="priority" placeholder="player priority" title="priority" type="number" value="0"/>
<input name="action" id="action" type="hidden" value="add"/> <input name="action" id="action" type="hidden" value="add"/>

View File

@ -2,9 +2,10 @@ from typing import List
from service.core.ariyala_parser import AriyalaParser from service.core.ariyala_parser import AriyalaParser
from service.models.piece import Piece 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: def test_get(parser: AriyalaParser, player: Player, bis_link: str, bis_set: List[Piece]) -> None:
items = parser.get(bis_link) items = parser.get(bis_link, player.job.name)
assert items == bis_set assert items == bis_set