diff options
-rw-r--r-- | wqflask/wqflask/server_side.py | 74 | ||||
-rw-r--r-- | wqflask/wqflask/snp_browser/snp_browser.py | 71 | ||||
-rw-r--r-- | wqflask/wqflask/views.py | 17 |
3 files changed, 89 insertions, 73 deletions
diff --git a/wqflask/wqflask/server_side.py b/wqflask/wqflask/server_side.py new file mode 100644 index 00000000..090720ec --- /dev/null +++ b/wqflask/wqflask/server_side.py @@ -0,0 +1,74 @@ +# handles server side table processing + + + +class ServerSide(object): + + def __init__(self, table_data, request_values): + self.request_values = request_values + self.sEcho = self.request_values['sEcho'] + + self.table_data = table_data + self.rows_count = self.table_data.rows_count + self.table_rows = self.table_data.table_rows + self.header_data_names = self.table_data.header_data_names + + self.sort_rows() + self.paginate_rows() + + def sort_rows(self): + ''' + Sorts the rows taking in to account the column (or columns) that the + user has selected. + ''' + def is_reverse(str_direction): + ''' Maps the 'desc' and 'asc' words to True or False. ''' + return True if str_direction == 'desc' else False + + if (self.request_values['iSortCol_0'] != "") and (int(self.request_values['iSortingCols']) > 0): + for i in range(0, int(self.request_values['iSortingCols'])): + column_number = int(self.request_values['iSortCol_' + str(i)]) + column_name = self.header_data_names[column_number - 1] + sort_direction = self.request_values['sSortDir_' + str(i)] + self.table_rows = sorted(self.table_rows, + key=lambda x: x[column_name], + reverse=is_reverse(sort_direction)) + + def paginate_rows(self): + ''' + Selects a subset of the filtered and sorted data based on if the table + has pagination, the current page and the size of each page. + ''' + def requires_pagination(): + ''' Check if the table is going to be paginated ''' + if self.request_values['iDisplayStart'] != "": + if int(self.request_values['iDisplayLength']) != -1: + return True + return False + + if not requires_pagination(): + return + + start = int(self.request_values['iDisplayStart']) + length = int(self.request_values['iDisplayLength']) + + # if search returns only one page + if len(self.table_rows) <= length: + # display only one page + self.table_rows = self.table_rows[start:] + else: + limit = -len(self.table_rows) + start + length + if limit < 0: + # display pagination + self.table_rows = self.table_rows[start:limit] + else: + # display last page of pagination + self.table_rows = self.table_rows[start:] + + def get_page(self): + output = {} + output['sEcho'] = str(self.sEcho) + output['iTotalRecords'] = str(float('Nan')) + output['iTotalDisplayRecords'] = str(self.rows_count) + output['data'] = self.table_rows + return output diff --git a/wqflask/wqflask/snp_browser/snp_browser.py b/wqflask/wqflask/snp_browser/snp_browser.py index 58c90f11..a52399a2 100644 --- a/wqflask/wqflask/snp_browser/snp_browser.py +++ b/wqflask/wqflask/snp_browser/snp_browser.py @@ -641,77 +641,6 @@ class SnpBrowser(object): #for i in range(n_click): # href = url_for('snp_browser', first_run="false", chosen_strains_mouse=self.chosen_strains_mouse, chosen_strains_rat=self.chosen_strains_rat, variant=self.variant_type, species=self.species_name, gene_name=self.gene_name, chr=self.chr, start_mb=self.start_mb, end_mb=self.end_mb, limit_strains=self.limit_strains, domain=self.domain, function=self.function, criteria=self.criteria, score=self.score, diff_alleles=self.diff_alleles) -class SnpPage(object): - - def __init__(self, request): - self.request_values = request - self.sEcho = self.request_values['sEcho'] - - self.snp_browser = SnpBrowser(request) - self.rows_count = self.snp_browser.rows_count - self.table_rows = self.snp_browser.table_rows - self.header_data_names = self.snp_browser.header_data_names - - self.sort_rows() - self.paginate_rows() - - def sort_rows(self): - ''' - Sorts the rows taking in to account the column (or columns) that the - user has selected. - ''' - def is_reverse(str_direction): - ''' Maps the 'desc' and 'asc' words to True or False. ''' - return True if str_direction == 'desc' else False - - if (self.request_values['iSortCol_0'] != "") and (int(self.request_values['iSortingCols']) > 0): - for i in range(0, int(self.request_values['iSortingCols'])): - column_number = int(self.request_values['iSortCol_' + str(i)]) - column_name = self.header_data_names[column_number - 1] - sort_direction = self.request_values['sSortDir_' + str(i)] - self.table_rows = sorted(self.table_rows, - key=lambda x: x[column_name], - reverse=is_reverse(sort_direction)) - - def paginate_rows(self): - ''' - Selects a subset of the filtered and sorted data based on if the table - has pagination, the current page and the size of each page. - ''' - def requires_pagination(): - ''' Check if the table is going to be paginated ''' - if self.request_values['iDisplayStart'] != "": - if int(self.request_values['iDisplayLength']) != -1: - return True - return False - - if not requires_pagination(): - return - - start = int(self.request_values['iDisplayStart']) - length = int(self.request_values['iDisplayLength']) - - # if search returns only one page - if len(self.table_rows) <= length: - # display only one page - self.table_rows = self.table_rows[start:] - else: - limit = -len(self.table_rows) + start + length - if limit < 0: - # display pagination - self.table_rows = self.table_rows[start:limit] - else: - # display last page of pagination - self.table_rows = self.table_rows[start:] - - def get_page(self): - output = {} - output['sEcho'] = str(self.sEcho) - output['iTotalRecords'] = str(float('Nan')) - output['iTotalDisplayRecords'] = str(self.rows_count) - output['data'] = self.table_rows - return output - def get_browser_sample_lists(species_id=1): strain_lists = {} mouse_strain_list = [] diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index 12ebf595..185517d3 100644 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -27,7 +27,19 @@ import array import sqlalchemy from wqflask import app from flask import g, Response, request, make_response, render_template, send_from_directory, jsonify, redirect, url_for, send_file - +<<<<<<< HEAD + +======= +from wqflask import group_manager +from wqflask import resource_manager +from wqflask import search_results +from wqflask import export_traits +from wqflask import gsearch +from wqflask import update_search_results +from wqflask import docs +from wqflask import news +from wqflask import server_side +>>>>>>> ed2afa4a (move SnpPage to a generic class ServerSide) from wqflask.submit_bnw import get_bnw_input from base.data_set import create_dataset, DataSet # Used by YAML in marker_regression from wqflask.show_trait import show_trait @@ -909,7 +921,8 @@ def db_info_page(): @app.route("/snp_browser_table", methods=('GET',)) def snp_browser_table(): logger.info(request.url) - current_page = snp_browser.SnpPage(request.args).get_page() + snp_table_data = snp_browser.SnpBrowser(request.args) + current_page = server_side.ServerSide(snp_table_data, request.args).get_page() return flask.jsonify(current_page) |