mirror of
https://github.com/arcan1s/ffxivbis.git
synced 2025-04-25 09:47:18 +00:00
71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
#
|
|
# Copyright (c) 2019 Evgeniy Alekseev.
|
|
#
|
|
# This file is part of ffxivbis
|
|
# (see https://github.com/arcan1s/ffxivbis).
|
|
#
|
|
# License: 3-clause BSD, see https://opensource.org/licenses/BSD-3-Clause
|
|
#
|
|
from aiohttp.web import HTTPFound, Response
|
|
from aiohttp_jinja2 import template
|
|
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
|
|
from service.api.views.common.player_base import PlayerBaseView
|
|
|
|
|
|
class LootHtmlView(LootBaseView, PlayerBaseView):
|
|
|
|
@template('loot.jinja2')
|
|
async def get(self) -> Dict[str, Any]:
|
|
error = None
|
|
items: List[Dict[str, str]] = []
|
|
players: List[Player] = []
|
|
|
|
try:
|
|
players = self.player_get(None)
|
|
items = [
|
|
{
|
|
'player': player.player_id.pretty_name,
|
|
'piece': piece.name,
|
|
'is_tome': 'yes' if getattr(piece, 'is_tome', True) else 'no'
|
|
}
|
|
for player in players
|
|
for piece in player.loot
|
|
]
|
|
|
|
except Exception as e:
|
|
self.request.app.logger.exception('could not get loot')
|
|
error = repr(e)
|
|
|
|
return {
|
|
'items': items,
|
|
'pieces': Piece.available() + [upgrade.name for upgrade in Upgrade],
|
|
'players': [player.player_id.pretty_name for player in players],
|
|
'request_error': error
|
|
}
|
|
|
|
async def post(self) -> Response:
|
|
data = await self.request.post()
|
|
|
|
required = ['action', 'piece', 'player']
|
|
if any(param not in data for param in required):
|
|
return wrap_invalid_param(required, data)
|
|
|
|
try:
|
|
player_id = PlayerId.from_pretty_name(data.getone('player')) # type: ignore
|
|
is_tome = (data.getone('is_tome', None) == 'on')
|
|
await self.loot_post(data.getone('action'), player_id, # type: ignore
|
|
Piece.get({'piece': data.getone('piece'), 'is_tome': is_tome})) # type: ignore
|
|
|
|
except Exception as e:
|
|
self.request.app.logger.exception('could not manage loot')
|
|
return wrap_exception(e, data)
|
|
|
|
return HTTPFound(self.request.url)
|