Skip to content

Commit 8811149

Browse files
committed
another minor grid refactoring
1 parent ec0b034 commit 8811149

1 file changed

Lines changed: 27 additions & 26 deletions

File tree

py4web/utils/grid.py

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ def query_join(a, b):
5656

5757

5858
def make_default_search_query(table):
59-
builder = QueryBuilder()
60-
return ["Query", (lambda text, table=table: builder.parse(table, text)), None]
59+
return ["Query", lambda text, table=table: QueryBuilder().parse(table, text), None]
6160

6261

6362
class GridClassStyle:
@@ -500,8 +499,7 @@ def __init__(
500499

501500
# instance variables that will be computed
502501
self.db = query._db # the database
503-
self.query_init = query # the filter query
504-
self.query = query # the query with additional filters
502+
self.query = query # the filter query
505503
self.query_parms = safely(lambda: request.params, default={})
506504
self.search_query_error = None # error to be displayed in case failed search
507505
self.T = T # the translator
@@ -592,25 +590,7 @@ def process(self):
592590
# SECURITY: if the record does not exist or does not match query, than we are not allowed
593591
self.table = db[self.tablename]
594592

595-
# use the default search for the table
596-
if self.param.search_queries is None:
597-
self.param.search_queries = [make_default_search_query(self.table)]
598-
599-
# apply the search query
600-
if not self.param.search_form and self.param.search_queries:
601-
search_type = safe_int(request.query.get("search_type", 0), default=0)
602-
search_string = request.query.get("search_string")
603-
if search_type < len(self.param.search_queries) and search_string:
604-
_, query_lambda, requires = self.param.search_queries[search_type]
605-
if requires:
606-
search_string, self.search_query_error = requires(search_string)
607-
if not self.search_query_error:
608-
try:
609-
query = query_lambda(search_string)
610-
self.query = self.query_init & query
611-
except Exception as e:
612-
self.search_query_error = str(e)
613-
593+
# if we have a record id retrieve the record
614594
if self.record_id:
615595
self.record = self.table(self.record_id)
616596
if not self.record:
@@ -696,6 +676,27 @@ def _handle_redirect_to_referrer(self, inject_back, redirect_on_post):
696676

697677
def _handle_mode_select(self):
698678
db = self.db
679+
680+
# use the default search for the table
681+
if self.param.search_queries is None:
682+
self.param.search_queries = [make_default_search_query(self.table)]
683+
684+
query = self.query
685+
686+
# apply the search query
687+
if not self.param.search_form and self.param.search_queries:
688+
search_type = safe_int(request.query.get("search_type", 0), default=0)
689+
search_string = request.query.get("search_string")
690+
if search_type < len(self.param.search_queries) and search_string:
691+
_, query_lambda, requires = self.param.search_queries[search_type]
692+
if requires:
693+
search_string, self.search_query_error = requires(search_string)
694+
if not self.search_query_error:
695+
try:
696+
query = self.query & query_lambda(search_string)
697+
except Exception as e:
698+
self.search_query_error = str(e)
699+
699700
# if no column specified use all fields
700701
if not self.param.columns:
701702
self.param.columns = [field for field in self.table if field.readable]
@@ -798,10 +799,10 @@ def compute(row, name=str(col)):
798799
if self.param.groupby or self.param.left:
799800
# need groupby fields in select to get proper count
800801
self.total_number_of_rows = len(
801-
db(self.query).select(db[self.tablename]._id, **select_params)
802+
db(query).select(db[self.tablename]._id, **select_params)
802803
)
803804
else:
804-
self.total_number_of_rows = db(self.query).count()
805+
self.total_number_of_rows = db(query).count()
805806

806807
# if at a high page number and then filter causes less records to be displayed, reset to page 1
807808
if (
@@ -820,7 +821,7 @@ def compute(row, name=str(col)):
820821
self.page_end = self.total_number_of_rows
821822

822823
# get the data
823-
self.rows = db(self.query).select(*self.needed_fields, **select_params)
824+
self.rows = db(query).select(*self.needed_fields, **select_params)
824825

825826
self.number_of_pages = self.total_number_of_rows // self.param.rows_per_page
826827
if self.total_number_of_rows % self.param.rows_per_page > 0:

0 commit comments

Comments
 (0)