From 0088e65a7148fa3f06ce7ddbdf848beddca7c016 Mon Sep 17 00:00:00 2001 From: Ant Zucaro Date: Fri, 9 Dec 2011 07:01:01 -0500 Subject: [PATCH] Basic player search functionality. --- xonstat/__init__.py | 5 ++++ xonstat/templates/search.mako | 22 ++++++++++++++++ xonstat/views/__init__.py | 1 + xonstat/views/search.py | 48 +++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 xonstat/templates/search.mako create mode 100644 xonstat/views/search.py diff --git a/xonstat/__init__.py b/xonstat/__init__.py index 49aab4f..2408c78 100755 --- a/xonstat/__init__.py +++ b/xonstat/__init__.py @@ -83,4 +83,9 @@ def main(global_config, **settings): config.add_route(name="stats_submit", pattern="stats/submit", view=stats_submit, renderer='index.jinja2') + # SEARCH ROUTES + config.add_route(name="search", pattern="search", + view=search, renderer='search.mako') + + return config.make_wsgi_app() diff --git a/xonstat/templates/search.mako b/xonstat/templates/search.mako new file mode 100644 index 0000000..7520caa --- /dev/null +++ b/xonstat/templates/search.mako @@ -0,0 +1,22 @@ +% if results == None: +
+ + Nick:
+ +
+% endif + +% if result_type == "player": + + + + + + % for player in results: + + + + + % endfor +
PlayerJoined
${player.nick_html_colors()|n}${player.joined_pretty_date()}
+% endif diff --git a/xonstat/views/__init__.py b/xonstat/views/__init__.py index 7fdf4d4..9d89e60 100755 --- a/xonstat/views/__init__.py +++ b/xonstat/views/__init__.py @@ -3,4 +3,5 @@ from xonstat.views.player import player_index, player_info, player_game_index from xonstat.views.game import game_index, game_info from xonstat.views.map import map_info, map_index from xonstat.views.server import server_info, server_game_index, server_index +from xonstat.views.search import * from xonstat.views.main import main_index diff --git a/xonstat/views/search.py b/xonstat/views/search.py new file mode 100644 index 0000000..1b3263e --- /dev/null +++ b/xonstat/views/search.py @@ -0,0 +1,48 @@ +import datetime +import logging +import pyramid.httpexceptions +import re +import time +from pyramid.response import Response +from sqlalchemy.orm.exc import MultipleResultsFound, NoResultFound +from sqlalchemy.sql import func +from xonstat.models import * +from xonstat.util import strip_colors, qfont_decode + +log = logging.getLogger(__name__) + +def search_q(player_id=None, nick=None, server_id=None, server_name=None, + map_id=None, map_name=None, game_id=None, create_dt=None): + session = DBSession() + result_type = None + results = None + + # player-only searches + if ((player_id or nick) and not server_id and not server_name and not + map_id and not map_name and not game_id and not create_dt): + result_type = "player" + q = session.query(Player) + if nick: + q = q.filter(func.upper(Player.stripped_nick).like('%'+nick.upper()+'%')) + if player_id: + q = q.filter(Player.player_id==player_id) + + try: + results = q.all() + except: + result_type = None + results = None + + return (result_type, results) + +def search(request): + result_type = None + results = None + + if request.params.has_key('form.submitted'): + nick = request.params['nick'] + (result_type, results) = search_q(nick=nick) + + return {'result_type':result_type, + 'results':results, + } -- 2.39.2