", 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 1.4.1
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 1.4.1
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 1.4.1
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 1.4.1
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 1.4.1
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 1.4.1
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 1.4.1
|