", methods=('POST',))
+def add_users(user_type='members'):
+ group_id = request.form['group_id']
+ if user_type == "admins":
+ user_emails = request.form['admin_emails_to_add'].split(",")
+ add_users_to_group(g.user_session.user_id, group_id, user_emails, admins = True)
+ elif user_type == "members":
+ user_emails = request.form['member_emails_to_add'].split(",")
+ add_users_to_group(g.user_session.user_id, group_id, user_emails, admins = False)
+
+ return redirect(url_for('view_group', id=group_id))
+
+@app.route("/groups/change_name", methods=('POST',))
+def change_name():
+ group_id = request.form['group_id']
+ new_name = request.form['new_name']
+ group_info = change_group_name(g.user_session.user_id, group_id, new_name)
+
+ return new_name
+
+@app.route("/groups/create", methods=('GET', 'POST'))
+def add_or_edit_group():
+ params = request.form if request.form else request.args
+ if "group_name" in params:
+ member_user_ids = set()
+ admin_user_ids = set()
+ admin_user_ids.add(g.user_session.user_id) #ZS: Always add the user creating the group as an admin
+ if "admin_emails_to_add" in params:
+ admin_emails = params['admin_emails_to_add'].split(",")
+ for email in admin_emails:
+ user_details = get_user_by_unique_column("email_address", email)
+ if user_details:
+ admin_user_ids.add(user_details['user_id'])
+ #send_group_invites(params['group_id'], user_email_list = admin_emails, user_type="admins")
+ if "member_emails_to_add" in params:
+ member_emails = params['member_emails_to_add'].split(",")
+ for email in member_emails:
+ user_details = get_user_by_unique_column("email_address", email)
+ if user_details:
+ member_user_ids.add(user_details['user_id'])
+ #send_group_invites(params['group_id'], user_email_list = user_emails, user_type="members")
+
+ create_group(list(admin_user_ids), list(member_user_ids), params['group_name'])
+ return redirect(url_for('manage_groups'))
+ else:
+ return render_template("admin/create_group.html")
+
+#ZS: Will integrate this later, for now just letting users be added directly
+def send_group_invites(group_id, user_email_list = [], user_type="members"):
+ for user_email in user_email_list:
+ user_details = get_user_by_unique_column("email_address", user_email)
+ if user_details:
+ group_info = get_group_info(group_id)
+ #ZS: Probably not necessary since the group should normally always exist if group_id is being passed here,
+ # but it's technically possible to hit it if Redis is cleared out before submitting the new users or something
+ if group_info:
+ #ZS: Don't add user if they're already an admin or if they're being added a regular user and are already a regular user,
+ # but do add them if they're a regular user and are added as an admin
+ if (user_details['user_id'] in group_info['admins']) or \
+ ((user_type == "members") and (user_details['user_id'] in group_info['members'])):
+ continue
+ else:
+ send_verification_email(user_details, template_name = "email/group_verification.txt", key_prefix = "verification_code", subject = "You've been invited to join a GeneNetwork user group")
+
#@app.route()
\ No newline at end of file
diff --git a/wqflask/wqflask/resource_manager.py b/wqflask/wqflask/resource_manager.py
index 7d88b8ed..0f9f5c9d 100644
--- a/wqflask/wqflask/resource_manager.py
+++ b/wqflask/wqflask/resource_manager.py
@@ -1,72 +1,134 @@
-from __future__ import print_function, division, absolute_import
-
-from flask import (Flask, g, render_template, url_for, request, make_response,
- redirect, flash)
-
-from wqflask import app
-
-from utility.authentication_tools import check_owner
-from utility.redis_tools import get_resource_info, get_group_info, get_group_by_unique_column, get_user_id
-
-from utility.logger import getLogger
-logger = getLogger(__name__)
-
-@app.route("/resources/manage", methods=('GET', 'POST'))
-def view_resource():
- params = request.form if request.form else request.args
- if 'resource_id' in request.args:
- resource_id = request.args['resource_id']
- if check_owner(resource_id=resource_id):
- resource_info = get_resource_info(resource_id)
- group_masks = resource_info['group_masks']
- group_masks_with_names = get_group_names(group_masks)
- default_mask = resource_info['default_mask']['data']
- return render_template("admin/manage_resource.html", resource_id = resource_id, resource_info=resource_info, default_mask=default_mask, group_masks=group_masks_with_names)
- else:
- return redirect(url_for("no_access_page"))
-
-@app.route("/resources/add_group", methods=('POST',))
-def add_group_to_resource():
- resource_id = request.form['resource_id']
- if check_owner(resource_id=resource_id):
- if all(key in request.form for key in ('group_id', 'group_name', 'user_name', 'user_email')):
- group_list = []
- if request.form['group_id'] != "":
- the_group = get_group_info(request.form['group_id'])
- if the_group:
- group_list.append(the_group)
- if request.form['group_name'] != "":
- matched_groups = get_group_by_unique_column("name", request.form['group_name'])
- for group in matched_groups:
- group_list.append(group)
- if request.form['user_name'] != "":
- user_id = get_user_id("user_name", request.form['user_name'])
- if user_id:
- matched_groups = get_group_by_unique_column("admins", user_id)
- matched_groups += get_group_by_unique_column("members", user_id)
- for group in matched_groups:
- group_list.append(group)
- if request.form['user_email'] != "":
- user_id = get_user_id("email_address", request.form['user_email'])
- if user_id:
- matched_groups = get_group_by_unique_column("admins", user_id)
- matched_groups += get_group_by_unique_column("members", user_id)
- for group in matched_groups:
- group_list.append(group)
- return render_template("admin/select_group_to_add.html", group_list=group_list, resource_id = resource_id)
- elif 'selected_group' in request.form:
- group_id = request.form['selected_group']
- return render_template("admin/set_group_privileges.html", resource_id = resource_id, group_id = group_id)
- else:
- return render_template("admin/search_for_groups.html", resource_id = resource_id)
- else:
- return redirect(url_for("no_access_page"))
-
-def get_group_names(group_masks):
- group_masks_with_names = {}
- for group_id, group_mask in group_masks.iteritems():
- this_mask = group_mask
- group_name = get_group_info(group_id)['name']
- this_mask['name'] = group_name
-
+from __future__ import print_function, division, absolute_import
+
+import json
+
+from flask import (Flask, g, render_template, url_for, request, make_response,
+ redirect, flash)
+
+from wqflask import app
+
+from utility.authentication_tools import check_owner_or_admin
+from utility.redis_tools import get_resource_info, get_group_info, get_groups_like_unique_column, get_user_id, get_user_by_unique_column, get_users_like_unique_column, add_access_mask, add_resource, change_resource_owner
+
+from utility.logger import getLogger
+logger = getLogger(__name__)
+
+@app.route("/resources/manage", methods=('GET', 'POST'))
+def manage_resource():
+ params = request.form if request.form else request.args
+ if 'resource_id' in request.args:
+ resource_id = request.args['resource_id']
+ admin_status = check_owner_or_admin(resource_id=resource_id)[1]
+
+ resource_info = get_resource_info(resource_id)
+ group_masks = resource_info['group_masks']
+ group_masks_with_names = get_group_names(group_masks)
+ default_mask = resource_info['default_mask']['data']
+ owner_id = resource_info['owner_id']
+ owner_info = get_user_by_unique_column("user_id", owner_id)
+
+ if 'name' in owner_info:
+ owner_display_name = owner_info['full_name']
+ elif 'user_name' in owner_info:
+ owner_display_name = owner_info['user_name']
+ elif 'email_address' in owner_info:
+ owner_display_name = owner_info['email_address']
+ else:
+ owner_display_name = None
+
+ return render_template("admin/manage_resource.html", owner_name = owner_display_name, resource_id = resource_id, resource_info=resource_info, default_mask=default_mask, group_masks=group_masks_with_names, admin_status=admin_status)
+
+@app.route("/search_for_users", methods=('POST',))
+def search_for_user():
+ params = request.form
+ user_list = []
+ user_list += get_users_like_unique_column("full_name", params['user_name'])
+ user_list += get_users_like_unique_column("email_address", params['user_email'])
+
+ return json.dumps(user_list)
+
+@app.route("/search_for_groups", methods=('POST',))
+def search_for_groups():
+ params = request.form
+ group_list = []
+ group_list += get_groups_like_unique_column("id", params['group_id'])
+ group_list += get_groups_like_unique_column("name", params['group_name'])
+
+ user_list = []
+ user_list += get_users_like_unique_column("full_name", params['user_name'])
+ user_list += get_users_like_unique_column("email_address", params['user_email'])
+ for user in user_list:
+ group_list += get_groups_like_unique_column("admins", user['user_id'])
+ group_list += get_groups_like_unique_column("members", user['user_id'])
+
+ return json.dumps(group_list)
+
+@app.route("/resources/change_owner", methods=('POST',))
+def change_owner():
+ resource_id = request.form['resource_id']
+ if 'new_owner' in request.form:
+ admin_status = check_owner_or_admin(resource_id=resource_id)[1]
+ if admin_status == "owner":
+ new_owner_id = request.form['new_owner']
+ change_resource_owner(resource_id, new_owner_id)
+ flash("The resource's owner has beeen changed.", "alert-info")
+ return redirect(url_for("manage_resource", resource_id=resource_id))
+ else:
+ flash("You lack the permissions to make this change.", "error")
+ return redirect(url_for("manage_resource", resource_id=resource_id))
+ else:
+ return render_template("admin/change_resource_owner.html", resource_id = resource_id)
+
+@app.route("/resources/change_default_privileges", methods=('POST',))
+def change_default_privileges():
+ resource_id = request.form['resource_id']
+ admin_status = check_owner_or_admin(resource_id=resource_id)
+ if admin_status == "owner" or admin_status == "edit-admins":
+ resource_info = get_resource_info(resource_id)
+ default_mask = resource_info['default_mask']
+ if request.form['open_to_public'] == "True":
+ default_mask['data'] = 'view'
+ else:
+ default_mask['data'] = 'no-access'
+ resource_info['default_mask'] = default_mask
+ add_resource(resource_info)
+ flash("Your changes have been saved.", "alert-info")
+ return redirect(url_for("manage_resource", resource_id=resource_id))
+ else:
+ return redirect(url_for("no_access_page"))
+
+@app.route("/resources/add_group", methods=('POST',))
+def add_group_to_resource():
+ resource_id = request.form['resource_id']
+ admin_status = check_owner_or_admin(resource_id=resource_id)[1]
+ if admin_status == "owner" or admin_status == "edit-admins" or admin_status == "edit-access":
+ if 'selected_group' in request.form:
+ group_id = request.form['selected_group']
+ resource_info = get_resource_info(resource_id)
+ default_privileges = resource_info['default_mask']
+ return render_template("admin/set_group_privileges.html", resource_id = resource_id, group_id = group_id, default_privileges = default_privileges)
+ elif all(key in request.form for key in ('data_privilege', 'metadata_privilege', 'admin_privilege')):
+ group_id = request.form['group_id']
+ group_name = get_group_info(group_id)['name']
+ access_mask = {
+ 'data': request.form['data_privilege'],
+ 'metadata': request.form['metadata_privilege'],
+ 'admin': request.form['admin_privilege']
+ }
+ add_access_mask(resource_id, group_id, access_mask)
+ flash("Privileges have been added for group {}.".format(group_name), "alert-info")
+ return redirect(url_for("manage_resource", resource_id=resource_id))
+ else:
+ return render_template("admin/search_for_groups.html", resource_id = resource_id)
+ else:
+ return redirect(url_for("no_access_page"))
+
+def get_group_names(group_masks):
+ group_masks_with_names = {}
+ for group_id, group_mask in group_masks.iteritems():
+ this_mask = group_mask
+ group_name = get_group_info(group_id)['name']
+ this_mask['name'] = group_name
+ group_masks_with_names[group_id] = this_mask
+
return group_masks_with_names
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/group_manager.js b/wqflask/wqflask/static/new/javascript/group_manager.js
index 5e82d104..4c172cbf 100644
--- a/wqflask/wqflask/static/new/javascript/group_manager.js
+++ b/wqflask/wqflask/static/new/javascript/group_manager.js
@@ -1,38 +1,38 @@
-$('#add_to_admins').click(function() {
- add_emails('admin')
-})
-
-$('#add_to_members').click(function() {
- add_emails('member')
-})
-
-$('#clear_admins').click(function(){
- clear_emails('admin')
-})
-
-$('#clear_members').click(function(){
- clear_emails('member')
-})
-
-
-function add_emails(user_type){
- var email_address = $('input[name=user_email]').val();
- var email_list_string = $('input[name=' + user_type + '_emails_to_add]').val()
- console.log(email_list_string)
- if (email_list_string == ""){
- var email_set = new Set();
- } else {
- var email_set = new Set(email_list_string.split(","))
- }
- email_set.add(email_address)
-
- $('input[name=' + user_type + '_emails_to_add]').val(Array.from(email_set).join(','))
-
- var emails_display_string = Array.from(email_set).join('\n')
- $('.added_' + user_type + 's').val(emails_display_string)
-}
-
-function clear_emails(user_type){
- $('input[name=' + user_type + '_emails_to_add]').val("")
- $('.added_' + user_type + 's').val("")
+$('#add_to_admins').click(function() {
+ add_emails('admin')
+})
+
+$('#add_to_members').click(function() {
+ add_emails('member')
+})
+
+$('#clear_admins').click(function(){
+ clear_emails('admin')
+})
+
+$('#clear_members').click(function(){
+ clear_emails('member')
+})
+
+
+function add_emails(user_type){
+ var email_address = $('input[name=user_email]').val();
+ var email_list_string = $('input[name=' + user_type + '_emails_to_add]').val().trim()
+ console.log(email_list_string)
+ if (email_list_string == ""){
+ var email_set = new Set();
+ } else {
+ var email_set = new Set(email_list_string.split(","))
+ }
+ email_set.add(email_address)
+
+ $('input[name=' + user_type + '_emails_to_add]').val(Array.from(email_set).join(','))
+
+ var emails_display_string = Array.from(email_set).join('\n')
+ $('.added_' + user_type + 's').val(emails_display_string)
+}
+
+function clear_emails(user_type){
+ $('input[name=' + user_type + '_emails_to_add]').val("")
+ $('.added_' + user_type + 's').val("")
}
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/search_results.js b/wqflask/wqflask/static/new/javascript/search_results.js
index 8fa698b4..115dac13 100644
--- a/wqflask/wqflask/static/new/javascript/search_results.js
+++ b/wqflask/wqflask/static/new/javascript/search_results.js
@@ -296,7 +296,6 @@ $(function() {
$("#deselect_all").click(deselect_all);
$("#invert").click(invert);
$("#add").click(add);
- $("#remove").click(remove);
$("#submit_bnw").click(submit_bnw);
$("#export_traits").click(export_traits);
$('.trait_checkbox, .btn').click(change_buttons);
diff --git a/wqflask/wqflask/templates/admin/change_resource_owner.html b/wqflask/wqflask/templates/admin/change_resource_owner.html
new file mode 100644
index 00000000..ae9409b0
--- /dev/null
+++ b/wqflask/wqflask/templates/admin/change_resource_owner.html
@@ -0,0 +1,116 @@
+{% extends "base.html" %}
+{% block title %}Resource Manager{% endblock %}
+{% block css %}
+
+
+{% endblock %}
+{% block content %}
+
+
+
+
+
+{% endblock %}
+
+{% block js %}
+
+
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/create_group.html b/wqflask/wqflask/templates/admin/create_group.html
index 55c3fa0b..5a6929fb 100644
--- a/wqflask/wqflask/templates/admin/create_group.html
+++ b/wqflask/wqflask/templates/admin/create_group.html
@@ -1,89 +1,89 @@
-{% extends "base.html" %}
-{% block title %}Group Manager{% endblock %}
-{% block content %}
-
-
-
-
-
-
-
-{% endblock %}
-
-{% block js %}
-
-
-
-
-
-{% endblock %}
+{% extends "base.html" %}
+{% block title %}Group Manager{% endblock %}
+{% block content %}
+
+
+
+
+
+
+
+{% endblock %}
+
+{% block js %}
+
+
+
+
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/group_manager.html b/wqflask/wqflask/templates/admin/group_manager.html
index 23d8205a..70d55684 100644
--- a/wqflask/wqflask/templates/admin/group_manager.html
+++ b/wqflask/wqflask/templates/admin/group_manager.html
@@ -23,7 +23,7 @@
{% else %}
- Admin Groups
+ Admin Groups
{% if admin_groups|length == 0 %}
You currently aren't the administrator of any groups.
@@ -45,8 +45,8 @@
|
{{ loop.index }} |
- {{ group.name }} |
- {{ group.admins|length + group.users|length }} |
+ {{ group.name }} |
+ {{ group.admins|length + group.members|length }} |
{{ group.created_timestamp }} |
{{ group.changed_timestamp }} |
{{ group.id }} |
@@ -58,7 +58,7 @@
-
User Groups
+
User Groups
{% if user_groups|length == 0 %}
You currently aren't a member of any groups.
@@ -80,7 +80,7 @@
|
{{ loop.index }} |
{{ group.name }} |
-
{{ group.admins|length + group.users|length }} |
+
{{ group.admins|length + group.members|length }} |
{{ group.created_timestamp }} |
{{ group.changed_timestamp }} |
@@ -103,10 +103,14 @@
-
-
-
-
-{% endblock %}
+{% extends "base.html" %}
+{% block title %}Resource Manager{% endblock %}
+{% block css %}
+
+
+{% endblock %}
+{% block content %}
+
+
+ {{ flash_me() }}
+
+
+
+
+
+
+
+
+{% endblock %}
+
+{% block js %}
+
+
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/search_for_groups.html b/wqflask/wqflask/templates/admin/search_for_groups.html
index 89eb11dd..f304a172 100644
--- a/wqflask/wqflask/templates/admin/search_for_groups.html
+++ b/wqflask/wqflask/templates/admin/search_for_groups.html
@@ -1,64 +1,134 @@
-{% extends "base.html" %}
-{% block title %}Resource Manager{% endblock %}
-{% block content %}
-
-
-
-
-
-{% endblock %}
-
-{% block js %}
-
-
-
-
-
-{% endblock %}
+{% extends "base.html" %}
+{% block title %}Resource Manager{% endblock %}
+{% block css %}
+
+
+{% endblock %}
+{% block content %}
+
+
+
+
+
+{% endblock %}
+
+{% block js %}
+
+
+
+
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/select_group_to_add.html b/wqflask/wqflask/templates/admin/select_group_to_add.html
deleted file mode 100644
index df70fb2f..00000000
--- a/wqflask/wqflask/templates/admin/select_group_to_add.html
+++ /dev/null
@@ -1,54 +0,0 @@
-{% extends "base.html" %}
-{% block title %}Matched Groups{% endblock %}
-{% block css %}
-
-
-
-{% endblock %}
-{% block content %}
-
-
-
The following groups were found:
-
-
-
-
-
-
-{% endblock %}
-
-{% block js %}
-
-
-{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/set_group_privileges.html b/wqflask/wqflask/templates/admin/set_group_privileges.html
new file mode 100644
index 00000000..bc52788f
--- /dev/null
+++ b/wqflask/wqflask/templates/admin/set_group_privileges.html
@@ -0,0 +1,102 @@
+{% extends "base.html" %}
+{% block title %}Set Group Privileges{% endblock %}
+{% block css %}
+
+
+
+{% endblock %}
+{% block content %}
+
+
+
Group Privileges
+
+
+
+
+
+
+{% endblock %}
+
+{% block js %}
+
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/admin/view_group.html b/wqflask/wqflask/templates/admin/view_group.html
new file mode 100644
index 00000000..b797cd70
--- /dev/null
+++ b/wqflask/wqflask/templates/admin/view_group.html
@@ -0,0 +1,238 @@
+{% extends "base.html" %}
+{% block title %}View and Edit Group{% endblock %}
+{% block css %}
+
+
+
+{% endblock %}
+{% block content %}
+
+
+
+
+
+
+
+
+{% endblock %}
+
+{% block js %}
+
+
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/base.html b/wqflask/wqflask/templates/base.html
index 07c1b48e..262d9ee5 100644
--- a/wqflask/wqflask/templates/base.html
+++ b/wqflask/wqflask/templates/base.html
@@ -94,6 +94,11 @@
Sign in
{% endif %}
+ {% if g.user_session.logged_in %}
+
+ Manage Groups
+
+ {% endif %}
{% endif %}
+
+
Group Privileges
+
+
+
+
+
+
+{% endblock %}
+
+{% block js %}
+
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/show_trait_details.html b/wqflask/wqflask/templates/show_trait_details.html
index 5c315878..5e0bae79 100644
--- a/wqflask/wqflask/templates/show_trait_details.html
+++ b/wqflask/wqflask/templates/show_trait_details.html
@@ -248,8 +248,8 @@
- {% if resource_id %}
-
+ {% if admin_status[1] == "owner" or admin_status[1] == "edit-admins" or admin_status[1] == "edit-access" %}
+
{% endif %}
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index ee827ba3..dc431aa9 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -102,7 +102,7 @@ def check_access_permissions():
else:
available = check_resource_availability(dataset)
- if not available:
+ if available == "no-access":
return redirect(url_for("no_access_page"))
@app.teardown_appcontext
--
cgit v1.2.3
From 75802ed1f9e5d955987bf5f5eb78a9cb120116ec Mon Sep 17 00:00:00 2001
From: zsloan
Date: Sat, 20 Jun 2020 17:33:22 -0500
Subject: Added some admin functionality and fixed issue with temp traits
---
wqflask/base/trait.py | 17 ++++--
wqflask/base/webqtlConfig.py | 4 ++
wqflask/maintenance/set_resource_defaults.py | 20 +++++--
wqflask/utility/authentication_tools.py | 79 +++++++++++++++-------------
wqflask/wqflask/resource_manager.py | 6 +--
wqflask/wqflask/views.py | 20 ++++---
6 files changed, 90 insertions(+), 56 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 7700ecd5..c2b8b910 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -42,11 +42,11 @@ def create_trait(**kw):
if kw.get('dataset_name') != "Temp":
if dataset.type == 'Publish':
- permitted = check_resource_availability(dataset, kw.get('name'))
+ permissions = check_resource_availability(dataset, kw.get('name'))
else:
- permitted = check_resource_availability(dataset)
+ permissions = check_resource_availability(dataset)
- if permitted != "no-access":
+ if "view" in permissions['data']:
the_trait = GeneralTrait(**kw)
if the_trait.dataset.type != "Temp":
@@ -382,9 +382,16 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
resource_id = get_resource_id(dataset, trait.name)
if dataset.type == 'Publish':
- the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view".format(resource_id, g.user_session.user_id)
+ the_url = "http://localhost:8081/run-action?resource={}&user={}&branch=data&action=view".format(resource_id, g.user_session.user_id)
else:
- the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view&trait={}".format(resource_id, g.user_session.user_id, trait.name)
+ the_url = "http://localhost:8081/run-action?resource={}&user={}&branch=data&action=view&trait={}".format(resource_id, g.user_session.user_id, trait.name)
+
+ response = requests.get(the_url).content
+ if response.strip() == "no-access":
+ trait.view = False
+ return trait
+ else:
+ trait_info = json.loads(response)
try:
response = requests.get(the_url).content
diff --git a/wqflask/base/webqtlConfig.py b/wqflask/base/webqtlConfig.py
index 55407123..3d86bc22 100644
--- a/wqflask/base/webqtlConfig.py
+++ b/wqflask/base/webqtlConfig.py
@@ -17,6 +17,10 @@ DEBUG = 1
#USER privilege
USERDICT = {'guest':1,'user':2, 'admin':3, 'root':4}
+#Set privileges
+SUPER_PRIVILEGES = {'data': ['no-access', 'view', 'edit'], 'metadata': ['no-access', 'view', 'edit'], 'admin': ['not-admin', 'edit-access', 'edit-admins']}
+DEFAULT_PRIVILEGES = {'data': ['no-access', 'view'], 'metadata': ['no-access', 'view'], 'admin': ['not-admin']}
+
#minimum number of informative strains
KMININFORMATIVE = 5
diff --git a/wqflask/maintenance/set_resource_defaults.py b/wqflask/maintenance/set_resource_defaults.py
index 0c221bbf..ddb3b17b 100644
--- a/wqflask/maintenance/set_resource_defaults.py
+++ b/wqflask/maintenance/set_resource_defaults.py
@@ -68,9 +68,13 @@ def insert_probeset_resources(default_owner_id):
resource_ob['data'] = { "dataset" : str(resource[0])}
resource_ob['type'] = "dataset-probeset"
if resource[2] < 1 and resource[3] > 0:
- resource_ob['default_mask'] = { "data": "view" }
+ resource_ob['default_mask'] = { "data": "view",
+ "metadata": "view",
+ "admin": "not-admin"}
else:
- resource_ob['default_mask'] = { "data": "no-access" }
+ resource_ob['default_mask'] = { "data": "no-access",
+ "metadata": "no-access",
+ "admin": "not-admin"}
resource_ob['group_masks'] = {}
add_resource(resource_ob)
@@ -98,7 +102,9 @@ def insert_publish_resources(default_owner_id):
resource_ob['data'] = { "dataset" : str(resource[1]) ,
"trait" : str(resource[0])}
resource_ob['type'] = "dataset-publish"
- resource_ob['default_mask'] = { "data": "view" }
+ resource_ob['default_mask'] = { "data": "view",
+ "metadata": "view",
+ "admin": "not-admin"}
resource_ob['group_masks'] = {}
@@ -124,9 +130,13 @@ def insert_geno_resources(default_owner_id):
resource_ob['data'] = { "dataset" : str(resource[0]) }
resource_ob['type'] = "dataset-geno"
if resource[2] < 1:
- resource_ob['default_mask'] = { "data": "view" }
+ resource_ob['default_mask'] = { "data": "view",
+ "metadata": "view",
+ "admin": "not-admin"}
else:
- resource_ob['default_mask'] = { "data": "no-access" }
+ resource_ob['default_mask'] = { "data": "no-access",
+ "metadata": "no-access",
+ "admin": "not-admin"}
resource_ob['group_masks'] = {}
add_resource(resource_ob)
diff --git a/wqflask/utility/authentication_tools.py b/wqflask/utility/authentication_tools.py
index dfa0e2d9..6c88949b 100644
--- a/wqflask/utility/authentication_tools.py
+++ b/wqflask/utility/authentication_tools.py
@@ -3,7 +3,7 @@ from __future__ import absolute_import, print_function, division
import json
import requests
-from base import data_set
+from base import data_set, webqtlConfig
from utility import hmac
from utility.redis_tools import get_redis_conn, get_resource_info, get_resource_id
@@ -18,45 +18,47 @@ def check_resource_availability(dataset, trait_id=None):
#ZS: Check if super-user - we should probably come up with some way to integrate this into the proxy
if g.user_session.user_id in Redis.smembers("super_users"):
- return "edit"
+ return webqtlConfig.SUPER_PRIVILEGES
- resource_id = get_resource_id(dataset, trait_id)
response = None
- if resource_id:
- resource_info = get_resource_info(resource_id)
-
- the_url = "http://localhost:8080/available?resource={}&user={}".format(resource_id, g.user_session.user_id)
- try:
- response = json.loads(requests.get(the_url).content)['data']
- except:
- response = resource_info['default_mask']['data']
- if 'edit' in response:
- return "edit"
- elif 'view' in response:
- return "view"
- else:
- return "no-access"
+ #At least for now assume temporary entered traits are accessible#At least for now assume temporary entered traits are accessible
+ if type(dataset) == str:
+ return webqtlConfig.DEFAULT_PRIVILEGES
+ if dataset.type == "Temp":
+ return webqtlConfig.DEFAULT_PRIVILEGES
- return False
+ resource_id = get_resource_id(dataset, trait_id)
-def check_admin(resource_id=None):
+ if resource_id:
+ resource_info = get_resource_info(resource_id)
+ else:
+ return response #ZS: Need to substitute in something that creates the resource in Redis later
- return "not-admin"
+ the_url = "http://localhost:8081/available?resource={}&user={}".format(resource_id, g.user_session.user_id)
+ try:
+ response = json.loads(requests.get(the_url).content)
+ except:
+ response = resource_info['default_mask']
- # ZS: commented out until proxy can return this
- # the_url = "http://localhost:8080/available?resource={}&user={}".format(resource_id, g.user_session.user_id)
- # try:
- # response = json.loads(requests.get(the_url).content)
- # except:
- # response = resource_info['default_mask']['admin']
+ if response:
+ return response
+ else: #ZS: No idea how this would happen, but just in case
+ return False
- # if 'edit-admins' in response:
- # return "edit-admins"
- # elif 'edit-access' in response:
- # return "edit-access"
- # else:
- # return "not-admin"
+def check_admin(resource_id=None):
+ the_url = "http://localhost:8081/available?resource={}&user={}".format(resource_id, g.user_session.user_id)
+ try:
+ response = json.loads(requests.get(the_url).content)['admin']
+ except:
+ response = resource_info['default_mask']['admin']
+
+ if 'edit-admins' in response:
+ return "edit-admins"
+ elif 'edit-access' in response:
+ return "edit-access"
+ else:
+ return "not-admin"
def check_owner(dataset=None, trait_id=None, resource_id=None):
if resource_id:
@@ -74,15 +76,18 @@ def check_owner(dataset=None, trait_id=None, resource_id=None):
def check_owner_or_admin(dataset=None, trait_id=None, resource_id=None):
if not resource_id:
- resource_id = get_resource_id(dataset, trait_id)
+ if dataset.type == "Temp":
+ return "not-admin"
+ else:
+ resource_id = get_resource_id(dataset, trait_id)
if g.user_session.user_id in Redis.smembers("super_users"):
- return [resource_id, "owner"]
+ return "owner"
resource_info = get_resource_info(resource_id)
if g.user_session.user_id == resource_info['owner_id']:
- return [resource_id, "owner"]
+ return "owner"
else:
- return [resource_id, check_admin(resource_id)]
+ return check_admin(resource_id)
- return [resource_id, "not-admin"]
\ No newline at end of file
+ return "not-admin"
\ No newline at end of file
diff --git a/wqflask/wqflask/resource_manager.py b/wqflask/wqflask/resource_manager.py
index 0f9f5c9d..39a07310 100644
--- a/wqflask/wqflask/resource_manager.py
+++ b/wqflask/wqflask/resource_manager.py
@@ -18,7 +18,7 @@ def manage_resource():
params = request.form if request.form else request.args
if 'resource_id' in request.args:
resource_id = request.args['resource_id']
- admin_status = check_owner_or_admin(resource_id=resource_id)[1]
+ admin_status = check_owner_or_admin(resource_id=resource_id)
resource_info = get_resource_info(resource_id)
group_masks = resource_info['group_masks']
@@ -67,7 +67,7 @@ def search_for_groups():
def change_owner():
resource_id = request.form['resource_id']
if 'new_owner' in request.form:
- admin_status = check_owner_or_admin(resource_id=resource_id)[1]
+ admin_status = check_owner_or_admin(resource_id=resource_id)
if admin_status == "owner":
new_owner_id = request.form['new_owner']
change_resource_owner(resource_id, new_owner_id)
@@ -100,7 +100,7 @@ def change_default_privileges():
@app.route("/resources/add_group", methods=('POST',))
def add_group_to_resource():
resource_id = request.form['resource_id']
- admin_status = check_owner_or_admin(resource_id=resource_id)[1]
+ admin_status = check_owner_or_admin(resource_id=resource_id)
if admin_status == "owner" or admin_status == "edit-admins" or admin_status == "edit-access":
if 'selected_group' in request.form:
group_id = request.form['selected_group']
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index dc431aa9..bc01839b 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -96,13 +96,21 @@ def check_access_permissions():
pass
else:
if 'dataset' in request.args:
- dataset = create_dataset(request.args['dataset'])
- if 'trait_id' in request.args:
- available = check_resource_availability(dataset, request.args['trait_id'])
+ if request.args['dataset'] == "Temp":
+ permissions = check_resource_availability("Temp")
else:
- available = check_resource_availability(dataset)
-
- if available == "no-access":
+ dataset = create_dataset(request.args['dataset'])
+
+ if dataset.type == "Temp":
+ permissions = False
+ if 'trait_id' in request.args:
+ permissions = check_resource_availability(dataset, request.args['trait_id'])
+ elif dataset.type != "Publish":
+ permissions = check_resource_availability(dataset)
+ else:
+ return None
+
+ if 'view' not in permissions['data']:
return redirect(url_for("no_access_page"))
@app.teardown_appcontext
--
cgit v1.2.3
From 51417c06061246bc92be89db198b3e74e7126035 Mon Sep 17 00:00:00 2001
From: zsloan
Date: Sat, 20 Jun 2020 17:47:38 -0500
Subject: Fixed ports for proxy (though I need to add the port to global
variables) and also simplified the check_owner_or_admin function a little
---
wqflask/base/trait.py | 4 ++--
wqflask/utility/authentication_tools.py | 4 ++--
wqflask/wqflask/show_trait/show_trait.py | 3 ++-
wqflask/wqflask/templates/show_trait_details.html | 4 ++--
4 files changed, 8 insertions(+), 7 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index c2b8b910..0e26ca2c 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -382,9 +382,9 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
resource_id = get_resource_id(dataset, trait.name)
if dataset.type == 'Publish':
- the_url = "http://localhost:8081/run-action?resource={}&user={}&branch=data&action=view".format(resource_id, g.user_session.user_id)
+ the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view".format(resource_id, g.user_session.user_id)
else:
- the_url = "http://localhost:8081/run-action?resource={}&user={}&branch=data&action=view&trait={}".format(resource_id, g.user_session.user_id, trait.name)
+ the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view&trait={}".format(resource_id, g.user_session.user_id, trait.name)
response = requests.get(the_url).content
if response.strip() == "no-access":
diff --git a/wqflask/utility/authentication_tools.py b/wqflask/utility/authentication_tools.py
index 6c88949b..06b2854a 100644
--- a/wqflask/utility/authentication_tools.py
+++ b/wqflask/utility/authentication_tools.py
@@ -35,7 +35,7 @@ def check_resource_availability(dataset, trait_id=None):
else:
return response #ZS: Need to substitute in something that creates the resource in Redis later
- the_url = "http://localhost:8081/available?resource={}&user={}".format(resource_id, g.user_session.user_id)
+ the_url = "http://localhost:8080/available?resource={}&user={}".format(resource_id, g.user_session.user_id)
try:
response = json.loads(requests.get(the_url).content)
except:
@@ -47,7 +47,7 @@ def check_resource_availability(dataset, trait_id=None):
return False
def check_admin(resource_id=None):
- the_url = "http://localhost:8081/available?resource={}&user={}".format(resource_id, g.user_session.user_id)
+ the_url = "http://localhost:8080/available?resource={}&user={}".format(resource_id, g.user_session.user_id)
try:
response = json.loads(requests.get(the_url).content)['admin']
except:
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index ed4ff0ad..4698807a 100644
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -72,7 +72,8 @@ class ShowTrait(object):
cellid=None)
self.trait_vals = Redis.get(self.trait_id).split()
- self.admin_status = check_owner_or_admin(self.dataset, self.trait_id)
+ self.resource_id = get_resource_id(self.dataset, self.trait_id)
+ self.admin_status = check_owner_or_admin(resource_id=self.resource_id)
#ZS: Get verify/rna-seq link URLs
try:
diff --git a/wqflask/wqflask/templates/show_trait_details.html b/wqflask/wqflask/templates/show_trait_details.html
index 5e0bae79..965c0340 100644
--- a/wqflask/wqflask/templates/show_trait_details.html
+++ b/wqflask/wqflask/templates/show_trait_details.html
@@ -248,8 +248,8 @@
- {% if admin_status[1] == "owner" or admin_status[1] == "edit-admins" or admin_status[1] == "edit-access" %}
-
+ {% if admin_status == "owner" or admin_status == "edit-admins" or admin_status == "edit-access" %}
+
{% endif %}
--
cgit v1.2.3
From 01c3acf485de10fb1696fc24471751d4d3ab8e05 Mon Sep 17 00:00:00 2001
From: zsloan
Date: Mon, 22 Jun 2020 13:30:01 -0500
Subject: Fixed issue with temp traits not working for trait page functions
like correlation or mapping
---
wqflask/base/data_set.py | 3 +++
wqflask/wqflask/static/new/javascript/show_trait.js | 3 ++-
wqflask/wqflask/views.py | 5 ++++-
3 files changed, 9 insertions(+), 2 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 92dc8615..2272b6ee 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -65,6 +65,9 @@ logger = getLogger(__name__ )
DS_NAME_MAP = {}
def create_dataset(dataset_name, dataset_type = None, get_samplelist = True, group_name = None):
+ if dataset_name == "Temp":
+ dataset_type = "Temp"
+
if not dataset_type:
dataset_type = Dataset_Getter(dataset_name)
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js
index c0b2e6db..738cd536 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait.js
@@ -515,7 +515,8 @@ $('select[name=corr_type]').change(on_corr_method_change);
submit_special = function(url) {
$("#trait_data_form").attr("action", url);
- return $("#trait_data_form").submit();
+ $("#trait_data_form").submit();
+ return false
};
var corr_input_list = ['corr_type', 'primary_samples', 'trait_id', 'dataset', 'group', 'tool_used', 'form_url', 'corr_sample_method', 'corr_samples_group', 'corr_dataset', 'min_expr',
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index bc01839b..80164a22 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -641,7 +641,10 @@ def loading_page():
if 'num_vals' in start_vars:
num_vals = int(start_vars['num_vals'])
else:
- dataset = create_dataset(start_vars['dataset'])
+ if 'group' in start_vars:
+ dataset = create_dataset(start_vars['dataset'], group_name = start_vars['group'])
+ else:
+ dataset = create_dataset(start_vars['dataset'])
genofile_samplelist = []
samples = start_vars['primary_samples'].split(",")
if 'genofile' in start_vars:
--
cgit v1.2.3
From 645c07b98aae9508e8a0aeedd8eaca815d5daf54 Mon Sep 17 00:00:00 2001
From: zsloan
Date: Wed, 24 Jun 2020 17:13:45 -0500
Subject: Temporary partial fix to issue of resources without info; need to add
something that automatically inserts resources with default privileges
---
wqflask/base/trait.py | 12 ++++--------
wqflask/utility/authentication_tools.py | 11 +++++++----
wqflask/utility/redis_tools.py | 5 ++++-
wqflask/wqflask/correlation/show_corr_results.py | 7 +++----
wqflask/wqflask/templates/correlation_page.html | 4 ++++
5 files changed, 22 insertions(+), 17 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 0e26ca2c..7fc016f3 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -386,13 +386,6 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
else:
the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view&trait={}".format(resource_id, g.user_session.user_id, trait.name)
- response = requests.get(the_url).content
- if response.strip() == "no-access":
- trait.view = False
- return trait
- else:
- trait_info = json.loads(response)
-
try:
response = requests.get(the_url).content
if response.strip() == "no-access":
@@ -402,7 +395,10 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait_info = json.loads(response)
except:
resource_info = get_resource_info(resource_id)
- default_permissions = resource_info['default_mask']['data']
+ if resource_info:
+ default_permissions = resource_info['default_mask']['data']
+ else:
+ default_permissions = webqtlConfig.DEFAULT_PRIVILEGES
if 'view' not in default_permissions:
trait.view = False
return trait
diff --git a/wqflask/utility/authentication_tools.py b/wqflask/utility/authentication_tools.py
index 06b2854a..f9028f32 100644
--- a/wqflask/utility/authentication_tools.py
+++ b/wqflask/utility/authentication_tools.py
@@ -32,6 +32,8 @@ def check_resource_availability(dataset, trait_id=None):
if resource_id:
resource_info = get_resource_info(resource_id)
+ if not resource_info:
+ return webqtlConfig.DEFAULT_PRIVILEGES
else:
return response #ZS: Need to substitute in something that creates the resource in Redis later
@@ -85,9 +87,10 @@ def check_owner_or_admin(dataset=None, trait_id=None, resource_id=None):
return "owner"
resource_info = get_resource_info(resource_id)
- if g.user_session.user_id == resource_info['owner_id']:
- return "owner"
- else:
- return check_admin(resource_id)
+ if resource_info:
+ if g.user_session.user_id == resource_info['owner_id']:
+ return "owner"
+ else:
+ return check_admin(resource_id)
return "not-admin"
\ No newline at end of file
diff --git a/wqflask/utility/redis_tools.py b/wqflask/utility/redis_tools.py
index 9d09a66b..8a5f95ee 100644
--- a/wqflask/utility/redis_tools.py
+++ b/wqflask/utility/redis_tools.py
@@ -280,7 +280,10 @@ def get_resource_id(dataset, trait_id=None):
def get_resource_info(resource_id):
resource_info = Redis.hget("resources", resource_id)
- return json.loads(resource_info)
+ if resource_info:
+ return json.loads(resource_info)
+ else:
+ return None
def add_resource(resource_info):
if 'trait' in resource_info['data']:
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index 7eab7184..bc2912f2 100644
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -200,8 +200,6 @@ class CorrelationResults(object):
for _trait_counter, trait in enumerate(self.correlation_data.keys()[:self.return_number]):
trait_object = create_trait(dataset=self.target_dataset, name=trait, get_qtl_info=True, get_sample_info=False)
- if not trait_object:
- continue
if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno":
#ZS: Convert trait chromosome to an int for the location range option
@@ -237,9 +235,8 @@ class CorrelationResults(object):
trait_object.tissue_pvalue = tissue_corr_data[trait][2]
elif self.corr_type == "lit":
trait_object.lit_corr = lit_corr_data[trait][1]
- self.correlation_results.append(trait_object)
- self.target_dataset.get_trait_info(self.correlation_results, self.target_dataset.group.species)
+ self.correlation_results.append(trait_object)
if self.corr_type != "lit" and self.dataset.type == "ProbeSet" and self.target_dataset.type == "ProbeSet":
self.do_lit_correlation_for_trait_list()
@@ -498,6 +495,8 @@ def do_bicor(this_trait_vals, target_trait_vals):
def generate_corr_json(corr_results, this_trait, dataset, target_dataset, for_api = False):
results_list = []
for i, trait in enumerate(corr_results):
+ if trait.view == False:
+ continue
results_dict = {}
if not for_api:
results_dict['checkbox'] = ""
diff --git a/wqflask/wqflask/templates/correlation_page.html b/wqflask/wqflask/templates/correlation_page.html
index f429948d..3d750bea 100644
--- a/wqflask/wqflask/templates/correlation_page.html
+++ b/wqflask/wqflask/templates/correlation_page.html
@@ -169,7 +169,11 @@
N/A |
{% endif %}
{% if trait.description_display|length > 70 %}{{ trait.description_display[:70] }}...{% else %}{{ trait.description_display }}{% endif %} |
+ {% if trait.authors %}
{% if trait.authors.split(',') > 6 %}{{ trait.authors.split(',')[:6]|join(', ') }}, et al.{% else %}{{ trait.authors }}{% endif %} |
+ {% else %}
+ N/A |
+ {% endif %}
{{ trait.pubmed_text }}
--
cgit v1.2.3
From cef130716782cf5c06453705bee7ab6aed1dcce0 Mon Sep 17 00:00:00 2001
From: zsloan
Date: Mon, 29 Jun 2020 12:19:23 -0500
Subject: Change that hopefully fixes some encoding stuff
---
wqflask/base/trait.py | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 7fc016f3..5903fb08 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -6,6 +6,7 @@ import resource
import codecs
import requests
import random
+import urllib
from base import webqtlConfig
from base.webqtlCaseData import webqtlCaseData
@@ -144,6 +145,7 @@ class GeneralTrait(object):
formatted = self.post_publication_description
else:
formatted = "Not available"
+
return formatted
@property
@@ -474,9 +476,9 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.haveinfo = True
for i, field in enumerate(dataset.display_fields):
- holder = trait_info[i]
- #if isinstance(trait_info[i], basestring):
- # holder = holder.encode('latin1')
+ holder = trait_info[i]
+ if isinstance(trait_info[i], basestring):
+ holder = holder.encode('latin1')
setattr(trait, field, holder)
if dataset.type == 'Publish':
--
cgit v1.2.3
From 0a0d733af4b6c61c381a1c4ec9fa162182a057e9 Mon Sep 17 00:00:00 2001
From: zsloan
Date: Mon, 6 Jul 2020 14:47:04 -0500
Subject: Fixed some of the logic with how traits are authenticated to avoid
situation where a trait is authenticated twice
---
wqflask/base/trait.py | 30 ++++++++--------------------
wqflask/maintenance/set_resource_defaults.py | 6 +++---
wqflask/utility/redis_tools.py | 5 +++--
3 files changed, 14 insertions(+), 27 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 7fc016f3..4c3e790c 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -49,7 +49,6 @@ def create_trait(**kw):
if "view" in permissions['data']:
the_trait = GeneralTrait(**kw)
if the_trait.dataset.type != "Temp":
-
the_trait = retrieve_trait_info(the_trait, the_trait.dataset, get_qtl_info=kw.get('get_qtl_info'))
return the_trait
else:
@@ -144,6 +143,7 @@ class GeneralTrait(object):
formatted = self.post_publication_description
else:
formatted = "Not available"
+
return formatted
@property
@@ -388,27 +388,14 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
try:
response = requests.get(the_url).content
- if response.strip() == "no-access":
- trait.view = False
- return trait
- else:
- trait_info = json.loads(response)
- except:
- resource_info = get_resource_info(resource_id)
- if resource_info:
- default_permissions = resource_info['default_mask']['data']
- else:
- default_permissions = webqtlConfig.DEFAULT_PRIVILEGES
- if 'view' not in default_permissions:
- trait.view = False
- return trait
-
+ trait_info = json.loads(response)
+ except: #ZS: I'm assuming the trait is viewable if the try fails for some reason; it should never reach this point unless the user has privileges, since that's dealt with in create_trait
if dataset.type == 'Publish':
query = """
SELECT
- PublishXRef.Id, Publication.PubMed_ID,
+ PublishXRef.Id, InbredSet.InbredSetCode, Publication.PubMed_ID,
Phenotype.Pre_publication_description, Phenotype.Post_publication_description, Phenotype.Original_description,
- Phenotype.Pre_publication_abbreviation, Phenotype.Post_publication_abbreviation,
+ Phenotype.Pre_publication_abbreviation, Phenotype.Post_publication_abbreviation, PublishXRef.mean,
Phenotype.Lab_code, Phenotype.Submitter, Phenotype.Owner, Phenotype.Authorized_Users,
Publication.Authors, Publication.Title, Publication.Abstract,
Publication.Journal, Publication.Volume, Publication.Pages,
@@ -472,11 +459,10 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
if trait_info:
trait.haveinfo = True
-
for i, field in enumerate(dataset.display_fields):
- holder = trait_info[i]
- #if isinstance(trait_info[i], basestring):
- # holder = holder.encode('latin1')
+ holder = trait_info[i]
+ # if isinstance(trait_info[i], basestring):
+ # holder = unicode(holder.strip(codecs.BOM_UTF8), 'utf-8', "ignore")
setattr(trait, field, holder)
if dataset.type == 'Publish':
diff --git a/wqflask/maintenance/set_resource_defaults.py b/wqflask/maintenance/set_resource_defaults.py
index ddb3b17b..54fd8e7e 100644
--- a/wqflask/maintenance/set_resource_defaults.py
+++ b/wqflask/maintenance/set_resource_defaults.py
@@ -77,7 +77,7 @@ def insert_probeset_resources(default_owner_id):
"admin": "not-admin"}
resource_ob['group_masks'] = {}
- add_resource(resource_ob)
+ add_resource(resource_ob, update=False)
def insert_publish_resources(default_owner_id):
current_resources = Redis.hgetall("resources")
@@ -108,7 +108,7 @@ def insert_publish_resources(default_owner_id):
resource_ob['group_masks'] = {}
- add_resource(resource_ob)
+ add_resource(resource_ob, update=False)
else:
continue
@@ -139,7 +139,7 @@ def insert_geno_resources(default_owner_id):
"admin": "not-admin"}
resource_ob['group_masks'] = {}
- add_resource(resource_ob)
+ add_resource(resource_ob, update=False)
def insert_resources(default_owner_id):
current_resources = get_resources()
diff --git a/wqflask/utility/redis_tools.py b/wqflask/utility/redis_tools.py
index 8a5f95ee..6c912a23 100644
--- a/wqflask/utility/redis_tools.py
+++ b/wqflask/utility/redis_tools.py
@@ -285,13 +285,14 @@ def get_resource_info(resource_id):
else:
return None
-def add_resource(resource_info):
+def add_resource(resource_info, update=True):
if 'trait' in resource_info['data']:
resource_id = hmac.hmac_creation('{}:{}:{}'.format(str(resource_info['type']), str(resource_info['data']['dataset']), str(resource_info['data']['trait'])))
else:
resource_id = hmac.hmac_creation('{}:{}'.format(str(resource_info['type']), str(resource_info['data']['dataset'])))
- Redis.hset("resources", resource_id, json.dumps(resource_info))
+ if not Redis.hexists("resources", resource_id):
+ Redis.hset("resources", resource_id, json.dumps(resource_info))
return resource_info
--
cgit v1.2.3
From ddc7dfa6afb2ae02d6a23e345d408ec1ec73b1aa Mon Sep 17 00:00:00 2001
From: zsloan
Date: Wed, 8 Jul 2020 13:00:30 -0500
Subject: Removed remaining unused references to the old qtlreaper
---
wqflask/base/trait.py | 2 +-
wqflask/utility/Plot.py | 2 --
wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py | 2 --
wqflask/wqflask/correlation/show_corr_results.py | 2 --
wqflask/wqflask/correlation_matrix/show_corr_matrix.py | 2 --
wqflask/wqflask/heatmap/heatmap.py | 2 --
wqflask/wqflask/network_graph/network_graph.py | 2 --
7 files changed, 1 insertion(+), 13 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 8e11c11d..ecb9dcd9 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -403,7 +403,7 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
Publication.Month, Publication.Year, PublishXRef.Sequence,
Phenotype.Units, PublishXRef.comments
FROM
- PublishXRef, Publication, Phenotype, PublishFreeze
+ PublishXRef, Publication, Phenotype, PublishFreeze, InbredSet
WHERE
PublishXRef.Id = %s AND
Phenotype.Id = PublishXRef.PhenotypeId AND
diff --git a/wqflask/utility/Plot.py b/wqflask/utility/Plot.py
index cce8435d..9bc84d22 100644
--- a/wqflask/utility/Plot.py
+++ b/wqflask/utility/Plot.py
@@ -35,8 +35,6 @@ import sys, os
from numarray import linear_algebra as la
from numarray import ones, array, dot, swapaxes
-import reaper
-
import webqtlUtil
import corestats
from base import webqtlConfig
diff --git a/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py b/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
index 5d74dc9d..09d6b9cc 100644
--- a/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
+++ b/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
@@ -35,8 +35,6 @@ import resource
from pprint import pformat as pf
-import reaper
-
from base.trait import create_trait
from base import data_set
from utility import webqtlUtil, helper_functions, corr_result_helpers
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index bc2912f2..de7a1c0c 100644
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -42,8 +42,6 @@ utils = importr("utils")
from pprint import pformat as pf
-import reaper
-
from base import webqtlConfig
from utility.THCell import THCell
from utility.TDCell import TDCell
diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
index 2b9467d1..0ac94139 100644
--- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
+++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
@@ -41,8 +41,6 @@ import rpy2.robjects as robjects
from pprint import pformat as pf
-import reaper
-
from utility.redis_tools import get_redis_conn
Redis = get_redis_conn()
THIRTY_DAYS = 60 * 60 * 24 * 30
diff --git a/wqflask/wqflask/heatmap/heatmap.py b/wqflask/wqflask/heatmap/heatmap.py
index e82aa0ef..5098a184 100644
--- a/wqflask/wqflask/heatmap/heatmap.py
+++ b/wqflask/wqflask/heatmap/heatmap.py
@@ -19,8 +19,6 @@ import numpy as np
from pprint import pformat as pf
-import reaper
-
from base.trait import GeneralTrait
from base import data_set
from base import species
diff --git a/wqflask/wqflask/network_graph/network_graph.py b/wqflask/wqflask/network_graph/network_graph.py
index f41f3017..f61c40b4 100644
--- a/wqflask/wqflask/network_graph/network_graph.py
+++ b/wqflask/wqflask/network_graph/network_graph.py
@@ -40,8 +40,6 @@ import rpy2.robjects as robjects
from pprint import pformat as pf
-import reaper
-
from utility.THCell import THCell
from utility.TDCell import TDCell
from base.trait import create_trait
--
cgit v1.2.3
From 05e82353739c2abea6adcfd0036086dc79cee659 Mon Sep 17 00:00:00 2001
From: zsloan
Date: Tue, 14 Jul 2020 12:12:21 -0500
Subject: Added binary casting to phenotype trait info query to fix unicode
issue
---
wqflask/base/trait.py | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index ecb9dcd9..f9da7b87 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -395,11 +395,14 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
query = """
SELECT
PublishXRef.Id, InbredSet.InbredSetCode, Publication.PubMed_ID,
- Phenotype.Pre_publication_description, Phenotype.Post_publication_description, Phenotype.Original_description,
- Phenotype.Pre_publication_abbreviation, Phenotype.Post_publication_abbreviation, PublishXRef.mean,
+ CAST(Phenotype.Pre_publication_description AS BINARY),
+ CAST(Phenotype.Post_publication_description AS BINARY),
+ CAST(Phenotype.Original_description AS BINARY),
+ CAST(Phenotype.Pre_publication_abbreviation AS BINARY),
+ CAST(Phenotype.Post_publication_abbreviation AS BINARY), PublishXRef.mean,
Phenotype.Lab_code, Phenotype.Submitter, Phenotype.Owner, Phenotype.Authorized_Users,
- Publication.Authors, Publication.Title, Publication.Abstract,
- Publication.Journal, Publication.Volume, Publication.Pages,
+ CAST(Publication.Authors AS BINARY), CAST(Publication.Title AS BINARY), CAST(Publication.Abstract AS BINARY),
+ CAST(Publication.Journal AS BINARY), Publication.Volume, Publication.Pages,
Publication.Month, Publication.Year, PublishXRef.Sequence,
Phenotype.Units, PublishXRef.comments
FROM
@@ -462,9 +465,6 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.haveinfo = True
for i, field in enumerate(dataset.display_fields):
holder = trait_info[i]
- # if isinstance(trait_info[i], basestring):
- # holder = unicode(holder.strip(codecs.BOM_UTF8), 'utf-8', "ignore")
-
setattr(trait, field, holder)
if dataset.type == 'Publish':
--
cgit v1.2.3
From 1775b713478bff182e0047dd5f92b751d7e68a20 Mon Sep 17 00:00:00 2001
From: zsloan
Date: Tue, 21 Jul 2020 16:52:17 -0500
Subject: Fixed issue that caused group codes to be wrong sometimes
---
wqflask/base/trait.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index f9da7b87..7666348e 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -152,7 +152,7 @@ class GeneralTrait(object):
'''Return a text formatted alias'''
alias = 'Not available'
- if self.alias:
+ if getattr(self, "alias", None):
alias = string.replace(self.alias, ";", " ")
alias = string.join(string.split(alias), ", ")
@@ -412,6 +412,7 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
Phenotype.Id = PublishXRef.PhenotypeId AND
Publication.Id = PublishXRef.PublicationId AND
PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND
+ PublishXRef.InbredSetId = InbredSet.Id AND
PublishFreeze.Id = %s
""" % (trait.name, dataset.id)
--
cgit v1.2.3
From 55221dca1c1adb6559957262cac21b023dfa11e7 Mon Sep 17 00:00:00 2001
From: zsloan
Date: Tue, 14 Jul 2020 12:12:21 -0500
Subject: Added binary casting to phenotype trait info query to fix unicode
issue
---
wqflask/base/trait.py | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index ecb9dcd9..f9da7b87 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -395,11 +395,14 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
query = """
SELECT
PublishXRef.Id, InbredSet.InbredSetCode, Publication.PubMed_ID,
- Phenotype.Pre_publication_description, Phenotype.Post_publication_description, Phenotype.Original_description,
- Phenotype.Pre_publication_abbreviation, Phenotype.Post_publication_abbreviation, PublishXRef.mean,
+ CAST(Phenotype.Pre_publication_description AS BINARY),
+ CAST(Phenotype.Post_publication_description AS BINARY),
+ CAST(Phenotype.Original_description AS BINARY),
+ CAST(Phenotype.Pre_publication_abbreviation AS BINARY),
+ CAST(Phenotype.Post_publication_abbreviation AS BINARY), PublishXRef.mean,
Phenotype.Lab_code, Phenotype.Submitter, Phenotype.Owner, Phenotype.Authorized_Users,
- Publication.Authors, Publication.Title, Publication.Abstract,
- Publication.Journal, Publication.Volume, Publication.Pages,
+ CAST(Publication.Authors AS BINARY), CAST(Publication.Title AS BINARY), CAST(Publication.Abstract AS BINARY),
+ CAST(Publication.Journal AS BINARY), Publication.Volume, Publication.Pages,
Publication.Month, Publication.Year, PublishXRef.Sequence,
Phenotype.Units, PublishXRef.comments
FROM
@@ -462,9 +465,6 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.haveinfo = True
for i, field in enumerate(dataset.display_fields):
holder = trait_info[i]
- # if isinstance(trait_info[i], basestring):
- # holder = unicode(holder.strip(codecs.BOM_UTF8), 'utf-8', "ignore")
-
setattr(trait, field, holder)
if dataset.type == 'Publish':
--
cgit v1.2.3
From b11d28f4cd90d7f5599324961ec405c5d026b309 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Sat, 18 Jul 2020 03:41:00 +0300
Subject: Remove unused import
---
wqflask/base/data_set.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 2272b6ee..116d1d24 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -47,8 +47,6 @@ from utility import chunks
from utility import gen_geno_ob
from utility.tools import locate, locate_ignore_error, flat_files
-from wqflask.api import gen_menu
-
from maintenance import get_group_samplelists
from MySQLdb import escape_string as escape
@@ -64,6 +62,9 @@ logger = getLogger(__name__ )
# Each subclass will add to this
DS_NAME_MAP = {}
+def my_add(x, y):
+ return x + y
+
def create_dataset(dataset_name, dataset_type = None, get_samplelist = True, group_name = None):
if dataset_name == "Temp":
dataset_type = "Temp"
--
cgit v1.2.3
From 511acaccdad93d2766f973ada11ae2b85367e6ef Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Tue, 21 Jul 2020 13:22:46 +0300
Subject: Apply autopep-8
* wqflask/base/GeneralObject.py: Replace tabs with 4 spaces
---
wqflask/base/GeneralObject.py | 80 +++++++++++++++++++++----------------------
1 file changed, 40 insertions(+), 40 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/GeneralObject.py b/wqflask/base/GeneralObject.py
index 02a1ef06..37bfeda3 100644
--- a/wqflask/base/GeneralObject.py
+++ b/wqflask/base/GeneralObject.py
@@ -25,44 +25,44 @@
# Last updated by GeneNetwork Core Team 2010/10/20
class GeneralObject:
- """
- Base class to define an Object.
- a = [Spam(1, 4), Spam(9, 3), Spam(4,6)]
- a.sort(lambda x, y: cmp(x.eggs, y.eggs))
- """
+ """
+ Base class to define an Object.
+ a = [Spam(1, 4), Spam(9, 3), Spam(4,6)]
+ a.sort(lambda x, y: cmp(x.eggs, y.eggs))
+ """
- def __init__(self, *args, **kw):
- self.contents = list(args)
- for name, value in kw.items():
- setattr(self, name, value)
-
- def __setitem__(self, key, value):
- setattr(self, key, value)
-
- def __getitem__(self, key):
- return getattr(self, key)
-
- def __getattr__(self, key):
- if key in self.__dict__.keys():
- return self.__dict__[key]
- else:
- return eval("self.__dict__.%s" % key)
-
- def __len__(self):
- return len(self.__dict__) - 1
-
- def __str__(self):
- s = ''
- for key in self.__dict__.keys():
- if key != 'contents':
- s += '%s = %s\n' % (key,self.__dict__[key])
- return s
-
- def __repr__(self):
- s = ''
- for key in self.__dict__.keys():
- s += '%s = %s\n' % (key,self.__dict__[key])
- return s
-
- def __cmp__(self,other):
- return len(self.__dict__.keys()).__cmp__(len(other.__dict__.keys()))
\ No newline at end of file
+ def __init__(self, *args, **kw):
+ self.contents = list(args)
+ for name, value in kw.items():
+ setattr(self, name, value)
+
+ def __setitem__(self, key, value):
+ setattr(self, key, value)
+
+ def __getitem__(self, key):
+ return getattr(self, key)
+
+ def __getattr__(self, key):
+ if key in self.__dict__.keys():
+ return self.__dict__[key]
+ else:
+ return eval("self.__dict__.%s" % key)
+
+ def __len__(self):
+ return len(self.__dict__) - 1
+
+ def __str__(self):
+ s = ''
+ for key in self.__dict__.keys():
+ if key != 'contents':
+ s += '%s = %s\n' % (key, self.__dict__[key])
+ return s
+
+ def __repr__(self):
+ s = ''
+ for key in self.__dict__.keys():
+ s += '%s = %s\n' % (key, self.__dict__[key])
+ return s
+
+ def __cmp__(self, other):
+ return len(self.__dict__.keys()).__cmp__(len(other.__dict__.keys()))
--
cgit v1.2.3
From 7dff20b84aaab9c5c9e15269a1716cd14d953db1 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Tue, 21 Jul 2020 22:40:14 +0300
Subject: Apply autopep-8
* wqflask/base/data_set.py: Apply autopep-8
---
wqflask/base/data_set.py | 261 +++++++++++++++++++++++++----------------------
1 file changed, 141 insertions(+), 120 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 116d1d24..f9705a22 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -19,6 +19,23 @@
# This module is used by GeneNetwork project (www.genenetwork.org)
from __future__ import absolute_import, print_function, division
+from db.call import fetchall, fetchone, fetch1
+from utility.logger import getLogger
+from utility.tools import USE_GN_SERVER, USE_REDIS, flat_files, flat_file_exists, GN2_BASE_URL
+from db.gn_server import menu_main
+from pprint import pformat as pf
+from MySQLdb import escape_string as escape
+from maintenance import get_group_samplelists
+from utility.tools import locate, locate_ignore_error, flat_files
+from utility import gen_geno_ob
+from utility import chunks
+from utility.benchmark import Bench
+from utility import webqtlUtil
+from db import webqtlDatabaseFunction
+from base import species
+from base import webqtlConfig
+import reaper
+from flask import Flask, g
import os
import math
import string
@@ -34,38 +51,15 @@ import itertools
from redis import Redis
Redis = Redis()
-from flask import Flask, g
-
-import reaper
-
-from base import webqtlConfig
-from base import species
-from db import webqtlDatabaseFunction
-from utility import webqtlUtil
-from utility.benchmark import Bench
-from utility import chunks
-from utility import gen_geno_ob
-from utility.tools import locate, locate_ignore_error, flat_files
-
-from maintenance import get_group_samplelists
-from MySQLdb import escape_string as escape
-from pprint import pformat as pf
-from db.gn_server import menu_main
-from db.call import fetchall,fetchone,fetch1
-
-from utility.tools import USE_GN_SERVER, USE_REDIS, flat_files, flat_file_exists, GN2_BASE_URL
-from utility.logger import getLogger
-logger = getLogger(__name__ )
+logger = getLogger(__name__)
# Used by create_database to instantiate objects
# Each subclass will add to this
DS_NAME_MAP = {}
-def my_add(x, y):
- return x + y
-def create_dataset(dataset_name, dataset_type = None, get_samplelist = True, group_name = None):
+def create_dataset(dataset_name, dataset_type=None, get_samplelist=True, group_name=None):
if dataset_name == "Temp":
dataset_type = "Temp"
@@ -79,6 +73,7 @@ def create_dataset(dataset_name, dataset_type = None, get_samplelist = True, gro
else:
return dataset_class(dataset_name, get_samplelist)
+
class Dataset_Types(object):
def __init__(self):
@@ -101,9 +96,10 @@ Publish or ProbeSet. E.g.
data = Redis.get("dataset_structure")
if data:
self.datasets = json.loads(data)
- else: #ZS: I don't think this should ever run unless Redis is emptied
+ else: # ZS: I don't think this should ever run unless Redis is emptied
try:
- data = json.loads(requests.get(GN2_BASE_URL + "/api/v_pre1/gen_dropdown", timeout = 5).content)
+ data = json.loads(requests.get(
+ GN2_BASE_URL + "/api/v_pre1/gen_dropdown", timeout=5).content)
for species in data['datasets']:
for group in data['datasets'][species]:
for dataset_type in data['datasets'][species][group]:
@@ -122,7 +118,7 @@ Publish or ProbeSet. E.g.
Redis.set("dataset_structure", json.dumps(self.datasets))
# Set LOG_LEVEL_DEBUG=5 to see the following:
- logger.debugf(5, "datasets",self.datasets)
+ logger.debugf(5, "datasets", self.datasets)
def __call__(self, name):
if name not in self.datasets:
@@ -155,7 +151,7 @@ Publish or ProbeSet. E.g.
Redis.set("dataset_structure", json.dumps(self.datasets))
return self.datasets[name]
- #ZS: For when there isn't an InfoFiles ID; not sure if this and the preceding query are both necessary
+ # 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
@@ -167,7 +163,7 @@ Publish or ProbeSet. E.g.
Redis.set("dataset_structure", json.dumps(self.datasets))
return self.datasets[name]
- geno_query = """
+ geno_query = """
SELECT
GenoFreeze.Id
FROM
@@ -182,14 +178,16 @@ Publish or ProbeSet. E.g.
Redis.set("dataset_structure", json.dumps(self.datasets))
return self.datasets[name]
- #ZS: It shouldn't ever reach this
+ # 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()
+
def create_datasets_list():
if USE_REDIS:
key = "all_datasets"
@@ -209,10 +207,10 @@ def create_datasets_list():
for dataset_type in type_dict:
query = "SELECT Name FROM {}".format(type_dict[dataset_type])
for result in fetchall(query):
- #The query at the beginning of this function isn't
- #necessary here, but still would rather just reuse
- #it logger.debug("type: {}\tname:
- #{}".format(dataset_type, result.Name))
+ # The query at the beginning of this function isn't
+ # necessary here, but still would rather just reuse
+ # it logger.debug("type: {}\tname:
+ # {}".format(dataset_type, result.Name))
dataset = create_dataset(result.Name, dataset_type)
datasets.append(dataset)
@@ -239,8 +237,9 @@ def mescape(*items):
class Markers(object):
"""Todo: Build in cacheing so it saves us reading the same file more than once"""
+
def __init__(self, name):
- json_data_fh = open(locate(name + ".json",'genotype/json'))
+ json_data_fh = open(locate(name + ".json", 'genotype/json'))
markers = []
with open("%s/%s_snps.txt" % (flat_files('genotype/bimbam'), name), 'r') as bimbam_fh:
@@ -272,7 +271,7 @@ class Markers(object):
if type(p_values) is list:
# THIS IS only needed for the case when we are limiting the number of p-values calculated
- #if len(self.markers) > len(p_values):
+ # if len(self.markers) > len(p_values):
# self.markers = self.markers[:len(p_values)]
for marker, p_value in itertools.izip(self.markers, p_values):
@@ -284,7 +283,7 @@ class Markers(object):
marker['lrs_value'] = 0
else:
marker['lod_score'] = -math.log10(marker['p_value'])
- #Using -log(p) for the LRS; need to ask Rob how he wants to get LRS from p-values
+ # Using -log(p) for the LRS; need to ask Rob how he wants to get LRS from p-values
marker['lrs_value'] = -math.log10(marker['p_value']) * 4.61
elif type(p_values) is dict:
filtered_markers = []
@@ -299,18 +298,20 @@ class Markers(object):
marker['lrs_value'] = 0
else:
marker['lod_score'] = -math.log10(marker['p_value'])
- #Using -log(p) for the LRS; need to ask Rob how he wants to get LRS from p-values
- marker['lrs_value'] = -math.log10(marker['p_value']) * 4.61
+ # Using -log(p) for the LRS; need to ask Rob how he wants to get LRS from p-values
+ marker['lrs_value'] = - \
+ math.log10(marker['p_value']) * 4.61
filtered_markers.append(marker)
- #else:
+ # else:
#logger.debug("marker {} NOT in p_values".format(i))
- #self.markers.remove(marker)
+ # self.markers.remove(marker)
#del self.markers[i]
self.markers = filtered_markers
+
class HumanMarkers(Markers):
- def __init__(self, name, specified_markers = []):
+ def __init__(self, name, specified_markers=[]):
marker_data_fh = open(flat_files('mapping') + '/' + name + '.bim')
self.markers = []
for line in marker_data_fh:
@@ -333,7 +334,6 @@ class HumanMarkers(Markers):
#logger.debug("markers is: ", pf(self.markers))
-
def add_pvalues(self, p_values):
super(HumanMarkers, self).add_pvalues(p_values)
@@ -346,12 +346,15 @@ class DatasetGroup(object):
has multiple datasets associated with it.
"""
+
def __init__(self, dataset, name=None):
"""This sets self.group and self.group_id"""
if name == None:
- self.name, self.id, self.genetic_type = fetchone(dataset.query_for_group)
+ self.name, self.id, self.genetic_type = fetchone(
+ dataset.query_for_group)
else:
- self.name, self.id, self.genetic_type = fetchone("SELECT InbredSet.Name, InbredSet.Id, InbredSet.GeneticType FROM InbredSet where Name='%s'" % name)
+ self.name, self.id, self.genetic_type = fetchone(
+ "SELECT InbredSet.Name, InbredSet.Id, InbredSet.GeneticType FROM InbredSet where Name='%s'" % name)
if self.name == 'BXD300':
self.name = "BXD"
@@ -370,7 +373,8 @@ class DatasetGroup(object):
def get_mapping_methods(self):
- mapping_id = g.db.execute("select MappingMethodId from InbredSet where Name= '%s'" % self.name).fetchone()[0]
+ mapping_id = g.db.execute(
+ "select MappingMethodId from InbredSet where Name= '%s'" % self.name).fetchone()[0]
if mapping_id == "1":
mapping_names = ["GEMMA", "QTLReaper", "R/qtl"]
elif mapping_id == "2":
@@ -434,9 +438,10 @@ class DatasetGroup(object):
else:
logger.debug("Cache not hit")
- genotype_fn = locate_ignore_error(self.name+".geno",'genotype')
+ genotype_fn = locate_ignore_error(self.name+".geno", 'genotype')
if genotype_fn:
- self.samplelist = get_group_samplelists.get_samplelist("geno", genotype_fn)
+ self.samplelist = get_group_samplelists.get_samplelist(
+ "geno", genotype_fn)
else:
self.samplelist = None
@@ -452,15 +457,16 @@ class DatasetGroup(object):
def read_genotype_file(self, use_reaper=False):
'''Read genotype from .geno file instead of database'''
- #genotype_1 is Dataset Object without parents and f1
- #genotype_2 is Dataset Object with parents and f1 (not for intercross)
+ # genotype_1 is Dataset Object without parents and f1
+ # genotype_2 is Dataset Object with parents and f1 (not for intercross)
#genotype_1 = reaper.Dataset()
# reaper barfs on unicode filenames, so here we ensure it's a string
if self.genofile:
- if "RData" in self.genofile: #ZS: This is a temporary fix; I need to change the way the JSON files that point to multiple genotype files are structured to point to other file types like RData
- full_filename = str(locate(self.genofile.split(".")[0] + ".geno", 'genotype'))
+ if "RData" in self.genofile: # ZS: This is a temporary fix; I need to change the way the JSON files that point to multiple genotype files are structured to point to other file types like RData
+ full_filename = str(
+ locate(self.genofile.split(".")[0] + ".geno", 'genotype'))
else:
full_filename = str(locate(self.genofile, 'genotype'))
else:
@@ -473,11 +479,12 @@ class DatasetGroup(object):
genotype_1 = gen_geno_ob.genotype(full_filename)
if genotype_1.type == "group" and self.parlist:
- genotype_2 = genotype_1.add(Mat=self.parlist[0], Pat=self.parlist[1]) #, F1=_f1)
+ genotype_2 = genotype_1.add(
+ Mat=self.parlist[0], Pat=self.parlist[1]) # , F1=_f1)
else:
genotype_2 = genotype_1
- #determine default genotype object
+ # determine default genotype object
if self.incparentsf1 and genotype_1.type != "intercross":
genotype = genotype_2
else:
@@ -488,7 +495,8 @@ class DatasetGroup(object):
return genotype
-def datasets(group_name, this_group = None):
+
+def datasets(group_name, this_group=None):
key = "group_dataset_menu:v2:" + group_name
dataset_menu = []
the_results = fetchall('''
@@ -511,12 +519,13 @@ def datasets(group_name, this_group = None):
and InbredSet.Name like %s
ORDER BY Tissue.Name, ProbeSetFreeze.OrderList DESC)
''' % (group_name,
- group_name,
- "'" + group_name + "'"))
+ group_name,
+ "'" + group_name + "'"))
sorted_results = sorted(the_results, key=lambda kv: kv[0])
- pheno_inserted = False #ZS: This is kind of awkward, but need to ensure Phenotypes show up before Genotypes in dropdown
+ # ZS: This is kind of awkward, but need to ensure Phenotypes show up before Genotypes in dropdown
+ pheno_inserted = False
geno_inserted = False
for dataset_item in sorted_results:
tissue_name = dataset_item[0]
@@ -524,13 +533,16 @@ def datasets(group_name, this_group = None):
dataset_short = dataset_item[2]
if tissue_name in ['#PublishFreeze', '#GenoFreeze']:
if tissue_name == '#PublishFreeze' and (dataset_short == group_name + 'Publish'):
- dataset_menu.insert(0, dict(tissue=None, datasets=[(dataset, dataset_short)]))
+ dataset_menu.insert(
+ 0, dict(tissue=None, datasets=[(dataset, dataset_short)]))
pheno_inserted = True
elif pheno_inserted and tissue_name == '#GenoFreeze':
- dataset_menu.insert(1, dict(tissue=None, datasets=[(dataset, dataset_short)]))
+ dataset_menu.insert(
+ 1, dict(tissue=None, datasets=[(dataset, dataset_short)]))
geno_inserted = True
else:
- dataset_menu.append(dict(tissue=None, datasets=[(dataset, dataset_short)]))
+ dataset_menu.append(
+ dict(tissue=None, datasets=[(dataset, dataset_short)]))
else:
tissue_already_exists = False
for i, tissue_dict in enumerate(dataset_menu):
@@ -543,7 +555,7 @@ def datasets(group_name, this_group = None):
dataset_menu[i]['datasets'].append((dataset, dataset_short))
else:
dataset_menu.append(dict(tissue=tissue_name,
- datasets=[(dataset, dataset_short)]))
+ datasets=[(dataset, dataset_short)]))
if USE_REDIS:
Redis.set(key, pickle.dumps(dataset_menu, pickle.HIGHEST_PROTOCOL))
@@ -555,6 +567,7 @@ def datasets(group_name, this_group = None):
else:
return dataset_menu
+
class DataSet(object):
"""
DataSet class defines a dataset in webqtl, can be either Microarray,
@@ -562,7 +575,7 @@ class DataSet(object):
"""
- def __init__(self, name, get_samplelist = True, group_name = None):
+ def __init__(self, name, get_samplelist=True, group_name=None):
assert name, "Need a name"
self.name = name
@@ -570,22 +583,23 @@ class DataSet(object):
self.shortname = None
self.fullname = None
self.type = None
- self.data_scale = None #ZS: For example log2
+ self.data_scale = None # ZS: For example log2
self.setup()
- if self.type == "Temp": #Need to supply group name as input if temp trait
- self.group = DatasetGroup(self, name=group_name) # sets self.group and self.group_id and gets genotype
+ if self.type == "Temp": # Need to supply group name as input if temp trait
+ # sets self.group and self.group_id and gets genotype
+ self.group = DatasetGroup(self, name=group_name)
else:
self.check_confidentiality()
self.retrieve_other_names()
- self.group = DatasetGroup(self) # sets self.group and self.group_id and gets genotype
+ # sets self.group and self.group_id and gets genotype
+ self.group = DatasetGroup(self)
self.accession_id = self.get_accession_id()
if get_samplelist == True:
- self.group.get_samplelist()
+ self.group.get_samplelist()
self.species = species.TheSpecies(self)
-
def get_desc(self):
"""Gets overridden later, at least for Temp...used by trait's get_given_name"""
return None
@@ -645,8 +659,9 @@ class DataSet(object):
WHERE ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id
AND ProbeFreeze.TissueId = Tissue.Id
AND (ProbeSetFreeze.Name = '%s' OR ProbeSetFreeze.FullName = '%s' OR ProbeSetFreeze.ShortName = '%s')
- """ % (query_args),"/dataset/"+self.name+".json",
- lambda r: (r["id"],r["name"],r["full_name"],r["short_name"],r["data_scale"],r["tissue"])
+ """ % (query_args), "/dataset/"+self.name+".json",
+ lambda r: (r["id"], r["name"], r["full_name"],
+ r["short_name"], r["data_scale"], r["tissue"])
)
else:
query_args = tuple(escape(x) for x in (
@@ -663,7 +678,8 @@ class DataSet(object):
""" % (query_args))
except TypeError:
- logger.debug("Dataset {} is not yet available in GeneNetwork.".format(self.name))
+ logger.debug(
+ "Dataset {} is not yet available in GeneNetwork.".format(self.name))
pass
def get_trait_data(self, sample_list=None):
@@ -721,7 +737,7 @@ class DataSet(object):
and {}.Id = {}XRef.{}Id
order by {}.Id
""".format(*mescape(self.type, self.type, self.type, self.name,
- dataset_type, self.type, dataset_type, dataset_type))
+ dataset_type, self.type, dataset_type, dataset_type))
else:
query += """
WHERE {}XRef.{}FreezeId = {}Freeze.Id
@@ -729,7 +745,7 @@ class DataSet(object):
and {}.Id = {}XRef.{}Id
order by {}.Id
""".format(*mescape(self.type, self.type, self.type, self.type,
- self.name, dataset_type, self.type, self.type, dataset_type))
+ self.name, dataset_type, self.type, self.type, dataset_type))
#logger.debug("trait data query: ", query)
@@ -749,6 +765,7 @@ class DataSet(object):
self.trait_data[trait_name] += (
trait_sample_data[chunk_counter][trait_counter][data_start_pos:])
+
class PhenotypeDataSet(DataSet):
DS_NAME_MAP['Publish'] = 'PhenotypeDataSet'
@@ -758,16 +775,16 @@ class PhenotypeDataSet(DataSet):
# Fields in the database table
self.search_fields = ['Phenotype.Post_publication_description',
- 'Phenotype.Pre_publication_description',
- 'Phenotype.Pre_publication_abbreviation',
- 'Phenotype.Post_publication_abbreviation',
- 'PublishXRef.mean',
- 'Phenotype.Lab_code',
- 'Publication.PubMed_ID',
- 'Publication.Abstract',
- 'Publication.Title',
- 'Publication.Authors',
- 'PublishXRef.Id']
+ 'Phenotype.Pre_publication_description',
+ 'Phenotype.Pre_publication_abbreviation',
+ 'Phenotype.Post_publication_abbreviation',
+ 'PublishXRef.mean',
+ 'Phenotype.Lab_code',
+ 'Publication.PubMed_ID',
+ 'Publication.Abstract',
+ 'Publication.Title',
+ 'Publication.Authors',
+ 'PublishXRef.Id']
# Figure out what display_fields is
self.display_fields = ['name', 'group_code',
@@ -789,13 +806,13 @@ class PhenotypeDataSet(DataSet):
# Fields displayed in the search results table header
self.header_fields = ['Index',
- 'Record',
- 'Description',
- 'Authors',
- 'Year',
- 'Max LRS',
- 'Max LRS Location',
- 'Additive Effect']
+ 'Record',
+ 'Description',
+ 'Authors',
+ 'Year',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect']
self.type = 'Publish'
@@ -813,7 +830,7 @@ class PhenotypeDataSet(DataSet):
# (Urgently?) Need to write this
pass
- def get_trait_info(self, trait_list, species = ''):
+ def get_trait_info(self, trait_list, species=''):
for this_trait in trait_list:
if not this_trait.haveinfo:
@@ -821,9 +838,9 @@ class PhenotypeDataSet(DataSet):
description = this_trait.post_publication_description
- #If the dataset is confidential and the user has access to confidential
- #phenotype traits, then display the pre-publication description instead
- #of the post-publication description
+ # If the dataset is confidential and the user has access to confidential
+ # phenotype traits, then display the pre-publication description instead
+ # of the post-publication description
if this_trait.confidential:
this_trait.description_display = ""
continue # for now, because no authorization features
@@ -848,7 +865,7 @@ class PhenotypeDataSet(DataSet):
if this_trait.pubmed_id:
this_trait.pubmed_link = webqtlConfig.PUBMEDLINK_URL % this_trait.pubmed_id
- #LRS and its location
+ # LRS and its location
this_trait.LRS_score_repr = "N/A"
this_trait.LRS_location_repr = "N/A"
@@ -868,7 +885,8 @@ class PhenotypeDataSet(DataSet):
LRS_Mb = result[1]
this_trait.LRS_score_repr = LRS_score_repr = '%3.1f' % this_trait.lrs
- this_trait.LRS_location_repr = LRS_location_repr = 'Chr%s: %.6f' % (LRS_Chr, float(LRS_Mb))
+ this_trait.LRS_location_repr = LRS_location_repr = 'Chr%s: %.6f' % (
+ LRS_Chr, float(LRS_Mb))
def retrieve_sample_data(self, trait):
query = """
@@ -935,7 +953,8 @@ class GenotypeDataSet(DataSet):
this_trait.retrieveInfo()
if this_trait.chr and this_trait.mb:
- this_trait.location_repr = 'Chr%s: %.6f' % (this_trait.chr, float(this_trait.mb) )
+ this_trait.location_repr = 'Chr%s: %.6f' % (
+ this_trait.chr, float(this_trait.mb))
def retrieve_sample_data(self, trait):
query = """
@@ -1004,14 +1023,14 @@ class MrnaAssayDataSet(DataSet):
# Fields displayed in the search results table header
self.header_fields = ['Index',
- 'Record',
- 'Symbol',
- 'Description',
- 'Location',
- 'Mean',
- 'Max LRS',
- 'Max LRS Location',
- 'Additive Effect']
+ 'Record',
+ 'Symbol',
+ 'Description',
+ 'Location',
+ 'Mean',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect']
# Todo: Obsolete or rename this field
self.type = 'ProbeSet'
@@ -1027,7 +1046,6 @@ class MrnaAssayDataSet(DataSet):
ProbeSetFreeze.Name = "%s"
''' % escape(self.name)
-
def check_confidentiality(self):
return geno_mrna_confidentiality(self)
@@ -1045,10 +1063,12 @@ class MrnaAssayDataSet(DataSet):
if not this_trait.symbol:
this_trait.symbol = "N/A"
- #XZ, 12/08/2008: description
- #XZ, 06/05/2009: Rob asked to add probe target description
- description_string = unicode(str(this_trait.description).strip(codecs.BOM_UTF8), 'utf-8')
- target_string = unicode(str(this_trait.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8')
+ # XZ, 12/08/2008: description
+ # XZ, 06/05/2009: Rob asked to add probe target description
+ description_string = unicode(
+ str(this_trait.description).strip(codecs.BOM_UTF8), 'utf-8')
+ target_string = unicode(
+ str(this_trait.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8')
if len(description_string) > 1 and description_string != 'None':
description_display = description_string
@@ -1063,11 +1083,12 @@ class MrnaAssayDataSet(DataSet):
this_trait.description_display = description_display
if this_trait.chr and this_trait.mb:
- this_trait.location_repr = 'Chr%s: %.6f' % (this_trait.chr, float(this_trait.mb))
+ this_trait.location_repr = 'Chr%s: %.6f' % (
+ this_trait.chr, float(this_trait.mb))
- #Get mean expression value
+ # Get mean expression value
query = (
- """select ProbeSetXRef.mean from ProbeSetXRef, ProbeSet
+ """select ProbeSetXRef.mean from ProbeSetXRef, ProbeSet
where ProbeSetXRef.ProbeSetFreezeId = %s and
ProbeSet.Id = ProbeSetXRef.ProbeSetId and
ProbeSet.Name = '%s'
@@ -1083,11 +1104,11 @@ class MrnaAssayDataSet(DataSet):
if mean:
this_trait.mean = "%2.3f" % mean
- #LRS and its location
+ # LRS and its location
this_trait.LRS_score_repr = 'N/A'
this_trait.LRS_location_repr = 'N/A'
- #Max LRS and its Locus location
+ # Max LRS and its Locus location
if this_trait.lrs and this_trait.locus:
query = """
select Geno.Chr, Geno.Mb from Geno, Species
@@ -1101,7 +1122,8 @@ class MrnaAssayDataSet(DataSet):
if result:
lrs_chr, lrs_mb = result
this_trait.LRS_score_repr = '%3.1f' % this_trait.lrs
- this_trait.LRS_location_repr = 'Chr%s: %.6f' % (lrs_chr, float(lrs_mb))
+ this_trait.LRS_location_repr = 'Chr%s: %.6f' % (
+ lrs_chr, float(lrs_mb))
return trait_list
@@ -1162,7 +1184,6 @@ class TempDataSet(DataSet):
self.fullname = 'Temporary Storage'
self.shortname = 'Temp'
-
@staticmethod
def handle_pca(desc):
if 'PCA' in desc:
@@ -1203,7 +1224,7 @@ def geno_mrna_confidentiality(ob):
#logger.debug("dataset_table [%s]: %s" % (type(dataset_table), dataset_table))
query = '''SELECT Id, Name, FullName, confidentiality,
- AuthorisedUsers FROM %s WHERE Name = "%s"''' % (dataset_table,ob.name)
+ AuthorisedUsers FROM %s WHERE Name = "%s"''' % (dataset_table, ob.name)
logger.sql(query)
result = g.db.execute(query)
--
cgit v1.2.3
From 1a0380b9f778600f4ed0838a2dfaf4fc3d7bc768 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 23 Jul 2020 02:44:42 +0300
Subject: Inject redis instance into DatasetType class
* wqflask/base/data_set.py(DatasetType):
- Rename Redis instance to r to avoid confusion and name collisions
- Inject the redis instance into Dataset_Types class to make it easier to test
- Rename Dataset_Types class to DatasetType class
---
wqflask/base/data_set.py | 38 +++++++++++++++++++-------------------
1 file changed, 19 insertions(+), 19 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index f9705a22..21ace006 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -49,8 +49,8 @@ import cPickle as pickle
import itertools
from redis import Redis
-Redis = Redis()
+r = Redis()
logger = getLogger(__name__)
@@ -74,9 +74,9 @@ def create_dataset(dataset_name, dataset_type=None, get_samplelist=True, group_n
return dataset_class(dataset_name, get_samplelist)
-class Dataset_Types(object):
+class DatasetType:
- def __init__(self):
+ def __init__(self, redis_instance):
"""Create a dictionary of samples where the value is set to Geno,
Publish or ProbeSet. E.g.
@@ -91,9 +91,9 @@ Publish or ProbeSet. E.g.
'B139_K_1206_R': 'ProbeSet' ...
"""
+ self.redis_instance = redis_instance
self.datasets = {}
-
- data = Redis.get("dataset_structure")
+ data = redis_instance.get("dataset_structure")
if data:
self.datasets = json.loads(data)
else: # ZS: I don't think this should ever run unless Redis is emptied
@@ -115,7 +115,7 @@ Publish or ProbeSet. E.g.
except:
pass
- Redis.set("dataset_structure", json.dumps(self.datasets))
+ redis_instance.set("dataset_structure", json.dumps(self.datasets))
# Set LOG_LEVEL_DEBUG=5 to see the following:
logger.debugf(5, "datasets", self.datasets)
@@ -134,7 +134,7 @@ Publish or ProbeSet. E.g.
results = g.db.execute(mrna_expr_query).fetchall()
if len(results):
self.datasets[name] = "ProbeSet"
- Redis.set("dataset_structure", json.dumps(self.datasets))
+ redis_instance.set("dataset_structure", json.dumps(self.datasets))
return self.datasets[name]
group_name = name.replace("Publish", "")
@@ -148,7 +148,7 @@ Publish or ProbeSet. E.g.
results = g.db.execute(pheno_query).fetchall()
if len(results):
self.datasets[name] = "Publish"
- Redis.set("dataset_structure", json.dumps(self.datasets))
+ redis_instance.set("dataset_structure", json.dumps(self.datasets))
return self.datasets[name]
# ZS: For when there isn't an InfoFiles ID; not sure if this and the preceding query are both necessary
@@ -160,7 +160,7 @@ Publish or ProbeSet. E.g.
results = g.db.execute(other_pheno_query).fetchall()
if len(results):
self.datasets[name] = "Publish"
- Redis.set("dataset_structure", json.dumps(self.datasets))
+ redis_instance.set("dataset_structure", json.dumps(self.datasets))
return self.datasets[name]
geno_query = """
@@ -175,7 +175,7 @@ Publish or ProbeSet. E.g.
results = g.db.execute(geno_query).fetchall()
if len(results):
self.datasets[name] = "Geno"
- Redis.set("dataset_structure", json.dumps(self.datasets))
+ self.redis_instance.set("dataset_structure", json.dumps(self.datasets))
return self.datasets[name]
# ZS: It shouldn't ever reach this
@@ -185,13 +185,13 @@ Publish or ProbeSet. E.g.
# Do the intensive work at startup one time only
-Dataset_Getter = Dataset_Types()
+Dataset_Getter = DatasetType(r)
def create_datasets_list():
if USE_REDIS:
key = "all_datasets"
- result = Redis.get(key)
+ result = r.get(key)
if result:
logger.debug("Redis cache hit")
@@ -215,8 +215,8 @@ def create_datasets_list():
datasets.append(dataset)
if USE_REDIS:
- Redis.set(key, pickle.dumps(datasets, pickle.HIGHEST_PROTOCOL))
- Redis.expire(key, 60*60)
+ r.set(key, pickle.dumps(datasets, pickle.HIGHEST_PROTOCOL))
+ r.expire(key, 60*60)
return datasets
@@ -431,7 +431,7 @@ class DatasetGroup(object):
result = None
key = "samplelist:v3:" + self.name
if USE_REDIS:
- result = Redis.get(key)
+ result = r.get(key)
if result is not None:
self.samplelist = json.loads(result)
@@ -446,8 +446,8 @@ class DatasetGroup(object):
self.samplelist = None
if USE_REDIS:
- Redis.set(key, json.dumps(self.samplelist))
- Redis.expire(key, 60*5)
+ r.set(key, json.dumps(self.samplelist))
+ r.expire(key, 60*5)
def all_samples_ordered(self):
result = []
@@ -558,8 +558,8 @@ def datasets(group_name, this_group=None):
datasets=[(dataset, dataset_short)]))
if USE_REDIS:
- Redis.set(key, pickle.dumps(dataset_menu, pickle.HIGHEST_PROTOCOL))
- Redis.expire(key, 60*5)
+ r.set(key, pickle.dumps(dataset_menu, pickle.HIGHEST_PROTOCOL))
+ r.expire(key, 60*5)
if this_group != None:
this_group._datasets = dataset_menu
--
cgit v1.2.3
From ef62b2c146bb1c8960a3ee700c544d61519998b2 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Fri, 24 Jul 2020 02:15:59 +0300
Subject: Remove unreachable conditional
* wqflask/base/GeneralObject.py(__getattr__): remove if statement that is
unreachable
---
wqflask/base/GeneralObject.py | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/GeneralObject.py b/wqflask/base/GeneralObject.py
index 37bfeda3..0fccaab3 100644
--- a/wqflask/base/GeneralObject.py
+++ b/wqflask/base/GeneralObject.py
@@ -43,10 +43,7 @@ class GeneralObject:
return getattr(self, key)
def __getattr__(self, key):
- if key in self.__dict__.keys():
- return self.__dict__[key]
- else:
- return eval("self.__dict__.%s" % key)
+ return eval("self.__dict__.%s" % key)
def __len__(self):
return len(self.__dict__) - 1
--
cgit v1.2.3
From e8ca99cc7a8e3fd9af0c477da423b60cc1eb654c Mon Sep 17 00:00:00 2001
From: zsloan
Date: Fri, 24 Jul 2020 15:18:44 -0500
Subject: Fixed queries that were wrongly returning Data IDs as Ns
---
wqflask/base/data_set.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 2272b6ee..e9deb8a9 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -939,7 +939,7 @@ class GenotypeDataSet(DataSet):
def retrieve_sample_data(self, trait):
query = """
SELECT
- Strain.Name, GenoData.value, GenoSE.error, GenoData.Id, Strain.Name2
+ Strain.Name, GenoData.value, GenoSE.error, "N/A", Strain.Name2
FROM
(GenoData, GenoFreeze, Strain, Geno, GenoXRef)
left join GenoSE on
@@ -1107,11 +1107,14 @@ class MrnaAssayDataSet(DataSet):
def retrieve_sample_data(self, trait):
query = """
SELECT
- Strain.Name, ProbeSetData.value, ProbeSetSE.error, ProbeSetData.Id, Strain.Name2
+ Strain.Name, ProbeSetData.value, ProbeSetSE.error, NStrain.count, Strain.Name2
FROM
(ProbeSetData, ProbeSetFreeze, Strain, ProbeSet, ProbeSetXRef)
left join ProbeSetSE on
(ProbeSetSE.DataId = ProbeSetData.Id AND ProbeSetSE.StrainId = ProbeSetData.StrainId)
+ left join NStrain on
+ (NStrain.DataId = ProbeSetData.Id AND
+ NStrain.StrainId = ProbeSetData.StrainId)
WHERE
ProbeSet.Name = '%s' AND ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
--
cgit v1.2.3
From 9b1dd2f67d51de2d6cdb687ee332597ba010a0ac Mon Sep 17 00:00:00 2001
From: Pjotr Prins
Date: Sat, 25 Jul 2020 11:54:10 +0100
Subject: Removing bimbam check. We'll get rid of bimbam anyway.
---
wqflask/base/webqtlConfig.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/webqtlConfig.py b/wqflask/base/webqtlConfig.py
index 3d86bc22..862ac881 100644
--- a/wqflask/base/webqtlConfig.py
+++ b/wqflask/base/webqtlConfig.py
@@ -85,7 +85,7 @@ assert_writable_dir(GENERATED_TEXT_DIR)
# Flat file directories
GENODIR = flat_files('genotype')+'/'
assert_dir(GENODIR)
-assert_dir(GENODIR+'bimbam') # for gemma
+# assert_dir(GENODIR+'bimbam') # for gemma
# JSON genotypes are OBSOLETE
JSON_GENODIR = flat_files('genotype/json')+'/'
--
cgit v1.2.3
From 441e2dfa2772794673b69cc72f8561fc026d077b Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Mon, 27 Jul 2020 18:35:45 +0300
Subject: Use the correct redis instance inside object
* wqflask/base/data_set.py (DatasetType): Use object's redis instance
---
wqflask/base/data_set.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 5d562871..bce94aa8 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -93,7 +93,7 @@ Publish or ProbeSet. E.g.
"""
self.redis_instance = redis_instance
self.datasets = {}
- data = redis_instance.get("dataset_structure")
+ data = self.redis_instance.get("dataset_structure")
if data:
self.datasets = json.loads(data)
else: # ZS: I don't think this should ever run unless Redis is emptied
@@ -115,7 +115,7 @@ Publish or ProbeSet. E.g.
except:
pass
- redis_instance.set("dataset_structure", json.dumps(self.datasets))
+ self.redis_instance.set("dataset_structure", json.dumps(self.datasets))
# Set LOG_LEVEL_DEBUG=5 to see the following:
logger.debugf(5, "datasets", self.datasets)
--
cgit v1.2.3
From fea8444fb7b0224fd44711853904822ee8b43f4f Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Mon, 27 Jul 2020 19:11:11 +0300
Subject: Abstract away redundant code into set_dataset_key method
* wqflask/base/data_set.py (Dataset):
- Add set_dataset_key
- Remove __call__ method
---
wqflask/base/data_set.py | 109 ++++++++++++++++++++---------------------------
1 file changed, 47 insertions(+), 62 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index bce94aa8..cfba9104 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -117,71 +117,56 @@ Publish or ProbeSet. E.g.
self.redis_instance.set("dataset_structure", json.dumps(self.datasets))
- # Set LOG_LEVEL_DEBUG=5 to see the following:
- logger.debugf(5, "datasets", self.datasets)
+ def set_dataset_key(self, t, name):
+ """If name is not in the object's dataset dictionary, set it, and update
+ dataset_structure in Redis
+
+ args:
+ t: Type of dataset structure which can be: 'mrna_expr', 'pheno',
+ 'other_pheno', 'geno'
+ name: The name of the key to inserted in the datasets dictionary
+
+ """
+ sql_query_mapping = {
+ 'mrna_expr': ("""SELECT ProbeSetFreeze.Id FROM """ +
+ """ProbeSetFreeze WHERE ProbeSetFreeze.Name = "{}" """),
+ 'pheno': ("""SELECT InfoFiles.GN_AccesionId """ +
+ """FROM InfoFiles, PublishFreeze, InbredSet """ +
+ """WHERE InbredSet.Name = '{}' AND """ +
+ """PublishFreeze.InbredSetId = InbredSet.Id AND """ +
+ """InfoFiles.InfoPageName = PublishFreeze.Name"""),
+ 'other_pheno': ("""SELECT PublishFreeze.Name """ +
+ """FROM PublishFreeze, InbredSet """ +
+ """WHERE InbredSet.Name = '{}' AND """ +
+ """PublishFreeze.InbredSetId = InbredSet.Id"""),
+ 'geno': ("""SELECT GenoFreeze.Id FROM GenoFreeze WHERE """ +
+ """GenoFreeze.Name = "{}" """)
+ }
+
+ dataset_name_mapping = {
+ "mrna_expr": "ProbeSet",
+ "pheno": "Publish",
+ "other_pheno": "Publish",
+ "geno": "Geno",
+ }
+
+ if t in ['pheno', 'other_pheno']:
+ name = name.replace("Publish", "")
+ if bool(len(g.db.execute(sql_query_mapping[t].format(name)))):
+ self.datasets[name] = dataset_name_mapping[t]
+ self.redis_instance.set("dataset_structure", json.dumps(self.datasets))
+ return True
+
+ return None
def __call__(self, 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(mrna_expr_query).fetchall()
- if len(results):
- self.datasets[name] = "ProbeSet"
- redis_instance.set("dataset_structure", json.dumps(self.datasets))
- 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"
- redis_instance.set("dataset_structure", json.dumps(self.datasets))
- 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"
- redis_instance.set("dataset_structure", json.dumps(self.datasets))
- return self.datasets[name]
-
- geno_query = """
- SELECT
- GenoFreeze.Id
- FROM
- GenoFreeze
- WHERE
- GenoFreeze.Name = "{0}"
- """.format(name)
-
- results = g.db.execute(geno_query).fetchall()
- if len(results):
- self.datasets[name] = "Geno"
- self.redis_instance.set("dataset_structure", json.dumps(self.datasets))
- return self.datasets[name]
-
- # ZS: It shouldn't ever reach this
- return None
- else:
- return self.datasets[name]
+ for t in ["mrna_expr", "pheno", "other_pheno", "geno"]:
+ # This has side-effects, with the end result being a truth-y value
+ if(self.set_dataset_key(t, name)):
+ break
+ return self.datasets.get(name, None) # Return None if name has not been set
# Do the intensive work at startup one time only
--
cgit v1.2.3
From c1e22edf5f08b6d9c79a6608b8faf434578e246d Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Mon, 27 Jul 2020 21:00:24 +0300
Subject: Clean up webqtlCaseData class
* wqflask/base/webqtlCaseData.py (webqtlCaseData):
- Remove obsolete 'Object' from Class inheritance
- Replace 'str' with 'case_data_string' variable- it collides with python in-builts
- Use pythonic 'is Not None' form
- Remove redundancy in 'if' forms
- Update copyright header
---
wqflask/base/webqtlCaseData.py | 41 ++++++++++++++++++-----------------------
1 file changed, 18 insertions(+), 23 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/webqtlCaseData.py b/wqflask/base/webqtlCaseData.py
index d8487f01..2844cedd 100644
--- a/wqflask/base/webqtlCaseData.py
+++ b/wqflask/base/webqtlCaseData.py
@@ -19,8 +19,7 @@
# This module is used by GeneNetwork project (www.genenetwork.org)
#
# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2010/10/20
+
from utility.logger import getLogger
logger = getLogger(__name__)
@@ -29,7 +28,7 @@ import utility.tools
utility.tools.show_settings()
-class webqtlCaseData(object):
+class webqtlCaseData:
"""one case data in one trait"""
def __init__(self, name, value=None, variance=None, num_cases=None, name2=None):
@@ -43,44 +42,40 @@ class webqtlCaseData(object):
self.outlier = None # Not set to True/False until later
def __repr__(self):
- str = " "
- if self.value != None:
- str += "value=%2.3f" % self.value
- if self.variance != None:
- str += " variance=%2.3f" % self.variance
+ case_data_string = " "
+ if self.value is not None:
+ case_data_string += "value=%2.3f" % self.value
+ if self.variance is not None:
+ case_data_string += " variance=%2.3f" % self.variance
if self.num_cases:
- str += " ndata=%s" % self.num_cases
+ case_data_string += " ndata=%s" % self.num_cases
if self.name:
- str += " name=%s" % self.name
+ case_data_string += " name=%s" % self.name
if self.name2:
- str += " name2=%s" % self.name2
- return str
+ case_data_string += " name2=%s" % self.name2
+ return case_data_string
@property
def class_outlier(self):
"""Template helper"""
if self.outlier:
return "outlier"
- else:
- return ""
+ return ""
@property
def display_value(self):
- if self.value != None:
+ if self.value is not None:
return "%2.3f" % self.value
- else:
- return "x"
+ return "x"
@property
def display_variance(self):
- if self.variance != None:
+ if self.variance is not None:
return "%2.3f" % self.variance
- else:
- return "x"
+ return "x"
@property
def display_num_cases(self):
- if self.num_cases != None:
+ if self.num_cases is not None:
return "%s" % self.num_cases
- else:
- return "x"
+ return "x"
--
cgit v1.2.3
From ba123e1e0fe693f9778993c3f8e5a70a28658a4c Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Wed, 19 Aug 2020 02:31:31 +0300
Subject: Fix dictionary iteration methods
Run `2to3-3.8 -f dict -w .`
See: and
---
scripts/maintenance/load_genotypes.py | 4 +--
wqflask/base/GeneralObject.py | 8 ++---
wqflask/base/trait.py | 4 +--
wqflask/maintenance/gen_select_dataset.py | 6 ++--
.../maintenance/generate_probesetfreeze_file.py | 2 +-
wqflask/utility/__init__.py | 4 +--
wqflask/utility/benchmark.py | 4 +--
wqflask/utility/gen_geno_ob.py | 2 +-
wqflask/utility/helper_functions.py | 2 +-
wqflask/utility/svg.py | 14 ++++----
wqflask/utility/temp_data.py | 2 +-
wqflask/utility/tools.py | 2 +-
wqflask/wqflask/api/correlation.py | 16 ++++-----
wqflask/wqflask/api/gen_menu.py | 6 ++--
wqflask/wqflask/correlation/corr_scatter_plot.py | 6 ++--
wqflask/wqflask/correlation/show_corr_results.py | 30 ++++++++---------
wqflask/wqflask/ctl/ctl_analysis.py | 2 +-
wqflask/wqflask/export_traits.py | 4 +--
wqflask/wqflask/heatmap/heatmap.py | 4 +--
wqflask/wqflask/interval_analyst/GeneUtil.py | 2 +-
.../marker_regression/display_mapping_results.py | 38 +++++++++++-----------
wqflask/wqflask/marker_regression/run_mapping.py | 24 +++++++-------
wqflask/wqflask/resource_manager.py | 2 +-
wqflask/wqflask/show_trait/export_trait_data.py | 2 +-
wqflask/wqflask/show_trait/show_trait.py | 8 ++---
wqflask/wqflask/views.py | 6 ++--
26 files changed, 102 insertions(+), 102 deletions(-)
(limited to 'wqflask/base')
diff --git a/scripts/maintenance/load_genotypes.py b/scripts/maintenance/load_genotypes.py
index c235a31f..51278d48 100755
--- a/scripts/maintenance/load_genotypes.py
+++ b/scripts/maintenance/load_genotypes.py
@@ -19,7 +19,7 @@ def fetch_parameters(config):
config_dic['dataid'] = datastructure.get_nextdataid_genotype()
config_dic['genofile'] = config.get('config', 'genofile')
print("config dictionary:")
- for k, v in config_dic.items():
+ for k, v in list(config_dic.items()):
print(("\t%s: %s" % (k, v)))
return config_dic
@@ -42,7 +42,7 @@ def parse_genofile(config, config_dic):
if line.lower().startswith("chr"):
#
print("geno file meta dictionary:")
- for k, v in meta_dic.items():
+ for k, v in list(meta_dic.items()):
print(("\t%s: %s" % (k, v)))
#
print(("geno file head:\n\t%s" % line))
diff --git a/wqflask/base/GeneralObject.py b/wqflask/base/GeneralObject.py
index 0fccaab3..707569db 100644
--- a/wqflask/base/GeneralObject.py
+++ b/wqflask/base/GeneralObject.py
@@ -33,7 +33,7 @@ class GeneralObject:
def __init__(self, *args, **kw):
self.contents = list(args)
- for name, value in kw.items():
+ for name, value in list(kw.items()):
setattr(self, name, value)
def __setitem__(self, key, value):
@@ -50,16 +50,16 @@ class GeneralObject:
def __str__(self):
s = ''
- for key in self.__dict__.keys():
+ for key in list(self.__dict__.keys()):
if key != 'contents':
s += '%s = %s\n' % (key, self.__dict__[key])
return s
def __repr__(self):
s = ''
- for key in self.__dict__.keys():
+ for key in list(self.__dict__.keys()):
s += '%s = %s\n' % (key, self.__dict__[key])
return s
def __cmp__(self, other):
- return len(self.__dict__.keys()).__cmp__(len(other.__dict__.keys()))
+ return len(list(self.__dict__.keys())).__cmp__(len(list(other.__dict__.keys())))
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 7666348e..e82df226 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -118,7 +118,7 @@ class GeneralTrait(object):
vals = []
the_vars = []
sample_aliases = []
- for sample_name, sample_data in self.data.items():
+ for sample_name, sample_data in list(self.data.items()):
if sample_data.value != None:
if not include_variance or sample_data.variance != None:
samples.append(sample_name)
@@ -260,7 +260,7 @@ def get_sample_data():
trait_dict['pubmed_link'] = trait_ob.pubmed_link
trait_dict['pubmed_text'] = trait_ob.pubmed_text
- return json.dumps([trait_dict, {key: value.value for key, value in trait_ob.data.iteritems() }])
+ return json.dumps([trait_dict, {key: value.value for key, value in list(trait_ob.data.items()) }])
else:
return None
diff --git a/wqflask/maintenance/gen_select_dataset.py b/wqflask/maintenance/gen_select_dataset.py
index 647e58a2..78217587 100644
--- a/wqflask/maintenance/gen_select_dataset.py
+++ b/wqflask/maintenance/gen_select_dataset.py
@@ -108,7 +108,7 @@ def get_types(groups):
"""Build types list"""
types = {}
#print("Groups: ", pf(groups))
- for species, group_dict in groups.iteritems():
+ for species, group_dict in list(groups.items()):
types[species] = {}
for group_name, _group_full_name in group_dict:
# make group an alias to shorten the code
@@ -195,9 +195,9 @@ def build_types(species, group):
def get_datasets(types):
"""Build datasets list"""
datasets = {}
- for species, group_dict in types.iteritems():
+ for species, group_dict in list(types.items()):
datasets[species] = {}
- for group, type_list in group_dict.iteritems():
+ for group, type_list in list(group_dict.items()):
datasets[species][group] = {}
for type_name in type_list:
these_datasets = build_datasets(species, group, type_name[0])
diff --git a/wqflask/maintenance/generate_probesetfreeze_file.py b/wqflask/maintenance/generate_probesetfreeze_file.py
index b7b2dc8e..4231cc7c 100644
--- a/wqflask/maintenance/generate_probesetfreeze_file.py
+++ b/wqflask/maintenance/generate_probesetfreeze_file.py
@@ -82,7 +82,7 @@ def get_probeset_vals(cursor, dataset_name):
def trim_strains(strains, probeset_vals):
trimmed_strains = []
#print("probeset_vals is:", pf(probeset_vals))
- first_probeset = list(probeset_vals.itervalues())[0]
+ first_probeset = list(probeset_vals.values())[0]
print("\n**** first_probeset is:", pf(first_probeset))
for strain in strains:
print("\n**** strain is:", pf(strain))
diff --git a/wqflask/utility/__init__.py b/wqflask/utility/__init__.py
index d9856eed..204ff59a 100644
--- a/wqflask/utility/__init__.py
+++ b/wqflask/utility/__init__.py
@@ -19,7 +19,7 @@ class Struct(object):
'''
def __init__(self, obj):
- for k, v in obj.iteritems():
+ for k, v in list(obj.items()):
if isinstance(v, dict):
setattr(self, k, Struct(v))
else:
@@ -30,6 +30,6 @@ class Struct(object):
def __repr__(self):
return '{%s}' % str(', '.join('%s : %s' % (k, repr(v)) for
- (k, v) in self.__dict__.iteritems()))
+ (k, v) in list(self.__dict__.items())))
diff --git a/wqflask/utility/benchmark.py b/wqflask/utility/benchmark.py
index 8f1c916b..221e5151 100644
--- a/wqflask/utility/benchmark.py
+++ b/wqflask/utility/benchmark.py
@@ -38,9 +38,9 @@ class Bench(object):
@classmethod
def report(cls):
- total_time = sum((time_taken for time_taken in cls.entries.itervalues()))
+ total_time = sum((time_taken for time_taken in list(cls.entries.values())))
print("\nTiming report\n")
- for name, time_taken in cls.entries.iteritems():
+ for name, time_taken in list(cls.entries.items()):
percent = int(round((time_taken/total_time) * 100))
print("[{}%] {}: {}".format(percent, name, time_taken))
print()
diff --git a/wqflask/utility/gen_geno_ob.py b/wqflask/utility/gen_geno_ob.py
index 23b0b650..ae42f834 100644
--- a/wqflask/utility/gen_geno_ob.py
+++ b/wqflask/utility/gen_geno_ob.py
@@ -175,7 +175,7 @@ class Locus(object):
start_pos = 3
for allele in marker_row[start_pos:]:
- if allele in geno_table.keys():
+ if allele in list(geno_table.keys()):
self.genotype.append(geno_table[allele])
else: #ZS: Some genotype appears that isn't specified in the metadata, make it unknown
self.genotype.append("U")
\ No newline at end of file
diff --git a/wqflask/utility/helper_functions.py b/wqflask/utility/helper_functions.py
index 9ce809b6..9a4a235a 100644
--- a/wqflask/utility/helper_functions.py
+++ b/wqflask/utility/helper_functions.py
@@ -13,7 +13,7 @@ logger = logging.getLogger(__name__ )
def get_species_dataset_trait(self, start_vars):
#assert type(read_genotype) == type(bool()), "Expecting boolean value for read_genotype"
- if "temp_trait" in start_vars.keys():
+ if "temp_trait" in list(start_vars.keys()):
if start_vars['temp_trait'] == "True":
self.dataset = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = start_vars['group'])
else:
diff --git a/wqflask/utility/svg.py b/wqflask/utility/svg.py
index d66c954e..c6a5c260 100644
--- a/wqflask/utility/svg.py
+++ b/wqflask/utility/svg.py
@@ -133,7 +133,7 @@ def _escape(data, entities={}):
# data = data.replace("&", "&")
data = data.replace("<", "<")
data = data.replace(">", ">")
- for chars, entity in entities.items():
+ for chars, entity in list(entities.items()):
data = data.replace(chars, entity)
return data
@@ -299,7 +299,7 @@ class SVGelement:
self.text = text
self.namespace = namespace
self.cdata = cdata
- for arg in args.keys():
+ for arg in list(args.keys()):
arg2 = arg.replace("__", ":")
arg2 = arg2.replace("_", "-")
self.attributes[arg2] = args[arg]
@@ -314,7 +314,7 @@ class SVGelement:
def toXml(self, level, f):
f.write('\t'*level)
f.write('<'+self.type)
- for attkey in self.attributes.keys():
+ for attkey in list(self.attributes.keys()):
f.write(' '+_escape(str(attkey))+'=' +
_quoteattr(str(self.attributes[attkey])))
if self.namespace:
@@ -365,7 +365,7 @@ class tspan(SVGelement):
def __repr__(self):
s = "'
s += self.text
@@ -390,7 +390,7 @@ class tref(SVGelement):
def __repr__(self):
s = "'
return s
@@ -963,7 +963,7 @@ class drawing:
xml.write("\n" % (item, self.entity[item]))
xml.write("]")
xml.write(">\n")
@@ -1015,7 +1015,7 @@ class drawing:
if element.text:
textnode=root.createTextNode(element.text)
e.appendChild(textnode)
- for attribute in element.attributes.keys(): #in element.attributes is supported from python 2.2
+ for attribute in list(element.attributes.keys()): #in element.attributes is supported from python 2.2
e.setAttribute(attribute,str(element.attributes[attribute]))
if element.elements:
for el in element.elements:
diff --git a/wqflask/utility/temp_data.py b/wqflask/utility/temp_data.py
index 5bf700c9..2f2726c6 100644
--- a/wqflask/utility/temp_data.py
+++ b/wqflask/utility/temp_data.py
@@ -20,6 +20,6 @@ class TempData(object):
if __name__ == "__main__":
redis = Redis()
- for key in redis.keys():
+ for key in list(redis.keys()):
for field in redis.hkeys(key):
print("{}.{}={}".format(key, field, redis.hget(key, field)))
diff --git a/wqflask/utility/tools.py b/wqflask/utility/tools.py
index f790d424..51a87fe1 100644
--- a/wqflask/utility/tools.py
+++ b/wqflask/utility/tools.py
@@ -220,7 +220,7 @@ def show_settings():
logger.info(OVERRIDES)
logger.info(BLUE+"Mr. Mojo Risin 2"+ENDC)
- keylist = app.config.keys()
+ keylist = list(app.config.keys())
print("runserver.py: ****** Webserver configuration - k,v pairs from app.config ******")
keylist.sort()
for k in keylist:
diff --git a/wqflask/wqflask/api/correlation.py b/wqflask/wqflask/api/correlation.py
index 7f5312c1..eb05645e 100644
--- a/wqflask/wqflask/api/correlation.py
+++ b/wqflask/wqflask/api/correlation.py
@@ -36,7 +36,7 @@ def do_correlation(start_vars):
#corr_results = collections.OrderedDict(sorted(corr_results.items(), key=lambda t: -abs(t[1][0])))
final_results = []
- for _trait_counter, trait in enumerate(corr_results.keys()[:corr_params['return_count']]):
+ for _trait_counter, trait in enumerate(list(corr_results.keys())[:corr_params['return_count']]):
if corr_params['type'] == "tissue":
[sample_r, num_overlap, sample_p, symbol] = corr_results[trait]
result_dict = {
@@ -76,20 +76,20 @@ def calculate_results(this_trait, this_dataset, target_dataset, corr_params):
if corr_params['type'] == "tissue":
trait_symbol_dict = this_dataset.retrieve_genes("Symbol")
corr_results = do_tissue_correlation_for_all_traits(this_trait, trait_symbol_dict, corr_params)
- sorted_results = collections.OrderedDict(sorted(corr_results.items(),
+ sorted_results = collections.OrderedDict(sorted(list(corr_results.items()),
key=lambda t: -abs(t[1][1])))
elif corr_params['type'] == "literature" or corr_params['type'] == "lit": #ZS: Just so a user can use either "lit" or "literature"
trait_geneid_dict = this_dataset.retrieve_genes("GeneId")
corr_results = do_literature_correlation_for_all_traits(this_trait, this_dataset, trait_geneid_dict, corr_params)
- sorted_results = collections.OrderedDict(sorted(corr_results.items(),
+ sorted_results = collections.OrderedDict(sorted(list(corr_results.items()),
key=lambda t: -abs(t[1][1])))
else:
- for target_trait, target_vals in target_dataset.trait_data.iteritems():
+ for target_trait, target_vals in list(target_dataset.trait_data.items()):
result = get_sample_r_and_p_values(this_trait, this_dataset, target_vals, target_dataset, corr_params['type'])
if result is not None:
corr_results[target_trait] = result
- sorted_results = collections.OrderedDict(sorted(corr_results.items(), key=lambda t: -abs(t[1][0])))
+ sorted_results = collections.OrderedDict(sorted(list(corr_results.items()), key=lambda t: -abs(t[1][0])))
return sorted_results
@@ -100,10 +100,10 @@ def do_tissue_correlation_for_all_traits(this_trait, trait_symbol_dict, corr_par
if this_trait.symbol.lower() in primary_trait_tissue_vals_dict:
primary_trait_tissue_values = primary_trait_tissue_vals_dict[this_trait.symbol.lower()]
- corr_result_tissue_vals_dict = correlation_functions.get_trait_symbol_and_tissue_values(symbol_list=trait_symbol_dict.values())
+ corr_result_tissue_vals_dict = correlation_functions.get_trait_symbol_and_tissue_values(symbol_list=list(trait_symbol_dict.values()))
tissue_corr_data = {}
- for trait, symbol in trait_symbol_dict.iteritems():
+ for trait, symbol in list(trait_symbol_dict.items()):
if symbol and symbol.lower() in corr_result_tissue_vals_dict:
this_trait_tissue_values = corr_result_tissue_vals_dict[symbol.lower()]
@@ -119,7 +119,7 @@ def do_literature_correlation_for_all_traits(this_trait, target_dataset, trait_g
input_trait_mouse_gene_id = convert_to_mouse_gene_id(target_dataset.group.species.lower(), this_trait.geneid)
lit_corr_data = {}
- for trait, gene_id in trait_geneid_dict.iteritems():
+ for trait, gene_id in list(trait_geneid_dict.items()):
mouse_gene_id = convert_to_mouse_gene_id(target_dataset.group.species.lower(), gene_id)
if mouse_gene_id and str(mouse_gene_id).find(";") == -1:
diff --git a/wqflask/wqflask/api/gen_menu.py b/wqflask/wqflask/api/gen_menu.py
index cc11e14b..71d9ee03 100644
--- a/wqflask/wqflask/api/gen_menu.py
+++ b/wqflask/wqflask/api/gen_menu.py
@@ -61,7 +61,7 @@ def get_types(groups):
"""Build types list"""
types = {}
- for species, group_dict in groups.iteritems():
+ for species, group_dict in list(groups.items()):
types[species] = {}
for group_name, _group_full_name, _family_name in group_dict:
if phenotypes_exist(group_name):
@@ -136,9 +136,9 @@ def build_types(species, group):
def get_datasets(types):
"""Build datasets list"""
datasets = {}
- for species, group_dict in types.iteritems():
+ for species, group_dict in list(types.items()):
datasets[species] = {}
- for group, type_list in group_dict.iteritems():
+ for group, type_list in list(group_dict.items()):
datasets[species][group] = {}
for type_name in type_list:
these_datasets = build_datasets(species, group, type_name[0])
diff --git a/wqflask/wqflask/correlation/corr_scatter_plot.py b/wqflask/wqflask/correlation/corr_scatter_plot.py
index 819836b1..57a8d85f 100644
--- a/wqflask/wqflask/correlation/corr_scatter_plot.py
+++ b/wqflask/wqflask/correlation/corr_scatter_plot.py
@@ -36,13 +36,13 @@ class CorrScatterPlot(object):
samples_1, samples_2, num_overlap = corr_result_helpers.normalize_values_with_samples(self.trait_1.data, self.trait_2.data)
self.data = []
- self.indIDs = samples_1.keys()
+ self.indIDs = list(samples_1.keys())
vals_1 = []
- for sample in samples_1.keys():
+ for sample in list(samples_1.keys()):
vals_1.append(samples_1[sample].value)
self.data.append(vals_1)
vals_2 = []
- for sample in samples_2.keys():
+ for sample in list(samples_2.keys()):
vals_2.append(samples_2[sample].value)
self.data.append(vals_2)
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index de7a1c0c..15a21ee6 100644
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -145,10 +145,10 @@ class CorrelationResults(object):
if corr_samples_group == 'samples_other':
primary_samples = [x for x in primary_samples if x not in (
self.dataset.group.parlist + self.dataset.group.f1list)]
- self.process_samples(start_vars, self.this_trait.data.keys(), primary_samples)
+ self.process_samples(start_vars, list(self.this_trait.data.keys()), primary_samples)
self.target_dataset = data_set.create_dataset(start_vars['corr_dataset'])
- self.target_dataset.get_trait_data(self.sample_data.keys())
+ self.target_dataset.get_trait_data(list(self.sample_data.keys()))
self.header_fields = get_header_fields(self.target_dataset.type, self.corr_method)
@@ -168,41 +168,41 @@ class CorrelationResults(object):
tissue_corr_data = self.do_tissue_correlation_for_all_traits()
if tissue_corr_data != None:
- for trait in tissue_corr_data.keys()[:self.return_number]:
+ for trait in list(tissue_corr_data.keys())[:self.return_number]:
self.get_sample_r_and_p_values(trait, self.target_dataset.trait_data[trait])
else:
- for trait, values in self.target_dataset.trait_data.iteritems():
+ for trait, values in list(self.target_dataset.trait_data.items()):
self.get_sample_r_and_p_values(trait, values)
elif self.corr_type == "lit":
self.trait_geneid_dict = self.dataset.retrieve_genes("GeneId")
lit_corr_data = self.do_lit_correlation_for_all_traits()
- for trait in lit_corr_data.keys()[:self.return_number]:
+ for trait in list(lit_corr_data.keys())[:self.return_number]:
self.get_sample_r_and_p_values(trait, self.target_dataset.trait_data[trait])
elif self.corr_type == "sample":
- for trait, values in self.target_dataset.trait_data.iteritems():
+ for trait, values in list(self.target_dataset.trait_data.items()):
self.get_sample_r_and_p_values(trait, values)
- self.correlation_data = collections.OrderedDict(sorted(self.correlation_data.items(),
+ self.correlation_data = collections.OrderedDict(sorted(list(self.correlation_data.items()),
key=lambda t: -abs(t[1][0])))
if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno":
#ZS: Convert min/max chromosome to an int for the location range option
range_chr_as_int = None
- for order_id, chr_info in self.dataset.species.chromosomes.chromosomes.iteritems():
+ for order_id, chr_info in list(self.dataset.species.chromosomes.chromosomes.items()):
if 'loc_chr' in start_vars:
if chr_info.name == self.location_chr:
range_chr_as_int = order_id
- for _trait_counter, trait in enumerate(self.correlation_data.keys()[:self.return_number]):
+ for _trait_counter, trait in enumerate(list(self.correlation_data.keys())[:self.return_number]):
trait_object = create_trait(dataset=self.target_dataset, name=trait, get_qtl_info=True, get_sample_info=False)
if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno":
#ZS: Convert trait chromosome to an int for the location range option
chr_as_int = 0
- for order_id, chr_info in self.dataset.species.chromosomes.chromosomes.iteritems():
+ for order_id, chr_info in list(self.dataset.species.chromosomes.chromosomes.items()):
if chr_info.name == trait_object.chr:
chr_as_int = order_id
@@ -297,14 +297,14 @@ class CorrelationResults(object):
#print("trait_gene_symbols: ", pf(trait_gene_symbols.values()))
corr_result_tissue_vals_dict= correlation_functions.get_trait_symbol_and_tissue_values(
- symbol_list=self.trait_symbol_dict.values())
+ symbol_list=list(self.trait_symbol_dict.values()))
#print("corr_result_tissue_vals: ", pf(corr_result_tissue_vals_dict))
#print("trait_gene_symbols: ", pf(trait_gene_symbols))
tissue_corr_data = {}
- for trait, symbol in self.trait_symbol_dict.iteritems():
+ for trait, symbol in list(self.trait_symbol_dict.items()):
if symbol and symbol.lower() in corr_result_tissue_vals_dict:
this_trait_tissue_values = corr_result_tissue_vals_dict[symbol.lower()]
@@ -314,7 +314,7 @@ class CorrelationResults(object):
tissue_corr_data[trait] = [symbol, result[0], result[2]]
- tissue_corr_data = collections.OrderedDict(sorted(tissue_corr_data.items(),
+ tissue_corr_data = collections.OrderedDict(sorted(list(tissue_corr_data.items()),
key=lambda t: -abs(t[1][1])))
return tissue_corr_data
@@ -359,7 +359,7 @@ class CorrelationResults(object):
input_trait_mouse_gene_id = self.convert_to_mouse_gene_id(self.dataset.group.species.lower(), self.this_trait.geneid)
lit_corr_data = {}
- for trait, gene_id in self.trait_geneid_dict.iteritems():
+ for trait, gene_id in list(self.trait_geneid_dict.items()):
mouse_gene_id = self.convert_to_mouse_gene_id(self.dataset.group.species.lower(), gene_id)
if mouse_gene_id and str(mouse_gene_id).find(";") == -1:
@@ -387,7 +387,7 @@ class CorrelationResults(object):
else:
lit_corr_data[trait] = [gene_id, 0]
- lit_corr_data = collections.OrderedDict(sorted(lit_corr_data.items(),
+ lit_corr_data = collections.OrderedDict(sorted(list(lit_corr_data.items()),
key=lambda t: -abs(t[1][1])))
return lit_corr_data
diff --git a/wqflask/wqflask/ctl/ctl_analysis.py b/wqflask/wqflask/ctl/ctl_analysis.py
index 35067036..f0be7a98 100644
--- a/wqflask/wqflask/ctl/ctl_analysis.py
+++ b/wqflask/wqflask/ctl/ctl_analysis.py
@@ -125,7 +125,7 @@ class CTL(object):
gt = create_trait(name = ts[0], dataset_name = ts[1])
gt = retrieve_sample_data(gt, dataset, individuals)
for ind in individuals:
- if ind in gt.data.keys():
+ if ind in list(gt.data.keys()):
traits.append(gt.data[ind].value)
else:
traits.append("-999")
diff --git a/wqflask/wqflask/export_traits.py b/wqflask/wqflask/export_traits.py
index 6646cc36..28c6593d 100644
--- a/wqflask/wqflask/export_traits.py
+++ b/wqflask/wqflask/export_traits.py
@@ -61,7 +61,7 @@ def export_search_results_csv(targs):
traits_by_group = sort_traits_by_group(trait_list)
file_list = []
- for group in traits_by_group.keys():
+ for group in list(traits_by_group.keys()):
group_traits = traits_by_group[group]
buff = StringIO.StringIO()
writer = csv.writer(buff)
@@ -135,7 +135,7 @@ def export_search_results_csv(targs):
def sort_traits_by_group(trait_list=[]):
traits_by_group = {}
for trait in trait_list:
- if trait.dataset.group.name not in traits_by_group.keys():
+ if trait.dataset.group.name not in list(traits_by_group.keys()):
traits_by_group[trait.dataset.group.name] = []
traits_by_group[trait.dataset.group.name].append(trait)
diff --git a/wqflask/wqflask/heatmap/heatmap.py b/wqflask/wqflask/heatmap/heatmap.py
index 5098a184..577426b0 100644
--- a/wqflask/wqflask/heatmap/heatmap.py
+++ b/wqflask/wqflask/heatmap/heatmap.py
@@ -60,7 +60,7 @@ class Heatmap(object):
chrnames = []
self.species = species.TheSpecies(dataset=self.trait_list[0][1])
- for key in self.species.chromosomes.chromosomes.keys():
+ for key in list(self.species.chromosomes.chromosomes.keys()):
chrnames.append([self.species.chromosomes.chromosomes[key].name, self.species.chromosomes.chromosomes[key].mb_length])
for trait_db in self.trait_list:
@@ -93,7 +93,7 @@ class Heatmap(object):
pos = []
markernames = []
- for trait in self.trait_results.keys():
+ for trait in list(self.trait_results.keys()):
lodnames.append(trait)
self.dataset.group.get_markers()
diff --git a/wqflask/wqflask/interval_analyst/GeneUtil.py b/wqflask/wqflask/interval_analyst/GeneUtil.py
index 273168a8..a39e5d0f 100644
--- a/wqflask/wqflask/interval_analyst/GeneUtil.py
+++ b/wqflask/wqflask/interval_analyst/GeneUtil.py
@@ -24,7 +24,7 @@ def loadGenes(chrName, diffCol, startMb, endMb, species='mouse'):
##List current Species and other Species
speciesId = speciesDict[species]
- otherSpecies = [[X, speciesDict[X]] for X in speciesDict.keys()]
+ otherSpecies = [[X, speciesDict[X]] for X in list(speciesDict.keys())]
otherSpecies.remove([species, speciesId])
results = g.db.execute("""
diff --git a/wqflask/wqflask/marker_regression/display_mapping_results.py b/wqflask/wqflask/marker_regression/display_mapping_results.py
index 7b6e70d2..0328ce85 100644
--- a/wqflask/wqflask/marker_regression/display_mapping_results.py
+++ b/wqflask/wqflask/marker_regression/display_mapping_results.py
@@ -229,7 +229,7 @@ class DisplayMappingResults(object):
self.manhattan_plot = start_vars['manhattan_plot']
- if 'permCheck' in start_vars.keys():
+ if 'permCheck' in list(start_vars.keys()):
self.permChecked = start_vars['permCheck']
else:
self.permChecked = False
@@ -242,46 +242,46 @@ class DisplayMappingResults(object):
else:
self.nperm = 0
- if 'bootCheck' in start_vars.keys():
+ if 'bootCheck' in list(start_vars.keys()):
self.bootChecked = start_vars['bootCheck']
else:
self.bootChecked = False
- if 'num_bootstrap' in start_vars.keys():
+ if 'num_bootstrap' in list(start_vars.keys()):
self.nboot = int(start_vars['num_bootstrap'])
else:
self.nboot = 0
- if 'bootstrap_results' in start_vars.keys():
+ if 'bootstrap_results' in list(start_vars.keys()):
self.bootResult = start_vars['bootstrap_results']
else:
self.bootResult = []
- if 'do_control' in start_vars.keys():
+ if 'do_control' in list(start_vars.keys()):
self.doControl = start_vars['do_control']
else:
self.doControl = "false"
- if 'control_marker' in start_vars.keys():
+ if 'control_marker' in list(start_vars.keys()):
self.controlLocus = start_vars['control_marker']
else:
self.controlLocus = ""
- if 'covariates' in start_vars.keys():
+ if 'covariates' in list(start_vars.keys()):
self.covariates = start_vars['covariates']
- if 'maf' in start_vars.keys():
+ if 'maf' in list(start_vars.keys()):
self.maf = start_vars['maf']
else:
self.maf = ""
- if 'output_files' in start_vars.keys():
+ if 'output_files' in list(start_vars.keys()):
self.output_files = start_vars['output_files']
- if 'use_loco' in start_vars.keys() and self.mapping_method == "gemma":
+ if 'use_loco' in list(start_vars.keys()) and self.mapping_method == "gemma":
self.use_loco = start_vars['use_loco']
- if 'reaper_version' in start_vars.keys() and self.mapping_method == "reaper":
+ if 'reaper_version' in list(start_vars.keys()) and self.mapping_method == "reaper":
self.reaper_version = start_vars['reaper_version']
if 'output_files' in start_vars:
self.output_files = ",".join(start_vars['output_files'])
self.categorical_vars = ""
self.perm_strata = ""
- if 'perm_strata' in start_vars.keys() and 'categorical_vars' in start_vars.keys():
+ if 'perm_strata' in list(start_vars.keys()) and 'categorical_vars' in list(start_vars.keys()):
self.categorical_vars = start_vars['categorical_vars']
self.perm_strata = start_vars['perm_strata']
@@ -323,7 +323,7 @@ class DisplayMappingResults(object):
self.graphWidth = self.MULT_GRAPH_DEFAULT_WIDTH
## BEGIN HaplotypeAnalyst
- if 'haplotypeAnalystCheck' in start_vars.keys():
+ if 'haplotypeAnalystCheck' in list(start_vars.keys()):
self.haplotypeAnalystChecked = start_vars['haplotypeAnalystCheck']
else:
self.haplotypeAnalystChecked = False
@@ -331,25 +331,25 @@ class DisplayMappingResults(object):
self.graphHeight = self.GRAPH_DEFAULT_HEIGHT
self.dominanceChecked = False
- if 'LRSCheck' in start_vars.keys():
+ if 'LRSCheck' in list(start_vars.keys()):
self.LRS_LOD = start_vars['LRSCheck']
else:
self.LRS_LOD = start_vars['score_type']
self.intervalAnalystChecked = True
self.draw2X = False
- if 'additiveCheck' in start_vars.keys():
+ if 'additiveCheck' in list(start_vars.keys()):
self.additiveChecked = start_vars['additiveCheck']
else:
self.additiveChecked = False
- if 'viewLegend' in start_vars.keys():
+ if 'viewLegend' in list(start_vars.keys()):
self.legendChecked = start_vars['viewLegend']
else:
self.legendChecked = False
- if 'showSNP' in start_vars.keys():
+ if 'showSNP' in list(start_vars.keys()):
self.SNPChecked = start_vars['showSNP']
else:
self.SNPChecked = False
- if 'showGenes' in start_vars.keys():
+ if 'showGenes' in list(start_vars.keys()):
self.geneChecked = start_vars['showGenes']
else:
self.geneChecked = False
@@ -530,7 +530,7 @@ class DisplayMappingResults(object):
showLocusForm = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype='multipart/form-data',
name=showLocusForm, submit=HT.Input(type='hidden'))
hddn = {'FormID':'showDatabase', 'ProbeSetID':'_','database':fd.RISet+"Geno",'CellID':'_', 'RISet':fd.RISet, 'incparentsf1':'ON'}
- for key in hddn.keys():
+ for key in list(hddn.keys()):
showLocusForm.append(HT.Input(name=key, value=hddn[key], type='hidden'))
showLocusForm.append(intImg)
else:
diff --git a/wqflask/wqflask/marker_regression/run_mapping.py b/wqflask/wqflask/marker_regression/run_mapping.py
index c9d10f7c..145dbc77 100644
--- a/wqflask/wqflask/marker_regression/run_mapping.py
+++ b/wqflask/wqflask/marker_regression/run_mapping.py
@@ -347,7 +347,7 @@ class RunMapping(object):
if marker['chr1'] > 0 or marker['chr1'] == "X" or marker['chr1'] == "X/Y":
if marker['chr1'] > highest_chr or marker['chr1'] == "X" or marker['chr1'] == "X/Y":
highest_chr = marker['chr1']
- if 'lod_score' in marker.keys():
+ if 'lod_score' in list(marker.keys()):
self.qtl_results.append(marker)
self.trimmed_markers = results
@@ -411,7 +411,7 @@ class RunMapping(object):
if marker['chr'] > 0 or marker['chr'] == "X" or marker['chr'] == "X/Y":
if marker['chr'] > highest_chr or marker['chr'] == "X" or marker['chr'] == "X/Y":
highest_chr = marker['chr']
- if ('lod_score' in marker.keys()) or ('lrs_value' in marker.keys()):
+ if ('lod_score' in list(marker.keys())) or ('lrs_value' in list(marker.keys())):
self.qtl_results.append(marker)
with Bench("Exporting Results"):
@@ -538,28 +538,28 @@ def export_mapping_results(dataset, trait, markers, results_path, mapping_scale,
output_file.write("Mb," + score_type)
else:
output_file.write("Cm," + score_type)
- if "additive" in markers[0].keys():
+ if "additive" in list(markers[0].keys()):
output_file.write(",Additive")
- if "dominance" in markers[0].keys():
+ if "dominance" in list(markers[0].keys()):
output_file.write(",Dominance")
output_file.write("\n")
for i, marker in enumerate(markers):
output_file.write(marker['name'] + "," + str(marker['chr']) + "," + str(marker['Mb']) + ",")
- if "lod_score" in marker.keys():
+ if "lod_score" in list(marker.keys()):
output_file.write(str(marker['lod_score']))
else:
output_file.write(str(marker['lrs_value']))
- if "additive" in marker.keys():
+ if "additive" in list(marker.keys()):
output_file.write("," + str(marker['additive']))
- if "dominance" in marker.keys():
+ if "dominance" in list(marker.keys()):
output_file.write("," + str(marker['dominance']))
if i < (len(markers) - 1):
output_file.write("\n")
def trim_markers_for_figure(markers):
- if 'p_wald' in markers[0].keys():
+ if 'p_wald' in list(markers[0].keys()):
score_type = 'p_wald'
- elif 'lod_score' in markers[0].keys():
+ elif 'lod_score' in list(markers[0].keys()):
score_type = 'lod_score'
else:
score_type = 'lrs_value'
@@ -617,7 +617,7 @@ def trim_markers_for_figure(markers):
return filtered_markers
def trim_markers_for_table(markers):
- if 'lod_score' in markers[0].keys():
+ if 'lod_score' in list(markers[0].keys()):
sorted_markers = sorted(markers, key=lambda k: k['lod_score'], reverse=True)
else:
sorted_markers = sorted(markers, key=lambda k: k['lrs_value'], reverse=True)
@@ -695,10 +695,10 @@ def get_genofile_samplelist(dataset):
def get_perm_strata(this_trait, sample_list, categorical_vars, used_samples):
perm_strata_strings = []
for sample in used_samples:
- if sample in sample_list.sample_attribute_values.keys():
+ if sample in list(sample_list.sample_attribute_values.keys()):
combined_string = ""
for var in categorical_vars:
- if var in sample_list.sample_attribute_values[sample].keys():
+ if var in list(sample_list.sample_attribute_values[sample].keys()):
combined_string += str(sample_list.sample_attribute_values[sample][var])
else:
combined_string += "NA"
diff --git a/wqflask/wqflask/resource_manager.py b/wqflask/wqflask/resource_manager.py
index 39a07310..6b3e00fb 100644
--- a/wqflask/wqflask/resource_manager.py
+++ b/wqflask/wqflask/resource_manager.py
@@ -125,7 +125,7 @@ def add_group_to_resource():
def get_group_names(group_masks):
group_masks_with_names = {}
- for group_id, group_mask in group_masks.iteritems():
+ for group_id, group_mask in list(group_masks.items()):
this_mask = group_mask
group_name = get_group_info(group_id)['name']
this_mask['name'] = group_name
diff --git a/wqflask/wqflask/show_trait/export_trait_data.py b/wqflask/wqflask/show_trait/export_trait_data.py
index 253c887b..68c3ad7d 100644
--- a/wqflask/wqflask/show_trait/export_trait_data.py
+++ b/wqflask/wqflask/show_trait/export_trait_data.py
@@ -47,7 +47,7 @@ def get_export_metadata(trait_id, dataset_name):
def dict_to_sorted_list(dictionary):
- sorted_list = [item for item in dictionary.iteritems()]
+ sorted_list = [item for item in list(dictionary.items())]
sorted_list = sorted(sorted_list, cmp=cmp_samples)
sorted_values = [item[1] for item in sorted_list]
return sorted_values
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index f188fd9d..c156e61b 100644
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -261,7 +261,7 @@ class ShowTrait(object):
hddn['export_data'] = ""
hddn['export_format'] = "excel"
if len(self.scales_in_geno) < 2:
- hddn['mapping_scale'] = self.scales_in_geno[self.scales_in_geno.keys()[0]][0][0]
+ hddn['mapping_scale'] = self.scales_in_geno[list(self.scales_in_geno.keys())[0]][0][0]
# We'll need access to this_trait and hddn in the Jinja2 Template, so we put it inside self
self.hddn = hddn
@@ -405,7 +405,7 @@ class ShowTrait(object):
if not self.temp_trait:
other_sample_names = []
- for sample in self.this_trait.data.keys():
+ for sample in list(self.this_trait.data.keys()):
if (self.this_trait.data[sample].name2 in primary_sample_names) and (self.this_trait.data[sample].name not in primary_sample_names):
primary_sample_names.append(self.this_trait.data[sample].name)
primary_sample_names.remove(self.this_trait.data[sample].name2)
@@ -558,7 +558,7 @@ def get_table_widths(sample_groups, has_num_cases=False):
def has_num_cases(this_trait):
has_n = False
if this_trait.dataset.type != "ProbeSet" and this_trait.dataset.type != "Geno":
- for name, sample in this_trait.data.iteritems():
+ for name, sample in list(this_trait.data.items()):
if sample.num_cases:
has_n = True
break
@@ -611,7 +611,7 @@ def get_categorical_variables(this_trait, sample_list):
if len(sample_list.attributes) > 0:
for attribute in sample_list.attributes:
attribute_vals = []
- for sample_name in this_trait.data.keys():
+ for sample_name in list(this_trait.data.keys()):
if sample_list.attributes[attribute].name in this_trait.data[sample_name].extra_attributes:
attribute_vals.append(this_trait.data[sample_name].extra_attributes[sample_list.attributes[attribute].name])
else:
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index d67f1a2e..394a9e28 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -533,7 +533,7 @@ def heatmap_page():
result = template_vars.__dict__
- for item in template_vars.__dict__.keys():
+ for item in list(template_vars.__dict__.keys()):
logger.info(" ---**--- {}: {}".format(type(template_vars.__dict__[item]), item))
pickled_result = pickle.dumps(result, pickle.HIGHEST_PROTOCOL)
@@ -637,7 +637,7 @@ def loading_page():
if 'wanted_inputs' in initial_start_vars:
wanted = initial_start_vars['wanted_inputs'].split(",")
start_vars = {}
- for key, value in initial_start_vars.iteritems():
+ for key, value in list(initial_start_vars.items()):
if key in wanted or key.startswith(('value:')):
start_vars[key] = value
@@ -737,7 +737,7 @@ def mapping_results_page():
'transform'
)
start_vars = {}
- for key, value in initial_start_vars.iteritems():
+ for key, value in list(initial_start_vars.items()):
if key in wanted or key.startswith(('value:')):
start_vars[key] = value
#logger.debug("Mapping called with start_vars:", start_vars)
--
cgit v1.2.3
From e63331da5ed0a11f2a558d799dd570bf44ad584e Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Wed, 19 Aug 2020 03:01:33 +0300
Subject: Replace `izip` with python's built-in equivalent
Run `2to3-3.8 -f itertools -w . && 2to3-3.8 -f itertools_imports -w .`
See:
and
---
wqflask/base/data_set.py | 2 +-
wqflask/maintenance/quantile_normalize.py | 4 ++--
wqflask/wqflask/export_traits.py | 2 +-
wqflask/wqflask/pbkdf2.py | 6 +++---
4 files changed, 7 insertions(+), 7 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index cfba9104..b0119b58 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -259,7 +259,7 @@ class Markers(object):
# if len(self.markers) > len(p_values):
# self.markers = self.markers[:len(p_values)]
- for marker, p_value in itertools.izip(self.markers, p_values):
+ for marker, p_value in zip(self.markers, p_values):
if not p_value:
continue
marker['p_value'] = float(p_value)
diff --git a/wqflask/maintenance/quantile_normalize.py b/wqflask/maintenance/quantile_normalize.py
index 41a3aad8..34886f44 100644
--- a/wqflask/maintenance/quantile_normalize.py
+++ b/wqflask/maintenance/quantile_normalize.py
@@ -3,7 +3,7 @@ from __future__ import absolute_import, print_function, division
import sys
sys.path.insert(0,'./')
-from itertools import izip
+
import MySQLdb
import urlparse
@@ -60,7 +60,7 @@ def set_data(dataset_name):
sample_list = []
with open(orig_file, 'r') as orig_fh, open('/home/zas1024/cfw_data/quant_norm.csv', 'r') as quant_fh:
- for i, (line1, line2) in enumerate(izip(orig_fh, quant_fh)):
+ for i, (line1, line2) in enumerate(zip(orig_fh, quant_fh)):
trait_dict = {}
sample_list = []
if i == 0:
diff --git a/wqflask/wqflask/export_traits.py b/wqflask/wqflask/export_traits.py
index 28c6593d..a8b49829 100644
--- a/wqflask/wqflask/export_traits.py
+++ b/wqflask/wqflask/export_traits.py
@@ -122,7 +122,7 @@ def export_search_results_csv(targs):
csv_rows.append(row_contents)
- csv_rows = list(map(list, itertools.izip_longest(*[row for row in csv_rows])))
+ csv_rows = list(map(list, itertools.zip_longest(*[row for row in csv_rows])))
writer.writerows(csv_rows)
csv_data = buff.getvalue()
buff.close()
diff --git a/wqflask/wqflask/pbkdf2.py b/wqflask/wqflask/pbkdf2.py
index 731c8843..0ed50790 100644
--- a/wqflask/wqflask/pbkdf2.py
+++ b/wqflask/wqflask/pbkdf2.py
@@ -44,7 +44,7 @@ import hmac
import hashlib
from struct import Struct
from operator import xor
-from itertools import izip, starmap
+from itertools import starmap
_pack_int = Struct('>I').pack
@@ -72,7 +72,7 @@ def pbkdf2_bin(data, salt, iterations=1000, keylen=24, hashfunc=None):
rv = u = _pseudorandom(salt + _pack_int(block))
for i in xrange(iterations - 1):
u = _pseudorandom(''.join(map(chr, u)))
- rv = list(starmap(xor, izip(rv, u)))
+ rv = list(starmap(xor, zip(rv, u)))
buf.extend(rv)
return ''.join(map(chr, buf))[:keylen]
@@ -81,7 +81,7 @@ def safe_str_cmp(a, b):
if len(a) != len(b):
return False
rv = 0
- for x, y in izip(a, b):
+ for x, y in zip(a, b):
rv |= ord(x) ^ ord(y)
return rv == 0
--
cgit v1.2.3
From 7e60647223017220747d248ed1c986cc8374435e Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Wed, 19 Aug 2020 03:13:53 +0300
Subject: Wrap `raise` statements in parenthesis
Run `2to3-3.8 -f raise -w .`
See:
---
wqflask/base/trait.py | 2 +-
wqflask/utility/svg.py | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index e82df226..c2d260e3 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -605,6 +605,6 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
if trait.lrs != "":
trait.LRS_score_repr = LRS_score_repr = '%3.1f' % trait.lrs
else:
- raise KeyError, `trait.name`+' information is not found in the database.'
+ raise KeyError(`trait.name`+' information is not found in the database.')
return trait
\ No newline at end of file
diff --git a/wqflask/utility/svg.py b/wqflask/utility/svg.py
index c7356e57..872f22fe 100644
--- a/wqflask/utility/svg.py
+++ b/wqflask/utility/svg.py
@@ -445,7 +445,7 @@ class rect(SVGelement):
def __init__(self, x=None, y=None, width=None, height=None, fill=None, stroke=None, stroke_width=None, **args):
if width == None or height == None:
- raise ValueError, 'both height and width are required'
+ raise ValueError('both height and width are required')
SVGelement.__init__(self,'rect',{'width':width,'height':height},**args)
if x!=None:
@@ -466,7 +466,7 @@ class ellipse(SVGelement):
"""
def __init__(self,cx=None,cy=None,rx=None,ry=None,fill=None,stroke=None,stroke_width=None,**args):
if rx==None or ry== None:
- raise ValueError, 'both rx and ry are required'
+ raise ValueError('both rx and ry are required')
SVGelement.__init__(self,'ellipse',{'rx':rx,'ry':ry},**args)
if cx!=None:
@@ -488,7 +488,7 @@ class circle(SVGelement):
"""
def __init__(self,cx=None,cy=None,r=None,fill=None,stroke=None,stroke_width=None,**args):
if r==None:
- raise ValueError, 'r is required'
+ raise ValueError('r is required')
SVGelement.__init__(self,'circle',{'r':r},**args)
if cx!=None:
self.attributes['cx']=cx
@@ -714,7 +714,7 @@ class image(SVGelement):
"""
def __init__(self,url,x=None,y=None,width=None,height=None,**args):
if width==None or height==None:
- raise ValueError, 'both height and width are required'
+ raise ValueError('both height and width are required')
SVGelement.__init__(self,'image',{'xlink:href':url,'width':width,'height':height},**args)
if x!=None:
self.attributes['x']=x
--
cgit v1.2.3
From 1c3ade2f739608563cc1659dd93e5b2abc446046 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Wed, 19 Aug 2020 03:27:21 +0300
Subject: Replace backtick repr with the repr() function
* wqflask/base/trait.py: See
---
wqflask/base/trait.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index c2d260e3..a513b589 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -605,6 +605,6 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
if trait.lrs != "":
trait.LRS_score_repr = LRS_score_repr = '%3.1f' % trait.lrs
else:
- raise KeyError(`trait.name`+' information is not found in the database.')
+ raise KeyError(repr(trait.name)+' information is not found in the database.')
return trait
\ No newline at end of file
--
cgit v1.2.3
From 606ec8b9b3bbb8b2269ab546ebafa454f1753176 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Wed, 19 Aug 2020 03:31:53 +0300
Subject: Handle the rename of urllib and urllib2 to the urllib package
See:
---
wqflask/base/trait.py | 2 +-
wqflask/db/call.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index a513b589..2b8f2e72 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -6,7 +6,7 @@ import resource
import codecs
import requests
import random
-import urllib
+import urllib.request, urllib.parse, urllib.error
from base import webqtlConfig
from base.webqtlCaseData import webqtlCaseData
diff --git a/wqflask/db/call.py b/wqflask/db/call.py
index 1a1b3adc..82cfebb4 100644
--- a/wqflask/db/call.py
+++ b/wqflask/db/call.py
@@ -3,7 +3,7 @@
from flask import g
import string
-import urllib2
+import urllib.request, urllib.error, urllib.parse
import json
from utility.tools import USE_GN_SERVER, LOG_SQL, GN_SERVER_URL
from utility.benchmark import Bench
@@ -59,7 +59,7 @@ def gn_server(path):
"""
with Bench("GN_SERVER",LOG_SQL):
- res = urllib2.urlopen(GN_SERVER_URL+path)
+ res = urllib.request.urlopen(GN_SERVER_URL+path)
rest = res.read()
res2 = json.loads(rest)
logger.debug(res2)
--
cgit v1.2.3
From 3aaa28ea762c496eeb84e09e45194e3fd2a51673 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Wed, 19 Aug 2020 03:45:49 +0300
Subject: Make Python more idiomatic
Run `2to3-3.8 -f idioms -w .`
See:
---
scripts/maintenance/readProbeSetMean_v7.py | 6 ++----
scripts/maintenance/readProbeSetSE_v7.py | 6 ++----
wqflask/base/data_set.py | 4 ++--
wqflask/utility/authentication_tools.py | 2 +-
wqflask/utility/svg.py | 2 +-
wqflask/wqflask/ctl/ctl_analysis.py | 2 +-
wqflask/wqflask/show_trait/SampleList.py | 2 +-
wqflask/wqflask/show_trait/show_trait.py | 2 +-
wqflask/wqflask/user_login.py | 2 +-
9 files changed, 12 insertions(+), 16 deletions(-)
(limited to 'wqflask/base')
diff --git a/scripts/maintenance/readProbeSetMean_v7.py b/scripts/maintenance/readProbeSetMean_v7.py
index 97767715..864b4e08 100755
--- a/scripts/maintenance/readProbeSetMean_v7.py
+++ b/scripts/maintenance/readProbeSetMean_v7.py
@@ -80,8 +80,7 @@ while line:
if kj%100000 == 0:
print(('checked ',kj,' lines'))
-GeneList = list(map(string.lower, GeneList))
-GeneList.sort()
+GeneList = sorted(map(string.lower, GeneList))
if isCont==0:
sys.exit(0)
@@ -148,9 +147,8 @@ for item in results:
print(Names)
-Names = list(map(string.lower, Names))
+Names = sorted(map(string.lower, Names))
-Names.sort() # -- Fixed the lower case problem of ProbeSets affx-mur_b2_at doesn't exist --#
##---- compare genelist with names ----##
diff --git a/scripts/maintenance/readProbeSetSE_v7.py b/scripts/maintenance/readProbeSetSE_v7.py
index 833c3f5f..20a846a4 100755
--- a/scripts/maintenance/readProbeSetSE_v7.py
+++ b/scripts/maintenance/readProbeSetSE_v7.py
@@ -91,8 +91,7 @@ while line:
if kj % 100000 == 0:
print(('checked ', kj, ' lines'))
-GeneList = list(map(string.lower, GeneList))
-GeneList.sort()
+GeneList = sorted(map(string.lower, GeneList))
if isCont == 0:
sys.exit(0)
@@ -158,8 +157,7 @@ results = db.fetchall()
Names = []
for item in results:
Names.append(item[0])
- Names = list(map(string.lower, Names))
- Names.sort() # -- Fixed the lower case problem of ProbeSets affx-mur_b2_at doesn't exist --#
+ Names = sorted(map(string.lower, Names))
##---- compare genelist with names ----##
x = y = 0
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index b0119b58..06e1c551 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -254,7 +254,7 @@ class Markers(object):
logger.debug("length of self.markers:", len(self.markers))
logger.debug("length of p_values:", len(p_values))
- if type(p_values) is list:
+ if isinstance(p_values, list):
# THIS IS only needed for the case when we are limiting the number of p-values calculated
# if len(self.markers) > len(p_values):
# self.markers = self.markers[:len(p_values)]
@@ -270,7 +270,7 @@ class Markers(object):
marker['lod_score'] = -math.log10(marker['p_value'])
# Using -log(p) for the LRS; need to ask Rob how he wants to get LRS from p-values
marker['lrs_value'] = -math.log10(marker['p_value']) * 4.61
- elif type(p_values) is dict:
+ elif isinstance(p_values, dict):
filtered_markers = []
for marker in self.markers:
#logger.debug("marker[name]", marker['name'])
diff --git a/wqflask/utility/authentication_tools.py b/wqflask/utility/authentication_tools.py
index ece7022c..bc03eb55 100644
--- a/wqflask/utility/authentication_tools.py
+++ b/wqflask/utility/authentication_tools.py
@@ -17,7 +17,7 @@ logger = logging.getLogger(__name__ )
def check_resource_availability(dataset, trait_id=None):
#At least for now assume temporary entered traits are accessible
- if type(dataset) == str:
+ if isinstance(dataset, str):
return webqtlConfig.DEFAULT_PRIVILEGES
if dataset.type == "Temp":
return webqtlConfig.DEFAULT_PRIVILEGES
diff --git a/wqflask/utility/svg.py b/wqflask/utility/svg.py
index 872f22fe..874ada9d 100644
--- a/wqflask/utility/svg.py
+++ b/wqflask/utility/svg.py
@@ -332,7 +332,7 @@ class SVGelement:
f.write('\n'+'\t'*(level+2)+line)
f.write('\n'+'\t'*(level+1)+']]>\n')
if self.text:
- if type(self.text) == type(''): # If the text is only text
+ if isinstance(self.text, type('')): # If the text is only text
f.write(_escape(str(self.text)))
else: # If the text is a spannedtext class
f.write(str(self.text))
diff --git a/wqflask/wqflask/ctl/ctl_analysis.py b/wqflask/wqflask/ctl/ctl_analysis.py
index f0be7a98..e58a7b87 100644
--- a/wqflask/wqflask/ctl/ctl_analysis.py
+++ b/wqflask/wqflask/ctl/ctl_analysis.py
@@ -175,7 +175,7 @@ class CTL(object):
sys.stdout.flush()
# Create the interactive graph for cytoscape visualization (Nodes and Edges)
- if not type(significant) == ri.RNULLType:
+ if not isinstance(significant, ri.RNULLType):
for x in range(len(significant[0])):
logger.debug(significant[0][x], significant[1][x], significant[2][x]) # Debug to console
tsS = significant[0][x].split(':') # Source
diff --git a/wqflask/wqflask/show_trait/SampleList.py b/wqflask/wqflask/show_trait/SampleList.py
index ad78ebcc..21ba7f63 100644
--- a/wqflask/wqflask/show_trait/SampleList.py
+++ b/wqflask/wqflask/show_trait/SampleList.py
@@ -43,7 +43,7 @@ class SampleList(object):
for counter, sample_name in enumerate(sample_names, 1):
sample_name = sample_name.replace("_2nd_", "")
- if type(self.this_trait) is list: #ZS: self.this_trait will be a list if it is a Temp trait
+ if isinstance(self.this_trait, list): #ZS: self.this_trait will be a list if it is a Temp trait
if counter <= len(self.this_trait) and str(self.this_trait[counter-1]).upper() != 'X':
sample = webqtlCaseData.webqtlCaseData(name=sample_name, value=float(self.this_trait[counter-1]))
else:
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index c156e61b..65899ab2 100644
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -625,7 +625,7 @@ def get_categorical_variables(this_trait, sample_list):
def get_genotype_scales(genofiles):
geno_scales = {}
- if type(genofiles) is list:
+ if isinstance(genofiles, list):
for the_file in genofiles:
file_location = the_file['location']
geno_scales[file_location] = get_scales_from_genofile(file_location)
diff --git a/wqflask/wqflask/user_login.py b/wqflask/wqflask/user_login.py
index cfee0079..04672b45 100644
--- a/wqflask/wqflask/user_login.py
+++ b/wqflask/wqflask/user_login.py
@@ -193,7 +193,7 @@ def login():
if user_details:
submitted_password = params['password']
pwfields = user_details['password']
- if type(pwfields) is str:
+ if isinstance(pwfields, 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'])
--
cgit v1.2.3
From db41cd49b6d8ccd2c3318209118ffe098bc9293e Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Wed, 19 Aug 2020 03:57:05 +0300
Subject: Remove extra whitespace(or add it) from comma separated items
See:
---
etc/default_settings.py | 2 +-
scripts/maintenance/QTL_Reaper_v6.py | 4 +-
scripts/maintenance/readProbeSetMean_v7.py | 28 ++--
setup.py | 2 +-
wqflask/base/trait.py | 6 +-
wqflask/db/call.py | 10 +-
wqflask/db/webqtlDatabaseFunction.py | 8 +-
wqflask/maintenance/gen_select_dataset.py | 2 +-
wqflask/maintenance/quantile_normalize.py | 2 +-
wqflask/maintenance/set_resource_defaults.py | 2 +-
wqflask/utility/Plot.py | 48 +++---
wqflask/utility/elasticsearch_tools.py | 2 +-
wqflask/utility/logger.py | 26 +--
wqflask/utility/pillow_utils.py | 4 +-
wqflask/utility/startup_config.py | 2 +-
wqflask/utility/svg.py | 130 +++++++-------
wqflask/utility/tools.py | 32 ++--
wqflask/utility/webqtlUtil.py | 16 +-
wqflask/wqflask/api/router.py | 8 +-
wqflask/wqflask/correlation/show_corr_results.py | 12 +-
.../wqflask/correlation_matrix/show_corr_matrix.py | 8 +-
wqflask/wqflask/do_search.py | 4 +-
.../wqflask/external_tools/send_to_geneweaver.py | 8 +-
.../marker_regression/display_mapping_results.py | 186 ++++++++++-----------
wqflask/wqflask/marker_regression/plink_mapping.py | 6 +-
wqflask/wqflask/marker_regression/run_mapping.py | 2 +-
wqflask/wqflask/search_results.py | 2 +-
wqflask/wqflask/show_trait/SampleList.py | 2 +-
wqflask/wqflask/user_manager.py | 2 +-
wqflask/wqflask/views.py | 8 +-
30 files changed, 287 insertions(+), 287 deletions(-)
(limited to 'wqflask/base')
diff --git a/etc/default_settings.py b/etc/default_settings.py
index f368237b..82c605da 100644
--- a/etc/default_settings.py
+++ b/etc/default_settings.py
@@ -24,7 +24,7 @@
import os
import sys
-GN_VERSION = open("../etc/VERSION","r").read()
+GN_VERSION = open("../etc/VERSION", "r").read()
GN_SERVER_URL = "http://localhost:8880/" # REST API server
# ---- MySQL
diff --git a/scripts/maintenance/QTL_Reaper_v6.py b/scripts/maintenance/QTL_Reaper_v6.py
index 2fbeb53b..35f2d1a1 100755
--- a/scripts/maintenance/QTL_Reaper_v6.py
+++ b/scripts/maintenance/QTL_Reaper_v6.py
@@ -7,7 +7,7 @@ import reaper
import MySQLdb
import time
-con = MySQLdb.Connect(db='db_webqtl',user='username',passwd='', host="localhost")
+con = MySQLdb.Connect(db='db_webqtl', user='username', passwd='', host="localhost")
cursor = con.cursor()
genotypeDir = '/gnshare/gn/web/genotypes/'
@@ -102,7 +102,7 @@ for ProbeSetFreezeId in ProbeSetFreezeIds:
kj += 1
if kj%1000==0:
- print((ProbeSetFreezeId, InbredSets[InbredSetId],kj))
+ print((ProbeSetFreezeId, InbredSets[InbredSetId], kj))
print(ProbeSetFreezeIds)
diff --git a/scripts/maintenance/readProbeSetMean_v7.py b/scripts/maintenance/readProbeSetMean_v7.py
index 864b4e08..59a51cf9 100755
--- a/scripts/maintenance/readProbeSetMean_v7.py
+++ b/scripts/maintenance/readProbeSetMean_v7.py
@@ -39,7 +39,7 @@ fp = open("%s" % input_file_name, 'rb')
try:
passwd = getpass.getpass('Please enter mysql password here : ')
- con = MySQLdb.Connect(db='db_webqtl',host='localhost', user='username',passwd=passwd)
+ con = MySQLdb.Connect(db='db_webqtl', host='localhost', user='username', passwd=passwd)
db = con.cursor()
print("You have successfully connected to mysql.\n")
@@ -60,14 +60,14 @@ print('Checking if each line have same number of members')
GeneList = []
isCont = 1
header = fp.readline()
-header = string.split(string.strip(header),'\t')
+header = string.split(string.strip(header), '\t')
header = list(map(string.strip, header))
nfield = len(header)
line = fp.readline()
kj=0
while line:
- line2 = string.split(string.strip(line),'\t')
+ line2 = string.split(string.strip(line), '\t')
line2 = list(map(string.strip, line2))
if len(line2) != nfield:
print(("Error : " + line))
@@ -78,7 +78,7 @@ while line:
kj+=1
if kj%100000 == 0:
- print(('checked ',kj,' lines'))
+ print(('checked ', kj, ' lines'))
GeneList = sorted(map(string.lower, GeneList))
@@ -86,7 +86,7 @@ if isCont==0:
sys.exit(0)
-print(('used ',time.time()-time0,' seconds'))
+print(('used ', time.time()-time0, ' seconds'))
#########################################################################
#
# Check if each strain exist in database
@@ -98,7 +98,7 @@ print('Checking if each strain exist in database')
isCont = 1
fp.seek(0)
header = fp.readline()
-header = string.split(string.strip(header),'\t')
+header = string.split(string.strip(header), '\t')
header = list(map(string.strip, header))
header = list(map(translateAlias, header))
header = header[dataStart:]
@@ -108,14 +108,14 @@ for item in header:
db.execute('select Id from Strain where Name = "%s"' % item)
Ids.append(db.fetchall()[0][0])
except:
- print((item,'does not exist, check the if the strain name is correct'))
+ print((item, 'does not exist, check the if the strain name is correct'))
isCont=0
if isCont==0:
sys.exit(0)
-print(('used ',time.time()-time0,' seconds'))
+print(('used ', time.time()-time0, ' seconds'))
########################################################################
#
# Check if each ProbeSet exist in database
@@ -126,7 +126,7 @@ print('Check if each ProbeSet exist in database')
##---- find PID is name or target ----##
line = fp.readline()
line = fp.readline()
-line2 = string.split(string.strip(line),'\t')
+line2 = string.split(string.strip(line), '\t')
line2 = list(map(string.strip, line2))
PId = line2[0]
@@ -185,7 +185,7 @@ if isCont==0:
sys.exit(0)
-print(('used ',time.time()-time0,' seconds'))
+print(('used ', time.time()-time0, ' seconds'))
#########################################################################
#
# Insert data into database
@@ -200,7 +200,7 @@ results = db.fetchall()
NameIds = {}
for item in results:
NameIds[item[0]] = item[1]
-print(('used ',time.time()-time0,' seconds'))
+print(('used ', time.time()-time0, ' seconds'))
print('inserting data')
@@ -220,7 +220,7 @@ kj = 0
values1 = []
values2 = []
while line:
- line2 = string.split(string.strip(line),'\t')
+ line2 = string.split(string.strip(line), '\t')
line2 = list(map(string.strip, line2))
PId = line2[0]
recordId = NameIds[PId]
@@ -253,8 +253,8 @@ while line:
values1=[]
values2=[]
- print(('Inserted ', kj,' lines'))
- print(('used ',time.time()-time0,' seconds'))
+ print(('Inserted ', kj, ' lines'))
+ print(('used ', time.time()-time0, ' seconds'))
line = fp.readline()
diff --git a/setup.py b/setup.py
index a9b71fab..8436dcd3 100644
--- a/setup.py
+++ b/setup.py
@@ -9,7 +9,7 @@ setup(name='genenetwork2',
url = "https://github.com/genenetwork/genenetwork2/blob/master/README.md",
description = 'Website and tools for genetics.',
include_package_data=True,
- packages=['wqflask','etc'],
+ packages=['wqflask', 'etc'],
scripts=['bin/genenetwork2'],
# package_data = {
# 'etc': ['*.py']
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 2b8f2e72..05b272c3 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -193,7 +193,7 @@ class GeneralTrait(object):
'''
if self.chr and self.mb:
- self.location = 'Chr %s @ %s Mb' % (self.chr,self.mb)
+ self.location = 'Chr %s @ %s Mb' % (self.chr, self.mb)
elif self.chr:
self.location = 'Chr %s @ Unknown position' % (self.chr)
else:
@@ -440,7 +440,7 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
#XZ, 05/08/2009: We also should use Geno.Id to find marker instead of just using Geno.Name
# to avoid the problem of same marker name from different species.
elif dataset.type == 'Geno':
- display_fields_string = string.join(dataset.display_fields,',Geno.')
+ display_fields_string = string.join(dataset.display_fields, ',Geno.')
display_fields_string = 'Geno.' + display_fields_string
query = """
SELECT %s
@@ -459,7 +459,7 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
query = """SELECT %s FROM %s WHERE Name = %s"""
logger.sql(query)
trait_info = g.db.execute(query,
- (string.join(dataset.display_fields,','),
+ (string.join(dataset.display_fields, ','),
dataset.type, trait.name)).fetchone()
if trait_info:
diff --git a/wqflask/db/call.py b/wqflask/db/call.py
index 82cfebb4..3b8f782e 100644
--- a/wqflask/db/call.py
+++ b/wqflask/db/call.py
@@ -26,8 +26,8 @@ GN_SERVER result when set (which should return a Tuple)
else:
res2 = result,
if LOG_SQL:
- logger.debug("Replaced SQL call",query)
- logger.debug(path,res2)
+ logger.debug("Replaced SQL call", query)
+ logger.debug(path, res2)
return res2
else:
return fetchone(query)
@@ -37,7 +37,7 @@ def fetchone(query):
original fetchone, but with logging)
"""
- with Bench("SQL",LOG_SQL):
+ with Bench("SQL", LOG_SQL):
def helper(query):
res = g.db.execute(query)
return res.fetchone()
@@ -48,7 +48,7 @@ def fetchall(query):
original fetchall, but with logging)
"""
- with Bench("SQL",LOG_SQL):
+ with Bench("SQL", LOG_SQL):
def helper(query):
res = g.db.execute(query)
return res.fetchall()
@@ -58,7 +58,7 @@ def gn_server(path):
"""Return JSON record by calling GN_SERVER
"""
- with Bench("GN_SERVER",LOG_SQL):
+ with Bench("GN_SERVER", LOG_SQL):
res = urllib.request.urlopen(GN_SERVER_URL+path)
rest = res.read()
res2 = json.loads(rest)
diff --git a/wqflask/db/webqtlDatabaseFunction.py b/wqflask/db/webqtlDatabaseFunction.py
index 8a9dc79d..2805febd 100644
--- a/wqflask/db/webqtlDatabaseFunction.py
+++ b/wqflask/db/webqtlDatabaseFunction.py
@@ -35,13 +35,13 @@ def retrieve_species(group):
"""Get the species of a group (e.g. returns string "mouse" on "BXD"
"""
- result = fetch1("select Species.Name from Species, InbredSet where InbredSet.Name = '%s' and InbredSet.SpeciesId = Species.Id" % (group),"/cross/"+group+".json",lambda r: (r["species"],))[0]
- logger.debug("retrieve_species result:",result)
+ result = fetch1("select Species.Name from Species, InbredSet where InbredSet.Name = '%s' and InbredSet.SpeciesId = Species.Id" % (group), "/cross/"+group+".json", lambda r: (r["species"],))[0]
+ logger.debug("retrieve_species result:", result)
return result
def retrieve_species_id(group):
- result = fetch1("select SpeciesId from InbredSet where Name = '%s'" % (group),"/cross/"+group+".json",lambda r: (r["species_id"],))[0]
- logger.debug("retrieve_species_id result:",result)
+ result = fetch1("select SpeciesId from InbredSet where Name = '%s'" % (group), "/cross/"+group+".json", lambda r: (r["species_id"],))[0]
+ logger.debug("retrieve_species_id result:", result)
return result
diff --git a/wqflask/maintenance/gen_select_dataset.py b/wqflask/maintenance/gen_select_dataset.py
index 78217587..d12b328f 100644
--- a/wqflask/maintenance/gen_select_dataset.py
+++ b/wqflask/maintenance/gen_select_dataset.py
@@ -41,7 +41,7 @@ from __future__ import print_function, division
import sys
# NEW: Note we prepend the current path - otherwise a guix instance of GN2 may be used instead
-sys.path.insert(0,'./')
+sys.path.insert(0, './')
# NEW: import app to avoid a circular dependency on utility.tools
from wqflask import app
diff --git a/wqflask/maintenance/quantile_normalize.py b/wqflask/maintenance/quantile_normalize.py
index 82b695f4..43edfd13 100644
--- a/wqflask/maintenance/quantile_normalize.py
+++ b/wqflask/maintenance/quantile_normalize.py
@@ -1,7 +1,7 @@
from __future__ import absolute_import, print_function, division
import sys
-sys.path.insert(0,'./')
+sys.path.insert(0, './')
diff --git a/wqflask/maintenance/set_resource_defaults.py b/wqflask/maintenance/set_resource_defaults.py
index 54fd8e7e..d53a255b 100644
--- a/wqflask/maintenance/set_resource_defaults.py
+++ b/wqflask/maintenance/set_resource_defaults.py
@@ -22,7 +22,7 @@ import sys
import json
# NEW: Note we prepend the current path - otherwise a guix instance of GN2 may be used instead
-sys.path.insert(0,'./')
+sys.path.insert(0, './')
# NEW: import app to avoid a circular dependency on utility.tools
from wqflask import app
diff --git a/wqflask/utility/Plot.py b/wqflask/utility/Plot.py
index c9053dde..4f6e694e 100644
--- a/wqflask/utility/Plot.py
+++ b/wqflask/utility/Plot.py
@@ -58,7 +58,7 @@ def cformat(d, rank=0):
strD = "%2.6f" % d
if rank == 0:
- while strD[-1] in ('0','.'):
+ while strD[-1] in ('0', '.'):
if strD[-1] == '0' and strD[-2] == '.' and len(strD) <= 4:
break
elif strD[-1] == '.':
@@ -162,7 +162,7 @@ def plotBar(canvas, data, barColor=BLUE, axesColor=BLACK, labelColor=BLACK, XLab
j = int((item-xLow)/step)
Count[j] += 1
- yLow, yTop, stepY=detScale(0,max(Count))
+ yLow, yTop, stepY=detScale(0, max(Count))
#draw data
xScale = plotWidth/(xTop-xLow)
@@ -174,7 +174,7 @@ def plotBar(canvas, data, barColor=BLUE, axesColor=BLACK, labelColor=BLACK, XLab
xc = (dataXY[i]-xLow)*xScale+xLeftOffset
yc =-(count-yLow)*yScale+yTopOffset+plotHeight
im_drawer.rectangle(
- xy=((xc+2,yc),(xc+barWidth-2,yTopOffset+plotHeight)),
+ xy=((xc+2, yc), (xc+barWidth-2, yTopOffset+plotHeight)),
outline=barColor, fill=barColor)
#draw drawing region
@@ -183,81 +183,81 @@ def plotBar(canvas, data, barColor=BLUE, axesColor=BLACK, labelColor=BLACK, XLab
)
#draw scale
- scaleFont=ImageFont.truetype(font=COUR_FILE,size=11)
+ scaleFont=ImageFont.truetype(font=COUR_FILE, size=11)
x=xLow
for i in range(int(stepX)+1):
xc=xLeftOffset+(x-xLow)*xScale
im_drawer.line(
- xy=((xc,yTopOffset+plotHeight),(xc,yTopOffset+plotHeight+5)),
+ xy=((xc, yTopOffset+plotHeight), (xc, yTopOffset+plotHeight+5)),
fill=axesColor)
strX = cformat(d=x, rank=0)
im_drawer.text(
text=strX,
- xy=(xc-im_drawer.textsize(strX,font=scaleFont)[0]/2,
- yTopOffset+plotHeight+14),font=scaleFont)
+ xy=(xc-im_drawer.textsize(strX, font=scaleFont)[0]/2,
+ yTopOffset+plotHeight+14), font=scaleFont)
x+= (xTop - xLow)/stepX
y=yLow
for i in range(int(stepY)+1):
yc=yTopOffset+plotHeight-(y-yLow)*yScale
- im_drawer.line(xy=((xLeftOffset,yc),(xLeftOffset-5,yc)), fill=axesColor)
+ im_drawer.line(xy=((xLeftOffset, yc), (xLeftOffset-5, yc)), fill=axesColor)
strY = "%d" %y
im_drawer.text(
text=strY,
- xy=(xLeftOffset-im_drawer.textsize(strY,font=scaleFont)[0]-6,yc+5),
+ xy=(xLeftOffset-im_drawer.textsize(strY, font=scaleFont)[0]-6, yc+5),
font=scaleFont)
y+= (yTop - yLow)/stepY
#draw label
- labelFont=ImageFont.truetype(font=TAHOMA_FILE,size=17)
+ labelFont=ImageFont.truetype(font=TAHOMA_FILE, size=17)
if XLabel:
im_drawer.text(
text=XLabel,
xy=(xLeftOffset+(
- plotWidth-im_drawer.textsize(XLabel,font=labelFont)[0])/2.0,
+ plotWidth-im_drawer.textsize(XLabel, font=labelFont)[0])/2.0,
yTopOffset+plotHeight+yBottomOffset-10),
- font=labelFont,fill=labelColor)
+ font=labelFont, fill=labelColor)
if YLabel:
draw_rotated_text(canvas, text=YLabel,
xy=(19,
yTopOffset+plotHeight-(
plotHeight-im_drawer.textsize(
- YLabel,font=labelFont)[0])/2.0),
+ YLabel, font=labelFont)[0])/2.0),
font=labelFont, fill=labelColor, angle=90)
- labelFont=ImageFont.truetype(font=VERDANA_FILE,size=16)
+ labelFont=ImageFont.truetype(font=VERDANA_FILE, size=16)
if title:
im_drawer.text(
text=title,
xy=(xLeftOffset+(plotWidth-im_drawer.textsize(
- title,font=labelFont)[0])/2.0,
+ title, font=labelFont)[0])/2.0,
20),
- font=labelFont,fill=labelColor)
+ font=labelFont, fill=labelColor)
# This function determines the scale of the plot
-def detScaleOld(min,max):
+def detScaleOld(min, max):
if min>=max:
return None
elif min == -1.0 and max == 1.0:
- return [-1.2,1.2,12]
+ return [-1.2, 1.2, 12]
else:
a=max-min
b=floor(log10(a))
- c=pow(10.0,b)
+ c=pow(10.0, b)
if a < c*5.0:
c/=2.0
#print a,b,c
low=c*floor(min/c)
high=c*ceil(max/c)
- return [low,high,round((high-low)/c)]
+ return [low, high, round((high-low)/c)]
def detScale(min=0,max=0):
if min>=max:
return None
elif min == -1.0 and max == 1.0:
- return [-1.2,1.2,12]
+ return [-1.2, 1.2, 12]
else:
a=max-min
if max != 0:
@@ -269,7 +269,7 @@ def detScale(min=0,max=0):
min -= 0.1*a
a=max-min
b=floor(log10(a))
- c=pow(10.0,b)
+ c=pow(10.0, b)
low=c*floor(min/c)
high=c*ceil(max/c)
n = round((high-low)/c)
@@ -287,7 +287,7 @@ def detScale(min=0,max=0):
high=c*ceil(max/c)
n = round((high-low)/c)
- return [low,high,n]
+ return [low, high, n]
def bluefunc(x):
return 1.0 / (1.0 + exp(-10*(x-0.6)))
@@ -296,7 +296,7 @@ def redfunc(x):
return 1.0 / (1.0 + exp(10*(x-0.5)))
def greenfunc(x):
- return 1 - pow(redfunc(x+0.2),2) - bluefunc(x-0.3)
+ return 1 - pow(redfunc(x+0.2), 2) - bluefunc(x-0.3)
def colorSpectrum(n=100):
multiple = 10
diff --git a/wqflask/utility/elasticsearch_tools.py b/wqflask/utility/elasticsearch_tools.py
index 15cdd0bc..a5580811 100644
--- a/wqflask/utility/elasticsearch_tools.py
+++ b/wqflask/utility/elasticsearch_tools.py
@@ -59,7 +59,7 @@ def get_elasticsearch_connection(for_user=True):
try:
assert(ELASTICSEARCH_HOST)
assert(ELASTICSEARCH_PORT)
- logger.info("ES HOST",ELASTICSEARCH_HOST)
+ logger.info("ES HOST", ELASTICSEARCH_HOST)
es = Elasticsearch([{
"host": ELASTICSEARCH_HOST, "port": ELASTICSEARCH_PORT
diff --git a/wqflask/utility/logger.py b/wqflask/utility/logger.py
index 510b1041..e904eb94 100644
--- a/wqflask/utility/logger.py
+++ b/wqflask/utility/logger.py
@@ -42,10 +42,10 @@ class GNLogger:
"""
- def __init__(self,name):
+ def __init__(self, name):
self.logger = logging.getLogger(name)
- def setLevel(self,value):
+ def setLevel(self, value):
"""Set the undelying log level"""
self.logger.setLevel(value)
@@ -54,7 +54,7 @@ class GNLogger:
level=num to filter on LOG_LEVEL_DEBUG.
"""
- self.collect(self.logger.debug,*args)
+ self.collect(self.logger.debug, *args)
def debug20(self,*args):
"""Call logging.debug for multiple args. Use level=num to filter on
@@ -63,15 +63,15 @@ LOG_LEVEL_DEBUG (NYI).
"""
if level <= LOG_LEVEL_DEBUG:
if self.logger.getEffectiveLevel() < 20:
- self.collect(self.logger.debug,*args)
+ self.collect(self.logger.debug, *args)
def info(self,*args):
"""Call logging.info for multiple args"""
- self.collect(self.logger.info,*args)
+ self.collect(self.logger.info, *args)
def warning(self,*args):
"""Call logging.warning for multiple args"""
- self.collect(self.logger.warning,*args)
+ self.collect(self.logger.warning, *args)
# self.logger.warning(self.collect(*args))
def error(self,*args):
@@ -79,13 +79,13 @@ LOG_LEVEL_DEBUG (NYI).
now = datetime.datetime.utcnow()
time_str = now.strftime('%H:%M:%S UTC %Y%m%d')
l = [time_str]+list(args)
- self.collect(self.logger.error,*l)
+ self.collect(self.logger.error, *l)
def infof(self,*args):
"""Call logging.info for multiple args lazily"""
# only evaluate function when logging
if self.logger.getEffectiveLevel() < 30:
- self.collectf(self.logger.debug,*args)
+ self.collectf(self.logger.debug, *args)
def debugf(self,level=0,*args):
"""Call logging.debug for multiple args lazily and handle
@@ -95,15 +95,15 @@ LOG_LEVEL_DEBUG (NYI).
# only evaluate function when logging
if level <= LOG_LEVEL_DEBUG:
if self.logger.getEffectiveLevel() < 20:
- self.collectf(self.logger.debug,*args)
+ self.collectf(self.logger.debug, *args)
def sql(self, sqlcommand, fun = None):
"""Log SQL command, optionally invoking a timed fun"""
if LOG_SQL:
caller = stack()[1][3]
- if caller in ['fetchone','fetch1','fetchall']:
+ if caller in ['fetchone', 'fetch1', 'fetchall']:
caller = stack()[2][3]
- self.info(caller,sqlcommand)
+ self.info(caller, sqlcommand)
if fun:
result = fun(sqlcommand)
if LOG_SQL:
@@ -119,7 +119,7 @@ LOG_LEVEL_DEBUG (NYI).
if isinstance(a, str):
out = out + a
else:
- out = out + pf(a,width=160)
+ out = out + pf(a, width=160)
fun(out)
def collectf(self,fun,*args):
@@ -134,7 +134,7 @@ LOG_LEVEL_DEBUG (NYI).
if isinstance(a, str):
out = out + a
else:
- out = out + pf(a,width=160)
+ out = out + pf(a, width=160)
fun(out)
# Get the module logger. You can override log levels at the
diff --git a/wqflask/utility/pillow_utils.py b/wqflask/utility/pillow_utils.py
index dfbf3e19..1e2ed075 100644
--- a/wqflask/utility/pillow_utils.py
+++ b/wqflask/utility/pillow_utils.py
@@ -10,9 +10,9 @@ WHITE = ImageColor.getrgb("white")
def draw_rotated_text(canvas, text, font, xy, fill=BLACK, angle=-90):
# type: (Image, str, ImageFont, tuple, ImageColor, int)
"""Utility function draw rotated text"""
- tmp_img = Image.new("RGBA", font.getsize(text), color=(0,0,0,0))
+ tmp_img = Image.new("RGBA", font.getsize(text), color=(0, 0, 0, 0))
draw_text = ImageDraw.Draw(tmp_img)
- draw_text.text(text=text, xy=(0,0), font=font, fill=fill)
+ draw_text.text(text=text, xy=(0, 0), font=font, fill=fill)
tmp_img2 = tmp_img.rotate(angle, expand=1)
tmp_img2.save("/tmp/{}.png".format(text), format="png")
canvas.paste(im=tmp_img2, box=tuple([int(i) for i in xy]))
diff --git a/wqflask/utility/startup_config.py b/wqflask/utility/startup_config.py
index 42ead709..f1aaebb6 100644
--- a/wqflask/utility/startup_config.py
+++ b/wqflask/utility/startup_config.py
@@ -36,4 +36,4 @@ def app_config():
# 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"))))
+ print(("GN2 is running. Visit %s[http://localhost:%s/%s](%s)" % (BLUE, str(port), ENDC, get_setting("WEBSERVER_URL"))))
diff --git a/wqflask/utility/svg.py b/wqflask/utility/svg.py
index 874ada9d..19eda0ce 100644
--- a/wqflask/utility/svg.py
+++ b/wqflask/utility/svg.py
@@ -447,7 +447,7 @@ class rect(SVGelement):
if width == None or height == None:
raise ValueError('both height and width are required')
- SVGelement.__init__(self,'rect',{'width':width,'height':height},**args)
+ SVGelement.__init__(self, 'rect', {'width':width,'height':height}, **args)
if x!=None:
self.attributes['x']=x
if y!=None:
@@ -468,7 +468,7 @@ class ellipse(SVGelement):
if rx==None or ry== None:
raise ValueError('both rx and ry are required')
- SVGelement.__init__(self,'ellipse',{'rx':rx,'ry':ry},**args)
+ SVGelement.__init__(self, 'ellipse', {'rx':rx,'ry':ry}, **args)
if cx!=None:
self.attributes['cx']=cx
if cy!=None:
@@ -489,7 +489,7 @@ class circle(SVGelement):
def __init__(self,cx=None,cy=None,r=None,fill=None,stroke=None,stroke_width=None,**args):
if r==None:
raise ValueError('r is required')
- SVGelement.__init__(self,'circle',{'r':r},**args)
+ SVGelement.__init__(self, 'circle', {'r':r}, **args)
if cx!=None:
self.attributes['cx']=cx
if cy!=None:
@@ -508,7 +508,7 @@ class point(circle):
very small rectangle if you use many points because a circle is difficult to render.
"""
def __init__(self,x,y,fill='black',**args):
- circle.__init__(self,x,y,1,fill,**args)
+ circle.__init__(self, x, y, 1, fill, **args)
class line(SVGelement):
"""l=line(x1,y1,x2,y2,stroke,stroke_width,**args)
@@ -516,7 +516,7 @@ class line(SVGelement):
A line is defined by a begin x,y pair and an end x,y pair
"""
def __init__(self,x1=None,y1=None,x2=None,y2=None,stroke=None,stroke_width=None,**args):
- SVGelement.__init__(self,'line',**args)
+ SVGelement.__init__(self, 'line', **args)
if x1!=None:
self.attributes['x1']=x1
if y1!=None:
@@ -536,7 +536,7 @@ class polyline(SVGelement):
a polyline is defined by a list of xy pairs
"""
def __init__(self,points,fill=None,stroke=None,stroke_width=None,**args):
- SVGelement.__init__(self,'polyline',{'points':_xypointlist(points)},**args)
+ SVGelement.__init__(self, 'polyline', {'points':_xypointlist(points)}, **args)
if fill!=None:
self.attributes['fill']=fill
if stroke_width!=None:
@@ -550,7 +550,7 @@ class polygon(SVGelement):
a polygon is defined by a list of xy pairs
"""
def __init__(self,points,fill=None,stroke=None,stroke_width=None,**args):
- SVGelement.__init__(self,'polygon',{'points':_xypointlist(points)},**args)
+ SVGelement.__init__(self, 'polygon', {'points':_xypointlist(points)}, **args)
if fill!=None:
self.attributes['fill']=fill
if stroke_width!=None:
@@ -564,7 +564,7 @@ class path(SVGelement):
a path is defined by a path object and optional width, stroke and fillcolor
"""
def __init__(self,pathdata,fill=None,stroke=None,stroke_width=None,id=None,**args):
- SVGelement.__init__(self,'path',{'d':str(pathdata)},**args)
+ SVGelement.__init__(self, 'path', {'d':str(pathdata)}, **args)
if stroke!=None:
self.attributes['stroke']=stroke
if fill!=None:
@@ -581,7 +581,7 @@ class text(SVGelement):
a text element can bge used for displaying text on the screen
"""
def __init__(self,x=None,y=None,text=None,font_size=None,font_family=None,text_anchor=None,**args):
- SVGelement.__init__(self,'text',**args)
+ SVGelement.__init__(self, 'text', **args)
if x!=None:
self.attributes['x']=x
if y!=None:
@@ -602,7 +602,7 @@ class textpath(SVGelement):
a textpath places a text on a path which is referenced by a link.
"""
def __init__(self,link,text=None,**args):
- SVGelement.__init__(self,'textPath',{'xlink:href':link},**args)
+ SVGelement.__init__(self, 'textPath', {'xlink:href':link}, **args)
if text!=None:
self.text=text
@@ -614,7 +614,7 @@ class pattern(SVGelement):
in x and y to cover the areas to be painted.
"""
def __init__(self,x=None,y=None,width=None,height=None,patternUnits=None,**args):
- SVGelement.__init__(self,'pattern',**args)
+ SVGelement.__init__(self, 'pattern', **args)
if x!=None:
self.attributes['x']=x
if y!=None:
@@ -633,7 +633,7 @@ class title(SVGelement):
add at least one to the root svg element
"""
def __init__(self,text=None,**args):
- SVGelement.__init__(self,'title',**args)
+ SVGelement.__init__(self, 'title', **args)
if text!=None:
self.text=text
@@ -644,7 +644,7 @@ class description(SVGelement):
Add this element before adding other elements.
"""
def __init__(self,text=None,**args):
- SVGelement.__init__(self,'desc',**args)
+ SVGelement.__init__(self, 'desc', **args)
if text!=None:
self.text=text
@@ -655,7 +655,7 @@ class lineargradient(SVGelement):
stop elements van be added to define the gradient colors.
"""
def __init__(self,x1=None,y1=None,x2=None,y2=None,id=None,**args):
- SVGelement.__init__(self,'linearGradient',**args)
+ SVGelement.__init__(self, 'linearGradient', **args)
if x1!=None:
self.attributes['x1']=x1
if y1!=None:
@@ -674,7 +674,7 @@ class radialgradient(SVGelement):
stop elements van be added to define the gradient colors.
"""
def __init__(self,cx=None,cy=None,r=None,fx=None,fy=None,id=None,**args):
- SVGelement.__init__(self,'radialGradient',**args)
+ SVGelement.__init__(self, 'radialGradient', **args)
if cx!=None:
self.attributes['cx']=cx
if cy!=None:
@@ -694,7 +694,7 @@ class stop(SVGelement):
Puts a stop color at the specified radius
"""
def __init__(self,offset,stop_color=None,**args):
- SVGelement.__init__(self,'stop',{'offset':offset},**args)
+ SVGelement.__init__(self, 'stop', {'offset':offset}, **args)
if stop_color!=None:
self.attributes['stop-color']=stop_color
@@ -704,7 +704,7 @@ class style(SVGelement):
Add a CDATA element to this element for defing in line stylesheets etc..
"""
def __init__(self,type,cdata=None,**args):
- SVGelement.__init__(self,'style',{'type':type},cdata=cdata, **args)
+ SVGelement.__init__(self, 'style', {'type':type}, cdata=cdata, **args)
class image(SVGelement):
@@ -715,7 +715,7 @@ class image(SVGelement):
def __init__(self,url,x=None,y=None,width=None,height=None,**args):
if width==None or height==None:
raise ValueError('both height and width are required')
- SVGelement.__init__(self,'image',{'xlink:href':url,'width':width,'height':height},**args)
+ SVGelement.__init__(self, 'image', {'xlink:href':url,'width':width,'height':height}, **args)
if x!=None:
self.attributes['x']=x
if y!=None:
@@ -727,7 +727,7 @@ class cursor(SVGelement):
defines a custom cursor for a element or a drawing
"""
def __init__(self,url,**args):
- SVGelement.__init__(self,'cursor',{'xlink:href':url},**args)
+ SVGelement.__init__(self, 'cursor', {'xlink:href':url}, **args)
class marker(SVGelement):
@@ -737,7 +737,7 @@ class marker(SVGelement):
add an element to it which should be used as a marker.
"""
def __init__(self,id=None,viewBox=None,refx=None,refy=None,markerWidth=None,markerHeight=None,**args):
- SVGelement.__init__(self,'marker',**args)
+ SVGelement.__init__(self, 'marker', **args)
if id!=None:
self.attributes['id']=id
if viewBox!=None:
@@ -758,7 +758,7 @@ class group(SVGelement):
g.addElement(SVGelement)
"""
def __init__(self,id=None,**args):
- SVGelement.__init__(self,'g',**args)
+ SVGelement.__init__(self, 'g', **args)
if id!=None:
self.attributes['id']=id
@@ -772,7 +772,7 @@ class symbol(SVGelement):
"""
def __init__(self,id=None,viewBox=None,**args):
- SVGelement.__init__(self,'symbol',**args)
+ SVGelement.__init__(self, 'symbol', **args)
if id!=None:
self.attributes['id']=id
if viewBox!=None:
@@ -784,7 +784,7 @@ class defs(SVGelement):
container for defining elements
"""
def __init__(self,**args):
- SVGelement.__init__(self,'defs',**args)
+ SVGelement.__init__(self, 'defs', **args)
class switch(SVGelement):
"""sw=switch(**args)
@@ -794,7 +794,7 @@ class switch(SVGelement):
Refer to the SVG specification for details.
"""
def __init__(self,**args):
- SVGelement.__init__(self,'switch',**args)
+ SVGelement.__init__(self, 'switch', **args)
class use(SVGelement):
@@ -803,7 +803,7 @@ class use(SVGelement):
references a symbol by linking to its id and its position, height and width
"""
def __init__(self,link,x=None,y=None,width=None,height=None,**args):
- SVGelement.__init__(self,'use',{'xlink:href':link},**args)
+ SVGelement.__init__(self, 'use', {'xlink:href':link}, **args)
if x!=None:
self.attributes['x']=x
if y!=None:
@@ -822,14 +822,14 @@ class link(SVGelement):
a.addElement(SVGelement)
"""
def __init__(self,link='',**args):
- SVGelement.__init__(self,'a',{'xlink:href':link},**args)
+ SVGelement.__init__(self, 'a', {'xlink:href':link}, **args)
class view(SVGelement):
"""v=view(id,**args)
a view can be used to create a view with different attributes"""
def __init__(self,id=None,**args):
- SVGelement.__init__(self,'view',**args)
+ SVGelement.__init__(self, 'view', **args)
if id!=None:
self.attributes['id']=id
@@ -840,7 +840,7 @@ class script(SVGelement):
"""
def __init__(self,type,cdata=None,**args):
- SVGelement.__init__(self,'script',{'type':type},cdata=cdata,**args)
+ SVGelement.__init__(self, 'script', {'type':type}, cdata=cdata, **args)
class animate(SVGelement):
"""an=animate(attribute,from,to,during,**args)
@@ -848,7 +848,7 @@ class animate(SVGelement):
animates an attribute.
"""
def __init__(self,attribute,fr=None,to=None,dur=None,**args):
- SVGelement.__init__(self,'animate',{'attributeName':attribute},**args)
+ SVGelement.__init__(self, 'animate', {'attributeName':attribute}, **args)
if fr!=None:
self.attributes['from']=fr
if to!=None:
@@ -862,7 +862,7 @@ class animateMotion(SVGelement):
animates a SVGelement over the given path in dur seconds
"""
def __init__(self,pathdata,dur,**args):
- SVGelement.__init__(self,'animateMotion',**args)
+ SVGelement.__init__(self, 'animateMotion', **args)
if pathdata!=None:
self.attributes['path']=str(pathdata)
if dur!=None:
@@ -874,7 +874,7 @@ class animateTransform(SVGelement):
transform an element from and to a value.
"""
def __init__(self,type=None,fr=None,to=None,dur=None,**args):
- SVGelement.__init__(self,'animateTransform',{'attributeName':'transform'},**args)
+ SVGelement.__init__(self, 'animateTransform', {'attributeName':'transform'}, **args)
# As far as I know the attributeName is always transform
if type!=None:
self.attributes['type']=type
@@ -890,7 +890,7 @@ class animateColor(SVGelement):
Animates the color of a element
"""
def __init__(self,attribute,type=None,fr=None,to=None,dur=None,**args):
- SVGelement.__init__(self,'animateColor',{'attributeName':attribute},**args)
+ SVGelement.__init__(self, 'animateColor', {'attributeName':attribute}, **args)
if type!=None:
self.attributes['type']=type
if fr!=None:
@@ -905,7 +905,7 @@ class set(SVGelement):
sets an attribute to a value for a
"""
def __init__(self,attribute,to=None,dur=None,**args):
- SVGelement.__init__(self,'set',{'attributeName':attribute},**args)
+ SVGelement.__init__(self, 'set', {'attributeName':attribute}, **args)
if to!=None:
self.attributes['to']=to
if dur!=None:
@@ -929,7 +929,7 @@ class svg(SVGelement):
d.toXml()
"""
def __init__(self,viewBox=None, width=None, height=None,**args):
- SVGelement.__init__(self,'svg',**args)
+ SVGelement.__init__(self, 'svg', **args)
if viewBox!=None:
self.attributes['viewBox']=_viewboxlist(viewBox)
if width!=None:
@@ -952,7 +952,7 @@ class drawing:
def __init__(self, entity={}):
self.svg=None
self.entity = entity
- def setSVG(self,svg):
+ def setSVG(self, svg):
self.svg=svg
# Voeg een element toe aan de grafiek toe.
if use_dom_implementation==0:
@@ -967,12 +967,12 @@ class drawing:
xml.write("\n" % (item, self.entity[item]))
xml.write("]")
xml.write(">\n")
- self.svg.toXml(0,xml)
+ self.svg.toXml(0, xml)
if not filename:
if compress:
import gzip
f=cStringIO.StringIO()
- zf=gzip.GzipFile(fileobj=f,mode='wb')
+ zf=gzip.GzipFile(fileobj=f, mode='wb')
zf.write(xml.getvalue())
zf.close()
f.seek(0)
@@ -982,11 +982,11 @@ class drawing:
else:
if filename[-4:]=='svgz':
import gzip
- f=gzip.GzipFile(filename=filename,mode="wb", compresslevel=9)
+ f=gzip.GzipFile(filename=filename, mode="wb", compresslevel=9)
f.write(xml.getvalue())
f.close()
else:
- f=file(filename,'w')
+ f=file(filename, 'w')
f.write(xml.getvalue())
f.close()
@@ -997,40 +997,40 @@ class drawing:
writes a svg drawing to the screen or to a file
compresses if filename ends with svgz or if compress is true
"""
- doctype = implementation.createDocumentType('svg',"-//W3C//DTD SVG 1.0//EN""",'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd ')
+ doctype = implementation.createDocumentType('svg', "-//W3C//DTD SVG 1.0//EN""", 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd ')
global root
# root is defined global so it can be used by the appender. Its also possible to use it as an arugument but
# that is a bit messy.
- root=implementation.createDocument(None,None,doctype)
+ root=implementation.createDocument(None, None, doctype)
# Create the xml document.
global appender
- def appender(element,elementroot):
+ def appender(element, elementroot):
"""This recursive function appends elements to an element and sets the attributes
and type. It stops when alle elements have been appended"""
if element.namespace:
- e=root.createElementNS(element.namespace,element.type)
+ e=root.createElementNS(element.namespace, element.type)
else:
e=root.createElement(element.type)
if element.text:
textnode=root.createTextNode(element.text)
e.appendChild(textnode)
for attribute in list(element.attributes.keys()): #in element.attributes is supported from python 2.2
- e.setAttribute(attribute,str(element.attributes[attribute]))
+ e.setAttribute(attribute, str(element.attributes[attribute]))
if element.elements:
for el in element.elements:
- e=appender(el,e)
+ e=appender(el, e)
elementroot.appendChild(e)
return elementroot
- root=appender(self.svg,root)
+ root=appender(self.svg, root)
if not filename:
import cStringIO
xml=cStringIO.StringIO()
- PrettyPrint(root,xml)
+ PrettyPrint(root, xml)
if compress:
import gzip
f=cStringIO.StringIO()
- zf=gzip.GzipFile(fileobj=f,mode='wb')
+ zf=gzip.GzipFile(fileobj=f, mode='wb')
zf.write(xml.getvalue())
zf.close()
f.seek(0)
@@ -1043,13 +1043,13 @@ class drawing:
import gzip
import cStringIO
xml=cStringIO.StringIO()
- PrettyPrint(root,xml)
- f=gzip.GzipFile(filename=filename,mode='wb',compresslevel=9)
+ PrettyPrint(root, xml)
+ f=gzip.GzipFile(filename=filename, mode='wb', compresslevel=9)
f.write(xml.getvalue())
f.close()
else:
- f=open(filename,'w')
- PrettyPrint(root,f)
+ f=open(filename, 'w')
+ PrettyPrint(root, f)
f.close()
except:
print(("Cannot write SVG file: " + filename))
@@ -1070,32 +1070,32 @@ if __name__=='__main__':
d=drawing()
- s=svg((0,0,100,100))
- r=rect(-100,-100,300,300,'cyan')
+ s=svg((0, 0, 100, 100))
+ r=rect(-100, -100, 300, 300, 'cyan')
s.addElement(r)
t=title('SVGdraw Demo')
s.addElement(t)
g=group('animations')
- e=ellipse(0,0,5,2)
+ e=ellipse(0, 0, 5, 2)
g.addElement(e)
- c=circle(0,0,1,'red')
+ c=circle(0, 0, 1, 'red')
g.addElement(c)
- pd=pathdata(0,-10)
+ pd=pathdata(0, -10)
for i in range(6):
- pd.relsmbezier(10,5,0,10)
- pd.relsmbezier(-10,5,0,10)
- an=animateMotion(pd,10)
+ pd.relsmbezier(10, 5, 0, 10)
+ pd.relsmbezier(-10, 5, 0, 10)
+ an=animateMotion(pd, 10)
an.attributes['rotate']='auto-reverse'
an.attributes['repeatCount']="indefinite"
g.addElement(an)
s.addElement(g)
- for i in range(20,120,20):
- u=use('#animations',i,0)
+ for i in range(20, 120, 20):
+ u=use('#animations', i, 0)
s.addElement(u)
- for i in range(0,120,20):
- for j in range(5,105,10):
- c=circle(i,j,1,'red','black',.5)
+ for i in range(0, 120, 20):
+ for j in range(5, 105, 10):
+ c=circle(i, j, 1, 'red', 'black', .5)
s.addElement(c)
d.setSVG(s)
diff --git a/wqflask/utility/tools.py b/wqflask/utility/tools.py
index 51a87fe1..68ef0f04 100644
--- a/wqflask/utility/tools.py
+++ b/wqflask/utility/tools.py
@@ -15,7 +15,7 @@ OVERRIDES = {}
def app_set(command_id, value):
"""Set application wide value"""
- app.config.setdefault(command_id,value)
+ app.config.setdefault(command_id, value)
return value
def get_setting(command_id,guess=None):
@@ -45,7 +45,7 @@ def get_setting(command_id,guess=None):
def value(command):
if command:
# sys.stderr.write("Found "+command+"\n")
- app_set(command_id,command)
+ app_set(command_id, command)
return command
else:
return None
@@ -68,7 +68,7 @@ def get_setting(command_id,guess=None):
def get_setting_bool(id):
v = get_setting(id)
- if v not in [0,False,'False','FALSE',None]:
+ if v not in [0, False, 'False', 'FALSE', None]:
return True
return False
@@ -108,16 +108,16 @@ def js_path(module=None):
raise "No JS path found for "+module+" (if not in Guix check JS_GN_PATH)"
def reaper_command(guess=None):
- return get_setting("REAPER_COMMAND",guess)
+ return get_setting("REAPER_COMMAND", guess)
def gemma_command(guess=None):
- return assert_bin(get_setting("GEMMA_COMMAND",guess))
+ return assert_bin(get_setting("GEMMA_COMMAND", guess))
def gemma_wrapper_command(guess=None):
- return assert_bin(get_setting("GEMMA_WRAPPER_COMMAND",guess))
+ return assert_bin(get_setting("GEMMA_WRAPPER_COMMAND", guess))
def plink_command(guess=None):
- return assert_bin(get_setting("PLINK_COMMAND",guess))
+ return assert_bin(get_setting("PLINK_COMMAND", guess))
def flat_file_exists(subdir):
base = get_setting("GENENETWORK_FILES")
@@ -180,7 +180,7 @@ def locate(name, subdir=None):
raise Exception("Can not locate "+name+" in "+base)
def locate_phewas(name, subdir=None):
- return locate(name,'/phewas/'+subdir)
+ return locate(name, '/phewas/'+subdir)
def locate_ignore_error(name, subdir=None):
"""
@@ -204,7 +204,7 @@ def tempdir():
"""
Get UNIX TMPDIR by default
"""
- return valid_path(get_setting("TMPDIR","/tmp"))
+ return valid_path(get_setting("TMPDIR", "/tmp"))
BLUE = '\033[94m'
GREEN = '\033[92m'
@@ -225,9 +225,9 @@ def show_settings():
keylist.sort()
for k in keylist:
try:
- print(("%s: %s%s%s%s" % (k,BLUE,BOLD,get_setting(k),ENDC)))
+ print(("%s: %s%s%s%s" % (k, BLUE, BOLD, get_setting(k), ENDC)))
except:
- print(("%s: %s%s%s%s" % (k,GREEN,BOLD,app.config[k],ENDC)))
+ print(("%s: %s%s%s%s" % (k, GREEN, BOLD, app.config[k], ENDC)))
# Cached values
@@ -279,10 +279,10 @@ SMTP_CONNECT = get_setting('SMTP_CONNECT')
SMTP_USERNAME = get_setting('SMTP_USERNAME')
SMTP_PASSWORD = get_setting('SMTP_PASSWORD')
-REAPER_COMMAND = app_set("REAPER_COMMAND",reaper_command())
-GEMMA_COMMAND = app_set("GEMMA_COMMAND",gemma_command())
+REAPER_COMMAND = app_set("REAPER_COMMAND", reaper_command())
+GEMMA_COMMAND = app_set("GEMMA_COMMAND", gemma_command())
assert(GEMMA_COMMAND is not None)
-PLINK_COMMAND = app_set("PLINK_COMMAND",plink_command())
+PLINK_COMMAND = app_set("PLINK_COMMAND", plink_command())
GEMMA_WRAPPER_COMMAND = gemma_wrapper_command()
TEMPDIR = tempdir() # defaults to UNIX TMPDIR
assert_dir(TEMPDIR)
@@ -295,11 +295,11 @@ assert_dir(JS_GUIX_PATH+'/cytoscape-panzoom')
CSS_PATH = JS_GUIX_PATH # The CSS is bundled together with the JS
# assert_dir(JS_PATH)
-JS_TWITTER_POST_FETCHER_PATH = get_setting("JS_TWITTER_POST_FETCHER_PATH",js_path("javascript-twitter-post-fetcher"))
+JS_TWITTER_POST_FETCHER_PATH = get_setting("JS_TWITTER_POST_FETCHER_PATH", js_path("javascript-twitter-post-fetcher"))
assert_dir(JS_TWITTER_POST_FETCHER_PATH)
assert_file(JS_TWITTER_POST_FETCHER_PATH+"/js/twitterFetcher_min.js")
-JS_CYTOSCAPE_PATH = get_setting("JS_CYTOSCAPE_PATH",js_path("cytoscape"))
+JS_CYTOSCAPE_PATH = get_setting("JS_CYTOSCAPE_PATH", js_path("cytoscape"))
assert_dir(JS_CYTOSCAPE_PATH)
assert_file(JS_CYTOSCAPE_PATH+'/cytoscape.min.js')
diff --git a/wqflask/utility/webqtlUtil.py b/wqflask/utility/webqtlUtil.py
index 79991149..77cc3416 100644
--- a/wqflask/utility/webqtlUtil.py
+++ b/wqflask/utility/webqtlUtil.py
@@ -41,22 +41,22 @@ ParInfo ={
'C57BL-6JxC57BL-6NJF2':['', '', 'C57BL/6J', 'C57BL/6NJ'],
'BXD300':['B6D2F1', 'D2B6F1', 'C57BL/6J', 'DBA/2J'],
'B6BTBRF2':['B6BTBRF1', 'BTBRB6F1', 'C57BL/6J', 'BTBRT<+>tf/J'],
-'BHHBF2':['B6HF2','HB6F2','C57BL/6J','C3H/HeJ'],
-'BHF2':['B6HF2','HB6F2','C57BL/6J','C3H/HeJ'],
+'BHHBF2':['B6HF2', 'HB6F2', 'C57BL/6J', 'C3H/HeJ'],
+'BHF2':['B6HF2', 'HB6F2', 'C57BL/6J', 'C3H/HeJ'],
'B6D2F2':['B6D2F1', 'D2B6F1', 'C57BL/6J', 'DBA/2J'],
'BDF2-1999':['B6D2F2', 'D2B6F2', 'C57BL/6J', 'DBA/2J'],
'BDF2-2005':['B6D2F1', 'D2B6F1', 'C57BL/6J', 'DBA/2J'],
-'CTB6F2':['CTB6F2','B6CTF2','C57BL/6J','Castaneous'],
+'CTB6F2':['CTB6F2', 'B6CTF2', 'C57BL/6J', 'Castaneous'],
'CXB':['CBF1', 'BCF1', 'C57BL/6ByJ', 'BALB/cByJ'],
'AXBXA':['ABF1', 'BAF1', 'C57BL/6J', 'A/J'],
'AXB':['ABF1', 'BAF1', 'C57BL/6J', 'A/J'],
'BXA':['BAF1', 'ABF1', 'C57BL/6J', 'A/J'],
'LXS':['LSF1', 'SLF1', 'ISS', 'ILS'],
'HXBBXH':['SHR_BNF1', 'BN_SHRF1', 'BN-Lx/Cub', 'SHR/OlaIpcv'],
-'BayXSha':['BayXShaF1', 'ShaXBayF1', 'Bay-0','Shahdara'],
-'ColXBur':['ColXBurF1', 'BurXColF1', 'Col-0','Bur-0'],
-'ColXCvi':['ColXCviF1', 'CviXColF1', 'Col-0','Cvi'],
-'SXM':['SMF1', 'MSF1', 'Steptoe','Morex'],
+'BayXSha':['BayXShaF1', 'ShaXBayF1', 'Bay-0', 'Shahdara'],
+'ColXBur':['ColXBurF1', 'BurXColF1', 'Col-0', 'Bur-0'],
+'ColXCvi':['ColXCviF1', 'CviXColF1', 'Col-0', 'Cvi'],
+'SXM':['SMF1', 'MSF1', 'Steptoe', 'Morex'],
'HRDP':['SHR_BNF1', 'BN_SHRF1', 'BN-Lx/Cub', 'SHR/OlaIpcv']
}
@@ -91,7 +91,7 @@ def readLineCSV(line): ### dcrowell July 2008
returnList[0]=returnList[0][1:]
return returnList
-def cmpEigenValue(A,B):
+def cmpEigenValue(A, B):
try:
if A[0] > B[0]:
return -1
diff --git a/wqflask/wqflask/api/router.py b/wqflask/wqflask/api/router.py
index 3fa1d5ba..b81da0dc 100644
--- a/wqflask/wqflask/api/router.py
+++ b/wqflask/wqflask/api/router.py
@@ -558,10 +558,10 @@ def trait_sample_data(dataset_name, trait_name, file_format = "json"):
sample_list = []
for sample in sample_data:
sample_dict = {
- "sample_name" : sample[0],
- "sample_name_2" : sample[1],
- "value" : sample[2],
- "data_id" : sample[3],
+ "sample_name": sample[0],
+ "sample_name_2": sample[1],
+ "value": sample[2],
+ "data_id": sample[3],
}
if sample[4]:
sample_dict["se"] = sample[4]
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index 15a21ee6..4116e2df 100644
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -108,17 +108,17 @@ class CorrelationResults(object):
self.sample_data = {}
self.corr_type = start_vars['corr_type']
self.corr_method = start_vars['corr_sample_method']
- self.min_expr = get_float(start_vars,'min_expr')
- self.p_range_lower = get_float(start_vars,'p_range_lower',-1.0)
- self.p_range_upper = get_float(start_vars,'p_range_upper',1.0)
+ self.min_expr = get_float(start_vars, 'min_expr')
+ self.p_range_lower = get_float(start_vars, 'p_range_lower', -1.0)
+ self.p_range_upper = get_float(start_vars, 'p_range_upper', 1.0)
if ('loc_chr' in start_vars and
'min_loc_mb' in start_vars and
'max_loc_mb' in start_vars):
- self.location_chr = get_string(start_vars,'loc_chr')
- self.min_location_mb = get_int(start_vars,'min_loc_mb')
- self.max_location_mb = get_int(start_vars,'max_loc_mb')
+ self.location_chr = get_string(start_vars, 'loc_chr')
+ self.min_location_mb = get_int(start_vars, 'min_loc_mb')
+ self.max_location_mb = get_int(start_vars, 'max_loc_mb')
else:
self.location_chr = self.min_location_mb = self.max_location_mb = None
diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
index 832746bb..b582cd23 100644
--- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
+++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
@@ -275,8 +275,8 @@ def zScore(trait_data_array):
i = 0
for data in trait_data_array:
N = len(data)
- S = reduce(lambda x,y: x+y, data, 0.)
- SS = reduce(lambda x,y: x+y*y, data, 0.)
+ S = reduce(lambda x, y: x+y, data, 0.)
+ SS = reduce(lambda x, y: x+y*y, data, 0.)
mean = S/N
var = SS - S*S/N
stdev = math.sqrt(var/(N-1))
@@ -294,7 +294,7 @@ def sortEigenVectors(vector):
combines = []
i = 0
for item in eigenValues:
- combines.append([eigenValues[i],eigenVectors[i]])
+ combines.append([eigenValues[i], eigenVectors[i]])
i += 1
combines.sort(webqtlUtil.cmpEigenValue)
A = []
@@ -302,7 +302,7 @@ def sortEigenVectors(vector):
for item in combines:
A.append(item[0])
B.append(item[1])
- sum = reduce(lambda x,y: x+y, A, 0.0)
+ sum = reduce(lambda x, y: x+y, A, 0.0)
A = [x*100.0/sum for x in A]
return [A, B]
except:
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index 1e15d28f..cc9c1860 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -46,8 +46,8 @@ class DoSearch(object):
def handle_wildcard(self, str):
keyword = str.strip()
- keyword = keyword.replace("*",".*")
- keyword = keyword.replace("?",".")
+ keyword = keyword.replace("*", ".*")
+ keyword = keyword.replace("?", ".")
return keyword
diff --git a/wqflask/wqflask/external_tools/send_to_geneweaver.py b/wqflask/wqflask/external_tools/send_to_geneweaver.py
index 7a5dba73..9844bab4 100644
--- a/wqflask/wqflask/external_tools/send_to_geneweaver.py
+++ b/wqflask/wqflask/external_tools/send_to_geneweaver.py
@@ -54,10 +54,10 @@ class SendToGeneWeaver(object):
trait_name_list = get_trait_name_list(self.trait_list)
self.hidden_vars = {
- 'client' : "genenetwork",
- 'species' : species_name,
- 'idtype' : self.chip_name,
- 'list' : string.join(trait_name_list, ","),
+ 'client': "genenetwork",
+ 'species': species_name,
+ 'idtype': self.chip_name,
+ 'list': string.join(trait_name_list, ","),
}
def get_trait_name_list(trait_list):
diff --git a/wqflask/wqflask/marker_regression/display_mapping_results.py b/wqflask/wqflask/marker_regression/display_mapping_results.py
index c8b9c405..f282b010 100644
--- a/wqflask/wqflask/marker_regression/display_mapping_results.py
+++ b/wqflask/wqflask/marker_regression/display_mapping_results.py
@@ -27,8 +27,8 @@
import datetime
import string
from math import *
-from PIL import (Image,ImageDraw,ImageFont,ImageColor)
-import sys,os
+from PIL import (Image, ImageDraw, ImageFont, ImageColor)
+import sys, os
import cPickle
import httplib
import json
@@ -426,7 +426,7 @@ class DisplayMappingResults(object):
else:
continue
samplelist = list(self.genotype.prgy)
- for j,_geno in enumerate (self.genotype[0][1].genotype):
+ for j, _geno in enumerate (self.genotype[0][1].genotype):
for item in smd:
if item.name == samplelist[j]:
self.NR_INDIVIDUALS = self.NR_INDIVIDUALS + 1
@@ -518,7 +518,7 @@ class DisplayMappingResults(object):
#Scales plot differently for high resolution
if self.draw2X:
- intCanvasX2 = Image.new("RGBA", size=(self.graphWidth*2,self.graphHeight*2))
+ intCanvasX2 = Image.new("RGBA", size=(self.graphWidth*2, self.graphHeight*2))
gifmapX2 = self.plotIntMapping(intCanvasX2, startMb = self.startMb, endMb = self.endMb, showLocusForm= showLocusForm, zoom=2)
intCanvasX2.save(
"{}.png".format(
@@ -745,17 +745,17 @@ class DisplayMappingResults(object):
bootScale = bootScale[:-1] + [highestPercent]
bootOffset = 50*fontZoom
- bootScaleFont=ImageFont.truetype(font=VERDANA_FILE,size=13*fontZoom)
+ bootScaleFont=ImageFont.truetype(font=VERDANA_FILE, size=13*fontZoom)
im_drawer.rectangle(
xy=((canvas.size[0]-bootOffset, yZero-bootHeightThresh),
- (canvas.size[0]-bootOffset-15*zoom,yZero)),
+ (canvas.size[0]-bootOffset-15*zoom, yZero)),
fill = YELLOW, outline=BLACK)
im_drawer.line(
xy=((canvas.size[0]-bootOffset+4, yZero),
(canvas.size[0]-bootOffset, yZero)),
fill=BLACK)
TEXT_Y_DISPLACEMENT = -8
- im_drawer.text(xy=(canvas.size[0]-bootOffset+10,yZero+TEXT_Y_DISPLACEMENT), text='0%',
+ im_drawer.text(xy=(canvas.size[0]-bootOffset+10, yZero+TEXT_Y_DISPLACEMENT), text='0%',
font=bootScaleFont, fill=BLACK)
for item in bootScale:
@@ -763,10 +763,10 @@ class DisplayMappingResults(object):
continue
bootY = yZero-bootHeightThresh*item/highestPercent
im_drawer.line(
- xy=((canvas.size[0]-bootOffset+4,bootY),
- (canvas.size[0]-bootOffset,bootY)),
+ xy=((canvas.size[0]-bootOffset+4, bootY),
+ (canvas.size[0]-bootOffset, bootY)),
fill=BLACK)
- im_drawer.text(xy=(canvas.size[0]-bootOffset+10,bootY+TEXT_Y_DISPLACEMENT),
+ im_drawer.text(xy=(canvas.size[0]-bootOffset+10, bootY+TEXT_Y_DISPLACEMENT),
text='%2.1f'%item, font=bootScaleFont, fill=BLACK)
if self.legendChecked:
@@ -775,7 +775,7 @@ class DisplayMappingResults(object):
smallLabelFont = ImageFont.truetype(font=TREBUC_FILE, size=12*fontZoom)
leftOffset = xLeftOffset+(nCol-1)*200
im_drawer.rectangle(
- xy=((leftOffset,startPosY-6), (leftOffset+12,startPosY+6)),
+ xy=((leftOffset, startPosY-6), (leftOffset+12, startPosY+6)),
fill=YELLOW, outline=BLACK)
im_drawer.text(xy=(leftOffset+ 20, startPosY+TEXT_Y_DISPLACEMENT),
text='Frequency of the Peak LRS',
@@ -872,7 +872,7 @@ class DisplayMappingResults(object):
TEXT_Y_DISPLACEMENT = -8
im_drawer.text(
text="Sequence Site",
- xy=(leftOffset+15,startPosY+TEXT_Y_DISPLACEMENT), font=smallLabelFont,
+ xy=(leftOffset+15, startPosY+TEXT_Y_DISPLACEMENT), font=smallLabelFont,
fill=self.TOP_RIGHT_INFO_COLOR)
def drawSNPTrackNew(self, canvas, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
@@ -922,7 +922,7 @@ class DisplayMappingResults(object):
def drawMultiTraitName(self, fd, canvas, gifmap, showLocusForm, offset= (40, 120, 80, 10), zoom = 1):
nameWidths = []
yPaddingTop = 10
- colorFont=ImageFont.truetype(font=TREBUC_FILE,size=12)
+ colorFont=ImageFont.truetype(font=TREBUC_FILE, size=12)
if len(self.qtlresults) >20 and self.selectedChr > -1:
rightShift = 20
rightShiftStep = 60
@@ -941,20 +941,20 @@ class DisplayMappingResults(object):
rightShift += rightShiftStep
name = thisTrait.displayName()
- nameWidth, nameHeight = im_drawer.textsize(name,font=colorFont)
+ nameWidth, nameHeight = im_drawer.textsize(name, font=colorFont)
nameWidths.append(nameWidth)
im_drawer.rectangle(
- xy=((rightShift,yPaddingTop+kstep*15),
- (rectWidth+rightShift,yPaddingTop+10+kstep*15)),
+ xy=((rightShift, yPaddingTop+kstep*15),
+ (rectWidth+rightShift, yPaddingTop+10+kstep*15)),
fill=thisLRSColor, outline=BLACK)
im_drawer.text(
- text=name,xy=(rectWidth+2+rightShift,yPaddingTop+10+kstep*15),
- font=colorFont,fill=BLACK)
+ text=name, xy=(rectWidth+2+rightShift, yPaddingTop+10+kstep*15),
+ font=colorFont, fill=BLACK)
if thisTrait.db:
- COORDS = "%d,%d,%d,%d" %(rectWidth+2+rightShift,yPaddingTop+kstep*15,rectWidth+2+rightShift+nameWidth,yPaddingTop+10+kstep*15,)
+ COORDS = "%d,%d,%d,%d" %(rectWidth+2+rightShift, yPaddingTop+kstep*15, rectWidth+2+rightShift+nameWidth, yPaddingTop+10+kstep*15,)
HREF= "javascript:showDatabase3('%s','%s','%s','');" % (showLocusForm, thisTrait.db.name, thisTrait.name)
- Areas = HT.Area(shape='rect',coords=COORDS,href=HREF)
+ Areas = HT.Area(shape='rect', coords=COORDS, href=HREF)
gifmap.areas.append(Areas)
def drawLegendPanel(self, canvas, offset= (40, 120, 80, 10), zoom = 1):
@@ -968,80 +968,80 @@ class DisplayMappingResults(object):
if zoom == 2:
fontZoom = 1.5
- labelFont=ImageFont.truetype(font=TREBUC_FILE,size=12*fontZoom)
+ labelFont=ImageFont.truetype(font=TREBUC_FILE, size=12*fontZoom)
startPosY = 15
stepPosY = 12*fontZoom
if self.manhattan_plot != True:
im_drawer.line(
- xy=((xLeftOffset,startPosY),(xLeftOffset+32,startPosY)),
+ xy=((xLeftOffset, startPosY), (xLeftOffset+32, startPosY)),
fill=self.LRS_COLOR, width=2)
im_drawer.text(
- text=self.LRS_LOD, xy=(xLeftOffset+40,startPosY+TEXT_Y_DISPLACEMENT),
- font=labelFont,fill=BLACK)
+ text=self.LRS_LOD, xy=(xLeftOffset+40, startPosY+TEXT_Y_DISPLACEMENT),
+ font=labelFont, fill=BLACK)
startPosY += stepPosY
if self.additiveChecked:
startPosX = xLeftOffset
im_drawer.line(
- xy=((startPosX,startPosY),(startPosX+17,startPosY)),
+ xy=((startPosX, startPosY), (startPosX+17, startPosY)),
fill=self.ADDITIVE_COLOR_POSITIVE, width=2)
im_drawer.line(
- xy=((startPosX+18,startPosY),(startPosX+32,startPosY)),
+ xy=((startPosX+18, startPosY), (startPosX+32, startPosY)),
fill=self.ADDITIVE_COLOR_NEGATIVE, width=2)
im_drawer.text(
- text='Additive Effect',xy=(startPosX+40,startPosY+TEXT_Y_DISPLACEMENT),
- font=labelFont,fill=BLACK)
+ text='Additive Effect', xy=(startPosX+40, startPosY+TEXT_Y_DISPLACEMENT),
+ font=labelFont, fill=BLACK)
if self.genotype.type == 'intercross' and self.dominanceChecked:
startPosX = xLeftOffset
startPosY += stepPosY
im_drawer.line(
- xy=((startPosX,startPosY),(startPosX+17,startPosY)),
+ xy=((startPosX, startPosY), (startPosX+17, startPosY)),
fill=self.DOMINANCE_COLOR_POSITIVE, width=4)
im_drawer.line(
- xy=((startPosX+18,startPosY),(startPosX+35,startPosY)),
+ xy=((startPosX+18, startPosY), (startPosX+35, startPosY)),
fill=self.DOMINANCE_COLOR_NEGATIVE, width=4)
im_drawer.text(
- text='Dominance Effect', xy=(startPosX+42,startPosY+5),
- font=labelFont,fill=BLACK)
+ text='Dominance Effect', xy=(startPosX+42, startPosY+5),
+ font=labelFont, fill=BLACK)
if self.haplotypeAnalystChecked:
startPosY += stepPosY
startPosX = xLeftOffset
im_drawer.line(
- xy=((startPosX,startPosY),(startPosX+17,startPosY)),
+ xy=((startPosX, startPosY), (startPosX+17, startPosY)),
fill=self.HAPLOTYPE_POSITIVE, width=4)
im_drawer.line(
- xy=((startPosX+18,startPosY),(startPosX+35,startPosY)),
+ xy=((startPosX+18, startPosY), (startPosX+35, startPosY)),
fill=self.HAPLOTYPE_NEGATIVE, width=4)
im_drawer.line(
- xy=((startPosX+36,startPosY),(startPosX+53,startPosY)),
+ xy=((startPosX+36, startPosY), (startPosX+53, startPosY)),
fill=self.HAPLOTYPE_HETEROZYGOUS, width=4)
im_drawer.line(
- xy=((startPosX+54,startPosY),(startPosX+67,startPosY)),
+ xy=((startPosX+54, startPosY), (startPosX+67, startPosY)),
fill=self.HAPLOTYPE_RECOMBINATION, width=4)
im_drawer.text(
text='Haplotypes (Pat, Mat, Het, Unk)',
- xy=(startPosX+76,startPosY+5),font=labelFont,fill=BLACK)
+ xy=(startPosX+76, startPosY+5), font=labelFont, fill=BLACK)
if self.permChecked and self.nperm > 0:
startPosY += stepPosY
startPosX = xLeftOffset
im_drawer.line(
- xy=((startPosX, startPosY),( startPosX + 32, startPosY)),
+ xy=((startPosX, startPosY), ( startPosX + 32, startPosY)),
fill=self.SIGNIFICANT_COLOR, width=self.SIGNIFICANT_WIDTH)
im_drawer.line(
- xy=((startPosX, startPosY + stepPosY),( startPosX + 32, startPosY + stepPosY)),
+ xy=((startPosX, startPosY + stepPosY), ( startPosX + 32, startPosY + stepPosY)),
fill=self.SUGGESTIVE_COLOR, width=self.SUGGESTIVE_WIDTH)
im_drawer.text(
- text='Significant %s = %2.2f' % (self.LRS_LOD,self.significant),
- xy=(xLeftOffset+42,startPosY+TEXT_Y_DISPLACEMENT),font=labelFont,fill=BLACK)
+ text='Significant %s = %2.2f' % (self.LRS_LOD, self.significant),
+ xy=(xLeftOffset+42, startPosY+TEXT_Y_DISPLACEMENT), font=labelFont, fill=BLACK)
im_drawer.text(
text='Suggestive %s = %2.2f' % (self.LRS_LOD, self.suggestive),
- xy=(xLeftOffset+42,startPosY + TEXT_Y_DISPLACEMENT +stepPosY),font=labelFont,
+ xy=(xLeftOffset+42, startPosY + TEXT_Y_DISPLACEMENT +stepPosY), font=labelFont,
fill=BLACK)
- labelFont = ImageFont.truetype(font=VERDANA_FILE,size=12*fontZoom)
+ labelFont = ImageFont.truetype(font=VERDANA_FILE, size=12*fontZoom)
labelColor = BLACK
if self.dataset.type == "Publish" or self.dataset.type == "Geno":
dataset_label = self.dataset.fullname
@@ -1109,22 +1109,22 @@ class DisplayMappingResults(object):
im_drawer.textsize(string2, font=labelFont)[0])
im_drawer.text(
text=identification,
- xy=(canvas.size[0] - xRightOffset-d,20*fontZoom),font=labelFont,
+ xy=(canvas.size[0] - xRightOffset-d, 20*fontZoom), font=labelFont,
fill=labelColor)
else:
d = 4+ max(
im_drawer.textsize(string1, font=labelFont)[0],
im_drawer.textsize(string2, font=labelFont)[0])
im_drawer.text(
- text=string1,xy=(canvas.size[0] - xRightOffset-d,35*fontZoom),
- font=labelFont,fill=labelColor)
+ text=string1, xy=(canvas.size[0] - xRightOffset-d, 35*fontZoom),
+ font=labelFont, fill=labelColor)
im_drawer.text(
- text=string2,xy=(canvas.size[0] - xRightOffset-d,50*fontZoom),
- font=labelFont,fill=labelColor)
+ text=string2, xy=(canvas.size[0] - xRightOffset-d, 50*fontZoom),
+ font=labelFont, fill=labelColor)
if string3 != '':
im_drawer.text(
- text=string3,xy=(canvas.size[0] - xRightOffset-d,65*fontZoom),
- font=labelFont,fill=labelColor)
+ text=string3, xy=(canvas.size[0] - xRightOffset-d, 65*fontZoom),
+ font=labelFont, fill=labelColor)
def drawGeneBand(self, canvas, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
@@ -1345,7 +1345,7 @@ class DisplayMappingResults(object):
labelText = "3'"
im_drawer.text(
text=labelText,
- xy=(utrEndPix+2,geneYLocation+self.EACH_GENE_HEIGHT),
+ xy=(utrEndPix+2, geneYLocation+self.EACH_GENE_HEIGHT),
font=ImageFont.truetype(font=ARIAL_FILE, size=2))
#draw the genes as rectangles
@@ -1357,7 +1357,7 @@ class DisplayMappingResults(object):
COORDS = "%d, %d, %d, %d" %(geneStartPix, geneYLocation, geneEndPix, (geneYLocation + self.EACH_GENE_HEIGHT))
# NL: 06-02-2011 Rob required to display NCBI info in a new window
- gifmap.areas.append(HT.Area(shape='rect',coords=COORDS,href=HREF, title=TITLE,target="_blank"))
+ gifmap.areas.append(HT.Area(shape='rect', coords=COORDS, href=HREF, title=TITLE, target="_blank"))
## BEGIN HaplotypeAnalyst
def drawHaplotypeBand(self, canvas, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
@@ -1490,7 +1490,7 @@ class DisplayMappingResults(object):
counter = counter + 1
if item.name == samplelist[k]:
ind = counter
- maxind=max(ind,maxind)
+ maxind=max(ind, maxind)
# lines
if (oldgeno[k] == -1 and _geno == -1):
@@ -1523,7 +1523,7 @@ class DisplayMappingResults(object):
COORDS = "%d, %d, %d, %d" %(geneStartPix, geneYLocation+ind*self.EACH_GENE_HEIGHT, geneEndPix+1, (geneYLocation + ind*self.EACH_GENE_HEIGHT))
TITLE = "Strain: %s, marker (%s) \n Position %2.3f Mb." % (samplelist[k], _chr[j].name, float(txStart))
HREF = ''
- gifmap.areas.append(HT.Area(shape='rect',coords=COORDS,href=HREF, title=TITLE))
+ gifmap.areas.append(HT.Area(shape='rect', coords=COORDS, href=HREF, title=TITLE))
# if there are no more markers in a chromosome, the plotRight value calculated above will be before the plotWidth
# resulting in some empty space on the right side of the plot area. This draws an "unknown" bar from plotRight to the edge.
@@ -1642,14 +1642,14 @@ class DisplayMappingResults(object):
WEBQTL_HREF = "javascript:rangeView('%s', %f, %f)" % (self.selectedChr - 1, max(0, (calBase-webqtlZoomWidth))/1000000.0, (calBase+webqtlZoomWidth)/1000000.0)
WEBQTL_TITLE = "Click to view this section of the genome in WebQTL"
- gifmap.areas.append(HT.Area(shape='rect',coords=WEBQTL_COORDS,href=WEBQTL_HREF, title=WEBQTL_TITLE))
+ gifmap.areas.append(HT.Area(shape='rect', coords=WEBQTL_COORDS, href=WEBQTL_HREF, title=WEBQTL_TITLE))
im_drawer.rectangle(
xy=((xBrowse1, paddingTop),
(xBrowse2, (paddingTop + self.BAND_HEIGHT))),
outline=self.CLICKABLE_WEBQTL_REGION_COLOR,
fill=self.CLICKABLE_WEBQTL_REGION_COLOR)
im_drawer.line(
- xy=((xBrowse1, paddingTop),( xBrowse1, (paddingTop + self.BAND_HEIGHT))),
+ xy=((xBrowse1, paddingTop), ( xBrowse1, (paddingTop + self.BAND_HEIGHT))),
fill=self.CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR)
if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
@@ -1659,14 +1659,14 @@ class DisplayMappingResults(object):
else:
PHENOGEN_HREF = "https://phenogen.org/gene.jsp?speciesCB=Mm&auto=Y&geneTxt=chr%s:%d-%d&genomeVer=mm10" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
PHENOGEN_TITLE = "Click to view this section of the genome in PhenoGen"
- gifmap.areas.append(HT.Area(shape='rect',coords=PHENOGEN_COORDS,href=PHENOGEN_HREF, title=PHENOGEN_TITLE))
+ gifmap.areas.append(HT.Area(shape='rect', coords=PHENOGEN_COORDS, href=PHENOGEN_HREF, title=PHENOGEN_TITLE))
im_drawer.rectangle(
xy=((xBrowse1, phenogenPaddingTop),
(xBrowse2, (phenogenPaddingTop+self.BAND_HEIGHT))),
outline=self.CLICKABLE_PHENOGEN_REGION_COLOR,
fill=self.CLICKABLE_PHENOGEN_REGION_COLOR)
im_drawer.line(
- xy=((xBrowse1, phenogenPaddingTop),( xBrowse1, (phenogenPaddingTop+self.BAND_HEIGHT))),
+ xy=((xBrowse1, phenogenPaddingTop), ( xBrowse1, (phenogenPaddingTop+self.BAND_HEIGHT))),
fill=self.CLICKABLE_PHENOGEN_REGION_OUTLINE_COLOR)
UCSC_COORDS = "%d, %d, %d, %d" %(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.BAND_HEIGHT))
@@ -1675,7 +1675,7 @@ class DisplayMappingResults(object):
else:
UCSC_HREF = "http://genome.ucsc.edu/cgi-bin/hgTracks?db=%s&position=chr%s:%d-%d" % (self._ucscDb, self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
UCSC_TITLE = "Click to view this section of the genome in the UCSC Genome Browser"
- gifmap.areas.append(HT.Area(shape='rect',coords=UCSC_COORDS,href=UCSC_HREF, title=UCSC_TITLE))
+ gifmap.areas.append(HT.Area(shape='rect', coords=UCSC_COORDS, href=UCSC_HREF, title=UCSC_TITLE))
im_drawer.rectangle(
xy=((xBrowse1, ucscPaddingTop),
(xBrowse2, (ucscPaddingTop+self.BAND_HEIGHT))),
@@ -1692,7 +1692,7 @@ class DisplayMappingResults(object):
else:
ENSEMBL_HREF = "http://www.ensembl.org/Rattus_norvegicus/contigview?chr=%s&start=%d&end=%d" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
ENSEMBL_TITLE = "Click to view this section of the genome in the Ensembl Genome Browser"
- gifmap.areas.append(HT.Area(shape='rect',coords=ENSEMBL_COORDS,href=ENSEMBL_HREF, title=ENSEMBL_TITLE))
+ gifmap.areas.append(HT.Area(shape='rect', coords=ENSEMBL_COORDS, href=ENSEMBL_HREF, title=ENSEMBL_TITLE))
im_drawer.rectangle(
xy=((xBrowse1, ensemblPaddingTop),
(xBrowse2, (ensemblPaddingTop+self.BAND_HEIGHT))),
@@ -1789,8 +1789,8 @@ class DisplayMappingResults(object):
continue
Xc = xLeftOffset + plotXScale*(_Mb - startMb)
if counter % NUM_MINOR_TICKS == 0: # Draw a MAJOR mark, not just a minor tick mark
- im_drawer.line(xy=((Xc,yZero),
- (Xc,yZero+xMajorTickHeight)),
+ im_drawer.line(xy=((Xc, yZero),
+ (Xc, yZero+xMajorTickHeight)),
fill=xAxisTickMarkColor,
width=X_MAJOR_TICK_THICKNESS) # Draw the MAJOR tick mark
labelStr = str(formatStr % _Mb) # What Mbase location to put on the label
@@ -1800,8 +1800,8 @@ class DisplayMappingResults(object):
text=labelStr, font=MBLabelFont,
fill=xAxisLabelColor)
else:
- im_drawer.line(xy=((Xc,yZero),
- (Xc,yZero+xMinorTickHeight)),
+ im_drawer.line(xy=((Xc, yZero),
+ (Xc, yZero+xMinorTickHeight)),
fill=xAxisTickMarkColor,
width=X_MINOR_TICK_THICKNESS) # Draw the MINOR tick mark
@@ -1834,7 +1834,7 @@ class DisplayMappingResults(object):
text="Megabases",
xy=(
xLeftOffset+(plotWidth-im_drawer.textsize(
- "Megabases",font=megabaseLabelFont)[0])/2,
+ "Megabases", font=megabaseLabelFont)[0])/2,
strYLoc+MBLabelFont.font.height+10*(zoom%2)),
font=megabaseLabelFont, fill=BLACK)
pass
@@ -1889,7 +1889,7 @@ class DisplayMappingResults(object):
for j, ChrInfo in enumerate(ChrAInfo):
preLpos = -1
for i, item in enumerate(ChrInfo):
- Lname,Lpos = item
+ Lname, Lpos = item
if Lpos != preLpos:
offsetA += stepA
differ = 1
@@ -1903,17 +1903,17 @@ class DisplayMappingResults(object):
Zorder = 0
if differ:
im_drawer.line(
- xy=((startPosX+Lpos,yZero),(xLeftOffset+offsetA,\
+ xy=((startPosX+Lpos, yZero), (xLeftOffset+offsetA,\
yZero+25)),
fill=lineColor)
im_drawer.line(
- xy=((xLeftOffset+offsetA,yZero+25),(xLeftOffset+offsetA,\
+ xy=((xLeftOffset+offsetA, yZero+25), (xLeftOffset+offsetA,\
yZero+40+Zorder*(LRectWidth+3))),
fill=lineColor)
rectColor = ORANGE
else:
im_drawer.line(
- xy=((xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3)-3),(\
+ xy=((xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3)-3), (\
xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3))),
fill=lineColor)
rectColor = DEEPPINK
@@ -1921,9 +1921,9 @@ class DisplayMappingResults(object):
xy=((xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3)),
(xLeftOffset+offsetA-LRectHeight,
yZero+40+Zorder*(LRectWidth+3)+LRectWidth)),
- outline=rectColor,fill=rectColor,width = 0)
+ outline=rectColor, fill=rectColor, width = 0)
COORDS="%d,%d,%d,%d"%(xLeftOffset+offsetA-LRectHeight, yZero+40+Zorder*(LRectWidth+3),\
- xLeftOffset+offsetA,yZero+40+Zorder*(LRectWidth+3)+LRectWidth)
+ xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3)+LRectWidth)
HREF="/show_trait?trait_id=%s&dataset=%s" % (Lname, self.dataset.group.name+"Geno")
#HREF="javascript:showDatabase3('%s','%s','%s','');" % (showLocusForm,fd.RISet+"Geno", Lname)
Areas=HT.Area(shape='rect', coords=COORDS, href=HREF, target="_blank", title="Locus : " + Lname)
@@ -1931,7 +1931,7 @@ class DisplayMappingResults(object):
##piddle bug
if j == 0:
im_drawer.line(
- xy=((startPosX,yZero),(startPosX,yZero+40)),
+ xy=((startPosX, yZero), (startPosX, yZero+40)),
fill=lineColor)
startPosX += (self.ChrLengthDistList[j]+self.GraphInterval)*plotXScale
@@ -1943,7 +1943,7 @@ class DisplayMappingResults(object):
strYLoc + MBLabelFont.font.height+ 10*(zoom%2)),
font=centimorganLabelFont, fill=BLACK)
- im_drawer.line(xy=((xLeftOffset,yZero), (xLeftOffset+plotWidth,yZero)),
+ im_drawer.line(xy=((xLeftOffset, yZero), (xLeftOffset+plotWidth, yZero)),
fill=BLACK, width=X_AXIS_THICKNESS) # Draw the X axis itself
@@ -2079,7 +2079,7 @@ class DisplayMappingResults(object):
LRS_LOD_Max = 0.000001
yTopOffset + 30*(zoom - 1)
yLRS = yZero - (item/LRS_LOD_Max) * LRSHeightThresh
- im_drawer.line(xy=((xLeftOffset,yLRS), (xLeftOffset-4,yLRS)),
+ im_drawer.line(xy=((xLeftOffset, yLRS), (xLeftOffset-4, yLRS)),
fill=self.LRS_COLOR, width=1*zoom)
if all_int:
scaleStr = "%d" % item
@@ -2127,8 +2127,8 @@ class DisplayMappingResults(object):
else:
sugg_title = "Suggestive LOD = %0.2f" % (self.suggestive/4.61)
sig_title = "Significant LOD = %0.2f" % (self.significant/4.61)
- Areas1 = HT.Area(shape='rect',coords=sugg_coords,title=sugg_title)
- Areas2 = HT.Area(shape='rect',coords=sig_coords,title=sig_title)
+ Areas1 = HT.Area(shape='rect', coords=sugg_coords, title=sugg_title)
+ Areas2 = HT.Area(shape='rect', coords=sig_coords, title=sig_title)
gifmap.areas.append(Areas1)
gifmap.areas.append(Areas2)
@@ -2316,7 +2316,7 @@ class DisplayMappingResults(object):
im_drawer.text(
text="5",
xy=(
- Xc-im_drawer.textsize("5",font=symbolFont)[0]/2+1,
+ Xc-im_drawer.textsize("5", font=symbolFont)[0]/2+1,
Yc-4),
fill=point_color, font=symbolFont)
else:
@@ -2383,8 +2383,8 @@ class DisplayMappingResults(object):
)
else:
im_drawer.line(
- xy=((Xc0,yZero-(Yc0-yZero)),
- (Xc,yZero-(Yc-yZero))),
+ xy=((Xc0, yZero-(Yc0-yZero)),
+ (Xc, yZero-(Yc-yZero))),
fill=minusColor, width=lineWidth
#, clipX=(xLeftOffset, xLeftOffset + plotWidth)
)
@@ -2471,8 +2471,8 @@ class DisplayMappingResults(object):
###draw additive scale
if not self.multipleInterval and self.additiveChecked:
- additiveScaleFont=ImageFont.truetype(font=VERDANA_FILE,size=16*zoom)
- additiveScale = Plot.detScaleOld(0,additiveMax)
+ additiveScaleFont=ImageFont.truetype(font=VERDANA_FILE, size=16*zoom)
+ additiveScale = Plot.detScaleOld(0, additiveMax)
additiveStep = (additiveScale[1]-additiveScale[0])/additiveScale[2]
additiveAxisList = Plot.frange(0, additiveScale[1], additiveStep)
addPlotScale = AdditiveHeightThresh/additiveMax
@@ -2482,18 +2482,18 @@ class DisplayMappingResults(object):
for item in additiveAxisList:
additiveY = yZero - item*addPlotScale
im_drawer.line(
- xy=((xLeftOffset + plotWidth,additiveY),
- (xLeftOffset+4+ plotWidth,additiveY)),
+ xy=((xLeftOffset + plotWidth, additiveY),
+ (xLeftOffset+4+ plotWidth, additiveY)),
fill=self.ADDITIVE_COLOR_POSITIVE, width=1*zoom)
scaleStr = "%2.3f" % item
im_drawer.text(
text=scaleStr,
- xy=(xLeftOffset + plotWidth +6,additiveY+TEXT_Y_DISPLACEMENT),
- font=additiveScaleFont,fill=self.ADDITIVE_COLOR_POSITIVE)
+ xy=(xLeftOffset + plotWidth +6, additiveY+TEXT_Y_DISPLACEMENT),
+ font=additiveScaleFont, fill=self.ADDITIVE_COLOR_POSITIVE)
im_drawer.line(
- xy=((xLeftOffset+plotWidth,additiveY),
- (xLeftOffset+plotWidth,yZero)),
+ xy=((xLeftOffset+plotWidth, additiveY),
+ (xLeftOffset+plotWidth, yZero)),
fill=self.ADDITIVE_COLOR_POSITIVE, width=1*zoom)
im_drawer.line(
@@ -2553,7 +2553,7 @@ class DisplayMappingResults(object):
chrFontZoom = 2
else:
chrFontZoom = 1
- chrLabelFont=ImageFont.truetype(font=VERDANA_FILE,size=24*chrFontZoom)
+ chrLabelFont=ImageFont.truetype(font=VERDANA_FILE, size=24*chrFontZoom)
for i, _chr in enumerate(self.genotype):
if (i % 2 == 0):
@@ -2575,10 +2575,10 @@ class DisplayMappingResults(object):
TEXT_Y_DISPLACEMENT = 0
im_drawer.text(xy=(chrStartPix, yTopOffset + TEXT_Y_DISPLACEMENT),
text=_chr.name, font=chrLabelFont, fill=BLACK)
- COORDS = "%d,%d,%d,%d" %(chrStartPix, yTopOffset, chrEndPix,yTopOffset +20)
+ COORDS = "%d,%d,%d,%d" %(chrStartPix, yTopOffset, chrEndPix, yTopOffset +20)
#add by NL 09-03-2010
- HREF = "javascript:chrView(%d,%s);" % (i,self.ChrLengthMbList)
+ HREF = "javascript:chrView(%d,%s);" % (i, self.ChrLengthMbList)
#HREF = "javascript:changeView(%d,%s);" % (i,self.ChrLengthMbList)
Areas = HT.Area(shape='rect', coords=COORDS, href=HREF)
gifmap.areas.append(Areas)
@@ -2720,7 +2720,7 @@ class DisplayMappingResults(object):
else:
chr_as_int = int(theGO["Chromosome"]) - 1
if refGene:
- literatureCorrelationString = str(self.getLiteratureCorrelation(self.cursor,refGene,theGO['GeneID']) or "N/A")
+ literatureCorrelationString = str(self.getLiteratureCorrelation(self.cursor, refGene, theGO['GeneID']) or "N/A")
this_row = [selectCheck.__str__(),
str(tableIterationsCnt),
@@ -2820,8 +2820,8 @@ class DisplayMappingResults(object):
lCorr = None
try:
query = 'SELECT Value FROM LCorrRamin3 WHERE GeneId1 = %s and GeneId2 = %s'
- for x,y in [(geneId1,geneId2),(geneId2,geneId1)]:
- cursor.execute(query,(x,y))
+ for x, y in [(geneId1, geneId2), (geneId2, geneId1)]:
+ cursor.execute(query, (x, y))
lCorr = cursor.fetchone()
if lCorr:
lCorr = lCorr[0]
diff --git a/wqflask/wqflask/marker_regression/plink_mapping.py b/wqflask/wqflask/marker_regression/plink_mapping.py
index d4ee6fe6..2f282adc 100644
--- a/wqflask/wqflask/marker_regression/plink_mapping.py
+++ b/wqflask/wqflask/marker_regression/plink_mapping.py
@@ -54,7 +54,7 @@ def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''):
for i, sample in enumerate(ped_sample_list):
try:
value = vals[i]
- value = str(value).replace('value=','')
+ value = str(value).replace('value=', '')
value = value.strip()
except:
value = -9999
@@ -78,7 +78,7 @@ def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''):
# get strain name from ped file in order
def get_samples_from_ped_file(dataset):
- ped_file= open("{}{}.ped".format(flat_files('mapping'), dataset.group.name),"r")
+ ped_file= open("{}{}.ped".format(flat_files('mapping'), dataset.group.name), "r")
line = ped_file.readline()
sample_list=[]
@@ -155,7 +155,7 @@ def parse_plink_output(output_filename, species):
# output: lineList list
#######################################################
def build_line_list(line=None):
- line_list = string.split(string.strip(line),' ')# irregular number of whitespaces between columns
+ line_list = string.split(string.strip(line), ' ')# irregular number of whitespaces between columns
line_list = [item for item in line_list if item !='']
line_list = list(map(string.strip, line_list))
diff --git a/wqflask/wqflask/marker_regression/run_mapping.py b/wqflask/wqflask/marker_regression/run_mapping.py
index 145dbc77..1e6dff57 100644
--- a/wqflask/wqflask/marker_regression/run_mapping.py
+++ b/wqflask/wqflask/marker_regression/run_mapping.py
@@ -707,7 +707,7 @@ def get_perm_strata(this_trait, sample_list, categorical_vars, used_samples):
perm_strata_strings.append(combined_string)
- d = dict([(y,x+1) for x,y in enumerate(sorted(set(perm_strata_strings)))])
+ d = dict([(y, x+1) for x, y in enumerate(sorted(set(perm_strata_strings)))])
list_to_numbers = [d[x] for x in perm_strata_strings]
perm_strata = list_to_numbers
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index 5b3946e3..c07a7670 100644
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -53,7 +53,7 @@ views.py).
search = self.search_terms
self.original_search_string = self.search_terms
# check for dodgy search terms
- rx = re.compile(r'.*\W(href|http|sql|select|update)\W.*',re.IGNORECASE)
+ rx = re.compile(r'.*\W(href|http|sql|select|update)\W.*', re.IGNORECASE)
if rx.match(search):
logger.info("Regex failed search")
self.search_term_exists = False
diff --git a/wqflask/wqflask/show_trait/SampleList.py b/wqflask/wqflask/show_trait/SampleList.py
index 21ba7f63..f17e825e 100644
--- a/wqflask/wqflask/show_trait/SampleList.py
+++ b/wqflask/wqflask/show_trait/SampleList.py
@@ -57,7 +57,7 @@ class SampleList(object):
sample = webqtlCaseData.webqtlCaseData(name=sample_name)
sample.extra_info = {}
- if self.dataset.group.name == 'AXBXA' and sample_name in ('AXB18/19/20','AXB13/14','BXA8/17'):
+ if self.dataset.group.name == 'AXBXA' and sample_name in ('AXB18/19/20', 'AXB13/14', 'BXA8/17'):
sample.extra_info['url'] = "/mouseCross.html#AXB/BXA"
sample.extra_info['css_class'] = "fs12"
diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py
index a871e91a..232cb8da 100644
--- a/wqflask/wqflask/user_manager.py
+++ b/wqflask/wqflask/user_manager.py
@@ -867,7 +867,7 @@ def forgot_password_submit():
email_address = params['email_address']
next_page = None
if email_address != "":
- logger.debug("Wants to send password E-mail to ",email_address)
+ logger.debug("Wants to send password E-mail to ", email_address)
user_details = get_user_by_unique_column("email_address", email_address)
if user_details:
ForgotPasswordEmail(user_details["email_address"])
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 394a9e28..92c20fc7 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -55,7 +55,7 @@ from wqflask.ctl import ctl_analysis
from wqflask.snp_browser import snp_browser
from utility import temp_data
-from utility.tools import SQL_URI,TEMPDIR,USE_REDIS,USE_GN_SERVER,GN_SERVER_URL,GN_VERSION,JS_TWITTER_POST_FETCHER_PATH,JS_GUIX_PATH, CSS_PATH
+from utility.tools import SQL_URI, TEMPDIR, USE_REDIS, USE_GN_SERVER, GN_SERVER_URL, GN_VERSION, JS_TWITTER_POST_FETCHER_PATH, JS_GUIX_PATH, CSS_PATH
from utility.helper_functions import get_species_groups
from utility.authentication_tools import check_resource_availability
from utility.redis_tools import get_redis_conn
@@ -133,10 +133,10 @@ def handle_bad_request(e):
list = [fn for fn in os.listdir("./wqflask/static/gif/error") if fn.endswith(".gif") ]
animation = random.choice(list)
- resp = make_response(render_template("error.html",message=err_msg,stack=formatted_lines,error_image=animation,version=GN_VERSION))
+ resp = make_response(render_template("error.html", message=err_msg, stack=formatted_lines, error_image=animation, version=GN_VERSION))
# logger.error("Set cookie %s with %s" % (err_msg, animation))
- resp.set_cookie(err_msg[:32],animation)
+ resp.set_cookie(err_msg[:32], animation)
return resp
@app.route("/authentication_needed")
@@ -257,7 +257,7 @@ def docedit():
@app.route('/generated/')
def generated_file(filename):
logger.info(request.url)
- return send_from_directory(GENERATED_IMAGE_DIR,filename)
+ return send_from_directory(GENERATED_IMAGE_DIR, filename)
@app.route("/help")
def help():
--
cgit v1.2.3
From 09cb4a05526c73229428401f356251bbfe8bf1cd Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 20 Aug 2020 15:39:50 +0300
Subject: Add backward support for urllib
* wqflask/base/trait.py: Remove unused imports
* wqflask/db/call.py (Bench): Add urllib2 fallback for python2
---
wqflask/base/trait.py | 3 +--
wqflask/db/call.py | 11 +++++++++--
2 files changed, 10 insertions(+), 4 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 05b272c3..a19b66f7 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -6,7 +6,6 @@ import resource
import codecs
import requests
import random
-import urllib.request, urllib.parse, urllib.error
from base import webqtlConfig
from base.webqtlCaseData import webqtlCaseData
@@ -607,4 +606,4 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
else:
raise KeyError(repr(trait.name)+' information is not found in the database.')
- return trait
\ No newline at end of file
+ return trait
diff --git a/wqflask/db/call.py b/wqflask/db/call.py
index 3b8f782e..0971d2a2 100644
--- a/wqflask/db/call.py
+++ b/wqflask/db/call.py
@@ -3,7 +3,10 @@
from flask import g
import string
-import urllib.request, urllib.error, urllib.parse
+try: # Python2 support
+ import urllib.request, urllib.error, urllib.parse
+except:
+ import urllib2
import json
from utility.tools import USE_GN_SERVER, LOG_SQL, GN_SERVER_URL
from utility.benchmark import Bench
@@ -59,7 +62,11 @@ def gn_server(path):
"""
with Bench("GN_SERVER", LOG_SQL):
- res = urllib.request.urlopen(GN_SERVER_URL+path)
+ res = ()
+ try:
+ res = urllib.request.urlopen(GN_SERVER_URL+path)
+ except:
+ res = urllib2.urlopen(GN_SERVER_URL+path)
rest = res.read()
res2 = json.loads(rest)
logger.debug(res2)
--
cgit v1.2.3
From 7f623509a4afded47eb8580451c146487d2ef662 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 20 Aug 2020 15:41:18 +0300
Subject: Disable python2 QTLReaper
* wqflask/base/data_set.py: Remove usage of "reaper" to load datasets
---
wqflask/base/data_set.py | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 06e1c551..43beec26 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -34,7 +34,6 @@ from utility import webqtlUtil
from db import webqtlDatabaseFunction
from base import species
from base import webqtlConfig
-import reaper
from flask import Flask, g
import os
import math
@@ -456,12 +455,7 @@ class DatasetGroup(object):
full_filename = str(locate(self.genofile, 'genotype'))
else:
full_filename = str(locate(self.name + '.geno', 'genotype'))
-
- if use_reaper:
- genotype_1 = reaper.Dataset()
- genotype_1.read(full_filename)
- else:
- genotype_1 = gen_geno_ob.genotype(full_filename)
+ genotype_1 = gen_geno_ob.genotype(full_filename)
if genotype_1.type == "group" and self.parlist:
genotype_2 = genotype_1.add(
--
cgit v1.2.3
From 1f4fb6b24f3508d80be1f07cd62e38ac9385ef41 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 20 Aug 2020 16:35:17 +0300
Subject: Handle module renames in the standard library
Run:
```
2to3-3.8 -f imports -w . && \
2to3-3.8 -f imports2 -w .
```
See: and
---
wqflask/base/data_set.py | 2 +-
wqflask/maintenance/gen_select_dataset.py | 4 ++--
wqflask/maintenance/quantile_normalize.py | 4 ++--
wqflask/maintenance/set_resource_defaults.py | 4 ++--
wqflask/utility/svg.py | 16 ++++++++--------
wqflask/wqflask/api/router.py | 14 +++++++-------
wqflask/wqflask/collect.py | 2 +-
.../wqflask/comparison_bar_chart/comparison_bar_chart.py | 2 +-
wqflask/wqflask/correlation/show_corr_results.py | 2 +-
wqflask/wqflask/correlation_matrix/show_corr_matrix.py | 2 +-
wqflask/wqflask/export_traits.py | 4 ++--
wqflask/wqflask/heatmap/heatmap.py | 4 ++--
.../wqflask/marker_regression/display_mapping_results.py | 4 ++--
wqflask/wqflask/marker_regression/run_mapping.py | 2 +-
wqflask/wqflask/network_graph/network_graph.py | 2 +-
wqflask/wqflask/show_trait/show_trait.py | 2 +-
wqflask/wqflask/user_manager.py | 2 +-
wqflask/wqflask/views.py | 12 ++++++------
18 files changed, 42 insertions(+), 42 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 43beec26..8151a29d 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -44,7 +44,7 @@ import codecs
import json
import requests
import gzip
-import cPickle as pickle
+import pickle as pickle
import itertools
from redis import Redis
diff --git a/wqflask/maintenance/gen_select_dataset.py b/wqflask/maintenance/gen_select_dataset.py
index d12b328f..fd65a52a 100644
--- a/wqflask/maintenance/gen_select_dataset.py
+++ b/wqflask/maintenance/gen_select_dataset.py
@@ -50,7 +50,7 @@ from utility.tools import locate, locate_ignore_error, TEMPDIR, SQL_URI
import MySQLdb
import simplejson as json
-import urlparse
+import urllib.parse
#import sqlalchemy as sa
@@ -66,7 +66,7 @@ from pprint import pformat as pf
def parse_db_uri():
"""Converts a database URI to the db name, host name, user name, and password"""
- parsed_uri = urlparse.urlparse(SQL_URI)
+ parsed_uri = urllib.parse.urlparse(SQL_URI)
db_conn_info = dict(
db = parsed_uri.path[1:],
diff --git a/wqflask/maintenance/quantile_normalize.py b/wqflask/maintenance/quantile_normalize.py
index 43edfd13..4d6e03bf 100644
--- a/wqflask/maintenance/quantile_normalize.py
+++ b/wqflask/maintenance/quantile_normalize.py
@@ -6,7 +6,7 @@ sys.path.insert(0, './')
import MySQLdb
-import urlparse
+import urllib.parse
import numpy as np
import pandas as pd
@@ -22,7 +22,7 @@ from utility.tools import ELASTICSEARCH_HOST, ELASTICSEARCH_PORT, SQL_URI
def parse_db_uri():
"""Converts a database URI to the db name, host name, user name, and password"""
- parsed_uri = urlparse.urlparse(SQL_URI)
+ parsed_uri = urllib.parse.urlparse(SQL_URI)
db_conn_info = dict(
db = parsed_uri.path[1:],
diff --git a/wqflask/maintenance/set_resource_defaults.py b/wqflask/maintenance/set_resource_defaults.py
index d53a255b..abd5416c 100644
--- a/wqflask/maintenance/set_resource_defaults.py
+++ b/wqflask/maintenance/set_resource_defaults.py
@@ -34,7 +34,7 @@ Redis = get_redis_conn()
import MySQLdb
-import urlparse
+import urllib.parse
from utility.logger import getLogger
logger = getLogger(__name__)
@@ -42,7 +42,7 @@ logger = getLogger(__name__)
def parse_db_uri():
"""Converts a database URI to the db name, host name, user name, and password"""
- parsed_uri = urlparse.urlparse(SQL_URI)
+ parsed_uri = urllib.parse.urlparse(SQL_URI)
db_conn_info = dict(
db = parsed_uri.path[1:],
diff --git a/wqflask/utility/svg.py b/wqflask/utility/svg.py
index 19eda0ce..b92cc2d1 100644
--- a/wqflask/utility/svg.py
+++ b/wqflask/utility/svg.py
@@ -957,8 +957,8 @@ class drawing:
# Voeg een element toe aan de grafiek toe.
if use_dom_implementation==0:
def toXml(self, filename='',compress=False):
- import cStringIO
- xml=cStringIO.StringIO()
+ import io
+ xml=io.StringIO()
xml.write("\n")
xml.write(" 1:
- memory_file = StringIO.StringIO()
+ memory_file = io.StringIO()
with ZipFile(memory_file, mode='w', compression=ZIP_DEFLATED) as zf:
for the_file in file_list:
zf.writestr(the_file[0], the_file[1])
@@ -460,7 +460,7 @@ def export_perm_data():
["#Comment: Results sorted from low to high peak linkage"]
]
- buff = StringIO.StringIO()
+ buff = io.StringIO()
writer = csv.writer(buff)
writer.writerows(the_rows)
for item in perm_info['perm_data']:
--
cgit v1.2.3
From 301bdd2f43de9121cd040dc6eab82a51eafae92f Mon Sep 17 00:00:00 2001
From: zsloan
Date: Tue, 25 Aug 2020 18:35:44 -0500
Subject: Fixed issue in DatasetType that caused an error when trying to load
new datasets * wqflask/base/data_set.py - Added fetchone() to g.db.execute()
which is what was causing the error
---
wqflask/base/data_set.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index cfba9104..afffe780 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -152,7 +152,8 @@ Publish or ProbeSet. E.g.
if t in ['pheno', 'other_pheno']:
name = name.replace("Publish", "")
- if bool(len(g.db.execute(sql_query_mapping[t].format(name)))):
+
+ if bool(len(g.db.execute(sql_query_mapping[t].format(name)).fetchone())):
self.datasets[name] = dataset_name_mapping[t]
self.redis_instance.set("dataset_structure", json.dumps(self.datasets))
return True
--
cgit v1.2.3
From 94f97127a9e451c7adb36613d090a612601b9d01 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Wed, 26 Aug 2020 17:38:13 +0300
Subject: Rename "unicode" to "str"
See:
---
wqflask/base/data_set.py | 4 ++--
wqflask/base/trait.py | 10 +++++-----
wqflask/wqflask/model.py | 6 +++---
wqflask/wqflask/user_manager.py | 2 +-
wqflask/wqflask/user_session.py | 2 +-
5 files changed, 12 insertions(+), 12 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 8151a29d..39a8a2ed 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -1044,9 +1044,9 @@ class MrnaAssayDataSet(DataSet):
# XZ, 12/08/2008: description
# XZ, 06/05/2009: Rob asked to add probe target description
- description_string = unicode(
+ description_string = str(
str(this_trait.description).strip(codecs.BOM_UTF8), 'utf-8')
- target_string = unicode(
+ target_string = str(
str(this_trait.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8')
if len(description_string) > 1 and description_string != 'None':
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index a19b66f7..09c41fa7 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -490,9 +490,9 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
else:
trait.description_display = ""
- trait.abbreviation = unicode(str(trait.abbreviation).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
- trait.description_display = unicode(str(trait.description_display).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
- trait.authors = unicode(str(trait.authors).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
+ trait.abbreviation = str(str(trait.abbreviation).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
+ trait.description_display = str(str(trait.description_display).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
+ trait.authors = str(str(trait.authors).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
if not trait.year.isdigit():
trait.pubmed_text = "N/A"
@@ -503,8 +503,8 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.pubmed_link = webqtlConfig.PUBMEDLINK_URL % trait.pubmed_id
if dataset.type == 'ProbeSet' and dataset.group:
- description_string = unicode(str(trait.description).strip(codecs.BOM_UTF8), 'utf-8')
- target_string = unicode(str(trait.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8')
+ description_string = str(str(trait.description).strip(codecs.BOM_UTF8), 'utf-8')
+ target_string = str(str(trait.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8')
if len(description_string) > 1 and description_string != 'None':
description_display = description_string
diff --git a/wqflask/wqflask/model.py b/wqflask/wqflask/model.py
index 38117a8e..a135761c 100644
--- a/wqflask/wqflask/model.py
+++ b/wqflask/wqflask/model.py
@@ -18,7 +18,7 @@ from wqflask.database import Base, init_db
class User(Base):
__tablename__ = "user"
- id = Column(Unicode(36), primary_key=True, default=lambda: unicode(uuid.uuid4()))
+ id = Column(Unicode(36), primary_key=True, default=lambda: str(uuid.uuid4()))
email_address = Column(Unicode(50), unique=True, nullable=False)
# Todo: Turn on strict mode for Mysql
@@ -120,7 +120,7 @@ class User(Base):
class Login(Base):
__tablename__ = "login"
- id = Column(Unicode(36), primary_key=True, default=lambda: unicode(uuid.uuid4()))
+ id = Column(Unicode(36), primary_key=True, default=lambda: str(uuid.uuid4()))
user = Column(Unicode(36), ForeignKey('user.id'))
timestamp = Column(DateTime(), default=lambda: datetime.datetime.utcnow())
ip_address = Column(Unicode(39))
@@ -138,7 +138,7 @@ class Login(Base):
class UserCollection(Base):
__tablename__ = "user_collection"
- id = Column(Unicode(36), primary_key=True, default=lambda: unicode(uuid.uuid4()))
+ id = Column(Unicode(36), primary_key=True, default=lambda: str(uuid.uuid4()))
user = Column(Unicode(36), ForeignKey('user.id'))
# I'd prefer this to not have a length, but for the index below it needs one
diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py
index 56d1c084..3c41e2b8 100644
--- a/wqflask/wqflask/user_manager.py
+++ b/wqflask/wqflask/user_manager.py
@@ -252,7 +252,7 @@ class UserSession(object):
def add_collection(self, collection_name, traits):
"""Add collection into ElasticSearch"""
- collection_dict = {'id': unicode(uuid.uuid4()),
+ collection_dict = {'id': str(uuid.uuid4()),
'name': collection_name,
'created_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
'changed_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
diff --git a/wqflask/wqflask/user_session.py b/wqflask/wqflask/user_session.py
index 3aa2c151..71c31c57 100644
--- a/wqflask/wqflask/user_session.py
+++ b/wqflask/wqflask/user_session.py
@@ -184,7 +184,7 @@ class UserSession(object):
def add_collection(self, collection_name, traits):
"""Add collection into Redis"""
- collection_dict = {'id': unicode(uuid.uuid4()),
+ collection_dict = {'id': str(uuid.uuid4()),
'name': collection_name,
'created_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
'changed_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
--
cgit v1.2.3
From 7717f0d3d4802d115a8b5ace4d379864ba5b1188 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Wed, 26 Aug 2020 18:51:54 +0300
Subject: Replace "__cmp__" with "__eq__" magic method
* wqflask/base/GeneralObject.py: "__cmp__" is no longer used in python3. See:
---
wqflask/base/GeneralObject.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/GeneralObject.py b/wqflask/base/GeneralObject.py
index 707569db..0122ee32 100644
--- a/wqflask/base/GeneralObject.py
+++ b/wqflask/base/GeneralObject.py
@@ -61,5 +61,6 @@ class GeneralObject:
s += '%s = %s\n' % (key, self.__dict__[key])
return s
- def __cmp__(self, other):
- return len(list(self.__dict__.keys())).__cmp__(len(list(other.__dict__.keys())))
+ def __eq__(self, other):
+ return (len(list(self.__dict__.keys())) ==
+ len(list(other.__dict__.keys())))
--
cgit v1.2.3
From 303e4b71c2172da5be19c84d4be5a062329ac013 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Wed, 26 Aug 2020 19:12:33 +0300
Subject: Remove "from __future__ import new_feature" statements
See:
---
test/requests/link_checker.py | 1 -
test/requests/main_web_functionality.py | 22 ++++++++++++----------
test/requests/mapping_tests.py | 1 -
test/requests/navigation_tests.py | 1 -
test/requests/test-website.py | 2 +-
webtests/browser_run.py | 4 +---
webtests/correlation_matrix_test.py | 2 --
webtests/correlation_test.py | 2 --
webtests/marker_regression_test.py | 2 --
webtests/show_trait_js_test.py | 2 --
webtests/test_runner.py | 4 +---
wqflask/base/data_set.py | 1 -
wqflask/base/mrna_assay_tissue_data.py | 4 +---
wqflask/base/species.py | 4 +---
wqflask/base/trait.py | 2 --
wqflask/maintenance/convert_dryad_to_bimbam.py | 3 +--
wqflask/maintenance/convert_geno_to_bimbam.py | 3 +--
wqflask/maintenance/gen_select_dataset.py | 10 +---------
.../maintenance/generate_kinship_from_bimbam.py | 3 +--
.../maintenance/generate_probesetfreeze_file.py | 2 --
wqflask/maintenance/geno_to_json.py | 3 +--
wqflask/maintenance/get_group_samplelists.py | 2 --
wqflask/maintenance/print_benchmark.py | 4 +---
wqflask/maintenance/quantile_normalize.py | 7 +------
wqflask/maintenance/set_resource_defaults.py | 4 +---
wqflask/utility/Plot.py | 2 --
wqflask/utility/after.py | 4 +---
wqflask/utility/authentication_tools.py | 2 --
wqflask/utility/benchmark.py | 2 --
wqflask/utility/chunks.py | 2 --
wqflask/utility/db_tools.py | 2 --
wqflask/utility/gen_geno_ob.py | 4 +---
wqflask/utility/genofile_parser.py | 1 -
wqflask/utility/helper_functions.py | 2 --
wqflask/utility/hmac.py | 4 +---
wqflask/utility/redis_tools.py | 4 +---
wqflask/utility/temp_data.py | 1 -
wqflask/wqflask/__init__.py | 2 --
wqflask/wqflask/api/correlation.py | 4 +---
wqflask/wqflask/api/gen_menu.py | 2 --
wqflask/wqflask/api/mapping.py | 2 --
wqflask/wqflask/api/router.py | 4 +---
wqflask/wqflask/collect.py | 3 ---
.../comparison_bar_chart/comparison_bar_chart.py | 1 -
wqflask/wqflask/correlation/corr_scatter_plot.py | 4 +---
.../wqflask/correlation/correlation_functions.py | 4 +---
wqflask/wqflask/correlation/show_corr_results.py | 2 --
.../wqflask/correlation_matrix/show_corr_matrix.py | 2 --
wqflask/wqflask/do_search.py | 2 --
wqflask/wqflask/docs.py | 4 +---
wqflask/wqflask/export_traits.py | 4 +---
wqflask/wqflask/external_tools/send_to_bnw.py | 4 +---
.../wqflask/external_tools/send_to_geneweaver.py | 4 +---
.../wqflask/external_tools/send_to_webgestalt.py | 4 +---
wqflask/wqflask/group_manager.py | 5 +----
wqflask/wqflask/gsearch.py | 2 --
wqflask/wqflask/heatmap/heatmap.py | 2 --
wqflask/wqflask/interval_analyst/GeneUtil.py | 2 --
wqflask/wqflask/marker_regression/run_mapping.py | 4 +---
wqflask/wqflask/model.py | 4 +---
wqflask/wqflask/network_graph/network_graph.py | 2 --
wqflask/wqflask/news.py | 1 -
wqflask/wqflask/parser.py | 2 --
wqflask/wqflask/resource_manager.py | 4 +---
wqflask/wqflask/search_results.py | 2 --
wqflask/wqflask/send_mail.py | 2 --
wqflask/wqflask/show_trait/SampleList.py | 2 --
wqflask/wqflask/show_trait/export_trait_data.py | 4 +---
wqflask/wqflask/show_trait/show_trait.py | 2 --
wqflask/wqflask/snp_browser/snp_browser.py | 2 --
wqflask/wqflask/submit_bnw.py | 4 +---
wqflask/wqflask/update_search_results.py | 2 --
wqflask/wqflask/user_login.py | 4 +---
wqflask/wqflask/user_manager.py | 2 --
wqflask/wqflask/user_session.py | 2 --
wqflask/wqflask/views.py | 2 --
76 files changed, 45 insertions(+), 190 deletions(-)
(limited to 'wqflask/base')
diff --git a/test/requests/link_checker.py b/test/requests/link_checker.py
index 5e16a5cd..949a33c8 100644
--- a/test/requests/link_checker.py
+++ b/test/requests/link_checker.py
@@ -1,4 +1,3 @@
-from __future__ import print_function
import re
import requests
from lxml.html import parse
diff --git a/test/requests/main_web_functionality.py b/test/requests/main_web_functionality.py
index d070dab9..78030307 100644
--- a/test/requests/main_web_functionality.py
+++ b/test/requests/main_web_functionality.py
@@ -1,9 +1,7 @@
-from __future__ import print_function
-import re
import requests
from lxml.html import parse
from link_checker import check_page
-from requests.exceptions import ConnectionError
+
def check_home(url):
doc = parse(url).getroot()
@@ -11,20 +9,23 @@ def check_home(url):
assert(search_button[0].value == "Search")
print("OK")
+
def check_search_page(host):
data = dict(
- species="mouse"
- , group="BXD"
- , type="Hippocampus mRNA"
- , dataset="HC_M2_0606_P"
- , search_terms_or=""
- , search_terms_and="MEAN=(15 16) LRS=(23 46)")
+ species="mouse",
+ group="BXD",
+ type="Hippocampus mRNA",
+ dataset="HC_M2_0606_P",
+ search_terms_or="",
+ search_terms_and="MEAN=(15 16) LRS=(23 46)")
result = requests.get(host+"/search", params=data)
found = result.text.find("records are shown below")
assert(found >= 0)
assert(result.status_code == 200)
print("OK")
- check_traits_page(host, "/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P")
+ check_traits_page(host, ("/show_trait?trait_id=1435395_"
+ "s_at&dataset=HC_M2_0606_P"))
+
def check_traits_page(host, traits_url):
doc = parse(host+traits_url).getroot()
@@ -33,6 +34,7 @@ def check_traits_page(host, traits_url):
print("OK")
check_page(host, host+traits_url)
+
def check_main_web_functionality(args_obj, parser):
print("")
print("Checking main web functionality...")
diff --git a/test/requests/mapping_tests.py b/test/requests/mapping_tests.py
index 5748a2a3..19b22c21 100644
--- a/test/requests/mapping_tests.py
+++ b/test/requests/mapping_tests.py
@@ -1,4 +1,3 @@
-from __future__ import print_function
import re
import copy
import json
diff --git a/test/requests/navigation_tests.py b/test/requests/navigation_tests.py
index eda27324..6b91c1fd 100644
--- a/test/requests/navigation_tests.py
+++ b/test/requests/navigation_tests.py
@@ -1,4 +1,3 @@
-from __future__ import print_function
import re
import requests
from lxml.html import parse
diff --git a/test/requests/test-website.py b/test/requests/test-website.py
index f90d1843..8bfb47c2 100755
--- a/test/requests/test-website.py
+++ b/test/requests/test-website.py
@@ -3,7 +3,7 @@
# env GN2_PROFILE=/home/wrk/opt/gn-latest ./bin/genenetwork2 ./etc/default_settings.py -c ../test/requests/test-website.py http://localhost:5003
#
# Mostly to pick up the Guix GN2_PROFILE and python modules
-from __future__ import print_function
+
import argparse
from link_checker import check_links
from link_checker import check_packaged_js_files
diff --git a/webtests/browser_run.py b/webtests/browser_run.py
index 2ec299c5..7ee540b7 100644
--- a/webtests/browser_run.py
+++ b/webtests/browser_run.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
__all__ = ('sleep', 'testmod', 'test')
from doctest import testmod
@@ -71,4 +69,4 @@ class Test(object):
-test = Test()
\ No newline at end of file
+test = Test()
diff --git a/webtests/correlation_matrix_test.py b/webtests/correlation_matrix_test.py
index 8529c265..97114890 100644
--- a/webtests/correlation_matrix_test.py
+++ b/webtests/correlation_matrix_test.py
@@ -65,8 +65,6 @@ text: 0.608\n71
"""
-from __future__ import absolute_import, division, print_function
-
from browser_run import *
testmod()
diff --git a/webtests/correlation_test.py b/webtests/correlation_test.py
index aad3a69f..311bb847 100644
--- a/webtests/correlation_test.py
+++ b/webtests/correlation_test.py
@@ -44,8 +44,6 @@ text: 1.000
"""
-from __future__ import absolute_import, division, print_function
-
from browser_run import *
testmod()
diff --git a/webtests/marker_regression_test.py b/webtests/marker_regression_test.py
index c4f76f53..9b4a4acb 100644
--- a/webtests/marker_regression_test.py
+++ b/webtests/marker_regression_test.py
@@ -48,8 +48,6 @@ text: 11.511
"""
-from __future__ import absolute_import, division, print_function
-
from browser_run import *
testmod()
diff --git a/webtests/show_trait_js_test.py b/webtests/show_trait_js_test.py
index 0fd2c16c..34ffd3b7 100644
--- a/webtests/show_trait_js_test.py
+++ b/webtests/show_trait_js_test.py
@@ -35,8 +35,6 @@ style: display: none;
"""
-from __future__ import absolute_import, division, print_function
-
from browser_run import *
testmod()
diff --git a/webtests/test_runner.py b/webtests/test_runner.py
index ef6d0d69..b5b590a6 100644
--- a/webtests/test_runner.py
+++ b/webtests/test_runner.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
import unittest
import doctest
import glob
@@ -25,4 +23,4 @@ def main():
runner.run(suite)
if __name__ == '__main__':
- main()
\ No newline at end of file
+ main()
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 39a8a2ed..8ac7a279 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -18,7 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
from db.call import fetchall, fetchone, fetch1
from utility.logger import getLogger
from utility.tools import USE_GN_SERVER, USE_REDIS, flat_files, flat_file_exists, GN2_BASE_URL
diff --git a/wqflask/base/mrna_assay_tissue_data.py b/wqflask/base/mrna_assay_tissue_data.py
index 6fec5dcd..33ce12bd 100644
--- a/wqflask/base/mrna_assay_tissue_data.py
+++ b/wqflask/base/mrna_assay_tissue_data.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import collections
from flask import g
@@ -92,4 +90,4 @@ class MrnaAssayTissueData(object):
else:
symbol_values_dict[result.Symbol.lower()].append(result.value)
- return symbol_values_dict
\ No newline at end of file
+ return symbol_values_dict
diff --git a/wqflask/base/species.py b/wqflask/base/species.py
index 6d99af65..e3f1bc4a 100644
--- a/wqflask/base/species.py
+++ b/wqflask/base/species.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import collections
from flask import Flask, g
@@ -59,4 +57,4 @@ class Chromosomes(object):
results = g.db.execute(query).fetchall()
for item in results:
- self.chromosomes[item.OrderId] = IndChromosome(item.Name, item.Length)
\ No newline at end of file
+ self.chromosomes[item.OrderId] = IndChromosome(item.Name, item.Length)
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 09c41fa7..b20efd2a 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
import os
import string
import resource
diff --git a/wqflask/maintenance/convert_dryad_to_bimbam.py b/wqflask/maintenance/convert_dryad_to_bimbam.py
index e833b395..12ce35e9 100644
--- a/wqflask/maintenance/convert_dryad_to_bimbam.py
+++ b/wqflask/maintenance/convert_dryad_to_bimbam.py
@@ -6,7 +6,6 @@ Convert data dryad files to a BIMBAM _geno and _snps file
"""
-from __future__ import print_function, division, absolute_import
import sys
sys.path.append("..")
@@ -67,4 +66,4 @@ def convert_dryad_to_bimbam(filename):
if __name__=="__main__":
input_filename = "/home/zas1024/cfw_data/" + sys.argv[1] + ".txt"
- convert_dryad_to_bimbam(input_filename)
\ No newline at end of file
+ convert_dryad_to_bimbam(input_filename)
diff --git a/wqflask/maintenance/convert_geno_to_bimbam.py b/wqflask/maintenance/convert_geno_to_bimbam.py
index 528b98cf..d49742f2 100644
--- a/wqflask/maintenance/convert_geno_to_bimbam.py
+++ b/wqflask/maintenance/convert_geno_to_bimbam.py
@@ -9,7 +9,6 @@ code
"""
-from __future__ import print_function, division, absolute_import
import sys
sys.path.append("..")
import os
@@ -187,4 +186,4 @@ if __name__=="__main__":
#convertob = ConvertGenoFile("/home/zas1024/gene/genotype_files/genotypes/SRxSHRSPF2.geno", "/home/zas1024/gene/genotype_files/new_genotypes/SRxSHRSPF2.json")
#convertob.convert()
ConvertGenoFile.process_all(Old_Geno_Directory, New_Geno_Directory)
- #ConvertGenoFiles(Geno_Directory)
\ No newline at end of file
+ #ConvertGenoFiles(Geno_Directory)
diff --git a/wqflask/maintenance/gen_select_dataset.py b/wqflask/maintenance/gen_select_dataset.py
index fd65a52a..544e2fd1 100644
--- a/wqflask/maintenance/gen_select_dataset.py
+++ b/wqflask/maintenance/gen_select_dataset.py
@@ -30,14 +30,6 @@ It needs to be run manually when database has been changed. Run it as
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import print_function, division
-
-#from flask import config
-#
-#cdict = {}
-#config = config.Config(cdict).from_envvar('WQFLASK_SETTINGS')
-#print("cdict is:", cdict)
-
import sys
# NEW: Note we prepend the current path - otherwise a guix instance of GN2 may be used instead
@@ -319,4 +311,4 @@ def _test_it():
if __name__ == '__main__':
Conn = MySQLdb.Connect(**parse_db_uri())
Cursor = Conn.cursor()
- main()
\ No newline at end of file
+ main()
diff --git a/wqflask/maintenance/generate_kinship_from_bimbam.py b/wqflask/maintenance/generate_kinship_from_bimbam.py
index b53f5dda..60257b28 100644
--- a/wqflask/maintenance/generate_kinship_from_bimbam.py
+++ b/wqflask/maintenance/generate_kinship_from_bimbam.py
@@ -8,7 +8,6 @@ and uses GEMMA to generate their corresponding kinship/relatedness matrix file
"""
-from __future__ import print_function, division, absolute_import
import sys
sys.path.append("..")
import os
@@ -58,4 +57,4 @@ if __name__=="__main__":
Bimbam_Directory = """/export/local/home/zas1024/genotype_files/genotype/bimbam/"""
GenerateKinshipMatrices.process_all(Geno_Directory, Bimbam_Directory)
- #./gemma -g /home/zas1024/genotype_files/genotype/bimbam/BXD_geno.txt -p /home/zas1024/genotype_files/genotype/bimbam/BXD_pheno.txt -gk 1 -o BXD
\ No newline at end of file
+ #./gemma -g /home/zas1024/genotype_files/genotype/bimbam/BXD_geno.txt -p /home/zas1024/genotype_files/genotype/bimbam/BXD_pheno.txt -gk 1 -o BXD
diff --git a/wqflask/maintenance/generate_probesetfreeze_file.py b/wqflask/maintenance/generate_probesetfreeze_file.py
index 4231cc7c..b1e41e9a 100644
--- a/wqflask/maintenance/generate_probesetfreeze_file.py
+++ b/wqflask/maintenance/generate_probesetfreeze_file.py
@@ -1,7 +1,5 @@
#!/usr/bin/python
-from __future__ import absolute_import, print_function, division
-
import sys
# sys.path.insert(0, "..") - why?
diff --git a/wqflask/maintenance/geno_to_json.py b/wqflask/maintenance/geno_to_json.py
index 9579812a..7e7fd241 100644
--- a/wqflask/maintenance/geno_to_json.py
+++ b/wqflask/maintenance/geno_to_json.py
@@ -9,7 +9,6 @@ code
"""
-from __future__ import print_function, division, absolute_import
import sys
sys.path.append("..")
import os
@@ -194,4 +193,4 @@ if __name__=="__main__":
ConvertGenoFile.process_all(Old_Geno_Directory, New_Geno_Directory)
#ConvertGenoFiles(Geno_Directory)
- #process_csv(Input_File, Output_File)
\ No newline at end of file
+ #process_csv(Input_File, Output_File)
diff --git a/wqflask/maintenance/get_group_samplelists.py b/wqflask/maintenance/get_group_samplelists.py
index fb22898a..3f9d0278 100644
--- a/wqflask/maintenance/get_group_samplelists.py
+++ b/wqflask/maintenance/get_group_samplelists.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import os
import glob
import gzip
diff --git a/wqflask/maintenance/print_benchmark.py b/wqflask/maintenance/print_benchmark.py
index ae327cf3..b24ce4f1 100644
--- a/wqflask/maintenance/print_benchmark.py
+++ b/wqflask/maintenance/print_benchmark.py
@@ -1,7 +1,5 @@
#!/usr/bin/python
-from __future__ import absolute_import, print_function, division
-
import time
from pprint import pformat as pf
@@ -40,4 +38,4 @@ def new_main():
print(pf(TheCounter.Counters))
if __name__ == '__main__':
- new_main()
\ No newline at end of file
+ new_main()
diff --git a/wqflask/maintenance/quantile_normalize.py b/wqflask/maintenance/quantile_normalize.py
index 4d6e03bf..701b2b50 100644
--- a/wqflask/maintenance/quantile_normalize.py
+++ b/wqflask/maintenance/quantile_normalize.py
@@ -1,10 +1,5 @@
-from __future__ import absolute_import, print_function, division
-
import sys
sys.path.insert(0, './')
-
-
-
import MySQLdb
import urllib.parse
@@ -126,4 +121,4 @@ if __name__ == '__main__':
}
)
- print(response)
\ No newline at end of file
+ print(response)
diff --git a/wqflask/maintenance/set_resource_defaults.py b/wqflask/maintenance/set_resource_defaults.py
index abd5416c..4177c124 100644
--- a/wqflask/maintenance/set_resource_defaults.py
+++ b/wqflask/maintenance/set_resource_defaults.py
@@ -16,8 +16,6 @@ To run:
"""
-from __future__ import print_function, division
-
import sys
import json
@@ -163,4 +161,4 @@ def main():
if __name__ == '__main__':
Conn = MySQLdb.Connect(**parse_db_uri())
Cursor = Conn.cursor()
- main()
\ No newline at end of file
+ main()
diff --git a/wqflask/utility/Plot.py b/wqflask/utility/Plot.py
index 48a5c7ba..61f408d2 100644
--- a/wqflask/utility/Plot.py
+++ b/wqflask/utility/Plot.py
@@ -24,8 +24,6 @@
#
# Last updated by GeneNetwork Core Team 2010/10/20
-from __future__ import print_function
-
from PIL import ImageColor
from PIL import ImageDraw
from PIL import ImageFont
diff --git a/wqflask/utility/after.py b/wqflask/utility/after.py
index b628a0a4..06091ecb 100644
--- a/wqflask/utility/after.py
+++ b/wqflask/utility/after.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
"""
See: http://flask.pocoo.org/docs/patterns/deferredcallbacks/#deferred-callbacks
@@ -13,4 +11,4 @@ def after_this_request(f):
if not hasattr(g, 'after_request_callbacks'):
g.after_request_callbacks = []
g.after_request_callbacks.append(f)
- return f
\ No newline at end of file
+ return f
diff --git a/wqflask/utility/authentication_tools.py b/wqflask/utility/authentication_tools.py
index bc03eb55..0e499180 100644
--- a/wqflask/utility/authentication_tools.py
+++ b/wqflask/utility/authentication_tools.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import json
import requests
diff --git a/wqflask/utility/benchmark.py b/wqflask/utility/benchmark.py
index 221e5151..ea5a0ab6 100644
--- a/wqflask/utility/benchmark.py
+++ b/wqflask/utility/benchmark.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import collections
import inspect
import time
diff --git a/wqflask/utility/chunks.py b/wqflask/utility/chunks.py
index d91b9bf4..9a7db102 100644
--- a/wqflask/utility/chunks.py
+++ b/wqflask/utility/chunks.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import math
import time
diff --git a/wqflask/utility/db_tools.py b/wqflask/utility/db_tools.py
index 4034f39c..92bde505 100644
--- a/wqflask/utility/db_tools.py
+++ b/wqflask/utility/db_tools.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
from MySQLdb import escape_string as escape
def create_in_clause(items):
diff --git a/wqflask/utility/gen_geno_ob.py b/wqflask/utility/gen_geno_ob.py
index ae42f834..81085ffe 100644
--- a/wqflask/utility/gen_geno_ob.py
+++ b/wqflask/utility/gen_geno_ob.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
import utility.logger
logger = utility.logger.getLogger(__name__ )
@@ -178,4 +176,4 @@ class Locus(object):
if allele in list(geno_table.keys()):
self.genotype.append(geno_table[allele])
else: #ZS: Some genotype appears that isn't specified in the metadata, make it unknown
- self.genotype.append("U")
\ No newline at end of file
+ self.genotype.append("U")
diff --git a/wqflask/utility/genofile_parser.py b/wqflask/utility/genofile_parser.py
index af306731..0b736176 100644
--- a/wqflask/utility/genofile_parser.py
+++ b/wqflask/utility/genofile_parser.py
@@ -1,7 +1,6 @@
# CTL analysis for GN2
# Author / Maintainer: Danny Arends
-from __future__ import print_function, division, absolute_import
import sys
import os
import glob
diff --git a/wqflask/utility/helper_functions.py b/wqflask/utility/helper_functions.py
index 107c9ec6..7eb7f013 100644
--- a/wqflask/utility/helper_functions.py
+++ b/wqflask/utility/helper_functions.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
from base import data_set
from base.trait import create_trait
from base.species import TheSpecies
diff --git a/wqflask/utility/hmac.py b/wqflask/utility/hmac.py
index b08be97e..73e28790 100644
--- a/wqflask/utility/hmac.py
+++ b/wqflask/utility/hmac.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import hmac
import hashlib
@@ -37,4 +35,4 @@ def url_for_hmac(endpoint, **values):
return url + combiner + "hm=" + hm
app.jinja_env.globals.update(url_for_hmac=url_for_hmac,
- data_hmac=data_hmac)
\ No newline at end of file
+ data_hmac=data_hmac)
diff --git a/wqflask/utility/redis_tools.py b/wqflask/utility/redis_tools.py
index 1377a564..13ac5cfe 100644
--- a/wqflask/utility/redis_tools.py
+++ b/wqflask/utility/redis_tools.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import uuid
import simplejson as json
import datetime
@@ -306,4 +304,4 @@ def change_resource_owner(resource_id, new_owner_id):
the_resource['owner_id'] = new_owner_id
Redis.delete("resource")
- Redis.hset("resources", resource_id, json.dumps(the_resource))
\ No newline at end of file
+ Redis.hset("resources", resource_id, json.dumps(the_resource))
diff --git a/wqflask/utility/temp_data.py b/wqflask/utility/temp_data.py
index 2f2726c6..4144ae00 100644
--- a/wqflask/utility/temp_data.py
+++ b/wqflask/utility/temp_data.py
@@ -1,4 +1,3 @@
-from __future__ import print_function, division, absolute_import
from redis import Redis
import simplejson as json
diff --git a/wqflask/wqflask/__init__.py b/wqflask/wqflask/__init__.py
index d729aef5..e73f833f 100644
--- a/wqflask/wqflask/__init__.py
+++ b/wqflask/wqflask/__init__.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
import sys
import jinja2
diff --git a/wqflask/wqflask/api/correlation.py b/wqflask/wqflask/api/correlation.py
index eb05645e..7da13121 100644
--- a/wqflask/wqflask/api/correlation.py
+++ b/wqflask/wqflask/api/correlation.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
import collections
import scipy
@@ -234,4 +232,4 @@ def init_corr_params(start_vars):
'return_count' : return_count
}
- return corr_params
\ No newline at end of file
+ return corr_params
diff --git a/wqflask/wqflask/api/gen_menu.py b/wqflask/wqflask/api/gen_menu.py
index 41966f78..1dcafe1f 100644
--- a/wqflask/wqflask/api/gen_menu.py
+++ b/wqflask/wqflask/api/gen_menu.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division
-
from flask import g
diff --git a/wqflask/wqflask/api/mapping.py b/wqflask/wqflask/api/mapping.py
index 92c27c9b..d59a69df 100644
--- a/wqflask/wqflask/api/mapping.py
+++ b/wqflask/wqflask/api/mapping.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
import string
from base import data_set
diff --git a/wqflask/wqflask/api/router.py b/wqflask/wqflask/api/router.py
index 5f9b81b8..acf7ce4a 100644
--- a/wqflask/wqflask/api/router.py
+++ b/wqflask/wqflask/api/router.py
@@ -1,7 +1,5 @@
# GN2 API
-from __future__ import absolute_import, division, print_function
-
import os, io, csv, json, datetime, requests, yaml
import zlib
from zipfile import ZipFile, ZIP_DEFLATED
@@ -966,4 +964,4 @@ def get_group_id(group_name):
if group_id:
return group_id[0]
else:
- return None
\ No newline at end of file
+ return None
diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py
index 06c00930..15383603 100644
--- a/wqflask/wqflask/collect.py
+++ b/wqflask/wqflask/collect.py
@@ -1,6 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
-
import os
import hashlib
import datetime
diff --git a/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py b/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
index 16832621..92de6073 100644
--- a/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
+++ b/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
@@ -18,7 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
from pprint import pformat as pf
from base.trait import create_trait
diff --git a/wqflask/wqflask/correlation/corr_scatter_plot.py b/wqflask/wqflask/correlation/corr_scatter_plot.py
index 57a8d85f..929cd2c9 100644
--- a/wqflask/wqflask/correlation/corr_scatter_plot.py
+++ b/wqflask/wqflask/correlation/corr_scatter_plot.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import math
from flask import g
@@ -130,4 +128,4 @@ def get_intercept_coords(slope, intercept, x_range, y_range):
intercept_coords.append([x1, y1])
intercept_coords.append([x2, y2])
- return intercept_coords
\ No newline at end of file
+ return intercept_coords
diff --git a/wqflask/wqflask/correlation/correlation_functions.py b/wqflask/wqflask/correlation/correlation_functions.py
index abaa212f..b883e361 100644
--- a/wqflask/wqflask/correlation/correlation_functions.py
+++ b/wqflask/wqflask/correlation/correlation_functions.py
@@ -24,8 +24,6 @@
#
# Last updated by NL 2011/03/23
-from __future__ import absolute_import, print_function, division
-
import math
import rpy2.robjects
import string
@@ -114,4 +112,4 @@ def get_trait_symbol_and_tissue_values(symbol_list=None):
tissue_data = MrnaAssayTissueData(gene_symbols=symbol_list)
if len(tissue_data.gene_symbols):
- return tissue_data.get_symbol_values_pairs()
\ No newline at end of file
+ return tissue_data.get_symbol_values_pairs()
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index 5ced30b6..e5b87c6a 100644
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -18,8 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
import collections
import json
import scipy
diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
index bd5aca1f..7b4bda31 100644
--- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
+++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
@@ -18,8 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
import datetime
import math
import numpy as np
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index cc9c1860..de8e1e78 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division
-
import string
import requests
import json
diff --git a/wqflask/wqflask/docs.py b/wqflask/wqflask/docs.py
index 78407e22..8628b81d 100644
--- a/wqflask/wqflask/docs.py
+++ b/wqflask/wqflask/docs.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import codecs
from flask import g
@@ -42,4 +40,4 @@ def update_text(start_vars):
sql = "UPDATE Docs SET content='{0}' WHERE entry='{1}';".format(content, start_vars['entry_type'])
g.db.execute(sql)
except:
- pass
\ No newline at end of file
+ pass
diff --git a/wqflask/wqflask/export_traits.py b/wqflask/wqflask/export_traits.py
index 2f4e9aac..3a886537 100644
--- a/wqflask/wqflask/export_traits.py
+++ b/wqflask/wqflask/export_traits.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division
-
import csv
import xlsxwriter
import io
@@ -140,4 +138,4 @@ def sort_traits_by_group(trait_list=[]):
traits_by_group[trait.dataset.group.name].append(trait)
- return traits_by_group
\ No newline at end of file
+ return traits_by_group
diff --git a/wqflask/wqflask/external_tools/send_to_bnw.py b/wqflask/wqflask/external_tools/send_to_bnw.py
index 68efd10d..efa17f05 100644
--- a/wqflask/wqflask/external_tools/send_to_bnw.py
+++ b/wqflask/wqflask/external_tools/send_to_bnw.py
@@ -18,8 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
from base.trait import GeneralTrait
from utility import helper_functions, corr_result_helpers
@@ -69,4 +67,4 @@ class SendToBNW(object):
if has_none:
continue
self.form_value += ",".join(str(cell) for cell in row)
- self.form_value += ";"
\ No newline at end of file
+ self.form_value += ";"
diff --git a/wqflask/wqflask/external_tools/send_to_geneweaver.py b/wqflask/wqflask/external_tools/send_to_geneweaver.py
index 9844bab4..93164233 100644
--- a/wqflask/wqflask/external_tools/send_to_geneweaver.py
+++ b/wqflask/wqflask/external_tools/send_to_geneweaver.py
@@ -18,8 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
import string
from flask import Flask, g
@@ -109,4 +107,4 @@ def test_chip(trait_list):
chip_name = '%s_NA' % result[0]
return chip_name
- return chip_name
\ No newline at end of file
+ return chip_name
diff --git a/wqflask/wqflask/external_tools/send_to_webgestalt.py b/wqflask/wqflask/external_tools/send_to_webgestalt.py
index 30ca024f..b255ba95 100644
--- a/wqflask/wqflask/external_tools/send_to_webgestalt.py
+++ b/wqflask/wqflask/external_tools/send_to_webgestalt.py
@@ -18,8 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
import string
from flask import Flask, g
@@ -123,4 +121,4 @@ def gen_gene_id_list(trait_list):
trait_name_list.append(trait.name)
retrieve_trait_info(trait, trait.dataset)
gene_id_list.append(str(trait.geneid))
- return trait_name_list, gene_id_list
\ No newline at end of file
+ return trait_name_list, gene_id_list
diff --git a/wqflask/wqflask/group_manager.py b/wqflask/wqflask/group_manager.py
index 24848ed8..e6079c3e 100644
--- a/wqflask/wqflask/group_manager.py
+++ b/wqflask/wqflask/group_manager.py
@@ -1,6 +1,3 @@
-
-from __future__ import print_function, division, absolute_import
-
from flask import (Flask, g, render_template, url_for, request, make_response,
redirect, flash)
@@ -142,4 +139,4 @@ def send_group_invites(group_id, user_email_list = [], user_type="members"):
else:
send_verification_email(user_details, template_name = "email/group_verification.txt", key_prefix = "verification_code", subject = "You've been invited to join a GeneNetwork user group")
-#@app.route()
\ No newline at end of file
+#@app.route()
diff --git a/wqflask/wqflask/gsearch.py b/wqflask/wqflask/gsearch.py
index c65a1415..6d797a29 100644
--- a/wqflask/wqflask/gsearch.py
+++ b/wqflask/wqflask/gsearch.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import json
from flask import Flask, g
diff --git a/wqflask/wqflask/heatmap/heatmap.py b/wqflask/wqflask/heatmap/heatmap.py
index 1f1cdb90..cca5a4fc 100644
--- a/wqflask/wqflask/heatmap/heatmap.py
+++ b/wqflask/wqflask/heatmap/heatmap.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import string
import os
import random
diff --git a/wqflask/wqflask/interval_analyst/GeneUtil.py b/wqflask/wqflask/interval_analyst/GeneUtil.py
index a39e5d0f..17c8ccbf 100644
--- a/wqflask/wqflask/interval_analyst/GeneUtil.py
+++ b/wqflask/wqflask/interval_analyst/GeneUtil.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import string
from flask import Flask, g
diff --git a/wqflask/wqflask/marker_regression/run_mapping.py b/wqflask/wqflask/marker_regression/run_mapping.py
index 67512bc6..7ae84b16 100644
--- a/wqflask/wqflask/marker_regression/run_mapping.py
+++ b/wqflask/wqflask/marker_regression/run_mapping.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
from base.trait import GeneralTrait
from base import data_set #import create_dataset
@@ -711,4 +709,4 @@ def get_perm_strata(this_trait, sample_list, categorical_vars, used_samples):
list_to_numbers = [d[x] for x in perm_strata_strings]
perm_strata = list_to_numbers
- return perm_strata
\ No newline at end of file
+ return perm_strata
diff --git a/wqflask/wqflask/model.py b/wqflask/wqflask/model.py
index a135761c..772f74e4 100644
--- a/wqflask/wqflask/model.py
+++ b/wqflask/wqflask/model.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import uuid
import datetime
@@ -168,4 +166,4 @@ def display_collapsible(number):
def user_uuid():
"""Unique cookie for a user"""
- user_uuid = request.cookies.get('user_uuid')
\ No newline at end of file
+ user_uuid = request.cookies.get('user_uuid')
diff --git a/wqflask/wqflask/network_graph/network_graph.py b/wqflask/wqflask/network_graph/network_graph.py
index 2a4c4a93..70e5dd58 100644
--- a/wqflask/wqflask/network_graph/network_graph.py
+++ b/wqflask/wqflask/network_graph/network_graph.py
@@ -18,8 +18,6 @@
#
# This module is used by GeneNetwork project (www.genenetwork.org)
-from __future__ import absolute_import, print_function, division
-
import scipy
import simplejson as json
from pprint import pformat as pf
diff --git a/wqflask/wqflask/news.py b/wqflask/wqflask/news.py
index 20319756..0675ec4b 100644
--- a/wqflask/wqflask/news.py
+++ b/wqflask/wqflask/news.py
@@ -1,4 +1,3 @@
-from __future__ import absolute_import, print_function, division
from flask import g
class News(object):
diff --git a/wqflask/wqflask/parser.py b/wqflask/wqflask/parser.py
index 1ca5ecff..472dd30e 100644
--- a/wqflask/wqflask/parser.py
+++ b/wqflask/wqflask/parser.py
@@ -17,8 +17,6 @@ be acceptable.]
"""
-from __future__ import print_function, division
-
import re
from pprint import pformat as pf
diff --git a/wqflask/wqflask/resource_manager.py b/wqflask/wqflask/resource_manager.py
index 6b3e00fb..e883d5da 100644
--- a/wqflask/wqflask/resource_manager.py
+++ b/wqflask/wqflask/resource_manager.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import json
from flask import (Flask, g, render_template, url_for, request, make_response,
@@ -131,4 +129,4 @@ def get_group_names(group_masks):
this_mask['name'] = group_name
group_masks_with_names[group_id] = this_mask
- return group_masks_with_names
\ No newline at end of file
+ return group_masks_with_names
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index c07a7670..f6c677a8 100644
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import re
import uuid
from math import *
diff --git a/wqflask/wqflask/send_mail.py b/wqflask/wqflask/send_mail.py
index bf5d0dd8..86e8a558 100644
--- a/wqflask/wqflask/send_mail.py
+++ b/wqflask/wqflask/send_mail.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, division, print_function
-
import datetime
import time
diff --git a/wqflask/wqflask/show_trait/SampleList.py b/wqflask/wqflask/show_trait/SampleList.py
index f17e825e..6fcf7cec 100644
--- a/wqflask/wqflask/show_trait/SampleList.py
+++ b/wqflask/wqflask/show_trait/SampleList.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
from flask import Flask, g
from base import webqtlCaseData
diff --git a/wqflask/wqflask/show_trait/export_trait_data.py b/wqflask/wqflask/show_trait/export_trait_data.py
index 68c3ad7d..2d76b935 100644
--- a/wqflask/wqflask/show_trait/export_trait_data.py
+++ b/wqflask/wqflask/show_trait/export_trait_data.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division
-
import simplejson as json
from pprint import pformat as pf
@@ -71,4 +69,4 @@ def cmp_samples(a, b):
else:
return 1
else:
- return -1
\ No newline at end of file
+ return -1
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index 6a74cada..e93b0289 100644
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import string
import os
import datetime
diff --git a/wqflask/wqflask/snp_browser/snp_browser.py b/wqflask/wqflask/snp_browser/snp_browser.py
index b3d26caf..0db7e1fe 100644
--- a/wqflask/wqflask/snp_browser/snp_browser.py
+++ b/wqflask/wqflask/snp_browser/snp_browser.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
from flask import Flask, g, url_for
import string
diff --git a/wqflask/wqflask/submit_bnw.py b/wqflask/wqflask/submit_bnw.py
index 59e60dfd..a0e84c8c 100644
--- a/wqflask/wqflask/submit_bnw.py
+++ b/wqflask/wqflask/submit_bnw.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
from base.trait import GeneralTrait
from base import data_set
from utility import helper_functions
@@ -8,4 +6,4 @@ import utility.logger
logger = utility.logger.getLogger(__name__ )
def get_bnw_input(start_vars):
- logger.debug("BNW VARS:", start_vars)
\ No newline at end of file
+ logger.debug("BNW VARS:", start_vars)
diff --git a/wqflask/wqflask/update_search_results.py b/wqflask/wqflask/update_search_results.py
index 68bea9d6..672f95b1 100644
--- a/wqflask/wqflask/update_search_results.py
+++ b/wqflask/wqflask/update_search_results.py
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, print_function, division
-
import json
from flask import Flask, g
diff --git a/wqflask/wqflask/user_login.py b/wqflask/wqflask/user_login.py
index 04672b45..10cb7319 100644
--- a/wqflask/wqflask/user_login.py
+++ b/wqflask/wqflask/user_login.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import os
import hashlib
import datetime
@@ -470,4 +468,4 @@ def register():
@app.errorhandler(401)
def unauthorized(error):
- return redirect(url_for('login'))
\ No newline at end of file
+ return redirect(url_for('login'))
diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py
index 3c41e2b8..24191a15 100644
--- a/wqflask/wqflask/user_manager.py
+++ b/wqflask/wqflask/user_manager.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import os
import hashlib
import datetime
diff --git a/wqflask/wqflask/user_session.py b/wqflask/wqflask/user_session.py
index 71c31c57..c1f38396 100644
--- a/wqflask/wqflask/user_session.py
+++ b/wqflask/wqflask/user_session.py
@@ -1,5 +1,3 @@
-from __future__ import print_function, division, absolute_import
-
import datetime
import time
import uuid
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index 83d5202e..b0489e64 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -2,8 +2,6 @@
#
# Main routing table for GN2
-from __future__ import absolute_import, division, print_function
-
import traceback # for error page
import os # for error gifs
import random # for random error gif
--
cgit v1.2.3
From 357ca458695fbc60c97de3d1cdf89034a8722bc5 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 27 Aug 2020 01:18:11 +0300
Subject: Replace "string.split" & "string.join" with python's inbuilt methods
---
scripts/maintenance/readProbeSetMean_v7.py | 20 ++++++++++----------
scripts/maintenance/readProbeSetSE_v7.py | 14 +++++++-------
wqflask/base/data_set.py | 2 +-
wqflask/base/trait.py | 14 +++++++-------
wqflask/utility/webqtlUtil.py | 4 ++--
wqflask/wqflask/external_tools/send_to_geneweaver.py | 2 +-
wqflask/wqflask/external_tools/send_to_webgestalt.py | 2 +-
wqflask/wqflask/interval_analyst/GeneUtil.py | 4 ++--
.../marker_regression/display_mapping_results.py | 2 +-
wqflask/wqflask/marker_regression/plink_mapping.py | 6 +++---
wqflask/wqflask/show_trait/show_trait.py | 4 ++--
wqflask/wqflask/snp_browser/snp_browser.py | 12 ++++++------
12 files changed, 43 insertions(+), 43 deletions(-)
(limited to 'wqflask/base')
diff --git a/scripts/maintenance/readProbeSetMean_v7.py b/scripts/maintenance/readProbeSetMean_v7.py
index a540796a..43f084f4 100755
--- a/scripts/maintenance/readProbeSetMean_v7.py
+++ b/scripts/maintenance/readProbeSetMean_v7.py
@@ -60,15 +60,15 @@ print('Checking if each line have same number of members')
GeneList = []
isCont = 1
header = fp.readline()
-header = string.split(string.strip(header), '\t')
-header = list(map(string.strip, header))
+header = header.strip().split('\t')
+header = [x.strip() for x in header]
nfield = len(header)
line = fp.readline()
kj = 0
while line:
- line2 = string.split(string.strip(line), '\t')
- line2 = list(map(string.strip, line2))
+ line2 = line.strip().split('\t')
+ line2 = [x.strip() for x in line2]
if len(line2) != nfield:
print(("Error : " + line))
isCont = 0
@@ -98,8 +98,8 @@ print('Checking if each strain exist in database')
isCont = 1
fp.seek(0)
header = fp.readline()
-header = string.split(string.strip(header), '\t')
-header = list(map(string.strip, header))
+header = header.strip().split('\t')
+header = [x.strip() for x in header]
header = list(map(translateAlias, header))
header = header[dataStart:]
Ids = []
@@ -126,8 +126,8 @@ print('Check if each ProbeSet exist in database')
##---- find PID is name or target ----##
line = fp.readline()
line = fp.readline()
-line2 = string.split(string.strip(line), '\t')
-line2 = list(map(string.strip, line2))
+line2 = line.strip().split('\t')
+line2 = [x.strip() for x in line2]
PId = line2[0]
db.execute('select Id from ProbeSet where Name="%s" and ChipId=%d' %
@@ -222,8 +222,8 @@ kj = 0
values1 = []
values2 = []
while line:
- line2 = string.split(string.strip(line), '\t')
- line2 = list(map(string.strip, line2))
+ line2 = line.strip().split('\t')
+ line2 = [x.strip() for x in line2]
PId = line2[0]
recordId = NameIds[PId]
diff --git a/scripts/maintenance/readProbeSetSE_v7.py b/scripts/maintenance/readProbeSetSE_v7.py
index 20a846a4..edd9e7b0 100755
--- a/scripts/maintenance/readProbeSetSE_v7.py
+++ b/scripts/maintenance/readProbeSetSE_v7.py
@@ -71,14 +71,14 @@ print('Checking if each line have same number of members')
GeneList = []
isCont = 1
header = fp.readline()
-header = string.split(string.strip(header), '\t')
+header = header.strip().split('\t')
header = list(map(string.strip, header))
nfield = len(header)
line = fp.readline()
kj = 0
while line:
- line2 = string.split(string.strip(line), '\t')
+ line2 = line.strip().split('\t')
line2 = list(map(string.strip, line2))
if len(line2) != nfield:
isCont = 0
@@ -109,7 +109,7 @@ print('Checking if each strain exist in database')
isCont = 1
fp.seek(0)
header = fp.readline()
-header = string.split(string.strip(header), '\t')
+header = header.strip().split('\t')
header = list(map(string.strip, header))
header = list(map(translateAlias, header))
header = header[dataStart:]
@@ -137,8 +137,8 @@ print('Check if each ProbeSet exist in database')
##---- find PID is name or target ----##
line = fp.readline()
line = fp.readline()
-line2 = string.split(string.strip(line), '\t')
-line2 = list(map(string.strip, line2))
+line2 = line.strip().split('\t')
+line2 = [x.strip() for x in line2]
PId = line2[0]
db.execute('select Id from ProbeSet where Name="%s" and ChipId=%d' %
@@ -217,8 +217,8 @@ line = fp.readline()
kj = 0
while line:
- line2 = string.split(string.strip(line), '\t')
- line2 = list(map(string.strip, line2))
+ line2 = line.strip().split('\t')
+ line2 = [x.strip() for x in line2]
CellId = line2[0]
if CellId not in ProbeNameId:
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 8ac7a279..ce017fb4 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -697,7 +697,7 @@ class DataSet(object):
else:
query = "SELECT {}.Name,".format(escape(dataset_type))
data_start_pos = 1
- query += string.join(temp, ', ')
+ query += ', '.join(temp)
query += ' FROM ({}, {}XRef, {}Freeze) '.format(*mescape(dataset_type,
self.type,
self.type))
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index b20efd2a..2fd5d725 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -150,8 +150,8 @@ class GeneralTrait(object):
alias = 'Not available'
if getattr(self, "alias", None):
- alias = string.replace(self.alias, ";", " ")
- alias = string.join(string.split(alias), ", ")
+ alias = self.alias.replace(";", " ")
+ alias = ", ".join(alias.split())
return alias
@@ -437,7 +437,7 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
#XZ, 05/08/2009: We also should use Geno.Id to find marker instead of just using Geno.Name
# to avoid the problem of same marker name from different species.
elif dataset.type == 'Geno':
- display_fields_string = string.join(dataset.display_fields, ',Geno.')
+ display_fields_string = ',Geno.'.join(dataset.display_fields)
display_fields_string = 'Geno.' + display_fields_string
query = """
SELECT %s
@@ -456,8 +456,8 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
query = """SELECT %s FROM %s WHERE Name = %s"""
logger.sql(query)
trait_info = g.db.execute(query,
- (string.join(dataset.display_fields, ','),
- dataset.type, trait.name)).fetchone()
+ ','.join(dataset.display_fields),
+ dataset.type, trait.name).fetchone()
if trait_info:
trait.haveinfo = True
@@ -501,8 +501,8 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.pubmed_link = webqtlConfig.PUBMEDLINK_URL % trait.pubmed_id
if dataset.type == 'ProbeSet' and dataset.group:
- description_string = str(str(trait.description).strip(codecs.BOM_UTF8), 'utf-8')
- target_string = str(str(trait.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8')
+ description_string = trait.description
+ target_string = trait.probe_target_description
if len(description_string) > 1 and description_string != 'None':
description_display = description_string
diff --git a/wqflask/utility/webqtlUtil.py b/wqflask/utility/webqtlUtil.py
index d4979011..5681fadf 100644
--- a/wqflask/utility/webqtlUtil.py
+++ b/wqflask/utility/webqtlUtil.py
@@ -107,7 +107,7 @@ def hasAccessToConfidentialPhenotypeTrait(privilege, userName, authorized_users)
if webqtlConfig.USERDICT[privilege] > webqtlConfig.USERDICT['user']:
access_to_confidential_phenotype_trait = 1
else:
- AuthorizedUsersList=list(map(string.strip, string.split(authorized_users, ',')))
- if AuthorizedUsersList.__contains__(userName):
+ AuthorizedUsersList=[x.strip() for x in authorized_users.split(',')]
+ if userName in AuthorizedUsersList:
access_to_confidential_phenotype_trait = 1
return access_to_confidential_phenotype_trait
diff --git a/wqflask/wqflask/external_tools/send_to_geneweaver.py b/wqflask/wqflask/external_tools/send_to_geneweaver.py
index 93164233..4c958a88 100644
--- a/wqflask/wqflask/external_tools/send_to_geneweaver.py
+++ b/wqflask/wqflask/external_tools/send_to_geneweaver.py
@@ -55,7 +55,7 @@ class SendToGeneWeaver(object):
'client': "genenetwork",
'species': species_name,
'idtype': self.chip_name,
- 'list': string.join(trait_name_list, ","),
+ 'list': ",".join(trait_name_list),
}
def get_trait_name_list(trait_list):
diff --git a/wqflask/wqflask/external_tools/send_to_webgestalt.py b/wqflask/wqflask/external_tools/send_to_webgestalt.py
index b255ba95..2f068792 100644
--- a/wqflask/wqflask/external_tools/send_to_webgestalt.py
+++ b/wqflask/wqflask/external_tools/send_to_webgestalt.py
@@ -47,7 +47,7 @@ class SendToWebGestalt(object):
id_type = "entrezgene"
self.hidden_vars = {
- 'gene_list' : string.join(gene_id_list, "\n"),
+ 'gene_list' : "\n".join(gene_id_list),
'id_type' : "entrezgene",
'ref_set' : "genome",
'enriched_database_category' : "geneontology",
diff --git a/wqflask/wqflask/interval_analyst/GeneUtil.py b/wqflask/wqflask/interval_analyst/GeneUtil.py
index 17c8ccbf..d0dd7aea 100644
--- a/wqflask/wqflask/interval_analyst/GeneUtil.py
+++ b/wqflask/wqflask/interval_analyst/GeneUtil.py
@@ -31,7 +31,7 @@ def loadGenes(chrName, diffCol, startMb, endMb, species='mouse'):
Chromosome = '%s' AND
((TxStart > %f and TxStart <= %f) OR (TxEnd > %f and TxEnd <= %f))
ORDER BY txStart
- """ % (string.join(fetchFields, ", "),
+ """ % (", ".join(fetchFields),
speciesId, chrName,
startMb, endMb,
startMb, endMb)).fetchall()
@@ -66,7 +66,7 @@ def loadGenes(chrName, diffCol, startMb, endMb, species='mouse'):
othSpec, othSpecId = item
newdict2 = {}
- resultsOther = g.db.execute("SELECT %s FROM GeneList WHERE SpeciesId = %d AND geneSymbol= '%s' LIMIT 1" % (string.join(fetchFields, ", "),
+ resultsOther = g.db.execute("SELECT %s FROM GeneList WHERE SpeciesId = %d AND geneSymbol= '%s' LIMIT 1" % (", ".join(fetchFields),
othSpecId,
newdict["GeneSymbol"])).fetchone()
diff --git a/wqflask/wqflask/marker_regression/display_mapping_results.py b/wqflask/wqflask/marker_regression/display_mapping_results.py
index ccdafa14..dfaa1562 100644
--- a/wqflask/wqflask/marker_regression/display_mapping_results.py
+++ b/wqflask/wqflask/marker_regression/display_mapping_results.py
@@ -454,7 +454,7 @@ class DisplayMappingResults(object):
Chr_Length.Name in (%s)
Order by
Chr_Length.OrderId
- """ % (self.dataset.group.name, string.join(["'%s'" % X[0] for X in self.ChrList[1:]], ", ")))
+ """ % (self.dataset.group.name, ", ".join(["'%s'" % X[0] for X in self.ChrList[1:]])))
self.ChrLengthMbList = [x[0]/1000000.0 for x in self.ChrLengthMbList]
self.ChrLengthMbSum = reduce(lambda x, y:x+y, self.ChrLengthMbList, 0.0)
diff --git a/wqflask/wqflask/marker_regression/plink_mapping.py b/wqflask/wqflask/marker_regression/plink_mapping.py
index 2f282adc..6c38c34f 100644
--- a/wqflask/wqflask/marker_regression/plink_mapping.py
+++ b/wqflask/wqflask/marker_regression/plink_mapping.py
@@ -83,7 +83,7 @@ def get_samples_from_ped_file(dataset):
sample_list=[]
while line:
- lineList = string.split(string.strip(line), '\t')
+ lineList = line.strip().split('\t')
lineList = list(map(string.strip, lineList))
sample_name = lineList[0]
@@ -155,8 +155,8 @@ def parse_plink_output(output_filename, species):
# output: lineList list
#######################################################
def build_line_list(line=None):
- line_list = string.split(string.strip(line), ' ')# irregular number of whitespaces between columns
+ line_list = line.strip().split(' ')# irregular number of whitespaces between columns
line_list = [item for item in line_list if item !='']
line_list = list(map(string.strip, line_list))
- return line_list
\ No newline at end of file
+ return line_list
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index e93b0289..88cd7dca 100644
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -229,8 +229,8 @@ class ShowTrait(object):
hddn = OrderedDict()
if self.dataset.group.allsamples:
- hddn['allsamples'] = string.join(self.dataset.group.allsamples, ' ')
- hddn['primary_samples'] = string.join(self.primary_sample_names, ',')
+ hddn['allsamples'] = ''.join(self.dataset.group.allsamples)
+ hddn['primary_samples'] = ''.join(self.primary_sample_names)
hddn['trait_id'] = self.trait_id
hddn['trait_display_name'] = self.this_trait.display_name
hddn['dataset'] = self.dataset.name
diff --git a/wqflask/wqflask/snp_browser/snp_browser.py b/wqflask/wqflask/snp_browser/snp_browser.py
index 0db7e1fe..2df71b12 100644
--- a/wqflask/wqflask/snp_browser/snp_browser.py
+++ b/wqflask/wqflask/snp_browser/snp_browser.py
@@ -456,7 +456,7 @@ class SnpBrowser(object):
function_list = []
if function_details:
- function_list = string.split(string.strip(function_details), ",")
+ function_list = function_details.strip().split(",")
function_list = list(map(string.strip, function_list))
function_list[0] = function_list[0].title()
function_details = ", ".join(item for item in function_list)
@@ -722,11 +722,11 @@ def get_effect_details_by_category(effect_name = None, effect_value = None):
new_codon_group_list = ['Start Gained']
codon_effect_group_list = ['Start Lost', 'Stop Gained', 'Stop Lost', 'Nonsynonymous', 'Synonymous']
- effect_detail_list = string.split(string.strip(effect_value), '|')
+ effect_detail_list = effect_value.strip().split('|')
effect_detail_list = list(map(string.strip, effect_detail_list))
for index, item in enumerate(effect_detail_list):
- item_list = string.split(string.strip(item), ',')
+ item_list = item.strip().split(',')
item_list = list(map(string.strip, item_list))
gene_id = item_list[0]
@@ -746,13 +746,13 @@ def get_effect_details_by_category(effect_name = None, effect_value = None):
if effect_name in new_codon_group_list:
new_codon = item_list[6]
tmp_list = [biotype, new_codon]
- function_detail_list.append(string.join(tmp_list, ", "))
+ function_detail_list.append(", ".join(tmp_list))
elif effect_name in codon_effect_group_list:
old_new_AA = item_list[6]
old_new_codon = item_list[7]
codon_num = item_list[8]
tmp_list = [biotype, old_new_AA, old_new_codon, codon_num]
- function_detail_list.append(string.join(tmp_list, ", "))
+ function_detail_list.append(", ".join(tmp_list))
else:
function_detail_list.append(biotype)
@@ -852,7 +852,7 @@ def get_gene_id_name_dict(species_id, gene_name_list):
if len(gene_name_list) == 0:
return ""
gene_name_str_list = ["'" + gene_name + "'" for gene_name in gene_name_list]
- gene_name_str = string.join(gene_name_str_list, ",")
+ gene_name_str = ",".join(gene_name_str_list)
query = """
SELECT
--
cgit v1.2.3
From 958972339e6c244ebedaf494bf43ca1eecabe6c4 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 27 Aug 2020 01:22:14 +0300
Subject: Remove unused imports
---
wqflask/base/mrna_assay_tissue_data.py | 1 -
wqflask/base/species.py | 5 -----
wqflask/runserver.py | 9 ---------
wqflask/wqflask/correlation_matrix/show_corr_matrix.py | 4 ----
wqflask/wqflask/do_search.py | 2 +-
wqflask/wqflask/network_graph/network_graph.py | 5 -----
6 files changed, 1 insertion(+), 25 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/mrna_assay_tissue_data.py b/wqflask/base/mrna_assay_tissue_data.py
index 33ce12bd..12f18f71 100644
--- a/wqflask/base/mrna_assay_tissue_data.py
+++ b/wqflask/base/mrna_assay_tissue_data.py
@@ -7,7 +7,6 @@ from utility import Bunch
from MySQLdb import escape_string as escape
-from pprint import pformat as pf
from utility.logger import getLogger
logger = getLogger(__name__ )
diff --git a/wqflask/base/species.py b/wqflask/base/species.py
index e3f1bc4a..2771d116 100644
--- a/wqflask/base/species.py
+++ b/wqflask/base/species.py
@@ -2,11 +2,6 @@ import collections
from flask import Flask, g
-#from MySQLdb import escape_string as escape
-
-from utility import Bunch
-
-from pprint import pformat as pf
from utility.logger import getLogger
logger = getLogger(__name__ )
diff --git a/wqflask/runserver.py b/wqflask/runserver.py
index 15572d97..58d79589 100644
--- a/wqflask/runserver.py
+++ b/wqflask/runserver.py
@@ -11,25 +11,16 @@ from wqflask import app
import logging
-import utility.logger
-logger = utility.logger.getLogger(__name__ )
-
-import signal
-signal.signal(signal.SIGPIPE, signal.SIG_DFL)
BLUE = '\033[94m'
GREEN = '\033[92m'
BOLD = '\033[1m'
ENDC = '\033[0m'
-from utility.startup_config import app_config
-
app_config()
werkzeug_logger = logging.getLogger('werkzeug')
-from utility.tools import WEBSERVER_MODE, SERVER_PORT
-
if WEBSERVER_MODE == 'DEBUG':
app.run(host='0.0.0.0',
port=SERVER_PORT,
diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
index 7b4bda31..dac4037e 100644
--- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
+++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
@@ -47,10 +47,6 @@ import utility.webqtlUtil #this is for parallel computing only.
from wqflask.correlation import correlation_functions
from utility.benchmark import Bench
-from MySQLdb import escape_string as escape
-
-from pprint import pformat as pf
-
from flask import Flask, g, url_for
import utility.logger
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index de8e1e78..7e71f7d7 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -8,7 +8,6 @@ from MySQLdb import escape_string as escape
from pprint import pformat as pf
import sys
-# sys.path.append("..") Never in a running webserver
from db import webqtlDatabaseFunction
from utility.tools import GN2_BASE_URL
@@ -17,6 +16,7 @@ import logging
from utility.logger import getLogger
logger = getLogger(__name__)
+
class DoSearch(object):
"""Parent class containing parameters/functions used for all searches"""
diff --git a/wqflask/wqflask/network_graph/network_graph.py b/wqflask/wqflask/network_graph/network_graph.py
index 70e5dd58..cfefe4ec 100644
--- a/wqflask/wqflask/network_graph/network_graph.py
+++ b/wqflask/wqflask/network_graph/network_graph.py
@@ -31,11 +31,6 @@ from utility.tools import GN2_BRANCH_URL
from db import webqtlDatabaseFunction
import utility.webqtlUtil #this is for parallel computing only.
from wqflask.correlation import correlation_functions
-from utility.benchmark import Bench
-
-from MySQLdb import escape_string as escape
-
-from pprint import pformat as pf
from flask import Flask, g
--
cgit v1.2.3
From 5992562296aabdd51bc3575f36d16d1c245d9d1f Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 27 Aug 2020 01:26:20 +0300
Subject: Remove redundant methods which are defined elsewhere
* wqflask/base/data_set.py: Delete "create_in_clause", and "mescape" which are
defined in "utility.db_tools"
---
wqflask/base/data_set.py | 18 +++---------------
1 file changed, 3 insertions(+), 15 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index ce017fb4..07704e4c 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -23,7 +23,9 @@ from utility.logger import getLogger
from utility.tools import USE_GN_SERVER, USE_REDIS, flat_files, flat_file_exists, GN2_BASE_URL
from db.gn_server import menu_main
from pprint import pformat as pf
-from MySQLdb import escape_string as escape
+from utility.db_tools import escape
+from utility.db_tools import mescape
+from utility.db_tools import create_in_clause
from maintenance import get_group_samplelists
from utility.tools import locate, locate_ignore_error, flat_files
from utility import gen_geno_ob
@@ -204,20 +206,6 @@ def create_datasets_list():
return datasets
-def create_in_clause(items):
- """Create an in clause for mysql"""
- in_clause = ', '.join("'{}'".format(x) for x in mescape(*items))
- in_clause = '( {} )'.format(in_clause)
- return in_clause
-
-
-def mescape(*items):
- """Multiple escape"""
- escaped = [escape(str(item)) for item in items]
- #logger.debug("escaped is:", escaped)
- return escaped
-
-
class Markers(object):
"""Todo: Build in cacheing so it saves us reading the same file more than once"""
--
cgit v1.2.3
From 2697301045266b40f571eeb2f9c7d8eb220552b4 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 27 Aug 2020 01:28:08 +0300
Subject: Replace mysqldb's "escape" with the one from utils.db_tools
Mysqldb's escape returns a binary string. Use utils.db_tools which adds an extra
step of converting the binary string to a string.
---
wqflask/base/mrna_assay_tissue_data.py | 2 +-
wqflask/base/trait.py | 2 +-
wqflask/wqflask/api/correlation.py | 2 +-
wqflask/wqflask/correlation/show_corr_results.py | 2 +-
wqflask/wqflask/do_search.py | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/mrna_assay_tissue_data.py b/wqflask/base/mrna_assay_tissue_data.py
index 12f18f71..f1929518 100644
--- a/wqflask/base/mrna_assay_tissue_data.py
+++ b/wqflask/base/mrna_assay_tissue_data.py
@@ -5,7 +5,7 @@ from flask import g
from utility import db_tools
from utility import Bunch
-from MySQLdb import escape_string as escape
+from utility.db_tools import escape
from utility.logger import getLogger
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 2fd5d725..e3507ae1 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -19,7 +19,7 @@ Redis = get_redis_conn()
from wqflask import app
import simplejson as json
-from MySQLdb import escape_string as escape
+from utility.db_tools import escape
from pprint import pformat as pf
from flask import Flask, g, request, url_for, redirect, make_response, render_template
diff --git a/wqflask/wqflask/api/correlation.py b/wqflask/wqflask/api/correlation.py
index 7da13121..f5b50dcd 100644
--- a/wqflask/wqflask/api/correlation.py
+++ b/wqflask/wqflask/api/correlation.py
@@ -2,7 +2,7 @@ import collections
import scipy
-from MySQLdb import escape_string as escape
+from utility.db_tools import escape
from flask import g
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index e5b87c6a..91146e5b 100644
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -35,7 +35,7 @@ from wqflask.correlation import correlation_functions
from utility.benchmark import Bench
import utility.webqtlUtil
from utility.type_checking import is_str, get_float, get_int, get_string
-from MySQLdb import escape_string as escape
+from utility.db_tools import escape
from flask import Flask, g
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index 7e71f7d7..00636563 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -4,7 +4,7 @@ import json
from flask import Flask, g
-from MySQLdb import escape_string as escape
+from utility.db_tools import escape
from pprint import pformat as pf
import sys
--
cgit v1.2.3
From 1e030b2543c22a8148f39657b5921724d9512d40 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 27 Aug 2020 03:22:06 +0300
Subject: Remove python2 string processing to utf-8
* wqflask/base/trait.py: Remove python2 codecs.BOM_UTF8 methods.
* wqflask/wqflask/search_results.py: Remove utf-8 decode method on string.
---
wqflask/base/trait.py | 4 ----
wqflask/wqflask/search_results.py | 2 +-
2 files changed, 1 insertion(+), 5 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index e3507ae1..6950cf11 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -488,10 +488,6 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
else:
trait.description_display = ""
- trait.abbreviation = str(str(trait.abbreviation).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
- trait.description_display = str(str(trait.description_display).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
- trait.authors = str(str(trait.authors).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
-
if not trait.year.isdigit():
trait.pubmed_text = "N/A"
else:
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index f6c677a8..0de14f15 100644
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -115,7 +115,7 @@ views.py).
trait_dict['hmac'] = hmac.data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name))
if this_trait.dataset.type == "ProbeSet":
trait_dict['symbol'] = this_trait.symbol
- trait_dict['description'] = this_trait.description_display.decode('utf-8', 'replace')
+ trait_dict['description'] = this_trait.description_display
trait_dict['location'] = this_trait.location_repr
trait_dict['mean'] = "N/A"
trait_dict['additive'] = "N/A"
--
cgit v1.2.3
From f4a8789a5f28e1527d4c801b40176f47aa44146c Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 17 Sep 2020 17:16:28 +0300
Subject: Apply pep8
* wqflask/base/trait.py: Apply pep8.
* wqflask/utility/authentication_tools.py: Ditto.
---
wqflask/base/trait.py | 192 +++++++++++++++++++-------------
wqflask/utility/authentication_tools.py | 32 ++++--
2 files changed, 134 insertions(+), 90 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 6950cf11..548ccc4c 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -1,36 +1,30 @@
-import os
-import string
-import resource
-import codecs
import requests
-import random
+import simplejson as json
+from wqflask import app
from base import webqtlConfig
from base.webqtlCaseData import webqtlCaseData
from base.data_set import create_dataset
-from db import webqtlDatabaseFunction
-from utility import webqtlUtil
from utility import hmac
from utility.authentication_tools import check_resource_availability
-from utility.tools import GN2_BASE_URL, GN_VERSION
-from utility.redis_tools import get_redis_conn, get_resource_id, get_resource_info
-Redis = get_redis_conn()
+from utility.tools import GN2_BASE_URL
+from utility.redis_tools import get_redis_conn, get_resource_id
-from wqflask import app
-
-import simplejson as json
from utility.db_tools import escape
-from pprint import pformat as pf
-from flask import Flask, g, request, url_for, redirect, make_response, render_template
+from flask import g, request, url_for
from utility.logger import getLogger
-logger = getLogger(__name__ )
+
+logger = getLogger(__name__)
+
+Redis = get_redis_conn()
+
def create_trait(**kw):
- assert bool(kw.get('dataset')) != bool(kw.get('dataset_name')), "Needs dataset ob. or name";
+ assert bool(kw.get('dataset')) != bool(
+ kw.get('dataset_name')), "Needs dataset ob. or name"
- permitted = True
if kw.get('name'):
if kw.get('dataset_name'):
if kw.get('dataset_name') != "Temp":
@@ -40,18 +34,23 @@ def create_trait(**kw):
if kw.get('dataset_name') != "Temp":
if dataset.type == 'Publish':
- permissions = check_resource_availability(dataset, kw.get('name'))
+ permissions = check_resource_availability(
+ dataset, kw.get('name'))
else:
permissions = check_resource_availability(dataset)
if "view" in permissions['data']:
the_trait = GeneralTrait(**kw)
if the_trait.dataset.type != "Temp":
- the_trait = retrieve_trait_info(the_trait, the_trait.dataset, get_qtl_info=kw.get('get_qtl_info'))
+ the_trait = retrieve_trait_info(
+ the_trait,
+ the_trait.dataset,
+ get_qtl_info=kw.get('get_qtl_info'))
return the_trait
else:
return None
+
class GeneralTrait(object):
"""
Trait class defines a trait in webqtl, can be either Microarray,
@@ -61,12 +60,17 @@ class GeneralTrait(object):
def __init__(self, get_qtl_info=False, get_sample_info=True, **kw):
# xor assertion
- assert bool(kw.get('dataset')) != bool(kw.get('dataset_name')), "Needs dataset ob. or name";
- self.name = kw.get('name') # Trait ID, ProbeSet ID, Published ID, etc.
+ assert bool(kw.get('dataset')) != bool(
+ kw.get('dataset_name')), "Needs dataset ob. or name"
+ # Trait ID, ProbeSet ID, Published ID, etc.
+ self.name = kw.get('name')
if kw.get('dataset_name'):
if kw.get('dataset_name') == "Temp":
temp_group = self.name.split("_")[2]
- self.dataset = create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = temp_group)
+ self.dataset = create_dataset(
+ dataset_name="Temp",
+ dataset_type="Temp",
+ group_name=temp_group)
else:
self.dataset = create_dataset(kw.get('dataset_name'))
else:
@@ -74,7 +78,8 @@ class GeneralTrait(object):
self.cellid = kw.get('cellid')
self.identification = kw.get('identification', 'un-named trait')
self.haveinfo = kw.get('haveinfo', False)
- self.sequence = kw.get('sequence') # Blat sequence, available for ProbeSet
+ # Blat sequence, available for ProbeSet
+ self.sequence = kw.get('sequence')
self.data = kw.get('data', {})
self.view = True
@@ -100,9 +105,10 @@ class GeneralTrait(object):
elif len(name2) == 3:
self.dataset, self.name, self.cellid = name2
- # Todo: These two lines are necessary most of the time, but perhaps not all of the time
- # So we could add a simple if statement to short-circuit this if necessary
- if get_sample_info != False:
+ # Todo: These two lines are necessary most of the time, but
+ # perhaps not all of the time So we could add a simple if
+ # statement to short-circuit this if necessary
+ if get_sample_info is not False:
self = retrieve_sample_data(self, self.dataset)
def export_informative(self, include_variance=0):
@@ -116,13 +122,13 @@ class GeneralTrait(object):
the_vars = []
sample_aliases = []
for sample_name, sample_data in list(self.data.items()):
- if sample_data.value != None:
- if not include_variance or sample_data.variance != None:
+ if sample_data.value is not None:
+ if not include_variance or sample_data.variance is not None:
samples.append(sample_name)
vals.append(sample_data.value)
the_vars.append(sample_data.variance)
sample_aliases.append(sample_data.name2)
- return samples, vals, the_vars, sample_aliases
+ return samples, vals, the_vars, sample_aliases
@property
def description_fmt(self):
@@ -161,12 +167,17 @@ class GeneralTrait(object):
alias = 'Not available'
if self.symbol:
- human_response = requests.get(GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.upper())
- mouse_response = requests.get(GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.capitalize())
- other_response = requests.get(GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.lower())
+ human_response = requests.get(
+ GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.upper())
+ mouse_response = requests.get(
+ GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.capitalize())
+ other_response = requests.get(
+ GN2_BASE_URL + "gn3/gene/aliases/" + self.symbol.lower())
if human_response and mouse_response and other_response:
- alias_list = json.loads(human_response.content) + json.loads(mouse_response.content) + json.loads(other_response.content)
+ alias_list = json.loads(human_response.content) + json.loads(
+ mouse_response.content) + \
+ json.loads(other_response.content)
filtered_aliases = []
seen = set()
@@ -180,33 +191,34 @@ class GeneralTrait(object):
return alias
-
@property
def location_fmt(self):
'''Return a text formatted location
- While we're at it we set self.location in case we need it later (do we?)
+ While we're at it we set self.location in case we need it
+ later (do we?)
'''
if self.chr and self.mb:
- self.location = 'Chr %s @ %s Mb' % (self.chr, self.mb)
+ self.location = 'Chr %s @ %s Mb' % (self.chr, self.mb)
elif self.chr:
self.location = 'Chr %s @ Unknown position' % (self.chr)
else:
self.location = 'Not available'
fmt = self.location
- ##XZ: deal with direction
+ # XZ: deal with direction
if self.strand_probe == '+':
fmt += (' on the plus strand ')
elif self.strand_probe == '-':
fmt += (' on the minus strand ')
return fmt
-
+
+
def retrieve_sample_data(trait, dataset, samplelist=None):
- if samplelist == None:
+ if samplelist is None:
samplelist = []
if dataset.type == "Temp":
@@ -222,16 +234,19 @@ def retrieve_sample_data(trait, dataset, samplelist=None):
all_samples_ordered = dataset.group.all_samples_ordered()
for i, item in enumerate(results):
try:
- trait.data[all_samples_ordered[i]] = webqtlCaseData(all_samples_ordered[i], float(item))
+ trait.data[all_samples_ordered[i]] = webqtlCaseData(
+ all_samples_ordered[i], float(item))
except:
pass
else:
for item in results:
name, value, variance, num_cases, name2 = item
if not samplelist or (samplelist and name in samplelist):
- trait.data[name] = webqtlCaseData(*item) #name, value, variance, num_cases)
+ # name, value, variance, num_cases)
+ trait.data[name] = webqtlCaseData(*item)
return trait
+
@app.route("/trait/get_sample_data")
def get_sample_data():
params = request.args
@@ -247,7 +262,8 @@ def get_sample_data():
trait_dict['group'] = trait_ob.dataset.group.name
trait_dict['tissue'] = trait_ob.dataset.tissue
trait_dict['species'] = trait_ob.dataset.group.species
- trait_dict['url'] = url_for('show_trait_page', trait_id = trait, dataset = dataset)
+ trait_dict['url'] = url_for(
+ 'show_trait_page', trait_id=trait, dataset=dataset)
trait_dict['description'] = trait_ob.description_display
if trait_ob.dataset.type == "ProbeSet":
trait_dict['symbol'] = trait_ob.symbol
@@ -257,22 +273,27 @@ def get_sample_data():
trait_dict['pubmed_link'] = trait_ob.pubmed_link
trait_dict['pubmed_text'] = trait_ob.pubmed_text
- return json.dumps([trait_dict, {key: value.value for key, value in list(trait_ob.data.items()) }])
+ return json.dumps([trait_dict, {key: value.value for
+ key, value in list(
+ trait_ob.data.items())}])
else:
return None
-
+
+
def jsonable(trait):
"""Return a dict suitable for using as json
Actual turning into json doesn't happen here though"""
- dataset = create_dataset(dataset_name = trait.dataset.name, dataset_type = trait.dataset.type, group_name = trait.dataset.group.name)
-
+ dataset = create_dataset(dataset_name=trait.dataset.name,
+ dataset_type=trait.dataset.type,
+ group_name=trait.dataset.group.name)
+
if dataset.type == "ProbeSet":
return dict(name=trait.name,
symbol=trait.symbol,
dataset=dataset.name,
- dataset_name = dataset.shortname,
+ dataset_name=dataset.shortname,
description=trait.description_display,
mean=trait.mean,
location=trait.location_repr,
@@ -284,7 +305,7 @@ def jsonable(trait):
if trait.pubmed_id:
return dict(name=trait.name,
dataset=dataset.name,
- dataset_name = dataset.shortname,
+ dataset_name=dataset.shortname,
description=trait.description_display,
abbreviation=trait.abbreviation,
authors=trait.authors,
@@ -297,7 +318,7 @@ def jsonable(trait):
else:
return dict(name=trait.name,
dataset=dataset.name,
- dataset_name = dataset.shortname,
+ dataset_name=dataset.shortname,
description=trait.description_display,
abbreviation=trait.abbreviation,
authors=trait.authors,
@@ -309,19 +330,20 @@ def jsonable(trait):
elif dataset.type == "Geno":
return dict(name=trait.name,
dataset=dataset.name,
- dataset_name = dataset.shortname,
+ dataset_name=dataset.shortname,
location=trait.location_repr
)
else:
return dict()
+
def jsonable_table_row(trait, dataset_name, index):
"""Return a list suitable for json and intended to be displayed in a table
Actual turning into json doesn't happen here though"""
dataset = create_dataset(dataset_name)
-
+
if dataset.type == "ProbeSet":
if trait.mean == "":
mean = "N/A"
@@ -333,11 +355,13 @@ def jsonable_table_row(trait, dataset_name, index):
additive = "%.3f" % round(float(trait.additive), 2)
return ['',
index,
- ''+str(trait.name)+'',
+ ''+str(trait.name)+'',
trait.symbol,
trait.description_display,
trait.location_repr,
- mean,
+ mean,
trait.LRS_score_repr,
trait.LRS_location_repr,
additive]
@@ -349,7 +373,9 @@ def jsonable_table_row(trait, dataset_name, index):
if trait.pubmed_id:
return ['',
index,
- ''+str(trait.name)+'',
+ ''+str(trait.name)+'',
trait.description_display,
trait.authors,
'' + trait.pubmed_text + '',
@@ -359,7 +385,9 @@ def jsonable_table_row(trait, dataset_name, index):
else:
return ['',
index,
- ''+str(trait.name)+'',
+ ''+str(trait.name)+'',
trait.description_display,
trait.authors,
trait.pubmed_text,
@@ -369,7 +397,9 @@ def jsonable_table_row(trait, dataset_name, index):
elif dataset.type == "Geno":
return ['',
index,
- ''+str(trait.name)+'',
+ ''+str(trait.name)+'',
trait.location_repr]
else:
return dict()
@@ -380,14 +410,16 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
resource_id = get_resource_id(dataset, trait.name)
if dataset.type == 'Publish':
- the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view".format(resource_id, g.user_session.user_id)
+ the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view".format(
+ resource_id, g.user_session.user_id)
else:
- the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view&trait={}".format(resource_id, g.user_session.user_id, trait.name)
+ the_url = "http://localhost:8080/run-action?resource={}&user={}&branch=data&action=view&trait={}".format(
+ resource_id, g.user_session.user_id, trait.name)
try:
response = requests.get(the_url).content
trait_info = json.loads(response)
- except: #ZS: I'm assuming the trait is viewable if the try fails for some reason; it should never reach this point unless the user has privileges, since that's dealt with in create_trait
+ except: # ZS: I'm assuming the trait is viewable if the try fails for some reason; it should never reach this point unless the user has privileges, since that's dealt with in create_trait
if dataset.type == 'Publish':
query = """
SELECT
@@ -416,8 +448,8 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
logger.sql(query)
trait_info = g.db.execute(query).fetchone()
- #XZ, 05/08/2009: Xiaodong add this block to use ProbeSet.Id to find the probeset instead of just using ProbeSet.Name
- #XZ, 05/08/2009: to avoid the problem of same probeset name from different platforms.
+ # XZ, 05/08/2009: Xiaodong add this block to use ProbeSet.Id to find the probeset instead of just using ProbeSet.Name
+ # XZ, 05/08/2009: to avoid the problem of same probeset name from different platforms.
elif dataset.type == 'ProbeSet':
display_fields_string = ', ProbeSet.'.join(dataset.display_fields)
display_fields_string = 'ProbeSet.' + display_fields_string
@@ -430,11 +462,11 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
ProbeSetFreeze.Name = '%s' AND
ProbeSet.Name = '%s'
""" % (escape(display_fields_string),
- escape(dataset.name),
- escape(str(trait.name)))
+ escape(dataset.name),
+ escape(str(trait.name)))
logger.sql(query)
trait_info = g.db.execute(query).fetchone()
- #XZ, 05/08/2009: We also should use Geno.Id to find marker instead of just using Geno.Name
+ # XZ, 05/08/2009: We also should use Geno.Id to find marker instead of just using Geno.Name
# to avoid the problem of same marker name from different species.
elif dataset.type == 'Geno':
display_fields_string = ',Geno.'.join(dataset.display_fields)
@@ -448,11 +480,11 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
GenoFreeze.Name = '%s' AND
Geno.Name = '%s'
""" % (escape(display_fields_string),
- escape(dataset.name),
- escape(trait.name))
+ escape(dataset.name),
+ escape(trait.name))
logger.sql(query)
trait_info = g.db.execute(query).fetchone()
- else: #Temp type
+ else: # Temp type
query = """SELECT %s FROM %s WHERE Name = %s"""
logger.sql(query)
trait_info = g.db.execute(query,
@@ -462,7 +494,7 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
if trait_info:
trait.haveinfo = True
for i, field in enumerate(dataset.display_fields):
- holder = trait_info[i]
+ holder = trait_info[i]
setattr(trait, field, holder)
if dataset.type == 'Publish':
@@ -475,9 +507,9 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
description = trait.post_publication_description
- #If the dataset is confidential and the user has access to confidential
- #phenotype traits, then display the pre-publication description instead
- #of the post-publication description
+ # If the dataset is confidential and the user has access to confidential
+ # phenotype traits, then display the pre-publication description instead
+ # of the post-publication description
if trait.confidential:
trait.abbreviation = trait.pre_publication_abbreviation
trait.description_display = trait.pre_publication_description
@@ -514,15 +546,17 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.location_repr = 'N/A'
if trait.chr and trait.mb:
- trait.location_repr = 'Chr%s: %.6f' % (trait.chr, float(trait.mb))
+ trait.location_repr = 'Chr%s: %.6f' % (
+ trait.chr, float(trait.mb))
elif dataset.type == "Geno":
trait.location_repr = 'N/A'
if trait.chr and trait.mb:
- trait.location_repr = 'Chr%s: %.6f' % (trait.chr, float(trait.mb))
+ trait.location_repr = 'Chr%s: %.6f' % (
+ trait.chr, float(trait.mb))
if get_qtl_info:
- #LRS and its location
+ # LRS and its location
trait.LRS_score_repr = "N/A"
trait.LRS_location_repr = "N/A"
trait.locus = trait.locus_chr = trait.locus_mb = trait.lrs = trait.pvalue = trait.additive = ""
@@ -594,10 +628,12 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.locus = trait.lrs = trait.additive = ""
if (dataset.type == 'Publish' or dataset.type == "ProbeSet") and trait.locus_chr != "" and trait.locus_mb != "":
- trait.LRS_location_repr = LRS_location_repr = 'Chr%s: %.6f' % (trait.locus_chr, float(trait.locus_mb))
+ trait.LRS_location_repr = LRS_location_repr = 'Chr%s: %.6f' % (
+ trait.locus_chr, float(trait.locus_mb))
if trait.lrs != "":
trait.LRS_score_repr = LRS_score_repr = '%3.1f' % trait.lrs
else:
- raise KeyError(repr(trait.name)+' information is not found in the database.')
-
+ raise KeyError(repr(trait.name) +
+ ' information is not found in the database.')
+
return trait
diff --git a/wqflask/utility/authentication_tools.py b/wqflask/utility/authentication_tools.py
index 390ad75a..ce0c0749 100644
--- a/wqflask/utility/authentication_tools.py
+++ b/wqflask/utility/authentication_tools.py
@@ -1,30 +1,37 @@
import json
import requests
-from base import data_set, webqtlConfig
-
-from utility import hmac
-from utility.redis_tools import get_redis_conn, get_resource_info, get_resource_id, add_resource
-Redis = get_redis_conn()
+from flask import g
+from base import webqtlConfig
-logger = logging.getLogger(__name__)
+from utility.redis_tools import (get_redis_conn,
+ get_resource_info,
+ get_resource_id,
+ add_resource)
+Redis = get_redis_conn()
def check_resource_availability(dataset, trait_id=None):
-
# At least for now assume temporary entered traits are accessible
if type(dataset) == str or dataset.type == "Temp":
return webqtlConfig.DEFAULT_PRIVILEGES
resource_id = get_resource_id(dataset, trait_id)
- if resource_id: # ZS: This should never be false, but it's technically possible if a non-Temp dataset somehow had a type other than Publish/ProbeSet/Geno
+ # ZS: This should never be false, but it's technically possible if
+ # a non-Temp dataset somehow had a type other than
+ # Publish/ProbeSet/Geno
+ if resource_id:
resource_info = get_resource_info(resource_id)
- if not resource_info: # ZS: If resource isn't already in redis, add it with default privileges
+
+ # ZS: If resource isn't already in redis, add it with default
+ # privileges
+ if not resource_info:
resource_info = add_new_resource(dataset, trait_id)
- # ZS: Check if super-user - we should probably come up with some way to integrate this into the proxy
+ # ZS: Check if super-user - we should probably come up with some
+ # way to integrate this into the proxy
if g.user_session.user_id in Redis.smembers("super_users"):
return webqtlConfig.SUPER_PRIVILEGES
@@ -76,8 +83,9 @@ def add_new_resource(dataset, trait_id=None):
def get_group_code(dataset):
- results = g.db.execute("SELECT InbredSetCode from InbredSet where Name='{}'".format(
- dataset.group.name)).fetchone()
+ results = g.db.execute(
+ "SELECT InbredSetCode from InbredSet where Name='{}'".format(
+ dataset.group.name)).fetchone()
if results[0]:
return results[0]
else:
--
cgit v1.2.3
From bfb5fab5ac57934f7a6bd54938188fa0d2669ad7 Mon Sep 17 00:00:00 2001
From: BonfaceKilz
Date: Thu, 17 Sep 2020 21:16:28 +0300
Subject: Convert "target_string" to a str type
* wqflask/base/trait.py (retrieve_trait_info): Convert "target_string"
to a str, otherwise an exception will be thrown if it's None.
---
wqflask/base/trait.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
(limited to 'wqflask/base')
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index 548ccc4c..c37a8325 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -538,8 +538,8 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
description_display = trait.symbol
if (len(description_display) > 1 and description_display != 'N/A' and
- len(target_string) > 1 and target_string != 'None'):
- description_display = description_display + '; ' + target_string.strip()
+ len(str(target_string)) > 1 and target_string != 'None'):
+ description_display = description_display + '; ' + str(target_string).strip()
# Save it for the jinja2 template
trait.description_display = description_display
--
cgit v1.2.3
From f376eaca55643972943fc6d313a3ca00b32d66ae Mon Sep 17 00:00:00 2001
From: zsloan
Date: Fri, 18 Sep 2020 14:40:41 -0500
Subject: Made a bunch of changes to move trait page DataTables initialization
to a separate file (initialize_show_trait_tables.js). The biggest
complication was getting the order of attributes in the rows to sync with the
order of atribute namees in the column headers. Previously this logic was all
in the template. * wqflask/base/webqtlCaseData.py - added attribute
first_attr_col as a very awkward solution to passing the column position into
the column render function in situations where there are case attribute
columns (which can be variable in number) *
wqflask/wqflask/show_trait/show_trait.py - Replace "attribute_names" in
js_data with "attributes" (which allows the JS access to more information)
and also pass new se_exists and has_num_cases variables with js_data, so the
javascript has access to whether or not those columns exist in the table *
wqflask/wqflask/static/new/javascript/show_trait.js - Change case
attribute-related logic to use js_data.attributes instead of
js_data.attribute_names * wqflask/wqflask/templates/show_trait.html - Removed
table initialization from template *
wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js - new
file that initializes tables and reproduces what the template logic used to
do with JS logic
---
wqflask/base/webqtlCaseData.py | 11 +
wqflask/wqflask/show_trait/show_trait.py | 16 +-
.../new/javascript/initialize_show_trait_tables.js | 222 ++++++++++++++++
.../wqflask/static/new/javascript/show_trait.js | 24 +-
wqflask/wqflask/templates/show_trait.html | 284 +--------------------
5 files changed, 261 insertions(+), 296 deletions(-)
create mode 100644 wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js
(limited to 'wqflask/base')
diff --git a/wqflask/base/webqtlCaseData.py b/wqflask/base/webqtlCaseData.py
index 2844cedd..3cf2d80d 100644
--- a/wqflask/base/webqtlCaseData.py
+++ b/wqflask/base/webqtlCaseData.py
@@ -41,6 +41,8 @@ class webqtlCaseData:
self.this_id = None # Set a sane default (can't be just "id" cause that's a reserved word)
self.outlier = None # Not set to True/False until later
+ self.first_attr_col = self.get_first_attr_col()
+
def __repr__(self):
case_data_string = " "
if self.value is not None:
@@ -79,3 +81,12 @@ class webqtlCaseData:
if self.num_cases is not None:
return "%s" % self.num_cases
return "x"
+
+ def get_first_attr_col(self):
+ col_num = 4
+ if self.variance is not None:
+ col_num += 2
+ if self.num_cases is not None:
+ col_num += 1
+
+ return col_num
\ No newline at end of file
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index bc24098a..f1bd6f27 100644
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -275,7 +275,9 @@ class ShowTrait(object):
data_scale = self.dataset.data_scale,
sample_group_types = self.sample_group_types,
sample_lists = sample_lists,
- attribute_names = self.sample_groups[0].attributes,
+ se_exists = self.sample_groups[0].se_exists,
+ has_num_cases = self.has_num_cases,
+ attributes = self.sample_groups[0].attributes,
categorical_vars = ",".join(categorical_var_list),
num_values = self.num_values,
qnorm_values = self.qnorm_vals,
@@ -454,6 +456,7 @@ class ShowTrait(object):
self.primary_sample_names = primary_sample_names
self.dataset.group.allsamples = all_samples_ordered
+
def quantile_normalize_vals(sample_groups):
def normf(trait_vals):
ranked_vals = ss.rankdata(trait_vals)
@@ -492,6 +495,7 @@ def quantile_normalize_vals(sample_groups):
return qnorm_by_group
+
def get_z_scores(sample_groups):
zscore_by_group = []
for sample_type in sample_groups:
@@ -516,6 +520,7 @@ def get_z_scores(sample_groups):
return zscore_by_group
+
def get_nearest_marker(this_trait, this_db):
this_chr = this_trait.locus_chr
logger.debug("this_chr:", this_chr)
@@ -539,6 +544,7 @@ def get_nearest_marker(this_trait, this_db):
else:
return result[0][0]
+
def get_table_widths(sample_groups, has_num_cases=False):
stats_table_width = 250
if len(sample_groups) > 1:
@@ -555,6 +561,7 @@ def get_table_widths(sample_groups, has_num_cases=False):
return stats_table_width, trait_table_width
+
def has_num_cases(this_trait):
has_n = False
if this_trait.dataset.type != "ProbeSet" and this_trait.dataset.type != "Geno":
@@ -565,6 +572,7 @@ def has_num_cases(this_trait):
return has_n
+
def get_trait_units(this_trait):
unit_type = ""
inside_brackets = False
@@ -584,6 +592,7 @@ def get_trait_units(this_trait):
return unit_type
+
def check_if_attr_exists(the_trait, id_type):
if hasattr(the_trait, id_type):
if getattr(the_trait, id_type) == None or getattr(the_trait, id_type) == "":
@@ -593,6 +602,7 @@ def check_if_attr_exists(the_trait, id_type):
else:
return False
+
def get_ncbi_summary(this_trait):
if check_if_attr_exists(this_trait, 'geneid'):
#ZS: Need to switch this try/except to something that checks the output later
@@ -605,6 +615,7 @@ def get_ncbi_summary(this_trait):
else:
return None
+
def get_categorical_variables(this_trait, sample_list):
categorical_var_list = []
@@ -623,6 +634,7 @@ def get_categorical_variables(this_trait, sample_list):
return categorical_var_list
+
def get_genotype_scales(genofiles):
geno_scales = {}
if type(genofiles) is list:
@@ -634,6 +646,7 @@ def get_genotype_scales(genofiles):
return geno_scales
+
def get_scales_from_genofile(file_location):
geno_path = locate_ignore_error(file_location, 'genotype')
@@ -686,6 +699,7 @@ def get_scales_from_genofile(file_location):
if i > first_marker_line + 10:
break
+
#ZS: This assumes that both won't be all zero, since if that's the case mapping shouldn't be an option to begin with
if mb_all_zero:
return [["morgan", "cM"]]
diff --git a/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js b/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js
new file mode 100644
index 00000000..41ddc088
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/initialize_show_trait_tables.js
@@ -0,0 +1,222 @@
+// ZS: This file initializes the tables for the show_trait page
+
+// ZS: This variable is just created to get the column position of the first case attribute (if case attributes exist), since it's needed to set the row classes in createdRow for the DataTable
+attribute_start_pos = 3
+if (js_data.se_exists === "true") {
+ attribute_start_pos += 2
+}
+if (js_data.has_num_cases === "true") {
+ attribute_start_post += 1
+}
+
+build_columns = function() {
+ let column_list = [
+ {
+ 'data': null,
+ 'orderDataType': "dom-checkbox",
+ 'searchable' : false,
+ 'render': function(data, type, row, meta) {
+ return ''
+ }
+ },
+ {
+ 'title': "ID",
+ 'type': "natural",
+ 'searchable' : false,
+ 'data': "this_id"
+ },
+ {
+ 'title': "Sample",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ return '' + data.name + ''
+ }
+ },
+ {
+ 'title': " Value ",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.value == null) {
+ return ''
+ } else {
+ return ''
+ }
+ }
+ }
+ ];
+
+ if (js_data.se_exists === "true") {
+ column_list.push(
+ {
+ 'bSortable': false,
+ 'type': "natural",
+ 'data': null,
+ 'searchable' : false,
+ 'render': function(data, type, row, meta) {
+ return '±'
+ }
+ },
+ {
+ 'title': "SE ",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.variance == null) {
+ return ''
+ } else {
+ return ''
+ }
+ }
+ }
+ );
+ }
+
+ if (js_data.has_num_cases === "true") {
+ column_list.push(
+ {
+ 'title': "N ",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.num_cases == null || data.num_cases == undefined) {
+ return ''
+ } else {
+ return ''
+ }
+ }
+ }
+ );
+ }
+
+ attr_keys = Object.keys(js_data.attributes).sort((a, b) => (js_data.attributes[a].name > js_data.attributes[b].name) ? 1 : -1)
+ for (i = 0; i < attr_keys.length; i++){
+ column_list.push(
+ {
+ 'title': "" + js_data.attributes[attr_keys[i]].name + " ",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ attr_name = Object.keys(data.extra_attributes).sort((a, b) => (a > b) ? 1 : -1)[meta.col - data.first_attr_col]
+ if (attr_name != null && attr_name != undefined){
+ return data.extra_attributes[attr_name]
+ } else {
+ return ""
+ }
+ }
+ }
+ )
+ }
+
+ return column_list
+}
+
+var primary_table = $('#samples_primary').DataTable( {
+ 'initComplete': function(settings, json) {
+ $('.edit_sample_value').change(function() {
+ edit_data_change();
+ });
+ },
+ 'createdRow': function ( row, data, index ) {
+ $(row).attr('id', "Primary_" + data.this_id)
+ $(row).addClass("value_se");
+ if (data.outlier) {
+ $(row).addClass("outlier");
+ }
+ $('td', row).eq(1).addClass("column_name-Index")
+ $('td', row).eq(2).addClass("column_name-Sample")
+ $('td', row).eq(3).addClass("column_name-Value")
+ if (js_data.se_exists === "true") {
+ $('td', row).eq(5).addClass("column_name-SE")
+ if (js_data.has_num_cases === "true") {
+ $('td', row).eq(6).addClass("column_name-num_cases")
+ } else {
+ if (js_data.has_num_cases === "true") {
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ }
+ }
+ } else {
+ if (js_data.has_num_cases === "true") {
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ }
+ }
+
+ sorted_key_list = Object.keys(js_data.attributes).sort()
+ for (i=0; i < sorted_key_list.length; i++) {
+ $('td', row).eq(attribute_start_pos + i).addClass("column_name-" + js_data.attributes[sorted_key_list[i]].name)
+ $('td', row).eq(attribute_start_pos + i).attr("style", "text-align: " + js_data.attributes[sorted_key_list[i]].alignment + "; padding-top: 2px; padding-bottom: 0px;")
+ }
+ },
+ 'data': js_data['sample_lists'][0],
+ 'columns': build_columns(),
+ 'order': [[1, "asc"]],
+ 'sDom': "Ztr",
+ 'autoWidth': true,
+ 'orderClasses': true,
+ "scrollY": "50vh",
+ 'scroller': true,
+ 'scrollCollapse': true
+} );
+
+primary_table.on( 'order.dt search.dt draw.dt', function () {
+ primary_table.column(1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
+ cell.innerHTML = i+1;
+ } );
+} ).draw();
+
+$('#primary_searchbox').on( 'keyup', function () {
+ primary_table.search($(this).val()).draw();
+} );
+
+if (js_data.sample_lists.length > 1){
+ var other_table = $('#samples_other').DataTable( {
+ 'initComplete': function(settings, json) {
+ $('.edit_sample_value').change(function() {
+ edit_data_change();
+ });
+ },
+ 'createdRow': function ( row, data, index ) {
+ $(row).attr('id', "Primary_" + data.this_id)
+ $(row).addClass("value_se");
+ if (data.outlier) {
+ $(row).addClass("outlier");
+ }
+ $('td', row).eq(1).addClass("column_name-Index")
+ $('td', row).eq(2).addClass("column_name-Sample")
+ $('td', row).eq(3).addClass("column_name-Value")
+ if (js_data.se_exists === "true") {
+ $('td', row).eq(5).addClass("column_name-SE")
+ if (js_data.has_num_cases === "true") {
+ $('td', row).eq(6).addClass("column_name-num_cases")
+ } else {
+ if (js_data.has_num_cases === "true") {
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ }
+ }
+ } else {
+ if (js_data.has_num_cases === "true") {
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ }
+ }
+
+ sorted_key_list = Object.keys(js_data.attributes).sort()
+ for (i=0; i < sorted_key_list.length; i++) {
+ $('td', row).eq(attribute_start_pos + i).addClass("column_name-" + js_data.attributes[sorted_key_list[i]].name)
+ $('td', row).eq(attribute_start_pos + i).attr("style", "text-align: " + js_data.attributes[sorted_key_list[i]].alignment + "; padding-top: 2px; padding-bottom: 0px;")
+ }
+ },
+ 'data': js_data['sample_lists'][1],
+ 'columns': build_columns(),
+ 'order': [[1, "asc"]],
+ 'sDom': "Ztr",
+ 'autoWidth': true,
+ 'orderClasses': true,
+ "scrollY": "50vh",
+ 'scroller': true,
+ 'scrollCollapse': true
+ } );
+}
\ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js
index c0784073..0b5ae6f9 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait.js
@@ -538,10 +538,9 @@ populate_sample_attributes_values_dropdown = function() {
var attribute_info, key, sample_attributes, selected_attribute, value, _i, _len, _ref, _ref1, _results;
$('#attribute_values').empty();
sample_attributes = {};
- _ref = js_data.attribute_names;
- for (key in _ref) {
- if (!__hasProp.call(_ref, key)) continue;
- attribute_info = _ref[key];
+ attr_keys = Object.keys(js_data.attributes).sort();
+ for (i=0; i < attr_keys.length; i++) {
+ attribute_info = js_data.attributes[attr_keys[i]];
sample_attributes[attribute_info.name] = attribute_info.distinct_values;
}
selected_attribute = $('#exclude_menu').val().replace("_", " ");
@@ -549,13 +548,15 @@ populate_sample_attributes_values_dropdown = function() {
_results = [];
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
value = _ref1[_i];
- _results.push($(create_value_dropdown(value)).appendTo($('#attribute_values')));
+ if (value != ""){
+ _results.push($(create_value_dropdown(value)).appendTo($('#attribute_values')));
+ }
}
return _results;
};
-if (Object.keys(js_data.attribute_names).length > 0) {
- populate_sample_attributes_values_dropdown();
-}
+
+populate_sample_attributes_values_dropdown();
+
$('#exclude_menu').change(populate_sample_attributes_values_dropdown);
block_by_attribute_value = function() {
var attribute_name, cell_class, exclude_by_value;
@@ -859,10 +860,9 @@ get_sample_table_data = function(table_name) {
if ($(element).find('.edit_sample_num_cases').length > 0) {
row_data.num_cases = $(element).find('.edit_sample_num_cases').val();
}
- _ref = js_data.attribute_names;
- for (key in _ref) {
- if (!__hasProp.call(_ref, key)) continue;
- attribute_info = _ref[key];
+ attr_keys = Object.keys(js_data.attributes).sort()
+ for (i=0; i < attr_keys.length; i++) {
+ attribute_info = js_data.attributes[attr_keys[i]];
row_data[attribute_info.name] = $.trim($(element).find('.column_name-' + attribute_info.name.replace(" ", "_").replace("/", "\\/")).text());
}
return samples.push(row_data);
diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html
index b7bffd79..0a79ad48 100644
--- a/wqflask/wqflask/templates/show_trait.html
+++ b/wqflask/wqflask/templates/show_trait.html
@@ -153,6 +153,7 @@
+
|