aboutsummaryrefslogtreecommitdiff
path: root/wqflask
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask')
-rw-r--r--wqflask/wqflask/server_side.py74
-rw-r--r--wqflask/wqflask/snp_browser/snp_browser.py71
-rw-r--r--wqflask/wqflask/views.py17
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)