From 4fb8abde07e94889ba1acfc86e0b36319c136b97 Mon Sep 17 00:00:00 2001 From: raylu Date: Thu, 24 Oct 2013 23:57:30 -0700 Subject: handle invalid ids --- db/queries.py | 17 +++++++++++------ web/api.py | 20 ++++++++++++++------ web/static/css/base.ccss | 7 +++++++ web/static/js/common.js | 7 +++++++ 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/db/queries.py b/db/queries.py index 71f150d..b998132 100644 --- a/db/queries.py +++ b/db/queries.py @@ -27,6 +27,8 @@ def kill_list(entity_type, entity_id): SELECT DISTINCT kill_id FROM characters WHERE {}_id = ? ORDER BY kill_id DESC LIMIT 50 '''.format(entity_type), entity_id) + if len(kills) == 0: + return None kill_ids = list(map(operator.itemgetter('kill_id'), kills)) kills = db.query(c, ''' SELECT kills.kill_id, kill_time, cost, @@ -72,12 +74,15 @@ def kill_list(entity_type, entity_id): def kill(kill_id): with db.cursor() as c: - kill = db.get(c, ''' - SELECT kill_time, cost, solarSystemName AS system_name, security FROM kills - JOIN kill_costs ON kill_costs.kill_id = kills.kill_id - JOIN eve.mapSolarSystems ON solar_system_id = solarSystemID - WHERE kills.kill_id = ? - ''', kill_id) + try: + kill = db.get(c, ''' + SELECT kill_time, cost, solarSystemName AS system_name, security FROM kills + JOIN kill_costs ON kill_costs.kill_id = kills.kill_id + JOIN eve.mapSolarSystems ON solar_system_id = solarSystemID + WHERE kills.kill_id = ? + ''', kill_id) + except db.NoRowsException: + return None kill['kill_time'] = _format_kill_time(kill['kill_time']) kill['security_status'] = _security_status(kill['system_name'], kill['security']) diff --git a/web/api.py b/web/api.py index 70c0aff..6a43cb6 100644 --- a/web/api.py +++ b/web/api.py @@ -6,7 +6,7 @@ import tornado.web from config import web as config import db.queries -class APIHandler(tornado.web.RequestHandler): +class APIBaseHandler(tornado.web.RequestHandler): def set_default_headers(self): self.set_header('Access-Control-Allow-Origin', '*') self.set_header('Access-Control-Allow-Headers', 'X-Requested-With, X-Request') @@ -23,23 +23,31 @@ class APIHandler(tornado.web.RequestHandler): def options(self, *args): return -class SearchHandler(APIHandler): +class SearchHandler(APIBaseHandler): def get(self): q = self.get_argument('q') data = db.queries.search(q) self.respond_json(data) -class KillListHandler(APIHandler): +class KillListHandler(APIBaseHandler): def get(self, entity_type, entity_id): - kills = db.queries.kill_list(entity_type, int(entity_id)) + try: + entity_id = int(entity_id) + except ValueError: + raise tornado.web.HTTPError(404) + kills = db.queries.kill_list(entity_type, entity_id) + if kills is None: + raise tornado.web.HTTPError(404) self.respond_json(kills) -class KillHandler(APIHandler): +class KillHandler(APIBaseHandler): def get(self, kill_id): kill = db.queries.kill(kill_id) + if kill is None: + raise tornado.web.HTTPError(404) self.respond_json(kill) -class TopCostHandler(APIHandler): +class TopCostHandler(APIBaseHandler): def get(self): kills = db.queries.top_cost() self.respond_json(kills) diff --git a/web/static/css/base.ccss b/web/static/css/base.ccss index d8218bd..13b92e6 100644 --- a/web/static/css/base.ccss +++ b/web/static/css/base.ccss @@ -76,3 +76,10 @@ footer: width: 900px margin: 50px auto text-align: center + +.error: + padding: 50px + text-align: center + font-size: 14pt + font-weight: bold + color: #e42 diff --git a/web/static/js/common.js b/web/static/js/common.js index c987242..9d1451f 100644 --- a/web/static/js/common.js +++ b/web/static/js/common.js @@ -10,6 +10,13 @@ new Request.JSON({ 'url': ykill.api_host + path, 'onSuccess': cb, + 'onFailure': function(xhr) { + $('wrapper').empty().grab(new Element('div', { + 'class': 'error', + 'html': 'as you pass through the wormhole you realize that it collapses behind you.' + + '
have you become trapped?' + })); + }, }).get(); }, -- cgit v1.2.3