commit 3fce02cc02caa2e91d5d10133f596a14b3245292 Author: Sathyanarayanan Gunasekaran gsathya.ceg@gmail.com Date: Sun Sep 23 15:12:18 2012 +0530
Implement search filter --- pyonionoo/database.py | 35 +++++++++++------------------------ pyonionoo/handlers/arguments.py | 2 +- 2 files changed, 12 insertions(+), 25 deletions(-)
diff --git a/pyonionoo/database.py b/pyonionoo/database.py index 18eb4bc..128ccae 100644 --- a/pyonionoo/database.py +++ b/pyonionoo/database.py @@ -203,29 +203,16 @@ def query_summary_tbl(running_filter=None, type_filter=None, hex_fingerprint_fil # some subset (possibly empty) of {'running', 'type', 'lookup', 'country'}. clauses = [] if search_filter: - # We have to do some heuristics here, because the search filters - # do not come with anything to identify which field they correspond - # to. E.g., the request search=ffa means any relay with nickname - # starting with 'ffa' or fingerprint starting with 'ffa' or '$ffa'. - - # Actually, this is a moderately painful parameter to implement. - # Testing for an IP address probably means using regular expressions. - # SQLite doesn't support them without a user-defined function. - # Matching against a Python RE is easy to do, but then we have - # to have a where clause that matches against the beginning of a - # field value, and SQLite doesn't appear to support such a search - # (unless, of course, you want to write a user-defined match() - # function). - pass - else: - if running_filter: - clauses.append("running = %s" % int(running_filter)) - if type_filter: - clauses.append("type = '%s'" % type_filter) - if hex_fingerprint_filter: - clauses.append("fingerprint = '%s'" % hex_fingerprint_filter) - if country_filter: - clauses.append("country_code = '%s'" % country_filter) + for filter in search_filter: + clauses.append("search like '%%%s%%'" % filter) + if running_filter: + clauses.append("running = %s" % int(running_filter)) + if type_filter: + clauses.append("type = '%s'" % type_filter) + if hex_fingerprint_filter: + clauses.append("fingerprint = '%s'" % hex_fingerprint_filter) + if country_filter: + clauses.append("country_code = '%s'" % country_filter) where_clause = ('WHERE %s' % ' and '.join(clauses)) if clauses else ''
# Construct the ORDER, LIMIT, and OFFSET clauses. @@ -259,7 +246,7 @@ def get_summary_routers(running_filter=None, type_filter=None, hex_fingerprint_f @return: tuple of form (relays, bridges, relays_time, bridges_time), where * relays/bridges is a list of Router objects * relays_time/bridges_time is a datetime object with the most - recent timestamp of the relay descriptors in relays. + recent timestamp of the relay/bridges descriptors in relays. """
# Timestamps of most recent relay/bridge in the returned set. diff --git a/pyonionoo/handlers/arguments.py b/pyonionoo/handlers/arguments.py index e853faf..4c18b84 100644 --- a/pyonionoo/handlers/arguments.py +++ b/pyonionoo/handlers/arguments.py @@ -74,7 +74,7 @@ def parse(arguments): # the search parameter, which is then given to us as a single # (space-separated) string. if key == "search": - search_filter = values.split() + search_filter = values[0].split()
# TODO: Handle list of ordering fields. if key == "order":