aboutsummaryrefslogtreecommitdiff
path: root/wqflask
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask')
-rw-r--r--wqflask/utility/startup_config.py4
-rw-r--r--wqflask/utility/tools.py8
-rw-r--r--wqflask/wqflask/collect.py2
-rw-r--r--wqflask/wqflask/show_trait/SampleList.py84
-rw-r--r--wqflask/wqflask/show_trait/show_trait.py4
-rw-r--r--wqflask/wqflask/templates/base.html1
-rw-r--r--wqflask/wqflask/templates/search_result_page.html2
-rw-r--r--wqflask/wqflask/templates/tutorials.html17
-rw-r--r--wqflask/wqflask/user_login.py44
-rw-r--r--wqflask/wqflask/user_session.py13
-rw-r--r--wqflask/wqflask/views.py6
11 files changed, 106 insertions, 79 deletions
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/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/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/templates/base.html b/wqflask/wqflask/templates/base.html
index 2c95bf5e..487cf3f2 100644
--- a/wqflask/wqflask/templates/base.html
+++ b/wqflask/wqflask/templates/base.html
@@ -52,6 +52,7 @@
<a href="/help" class="dropdow-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Help <span class="caret"></a>
<ul class="dropdown-menu">
<li><a href="/references">References</a></li>
+ <li><a href="/tutorials">Tutorials/Primers</a></li>
<li><a href="http://gn1.genenetwork.org/glossary.html">Glossary of Term</a></li>
<li><a href="http://gn1.genenetwork.org/faq.html">FAQ</a></li>
<li><a href="/policies">Policies</a></li>
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/templates/tutorials.html b/wqflask/wqflask/templates/tutorials.html
new file mode 100644
index 00000000..3e6ef01c
--- /dev/null
+++ b/wqflask/wqflask/templates/tutorials.html
@@ -0,0 +1,17 @@
+{% extends "base.html" %}
+{% block title %}Tutorials/Primers{% endblock %}
+{% block content %}
+
+<Table width= "100%" cellSpacing=0 cellPadding=5><TR>
+<!-- Body Start from Here -->
+<TD valign="top" height="200" width="100%">
+ <P class="title"><H2>Tutorials/Primers</H2></P>
+ <UL>
+ <LI><A HREF="http://www.nervenet.org/tutorials/HS_Rat_Using_GeneNetwork_21Apr2020v7.pptx">Statistical and genetic functions,
+and initial mapping results for Rat GWAS P50 as implemented in GeneNetwork.org</A><P></P>
+ </UL>
+ <P></P>
+</TD>
+</TR></TABLE>
+
+{% endblock %}
diff --git a/wqflask/wqflask/user_login.py b/wqflask/wqflask/user_login.py
index da3cc504..40d9925c 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,23 @@ 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):
+ logger.debug("THE TYPE:", type(pass_gen_fields))
+ logger.debug("pass_gen_fields:", pass_gen_fields)
+ logger.debug("hashfunc:", pass_gen_fields['hashfunc'])
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 +72,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 +182,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 +225,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 +436,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 923c89bd..76857650 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -299,6 +299,12 @@ def links():
#return render_template("docs.html", **doc.__dict__)
return render_template("links.html")
+@app.route("/tutorials")
+def tutorials():
+ #doc = docs.Docs("links", request.args)
+ #return render_template("docs.html", **doc.__dict__)
+ return render_template("tutorials.html")
+
@app.route("/environments")
def environments():
doc = docs.Docs("environments", request.args)