diff options
author | raylu <raylu@gridium.com> | 2013-10-20 00:42:11 -0700 |
---|---|---|
committer | raylu <raylu@gridium.com> | 2013-10-20 00:42:11 -0700 |
commit | 585ad90d3cc59ad7d4fd306170b710699e48efda (patch) | |
tree | b38c67aafb17940c342e60adf95b3f3b10300181 | |
parent | 02a3b0d8caf160da78bd4b355a7c11d558abe036 (diff) | |
download | ykill-585ad90d3cc59ad7d4fd306170b710699e48efda.tar.xz |
show more data
-rw-r--r-- | db/__init__.py | 9 | ||||
-rwxr-xr-x | server.py | 53 | ||||
-rw-r--r-- | web/templates/corporation.html | 27 | ||||
-rw-r--r-- | web/templates/kill.html | 37 |
4 files changed, 101 insertions, 25 deletions
diff --git a/db/__init__.py b/db/__init__.py index 92837a2..66566d5 100644 --- a/db/__init__.py +++ b/db/__init__.py @@ -13,3 +13,12 @@ def execute(cursor, sql, *values): def query(cursor, sql, *values): execute(cursor, sql, *values) return cursor.fetchall() + +def get(cursor, sql, *values): + execute(cursor, sql, *values) + result = cursor.fetchone() + if result is None: + raise Exception('no rows returned for query: {} with values {}'.format(sql, values)) + if cursor.fetchone() is not None: + raise Exception('multiple results returned for query'.format(sql, values)) + return result @@ -1,5 +1,6 @@ #!/usr/bin/env python3 +from collections import defaultdict import json import operator import os @@ -35,6 +36,53 @@ class SearchHandler(BaseHandler): ''', '%{}%'.format(q)) self.render('search.html', corps=corps) +class CorporationHandler(BaseHandler): + def get(self, corp_id): + with db.cursor() as c: + kills = db.query(c, ''' + SELECT DISTINCT(kills.kill_id), kill_time FROM kills + JOIN characters on characters.kill_id = kills.kill_id + WHERE corporation_id = ? + ''', corp_id) + kill_ids = list(map(operator.itemgetter('kill_id'), kills)) + char_rows = db.query(c, ''' + SELECT + kill_id, victim, final_blow, + character_id, character_name, corporation_id, corporation_name, alliance_id, alliance_name, faction_id, faction_name + FROM characters + WHERE kill_id IN ({}) + '''.format(','.join(map(str, kill_ids)))) + characters = defaultdict(dict) + for char in char_rows: + kill_id = char['kill_id'] + if char['victim']: + characters[kill_id]['victim'] = char + elif char['final_blow']: + characters[kill_id]['final_blow'] = char + for kill in kills: + chars = characters[kill['kill_id']] + kill['victim'] = chars['victim'] + kill['final_blow'] = chars['final_blow'] + self.render('corporation.html', kills=kills) + +class KillHandler(BaseHandler): + def get(self, kill_id): + with db.cursor() as c: + kill = db.get(c, ''' + SELECT kill_time, solarSystemName, security FROM kills + JOIN eve.mapSolarSystems on solar_system_id = solarSystemID + WHERE kill_id = ? + ''', kill_id) + characters = db.query(c, ''' + SELECT ship_type_id, character_id, character_name, + corporation_id, corporation_name, alliance_id, alliance_name, faction_id, faction_name + typeName + FROM characters + JOIN eve.invTypes on ship_type_id = typeID + WHERE kill_id = ? + ''', kill_id) + self.render('kill.html', kill=kill, characters=characters) + class CSSHandler(tornado.web.RequestHandler): def get(self, css_path): css_path = os.path.join(os.path.dirname(__file__), 'web', 'static', css_path) + '.ccss' @@ -42,13 +90,14 @@ class CSSHandler(tornado.web.RequestHandler): self.set_header('Content-Type', 'text/css') self.write(cleancss.convert(f)) - if __name__ == '__main__': tornado.web.Application( handlers=[ (r'/', MainHandler), (r'/search', SearchHandler), - (r"/(css/.+)\.css", CSSHandler), + (r'/corporation/(.+)', CorporationHandler), + (r'/kill/(.+)', KillHandler), + (r'/(css/.+)\.css', CSSHandler), ], template_path=os.path.join(os.path.dirname(__file__), 'web/templates'), cookie_secret=config.cookie_secret, diff --git a/web/templates/corporation.html b/web/templates/corporation.html new file mode 100644 index 0000000..0afe4c3 --- /dev/null +++ b/web/templates/corporation.html @@ -0,0 +1,27 @@ +{% extends "base.html" %} + +{% block main %} + +{% for kill in kills %} + <a href="/kill/{{ kill['kill_id'] }}"> + {{ kill['kill_time'] }} + <img src="//image.eveonline.com/Character/{{ kill['victim']['character_id'] }}_32.jpg" alt="{{ kill['victim']['character_name'] }}"> + {{ kill['victim']['character_name'] }} + <img src="//image.eveonline.com/Corporation/{{ kill['victim']['corporation_id'] }}_32.png" alt="{{ kill['victim']['corporation_name'] }}"> + {{ kill['victim']['corporation_name'] }} + {% if kill['victim']['alliance_id'] != 0 %} + <img src="//image.eveonline.com/Alliance/{{ kill['victim']['alliance_id'] }}_32.png" alt="{{ kill['victim']['alliance_name'] }}"> + {{ kill['victim']['alliance_name'] }} + {% end %} + <img src="//image.eveonline.com/Character/{{ kill['final_blow']['character_id'] }}_32.jpg" alt="{{ kill['final_blow']['character_name'] }}"> + {{ kill['final_blow']['character_name'] }} + <img src="//image.eveonline.com/Corporation/{{ kill['final_blow']['corporation_id'] }}_32.png" alt="{{ kill['final_blow']['corporation_name'] }}"> + {{ kill['final_blow']['corporation_name'] }} + {% if kill['final_blow']['alliance_id'] != 0 %} + <img src="//image.eveonline.com/Alliance/{{ kill['final_blow']['alliance_id'] }}_32.png" alt="{{ kill['final_blow']['alliance_name'] }}"> + {{ kill['final_blow']['alliance_name'] }} + {% end %} + </a><br> +{% end %} + +{% end %} diff --git a/web/templates/kill.html b/web/templates/kill.html index 6d4f69c..bb286bc 100644 --- a/web/templates/kill.html +++ b/web/templates/kill.html @@ -2,29 +2,20 @@ {% block main %} -<div class="kill_list"> - {% for kill in kills %} - <a href="/kill/{{ kill['killID'] }}"> - {{ kill['killTime'] }} - {{ kill['solarSystemID'] }} - <img src="//image.eveonline.com/Type/{{ kill['victim']['shipTypeID'] }}_64.png"> - <img src="//image.eveonline.com/Character/{{ kill['victim']['characterID'] }}_64.jpg"> - <img src="//image.eveonline.com/Corporation/{{ kill['victim']['corporationID'] }}_64.png"> - <img src="//image.eveonline.com/Alliance/{{ kill['victim']['allianceID'] }}_64.png"> - {{ kill['victim']['characterName'] }} - {{ kill['victim']['corporationName'] }} - {{ kill['victim']['allianceName'] }} - {% for attacker in kill['attackers'] %} - {% if attacker['finalBlow'] %} - {% set killer = attacker %} - {% break %} - {% end %} - {% end %} - {{ killer['characterName'] }} - {{ killer['corporationName'] }} - {{ killer['allianceName'] }} - </a> +{{ kill['kill_time'] }}<br> +{{ kill['solarSystemName'] }} ({{ round(kill['security'], 1) }})<br> + +{% for char in characters %} + <img src="//image.eveonline.com/Type/{{ char['ship_type_id'] }}_64.png" alt="{{ char ['typeName'] }}"> + <img src="//image.eveonline.com/Character/{{ char['character_id'] }}_64.jpg" alt="{{ char['character_name'] }}"> + {{ char['character_name'] }} + <img src="//image.eveonline.com/Corporation/{{ char['corporation_id'] }}_64.png" alt="{{ char['corporation_name'] }}"> + {{ char['corporation_name'] }} + {% if char['alliance_id'] != 0 %} + <img src="//image.eveonline.com/Alliance/{{ char['alliance_id'] }}_64.png" alt="alliance"> + {{ char['alliance_name'] }} {% end %} -</div> + <br> +{% end %} {% end %} |