diff options
-rw-r--r-- | wqflask/base/data_set.py | 62 | ||||
-rw-r--r-- | wqflask/utility/startup_config.py | 4 | ||||
-rw-r--r-- | wqflask/utility/tools.py | 8 | ||||
-rw-r--r-- | wqflask/wqflask/api/gen_menu.py | 1 | ||||
-rw-r--r-- | wqflask/wqflask/collect.py | 2 | ||||
-rw-r--r-- | wqflask/wqflask/marker_regression/display_mapping_results.py | 3 | ||||
-rw-r--r-- | wqflask/wqflask/marker_regression/rqtl_mapping.py | 29 | ||||
-rw-r--r-- | wqflask/wqflask/marker_regression/run_mapping.py | 9 | ||||
-rw-r--r-- | wqflask/wqflask/show_trait/SampleList.py | 84 | ||||
-rw-r--r-- | wqflask/wqflask/show_trait/show_trait.py | 4 | ||||
-rw-r--r-- | wqflask/wqflask/static/new/javascript/show_trait.js | 2 | ||||
-rw-r--r-- | wqflask/wqflask/templates/mapping_results.html | 22 | ||||
-rw-r--r-- | wqflask/wqflask/templates/search_result_page.html | 2 | ||||
-rw-r--r-- | wqflask/wqflask/user_login.py | 41 | ||||
-rw-r--r-- | wqflask/wqflask/user_session.py | 13 | ||||
-rw-r--r-- | wqflask/wqflask/views.py | 20 |
16 files changed, 204 insertions, 102 deletions
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py index ebf3f021..fae62875 100644 --- a/wqflask/base/data_set.py +++ b/wqflask/base/data_set.py @@ -67,7 +67,6 @@ DS_NAME_MAP = {} def create_dataset(dataset_name, rebuild=True, dataset_type = None, get_samplelist = True, group_name = None): if not dataset_type: dataset_type = Dataset_Getter(dataset_name) - logger.debug("dataset_type", dataset_type) dataset_ob = DS_NAME_MAP[dataset_type] dataset_class = globals()[dataset_ob] @@ -96,7 +95,6 @@ Publish or ProbeSet. E.g. self.datasets = {} if rebuild: #ZS: May make this the only option data = json.loads(requests.get("http://gn2.genenetwork.org/api/v_pre1/gen_dropdown").content) - logger.debug("THE DATA:", data) #data = gen_menu.gen_dropdown_json() else: file_name = "wqflask/static/new/javascript/dataset_menu_structure.json" @@ -120,7 +118,65 @@ Publish or ProbeSet. E.g. logger.debugf(5, "datasets",self.datasets) def __call__(self, name): - return self.datasets[name] + if name not in self.datasets: + mrna_expr_query = """ + SELECT + ProbeSetFreeze.Id + FROM + ProbeSetFreeze + WHERE + ProbeSetFreeze.Name = "{0}" + """.format(name) + + results = g.db.execute(geno_query).fetchall() + if len(results): + self.datasets[name] = "ProbeSet" + return self.datasets[name] + + group_name = name.replace("Publish", "") + + pheno_query = """SELECT InfoFiles.GN_AccesionId + FROM InfoFiles, PublishFreeze, InbredSet + WHERE InbredSet.Name = '{0}' AND + PublishFreeze.InbredSetId = InbredSet.Id AND + InfoFiles.InfoPageName = PublishFreeze.Name""".format(group_name) + + results = g.db.execute(pheno_query).fetchall() + if len(results): + self.datasets[name] = "Publish" + return self.datasets[name] + + #ZS: For when there isn't an InfoFiles ID; not sure if this and the preceding query are both necessary + other_pheno_query = """SELECT PublishFreeze.Name + FROM PublishFreeze, InbredSet + WHERE InbredSet.Name = '{}' AND + PublishFreeze.InbredSetId = InbredSet.Id""".format(group_name) + + results = g.db.execute(other_pheno_query).fetchall() + if len(results): + self.datasets[name] = "Publish" + return self.datasets[name] + + geno_query = """ + SELECT + GenoFreezeId + FROM + GenoFreeze + WHERE + GenoFreeze.Name = "{0}" + {1} + """.format(name) + + results = g.db.execute(geno_query).fetchall() + if len(results): + self.datasets[name] = "Geno" + return self.datasets[name] + + #ZS: It shouldn't ever reach this + return None + + else: + return self.datasets[name] # Do the intensive work at startup one time only Dataset_Getter = Dataset_Types() diff --git a/wqflask/utility/startup_config.py b/wqflask/utility/startup_config.py index 5a62cc50..817284dd 100644 --- a/wqflask/utility/startup_config.py +++ b/wqflask/utility/startup_config.py @@ -33,7 +33,7 @@ def app_config(): if page.status_code != 200: raise Exception("API server not found!") - import utility.elasticsearch_tools as es - es.test_elasticsearch_connection() + # import utility.elasticsearch_tools as es + # es.test_elasticsearch_connection() print("GN2 is running. Visit %s[http://localhost:%s/%s](%s)" % (BLUE,str(port),ENDC,get_setting("WEBSERVER_URL"))) diff --git a/wqflask/utility/tools.py b/wqflask/utility/tools.py index 75bddb24..0fbedccb 100644 --- a/wqflask/utility/tools.py +++ b/wqflask/utility/tools.py @@ -267,10 +267,10 @@ if ORCID_CLIENT_ID != 'UNKNOWN' and ORCID_CLIENT_SECRET: ORCID_CLIENT_ID+"&client_secret="+ORCID_CLIENT_SECRET ORCID_TOKEN_URL = get_setting('ORCID_TOKEN_URL') -ELASTICSEARCH_HOST = get_setting('ELASTICSEARCH_HOST') -ELASTICSEARCH_PORT = get_setting('ELASTICSEARCH_PORT') -import utility.elasticsearch_tools as es -es.test_elasticsearch_connection() +# ELASTICSEARCH_HOST = get_setting('ELASTICSEARCH_HOST') +# ELASTICSEARCH_PORT = get_setting('ELASTICSEARCH_PORT') +# import utility.elasticsearch_tools as es +# es.test_elasticsearch_connection() SMTP_CONNECT = get_setting('SMTP_CONNECT') SMTP_USERNAME = get_setting('SMTP_USERNAME') diff --git a/wqflask/wqflask/api/gen_menu.py b/wqflask/wqflask/api/gen_menu.py index 7d2d243c..64a413c2 100644 --- a/wqflask/wqflask/api/gen_menu.py +++ b/wqflask/wqflask/api/gen_menu.py @@ -47,7 +47,6 @@ def get_species(): """Build species list""" results = g.db.execute("""SELECT Name, MenuName FROM Species - WHERE Species.Name != 'macaque monkey' ORDER BY OrderId""").fetchall() species = [] diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py index fa6e03b4..1d74b699 100644 --- a/wqflask/wqflask/collect.py +++ b/wqflask/wqflask/collect.py @@ -108,7 +108,7 @@ def collections_new(): if 'existing_collection' not in params: collections = g.user_session.user_collections for collection in collections: - if collection["name"] == "Default Collection": + if collection["name"] == "Your Default Collection": collection_id = collection["id"] collection_name = collection["name"] default_collection_exists = True diff --git a/wqflask/wqflask/marker_regression/display_mapping_results.py b/wqflask/wqflask/marker_regression/display_mapping_results.py index a7e11738..2a53b60e 100644 --- a/wqflask/wqflask/marker_regression/display_mapping_results.py +++ b/wqflask/wqflask/marker_regression/display_mapping_results.py @@ -166,6 +166,7 @@ class DisplayMappingResults(object): #Needing for form submission when doing single chr mapping or remapping after changing options self.samples = start_vars['samples'] self.vals = start_vars['vals'] + self.transform = start_vars['transform'] self.mapping_method = start_vars['mapping_method'] self.mapping_results_path = start_vars['mapping_results_path'] if self.mapping_method == "rqtl_geno": @@ -233,6 +234,8 @@ class DisplayMappingResults(object): self.covariates = start_vars['covariates'] if 'maf' in start_vars.keys(): self.maf = start_vars['maf'] + else: + self.maf = "" if 'output_files' in start_vars.keys(): self.output_files = start_vars['output_files'] if 'use_loco' in start_vars.keys() and self.mapping_method == "gemma": diff --git a/wqflask/wqflask/marker_regression/rqtl_mapping.py b/wqflask/wqflask/marker_regression/rqtl_mapping.py index aae8e602..e1aa290b 100644 --- a/wqflask/wqflask/marker_regression/rqtl_mapping.py +++ b/wqflask/wqflask/marker_regression/rqtl_mapping.py @@ -36,7 +36,10 @@ def run_rqtl_geno(vals, samples, dataset, method, model, permCheck, num_perm, pe generate_cross_from_geno(dataset) GENOtoCSVR = ro.r["GENOtoCSVR"] # Map the local GENOtoCSVR function crossfilelocation = TMPDIR + crossname + ".cross" - genofilelocation = locate(dataset.group.genofile, "genotype") + if dataset.group.genofile: + genofilelocation = locate(dataset.group.genofile, "genotype") + else: + genofilelocation = locate(dataset.group.name + ".geno", "genotype") cross_object = GENOtoCSVR(genofilelocation, crossfilelocation) # TODO: Add the SEX if that is available if manhattan_plot: @@ -91,9 +94,11 @@ def run_rqtl_geno(vals, samples, dataset, method, model, permCheck, num_perm, pe perm_data_frame = scanone(cross_object, pheno_col = "the_pheno", n_perm = num_perm, model=model, method=method) perm_output, suggestive, significant = process_rqtl_perm_results(num_perm, perm_data_frame) # Functions that sets the thresholds for the webinterface - return perm_output, suggestive, significant, process_rqtl_results(result_data_frame, dataset.group.species) + the_scale = check_mapping_scale(genofilelocation) + return perm_output, suggestive, significant, process_rqtl_results(result_data_frame, dataset.group.species), the_scale else: - return process_rqtl_results(result_data_frame, dataset.group.species) + the_scale = check_mapping_scale(genofilelocation) + return process_rqtl_results(result_data_frame, dataset.group.species), the_scale def generate_cross_from_rdata(dataset): rdata_location = locate(dataset.group.name + ".RData", "genotype/rdata") @@ -286,4 +291,20 @@ def process_rqtl_results(result, species_name): # TODO: how to make this marker['lod_score'] = output[i][2] qtl_results.append(marker) - return qtl_results
\ No newline at end of file + return qtl_results + +def check_mapping_scale(genofile_location): + scale = "physic" + with open(genofile_location, "r") as geno_fh: + for line in geno_fh: + if line[0] == "@" or line[0] == "#": + + if "@scale" in line: + scale = line.split(":")[1].strip() + break + else: + continue + else: + break + + return scale
\ No newline at end of file diff --git a/wqflask/wqflask/marker_regression/run_mapping.py b/wqflask/wqflask/marker_regression/run_mapping.py index e191902c..589be702 100644 --- a/wqflask/wqflask/marker_regression/run_mapping.py +++ b/wqflask/wqflask/marker_regression/run_mapping.py @@ -150,6 +150,10 @@ class RunMapping(object): self.suggestive = "" self.significant = "" self.pair_scan = False # Initializing this since it is checked in views to determine which template to use + if 'transform' in start_vars: + self.transform = start_vars['transform'] + else: + self.transform = "" self.score_type = "LRS" #ZS: LRS or LOD self.mapping_scale = "physic" self.num_perm = 0 @@ -241,7 +245,6 @@ class RunMapping(object): perm_strata = get_perm_strata(self.this_trait, primary_samples, self.categorical_vars, self.samples) self.score_type = "LOD" - #self.mapping_scale = "morgan" self.control_marker = start_vars['control_marker'] self.do_control = start_vars['do_control'] if 'mapmethod_rqtl_geno' in start_vars: @@ -252,9 +255,9 @@ class RunMapping(object): #if start_vars['pair_scan'] == "true": # self.pair_scan = True if self.permCheck and self.num_perm > 0: - self.perm_output, self.suggestive, self.significant, results = rqtl_mapping.run_rqtl_geno(self.vals, self.samples, self.dataset, self.method, self.model, self.permCheck, self.num_perm, perm_strata, self.do_control, self.control_marker, self.manhattan_plot, self.pair_scan, self.covariates) + self.perm_output, self.suggestive, self.significant, results, self.mapping_scale = rqtl_mapping.run_rqtl_geno(self.vals, self.samples, self.dataset, self.method, self.model, self.permCheck, self.num_perm, perm_strata, self.do_control, self.control_marker, self.manhattan_plot, self.pair_scan, self.covariates) else: - results = rqtl_mapping.run_rqtl_geno(self.vals, self.samples, self.dataset, self.method, self.model, self.permCheck, self.num_perm, perm_strata, self.do_control, self.control_marker, self.manhattan_plot, self.pair_scan, self.covariates) + results, self.mapping_scale = rqtl_mapping.run_rqtl_geno(self.vals, self.samples, self.dataset, self.method, self.model, self.permCheck, self.num_perm, perm_strata, self.do_control, self.control_marker, self.manhattan_plot, self.pair_scan, self.covariates) elif self.mapping_method == "reaper": if "startMb" in start_vars: #ZS: Check if first time page loaded, so it can default to ON if "additiveCheck" in start_vars: diff --git a/wqflask/wqflask/show_trait/SampleList.py b/wqflask/wqflask/show_trait/SampleList.py index 7e126a36..ad78ebcc 100644 --- a/wqflask/wqflask/show_trait/SampleList.py +++ b/wqflask/wqflask/show_trait/SampleList.py @@ -14,8 +14,6 @@ import simplejson as json import itertools -from utility.elasticsearch_tools import get_elasticsearch_connection - import utility.logger logger = utility.logger.getLogger(__name__ ) @@ -158,47 +156,47 @@ class SampleList(object): return any(sample.variance for sample in self.sample_list) -def get_transform_vals(dataset, trait): - es = get_elasticsearch_connection(for_user=False) - - logger.info("DATASET NAME:", dataset.name) - - query = '{"bool": {"must": [{"match": {"name": "%s"}}, {"match": {"dataset": "%s"}}]}}' % (trait.name, dataset.name) - - es_body = { - "query": { - "bool": { - "must": [ - { - "match": { - "name": "%s" % (trait.name) - } - }, - { - "match": { - "dataset": "%s" % (dataset.name) - } - } - ] - } - } - } - - response = es.search( index = "traits", doc_type = "trait", body = es_body ) - logger.info("THE RESPONSE:", response) - results = response['hits']['hits'] - - if len(results) > 0: - samples = results[0]['_source']['samples'] - - sample_dict = {} - for sample in samples: - sample_dict[sample['name']] = sample['qnorm'] - - #logger.info("SAMPLE DICT:", sample_dict) - return sample_dict - else: - return None +# def get_transform_vals(dataset, trait): +# es = get_elasticsearch_connection(for_user=False) + +# logger.info("DATASET NAME:", dataset.name) + +# query = '{"bool": {"must": [{"match": {"name": "%s"}}, {"match": {"dataset": "%s"}}]}}' % (trait.name, dataset.name) + +# es_body = { +# "query": { +# "bool": { +# "must": [ +# { +# "match": { +# "name": "%s" % (trait.name) +# } +# }, +# { +# "match": { +# "dataset": "%s" % (dataset.name) +# } +# } +# ] +# } +# } +# } + +# response = es.search( index = "traits", doc_type = "trait", body = es_body ) +# logger.info("THE RESPONSE:", response) +# results = response['hits']['hits'] + +# if len(results) > 0: +# samples = results[0]['_source']['samples'] + +# sample_dict = {} +# for sample in samples: +# sample_dict[sample['name']] = sample['qnorm'] + +# #logger.info("SAMPLE DICT:", sample_dict) +# return sample_dict +# else: +# return None def natural_sort_key(x): """Get expected results when using as a key for sort - ints or strings are sorted properly""" diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py index d35ba749..8883e627 100644 --- a/wqflask/wqflask/show_trait/show_trait.py +++ b/wqflask/wqflask/show_trait/show_trait.py @@ -364,8 +364,8 @@ class ShowTrait(object): if self.dataset: dataset_menu_selected = self.dataset.name - return_results_menu = (100, 200, 500, 1000, 2000, 5000, 10000, 15000, 20000) - return_results_menu_selected = 500 + return_results_menu = (100, 200, 500, 1000, 2000, 5000, 10000, 15000, 20000) + return_results_menu_selected = 500 self.corr_tools = dict(dataset_menu = dataset_menu, dataset_menu_selected = dataset_menu_selected, diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js index 28d13345..d94a2347 100644 --- a/wqflask/wqflask/static/new/javascript/show_trait.js +++ b/wqflask/wqflask/static/new/javascript/show_trait.js @@ -367,6 +367,8 @@ make_table = function() { var header, key, row, row_line, table, the_id, the_rows, value, _i, _len, _ref, _ref1; if (js_data.trait_symbol != null) { header = "<thead><tr><th style=\"color: white; background-color: #369; text-align: center;\" colspan=\"100%\">Trait " + js_data.trait_id + " - " + js_data.trait_symbol + "</th></tr><tr><th style=\"text-align: right; padding-left: 5px;\">Statistic</th>"; + } else if (js_data.dataset_type == "Geno"){ + header = "<thead><tr><th style=\"color: white; background-color: #369; text-align: center;\" colspan=\"100%\">Marker " + js_data.trait_id + "</th></tr><tr><th style=\"text-align: right; padding-left: 5px;\">Statistic</th>"; } else { header = "<thead><tr><th style=\"color: white; background-color: #369; text-align: center;\" colspan=\"100%\">Trait " + js_data.trait_id + ": " + js_data.short_description + "</th></tr><tr><th style=\"text-align: right; padding-left: 5px;\">Statistic</th>"; } diff --git a/wqflask/wqflask/templates/mapping_results.html b/wqflask/wqflask/templates/mapping_results.html index ba0ebef9..7e05be18 100644 --- a/wqflask/wqflask/templates/mapping_results.html +++ b/wqflask/wqflask/templates/mapping_results.html @@ -36,7 +36,7 @@ <input type="hidden" name="value:{{ sample }}" value="{{ vals[loop.index - 1] }}"> {% endfor %} <input type="hidden" name="num_vals" value="{{ n_samples }}"> - <input type="hidden" name="maf"> + <input type="hidden" name="maf" value="{{ maf }}"> <input type="hidden" name="use_loco" value="{{ use_loco }}"> <input type="hidden" name="selected_chr" value="{{ selectedChr }}"> <input type="hidden" name="manhattan_plot" value="{{ manhattan_plot }}"> @@ -45,10 +45,14 @@ <input type="hidden" name="num_bootstrap" value="{{ nboot }}"> <input type="hidden" name="do_control" value="{{ doControl }}"> <input type="hidden" name="control_marker" value="{{ controlLocus }}"> - <input type="hidden" name="covariates" values="{{ covariates }}"> + <input type="hidden" name="covariates" value="{{ covariates }}"> <input type="hidden" name="mapmethod_rqtl_geno" value="{{ mapmethod_rqtl_geno }}"> <input type="hidden" name="mapmodel_rqtl_geno" value="{{ mapmodel_rqtl_geno }}"> <input type="hidden" name="pair_scan" value="{{ pair_scan }}"> + <input type="hidden" name="transform" value="{{ transform }}"> + <input type="hidden" name="tool_used" value="Mapping"> + <input type="hidden" name="wanted_inputs" value=""> + <input type="hidden" name="form_url" value="/run_mapping"> <div class="container"> <div class="col-xs-5"> @@ -422,11 +426,19 @@ }); + var mapping_input_list = ['temp_uuid', 'trait_id', 'dataset', 'tool_used', 'form_url', 'method', 'transform', 'trimmed_markers', 'selected_chr', 'chromosomes', 'mapping_scale', + 'score_type', 'suggestive', 'significant', 'num_perm', 'permCheck', 'perm_output', 'perm_strata', 'categorical_vars', 'num_bootstrap', 'bootCheck', 'bootstrap_results', + 'LRSCheck', 'covariates', 'maf', 'use_loco', 'manhattan_plot', 'control_marker', 'control_marker_db', 'do_control', 'genofile', + 'pair_scan', 'startMb', 'endMb', 'graphWidth', 'lrsMax', 'additiveCheck', 'showSNP', 'showGenes', 'viewLegend', 'haplotypeAnalystCheck', + 'mapmethod_rqtl_geno', 'mapmodel_rqtl_geno', 'temp_trait', 'group', 'species', 'reaper_version', 'primary_samples', 'num_vals'] + + $('input[name=wanted_inputs]').val(mapping_input_list.join(",")); + chrView = function(this_chr, chr_mb_list) { $('input[name=selected_chr]').val(this_chr) $('input[name=chr_mb_list]').val(chr_mb_list) - $('#marker_regression_form').attr('action', '/run_mapping'); + $('#marker_regression_form').attr('action', '/loading'); return $('#marker_regression_form').submit(); }; @@ -436,13 +448,13 @@ $('input[name=endMb]').val(end_mb) //$('input[name=mb_range]').val(start_mb + "," + end_mb) - $('#marker_regression_form').attr('action', '/run_mapping'); + $('#marker_regression_form').attr('action', '/loading'); return $('#marker_regression_form').submit(); }; remap = function() { $('input[name=selected_chr]').val($('select[name=chromosomes]').val()); - $('#marker_regression_form').attr('action', '/run_mapping'); + $('#marker_regression_form').attr('action', '/loading'); return $('#marker_regression_form').submit(); }; diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html index 33221e0f..0f5c39b0 100644 --- a/wqflask/wqflask/templates/search_result_page.html +++ b/wqflask/wqflask/templates/search_result_page.html @@ -27,6 +27,8 @@ with <u>GeneWiki</u> containing <strong>{{ word.search_term[0] }}</strong>{% if loop.last %}.{% else %} and {% endif %} {% elif word.key|lower == "mean" %} with <u>MEAN</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong>{% if loop.last %}.{% else %} and {% endif %} + {% elif word.key|lower == "range" %} + with <u>RANGE</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong>{% if loop.last %}.{% else %} and {% endif %} {% elif word.key|lower == "lrs" or word.key|lower == "lod" or word.key|lower == "translrs" or word.key|lower == "cislrs" or word.key|lower == "translod" or word.key|lower == "cislod" %} {% if word.search_term|length == 1 %} with {% if word.key|lower == "translrs" %}trans{% elif word.key|lower == "cislrs" %}cis{% endif %}LRS {% if word.separator == ">" %} greater than {% elif word.separator == "<" %} less than {% elif word.separator == ">=" %} greater than or equal to {% elif word.separator == "<=" %} less than or equal to {% endif %} <strong>{{ word.search_term[0] }}</strong>{% if loop.last %}.{% else %} and {% endif %} diff --git a/wqflask/wqflask/user_login.py b/wqflask/wqflask/user_login.py index da3cc504..edd272c2 100644 --- a/wqflask/wqflask/user_login.py +++ b/wqflask/wqflask/user_login.py @@ -6,7 +6,6 @@ import datetime import time import logging import uuid -import hashlib import hmac import base64 import requests @@ -42,17 +41,20 @@ def basic_info(): ip_address = request.remote_addr, user_agent = request.headers.get('User-Agent')) -def encode_password(pass_gen_fields): +def encode_password(pass_gen_fields, unencrypted_password): hashfunc = getattr(hashlib, pass_gen_fields['hashfunc']) salt = base64.b64decode(pass_gen_fields['salt']) - password = pbkdf2.pbkdf2_hex(str(pass_gen_fields['unencrypted_password']), + encrypted_password = pbkdf2.pbkdf2_hex(str(unencrypted_password), pass_gen_fields['salt'], pass_gen_fields['iterations'], pass_gen_fields['keylength'], hashfunc) - return password + pass_gen_fields.pop("unencrypted_password", None) + pass_gen_fields["password"] = encrypted_password + + return pass_gen_fields def set_password(password): pass_gen_fields = { @@ -67,19 +69,10 @@ def set_password(password): assert len(password) >= 6, "Password shouldn't be shorter than 6 characters" - encoded_password = encode_password(pass_gen_fields) + encoded_password = encode_password(pass_gen_fields, pass_gen_fields['unencrypted_password']) return encoded_password -def encrypt_password(unencrypted_password, pwfields): - hashfunc = getattr(hashlib, pwfields['hashfunc']) - salt = base64.b64decode(pwfields['salt']) - iterations = pwfields['iterations'] - keylength = pwfields['keylength'] - encrypted_password = pbkdf2.pbkdf2_hex(str(unencrypted_password), - salt, iterations, keylength, hashfunc) - return encrypted_password - def get_signed_session_id(user): session_id = str(uuid.uuid4()) @@ -186,9 +179,12 @@ def login(): password_match = False if user_details: submitted_password = params['password'] - pwfields = json.loads(user_details['password']) - encrypted_pass = encrypt_password(submitted_password, pwfields) - password_match = pbkdf2.safe_str_cmp(encrypted_pass, pwfields['password']) + pwfields = user_details['password'] + if type(pwfields) is str: + pwfields = json.loads(pwfields) + encrypted_pass_fields = encode_password(pwfields, submitted_password) + password_match = pbkdf2.safe_str_cmp(encrypted_pass_fields['password'], pwfields['password']) + else: # Invalid e-mail flash("Invalid e-mail address. Please try again.", "alert-danger") response = make_response(redirect(url_for('login'))) @@ -226,7 +222,7 @@ def github_oauth2(): "client_secret": GITHUB_CLIENT_SECRET, "code": code } - logger.debug("LOGIN DATA:", data) + result = requests.post("https://github.com/login/oauth/access_token", json=data) result_dict = {arr[0]:arr[1] for arr in [tok.split("=") for tok in [token.encode("utf-8") for token in result.text.split("&")]]} @@ -437,19 +433,18 @@ def register_user(params): if params.get('password_confirm') != password: errors.append("Passwords don't match.") - if errors: - return errors - user_details['password'] = set_password(password) user_details['user_id'] = str(uuid.uuid4()) user_details['confirmed'] = 1 - user_details['registration_info'] = json.dumps(basic_info(), sort_keys=True) + user_details['registration_info'] = basic_info() save_user(user_details, user_details['user_id']) + return errors + @app.route("/n/register", methods=('GET', 'POST')) def register(): - errors = None + errors = [] params = request.form if request.form else request.args params = params.to_dict(flat=True) diff --git a/wqflask/wqflask/user_session.py b/wqflask/wqflask/user_session.py index d75a03df..fd1779fb 100644 --- a/wqflask/wqflask/user_session.py +++ b/wqflask/wqflask/user_session.py @@ -9,6 +9,7 @@ import simplejson as json import redis # used for collections Redis = redis.StrictRedis() + from flask import (Flask, g, render_template, url_for, request, make_response, redirect, flash, abort) @@ -69,19 +70,23 @@ class UserSession(object): if not self.record or self.record == []: if user_cookie: self.logged_in = False + self.record = dict(login_time = time.time(), + user_type = "anon", + user_id = str(uuid.uuid4())) + Redis.hmset(self.redis_key, self.record) + Redis.expire(self.redis_key, THIRTY_DAYS) + response = make_response(redirect(url_for('login'))) + response.set_cookie(self.user_cookie_name, '', expires=0) ########### Grrr...this won't work because of the way flask handles cookies # Delete the cookie - response = make_response(redirect(url_for('login'))) - #response.set_cookie(self.cookie_name, '', expires=0) flash("Due to inactivity your session has expired. If you'd like please login again.") - #return response + return response #return else: self.record = dict(login_time = time.time(), user_type = "anon", user_id = str(uuid.uuid4())) - Redis.hmset(self.redis_key, self.record) Redis.expire(self.redis_key, THIRTY_DAYS) else: diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py index b91d58d7..7d3dfa48 100644 --- a/wqflask/wqflask/views.py +++ b/wqflask/wqflask/views.py @@ -589,18 +589,23 @@ def loading_page(): if key in wanted or key.startswith(('value:')): start_vars[key] = value - if 'primary_samples' in start_vars: - samples = start_vars['primary_samples'].split(",") - for sample in samples: - value = start_vars.get('value:' + sample) - if value != "x": - num_vals += 1 + if 'num_vals' in start_vars: + num_vals = int(start_vars['num_vals']) + else: + if 'primary_samples' in start_vars: + samples = start_vars['primary_samples'].split(",") + for sample in samples: + value = start_vars.get('value:' + sample) + if value != "x": + num_vals += 1 start_vars['num_vals'] = num_vals + start_vars['wanted_inputs'] = initial_start_vars['wanted_inputs'] start_vars_container['start_vars'] = start_vars else: start_vars_container['start_vars'] = initial_start_vars + rendered_template = render_template("loading.html", **start_vars_container) return rendered_template @@ -664,7 +669,8 @@ def mapping_results_page(): 'mapmodel_rqtl_geno', 'temp_trait', 'reaper_version', - 'num_vals' + 'num_vals', + 'transform' ) start_vars = {} for key, value in initial_start_vars.iteritems(): |