From 187fcccf7d41508d10bde62ce47079b2d3f859a4 Mon Sep 17 00:00:00 2001 From: emkael Date: Fri, 6 Jan 2017 00:30:34 +0100 Subject: Generating compiled table page --- ausbutler/interface.py | 57 +++++++++++++++++++ config/butler.json | 3 +- template/table.html | 152 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 template/table.html diff --git a/ausbutler/interface.py b/ausbutler/interface.py index 8f10ffa..27ad703 100644 --- a/ausbutler/interface.py +++ b/ausbutler/interface.py @@ -1,6 +1,7 @@ import re from datetime import datetime from os import path +from copy import copy from jinja2 import Environment, FileSystemLoader from .butler import cutoff, get_opponents, get_room, normalize, get_line @@ -136,3 +137,59 @@ class Interface(object): }).encode('utf8') ) + def generate_table(self): + template = self.template.get_template('table.html') + filename = '%snormbutler.html' % (Constants.shortname) + segments = [] + result_template = [] + for rnd in range(1, Constants.rnd + 1): + for segment in range(1, Constants.segmentsperround + 1): + segments.append({'round': rnd, 'segment': segment}) + result_template.append('') + players = {} + for butler in self.session.query(AusButler).all(): + if butler.id not in players: + players[butler.id] = { + 'name': str(butler.player).decode('utf8'), + 'team': str(butler.player.team_).decode('utf8'), + 'sum': 0, + 'count': 0, + 'results': copy(result_template) + } + players[butler.id]['sum'] += butler.corrected_score + players[butler.id]['count'] += butler.board_count + players[butler.id]['results'][(butler.match - 1) * Constants.segmentsperround + butler.segment - 1] = butler.corrected_score + for player in players.values(): + if player['count'] > 0: + player['sum'] /= player['count'] + players = sorted(players.values(), key=lambda p: p['sum'], reverse=True) + board_threshold = Constants.boardspersegment * Constants.segmentsperround * \ + (Constants.rnd + (Constants.roundcnt * (Constants.minbutler / 100.0 - 1))) + above_threshold = [] + below_threshold = [] + for player in players: + if player['count'] >= board_threshold: + above_threshold.append(player) + else: + below_threshold.append(player) + for p_list in [above_threshold, below_threshold]: + place = 1 + prev = None + for player in p_list: + if player['sum'] != prev: + player['place'] = place + prev = player['sum'] + place += 1 + file(path.join(Constants.path, filename), 'w').write( + template.render({ + 'prefix': Constants.shortname, + 'logoh': Constants.logoh, + 'percent_threshold': Constants.minbutler, + 'segments': segments, + 'segment_limit': self.config['segments_in_table_limit'], + 'above_threshold': above_threshold, + 'below_threshold': below_threshold, + 'date': datetime.now().strftime('%Y-%m-%d'), + 'time': datetime.now().strftime('%H:%M') + }).encode('utf8') + ) diff --git a/config/butler.json b/config/butler.json index ab19a17..e238779 100644 --- a/config/butler.json +++ b/config/butler.json @@ -1,5 +1,6 @@ { "cutoff_point": 32, "cutoff_rate": 0.1, - "opponent_factor": 0.5 + "opponent_factor": 0.5, + "segments_in_table_limit": 10 } diff --git a/template/table.html b/template/table.html new file mode 100644 index 0000000..51559c2 --- /dev/null +++ b/template/table.html @@ -0,0 +1,152 @@ + + + + + + + + + + {{"PAGE_TITLE"|translate}}: {{"BUTLER"|translate}} + + + + + + + + + + + + + + + + + + + {% if segments|length > segment_limit %} + + + + + + + {% endif %} + + + + + + + {% for segment in segments[-segment_limit:] %} + + {% endfor %} + + {% for player in above_threshold %} + + + + + + + {% for result in player['results'][-segment_limit:] %} + {% if result != '' %} + + {% else %} + + {% endif %} + {% endfor %} + + {% endfor %} + {% if below_threshold|length > 0 %} + + + + + + + + + + {% if segments|length > segment_limit %} + + + + + + + {% endif %} + + + + + + + {% for segment in segments[-segment_limit:] %} + + {% endfor %} + + {% for player in below_threshold %} + + + + + + + {% for result in player['results'][-segment_limit:] %} + {% if result != '' %} + + {% else %} + + {% endif %} + {% endfor %} + + {% endfor %} + {% endif %} +
+ {{logoh}} +
 
+ {{"NORMALIZED_CLASSIFICATION"|translate}} + {% if percent_threshold > 0 %} +
{{"PLAYERS_WITHOUT_CHANCES"|translate}}{{percent_threshold}}{{"PERCENT_NOT_LISTED"|translate}}
+ {% endif %} +
 
+ {{"HEADER_PREV_ROUNDS"|translate}} + {% for segment in segments[0:-segment_limit] %} + | + {{segment['round']}}-{{segment['segment']}} + + {% endfor %} + | +
 
{{"HEADER_PLACE"|translate}} {{"HEADER_TEAM"|translate}}{{"HEADER_IMPBRD"|translate}}{{"HEADER_BOARDS"|translate}} + + {{segment['round']}}-{{segment['segment']}} + +
{{player['place']}}{{player['name']}}{{player['team']}}{{'%.2f' % player['sum']}}{{player['count']}}{{'%+.2f' % result}} 
 
+ {{"NORMALIZED_CLASSIFICATION"|translate}} + {% if percent_threshold > 0 %} +
{{"PLAYERS_WITHOUT_CHANCES"|translate}}{{percent_threshold}}%
+ {% endif %} +
 
+ {{"HEADER_PREV_ROUNDS"|translate}} + {% for segment in segments[0:-segment_limit] %} + | + {{segment['round']}}-{{segment['segment']}} + + {% endfor %} + | +
 
{{"HEADER_PLACE"|translate}} {{"HEADER_TEAM"|translate}}{{"HEADER_IMPBRD"|translate}}{{"HEADER_BOARDS"|translate}} + + {{segment['round']}}-{{segment['segment']}} + +
{{player['place']}}{{player['name']}}{{player['team']}}{{'%.2f' % player['sum']}}{{player['count']}}{{'%+.2f' % result}} 
+

+

+ {{"FOOTER_ANALYSIS"|translate}}, ©William Bailey'1999
+  Admin ©Jan Romański'2005, jfrteamy-ausbutler ©Michał Klichowicz'2017{{"FOOTER_GENERATED"|translate}} + {{date}}{{"FOOTER_AT"|translate}}{{time}}{{"FOOTER_OPTIMIZED"|translate}} +

+ + -- cgit v1.2.3