improve tempalte

This commit is contained in:
2019-09-10 01:32:32 +03:00
parent 5ce870714c
commit 59051dee7a
15 changed files with 368 additions and 36 deletions

View File

@ -16,6 +16,7 @@ from service.api.views.html.index import IndexHtmlView
from service.api.views.html.loot import LootHtmlView
from service.api.views.html.loot_suggest import LootSuggestHtmlView
from service.api.views.html.player import PlayerHtmlView
from service.api.views.html.static import StaticHtmlView
def setup_routes(app: Application) -> None:
@ -33,6 +34,7 @@ def setup_routes(app: Application) -> None:
# html routes
app.router.add_get('/', IndexHtmlView)
app.router.add_get('/static/{resource_id}', StaticHtmlView)
app.router.add_get('/party', PlayerHtmlView)
app.router.add_post('/party', PlayerHtmlView)

View File

@ -18,7 +18,7 @@ from service.models.player import Player, PlayerId
class PlayerBaseView(View):
def player_add(self, job: Job, nick: str, link: Optional[str], priority: int) -> PlayerId:
player = Player(job, nick, BiS(), [], link, priority)
player = Player(job, nick, BiS(), [], link, int(priority))
player_id = player.player_id
self.request.app['party'].set_player(player)

View File

@ -31,6 +31,7 @@ class LootSuggestHtmlView(LootBaseView, PlayerBaseView):
async def post(self) -> Union[Dict[str, Any], Response]:
data = await self.request.post()
error = None
item_values: Dict[str, Any] = {}
players: List[PlayerIdWithCounters] = []
required = ['piece']
@ -40,20 +41,22 @@ class LootSuggestHtmlView(LootBaseView, PlayerBaseView):
try:
piece = Piece.get({'piece': data.get('piece'), 'is_tome': data.get('is_tome', False)})
players = self.loot_put(piece)
item_values = {'piece': piece.name, 'is_tome': piece.is_tome}
except Exception as e:
self.request.app.logger.exception('could not manage loot')
error = repr(e)
return {
'item': item_values,
'pieces': Piece.available() + [upgrade.name for upgrade in Upgrade],
'request_error': error,
'suggest': [
{
'player': player.pretty_name,
'loot_count_bis': player.loot_count_bis,
'loot_count_bis': player.loot_count_total_bis,
'loot_count': player.loot_count,
}
for player in players
],
'request_error': error
]
}

View File

@ -38,7 +38,7 @@ class PlayerHtmlView(PlayerBaseView):
{
'job': player.job.name,
'nick': player.nick,
'loot_count_bis': player.loot_count_bis,
'loot_count_bis': player.loot_count_total_bis,
'loot_count': player.loot_count,
'priority': player.priority
}

View File

@ -0,0 +1,22 @@
# 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
#
import os
from aiohttp.web import HTTPNotFound, Response, View
class StaticHtmlView(View):
async def get(self) -> Response:
resource_name = self.request.match_info['resource_id']
resource_path = os.path.join(self.request.app['templates_root'], 'static', resource_name)
if not os.path.exists(resource_path) or os.path.isdir(resource_path):
return HTTPNotFound()
with open(resource_path) as resource_file:
return Response(text=resource_file.read(), content_type='text/css')

View File

@ -41,7 +41,9 @@ def setup_service(config: Configuration, database: Database, loot: LootSelector,
app.logger.info('setup routes')
setup_routes(app)
if config.has_option('web', 'templates'):
aiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader(config.get('web', 'templates')))
templates_root = app['templates_root'] = config.get('web', 'templates')
app['static_root_url'] = '/static'
aiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader(templates_root))
app.logger.info('setup configuration')
app['config'] = config

View File

@ -45,6 +45,7 @@ class PlayerIdWithCounters(PlayerId):
loot_count: int
loot_count_bis: int
loot_count_total: int
loot_count_total_bis: int
@dataclass
@ -67,8 +68,9 @@ class Player:
return PlayerId(self.job, self.nick)
def player_id_with_counters(self, piece: Union[Piece, Upgrade, None]) -> PlayerIdWithCounters:
return PlayerIdWithCounters(self.job, self.nick, self.priority, self.loot_count(piece),
self.loot_count_bis(piece), self.loot_count_total(piece))
return PlayerIdWithCounters(self.job, self.nick, self.priority,
abs(self.loot_count(piece)), abs(self.loot_count_bis(piece)),
abs(self.loot_count_total(piece)), abs(self.loot_count_total_bis(piece)))
# ordering methods
def is_required(self, piece: Union[Piece, Upgrade, None]) -> bool:
@ -89,14 +91,19 @@ class Player:
def loot_count(self, piece: Union[Piece, Upgrade, None]) -> int:
if piece is None:
return len(self.loot)
return self.loot.count(piece)
return -self.loot_count_total(piece)
return -self.loot.count(piece)
def loot_count_bis(self, _: Union[Piece, Upgrade, None]) -> int:
return len([piece for piece in self.loot if self.bis.has_piece(piece)])
def loot_count_bis(self, piece: Union[Piece, Upgrade, None]) -> int:
if piece is None:
return -self.loot_count_total_bis(piece)
return -len([piece for piece in self.loot if self.bis.has_piece(piece)])
def loot_count_total(self, _: Union[Piece, Upgrade, None]) -> int:
return len(self.loot)
return -len(self.loot)
def loot_count_total_bis(self, _: Union[Piece, Upgrade, None]) -> int:
return len([piece for piece in self.bis.pieces if not piece.is_tome])
def loot_priority(self, _: Union[Piece, Upgrade, None]) -> int:
return self.priority