3 import pyramid.httpexceptions
6 from pyramid.response import Response
7 from sqlalchemy import desc
8 from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound
9 from sqlalchemy.sql import func
10 from xonstat.models import *
11 from xonstat.util import strip_colors, qfont_decode
12 from xonstat.util import page_url, html_colors
13 from webhelpers.paginate import Page, PageURL
15 log = logging.getLogger(__name__)
17 def search_q(nick=None, server_name=None, map_name=None, create_dt=None):
22 # player-only searches
23 if nick and not server_name and not map_name and not create_dt:
24 result_type = "player"
25 q = session.query(Player)
28 func.upper(Player.stripped_nick).like('%'+nick.upper()+'%'))
30 # server-only searches
31 elif server_name and not nick and not map_name and not create_dt:
32 result_type = "server"
33 q = session.query(Server)
35 q = q.filter(func.upper(Server.name).\
36 like('%'+server_name.upper()+'%'))
39 elif map_name and not nick and not server_name and not create_dt:
41 q = session.query(Map)
43 q = q.filter(func.upper(Map.name).\
44 like('%'+map_name.upper()+'%'))
46 # game searches (all else)
49 q = session.query(Game, Server, Map).\
50 filter(Game.server_id == Server.server_id).\
51 filter(Game.map_id == Map.map_id).\
52 order_by(Game.game_id.desc())
54 q = q.filter(func.upper(PlayerGameStat.stripped_nick).\
55 like('%'+nick.upper()+'%')).\
56 filter(PlayerGameStat.game_id == Game.game_id)
58 q = q.filter(func.upper(Map.name).\
59 like('%'+map_name.upper()+'%'))
61 q = q.filter(func.upper(Server.name).\
62 like('%'+server_name.upper()+'%'))
64 return (result_type, q)
74 if request.params.has_key('form_submitted'):
75 nick = request.params['nick']
76 server_name = request.params['server_name']
77 map_name = request.params['map_name']
78 (result_type, q) = search_q(nick=nick, server_name=server_name,
85 except Exception as e:
90 return {'result_type':result_type,