summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorraylu <raylu@gridium.com>2013-10-24 23:57:30 -0700
committerraylu <raylu@gridium.com>2013-10-25 00:03:13 -0700
commit4fb8abde07e94889ba1acfc86e0b36319c136b97 (patch)
treeb4b3cc15ac7845b7b71d33b81f56c566b7bc2f57
parentb9b4dfb68d50a0416001665d72b14c26bd8b3235 (diff)
downloadykill-4fb8abde07e94889ba1acfc86e0b36319c136b97.tar.xz
handle invalid ids
-rw-r--r--db/queries.py17
-rw-r--r--web/api.py20
-rw-r--r--web/static/css/base.ccss7
-rw-r--r--web/static/js/common.js7
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.' +
+ '<br>have you become trapped?'
+ }));
+ },
}).get();
},