aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--wqflask/wqflask/oauth2/data.py36
-rw-r--r--wqflask/wqflask/templates/oauth2/data-list.html200
2 files changed, 149 insertions, 87 deletions
diff --git a/wqflask/wqflask/oauth2/data.py b/wqflask/wqflask/oauth2/data.py
index 8005a2a0..0cd110f6 100644
--- a/wqflask/wqflask/oauth2/data.py
+++ b/wqflask/wqflask/oauth2/data.py
@@ -23,15 +23,47 @@ def list_data():
**{key:val for key,val in kwargs.items()
if key not in ("groups", "data_items", "user_privileges")})
+ def __process_menus__(mns):
+ return {
+ species_id: {
+ "display_name": display_name,
+ "family": family,
+ "groups": {
+ group_id: {
+ "group_name": group_name,
+ "family": family,
+ "types": {
+ type_id: {
+ "menu_value": type_menu_value,
+ "menu_heading": type_menu_heading,
+ "datasets": tuple(
+ dict(zip(("accession_id", "dataset_id",
+ "dataset_fullname"),
+ dataset_row))
+ for dataset_row in mns["datasets"][
+ species_id][group_id][type_id])
+ }
+ for type_id, type_menu_value, type_menu_heading
+ in mns["types"][species_id][group_id]
+ }
+ }
+ for group_id, group_name, family in mns["groups"][species_id]
+ }
+ }
+ for species_id, display_name, family in mns["species"]}
+
groups = oauth2_get("oauth2/group/list").either(
lambda err: {"groups_error": process_error(err)},
lambda grp: {"groups": grp})
roles = oauth2_get("oauth2/user/roles").either(
lambda err: {"roles_error": process_error(err)},
lambda roles: {"roles": roles})
+ menus = oauth2_get("menu/generate/json").either(
+ lambda err: {"menus_error": process_error(err)},
+ lambda mns: {"menus": __process_menus__(mns)})
if request.method == "GET":
- return __render__(**{**groups, **roles})
+ return __render__(**{**groups, **roles, **menus})
dataset_type = request.form["dataset_type"]
offset = int(request.form.get("offset", 0)) + (
@@ -47,7 +79,7 @@ def list_data():
lambda err: {"data_items_error": process_error(err)},
lambda data: {"data_items": data})
return __render__(**{
- **groups, **roles, **data_items, "dataset_type": dataset_type,
+ **groups, **roles, **menus, **data_items, "dataset_type": dataset_type,
"offset": offset
})
diff --git a/wqflask/wqflask/templates/oauth2/data-list.html b/wqflask/wqflask/templates/oauth2/data-list.html
index 6d0ae427..019e2346 100644
--- a/wqflask/wqflask/templates/oauth2/data-list.html
+++ b/wqflask/wqflask/templates/oauth2/data-list.html
@@ -12,23 +12,46 @@
<div class="row">
<form method="POST" action="{{url_for('oauth2.data.list_data')}}">
<legend>Dataset Type</legend>
+ <input type="hidden" name="offset" value="0" />
+ <input type="hidden" name="menus" value="{{menus | tojson}}" />
+ <div class="form-group">
+ <label for="select-menu">Dataset</label>
+ <select id="select-menu" name="dataset">
+ {%for species_id, species_data in menus.items()%}
+ <optgroup label="{{species_data.display_name}}">
+ {%for group_id, group_data in species_data["groups"].items()%}
+ <optgroup label=" {{group_data.group_name}}">
+ {%for type_id, type_data in group_data["types"].items()%}
+ <optgroup label="{{type_data.menu_heading}}">
+ {%for dataset in type_data["datasets"]%}
+ <option value="{{dataset.dataset_id}}">
+ {{dataset.dataset_fullname}}
+ </option>
+ {%endfor%}
+ </optgroup>
+ {%endfor%}
+ </optgroup>
+ {%endfor%}
+ </optgroup>
+ {%endfor%}
+ </select>
+ </div>
<div class="form-group">
- <input type="hidden" name="offset" value="0" />
<label for="dataset_type" class="form-label">Dataset Type</label>
<select name="dataset_type" required="required">
<option value="">Select dataset type</option>
<option value="mrna"
{%if dataset_type=="mrna"%}
- selected="selected"
+ selected="selected"
{%endif%}>mRNA Assay Datasets</option>
- <option value="genotype"
- {%if dataset_type=="genotype"%}
- selected="selected"
- {%endif%}>Genotype Datasets</option>
- <option value="phenotype"
- {%if dataset_type=="phenotype"%}
- selected="selected"
- {%endif%}>Phenotype/Publish Datasets</option>
+ <option value="genotype"
+ {%if dataset_type=="genotype"%}
+ selected="selected"
+ {%endif%}>Genotype Datasets</option>
+ <option value="phenotype"
+ {%if dataset_type=="phenotype"%}
+ selected="selected"
+ {%endif%}>Phenotype/Publish Datasets</option>
</select>
</div>
<input type="submit" value="Fetch Unlinked Data" class="btn btn-primary" />
@@ -39,87 +62,94 @@
{%if data_items_error is defined%}
{{display_error("Data Error", data_items_error)}}
{%else%}
- <div class="row">
- <table class="table">
- <caption>Link Data to Group</caption>
+ <div class="row">
+ <form method="POST" action="{{url_for('oauth2.data.link_data')}}">
+ <legend>Link Data to Group</legend>
+ <input type="hidden" name="offset" value="{{offset or 0}}" />
+ <input type="hidden" name="dataset_type" value="{{dataset_type}}" />
- <thead>
- <tr>
- {%if dataset_type == "phenotype"%}
- <th>Trait ID</th>
- <th>Data Group</th>
- {%endif%}
- <th>Dataset Name</th>
- <th>Dataset Full Name</th>
- <th>Group</th>
- <th>Link</th>
- </tr>
- </thead>
+ <div class="form-group">
+ <label for="select-group-id">Group</label>
+ <select name="group_id" required="required">
+ <option value="">Select group</option>
+ {%for group in groups%}
+ <option value="{{group.group_id}}">{{group.group_name}}</option>
+ {%endfor%}
+ </select>
+ </div>
- <tbody>
- {%for data_item in data_items%}
- <tr>
- <form method="POST" action="{{url_for('oauth2.data.link_data')}}">
- <input type="hidden" name="offset" value="{{offset or 0}}" />
- <input type="hidden" name="dataset_id" value="{{data_item.Id}}" />
- <input type="hidden" name="dataset_type" value="{{dataset_type}}" />
- {%if dataset_type == "phenotype"%}
- <td>
- <a href="/show_trait?trait_id={{data_item.Id}}&dataset={{data_item.dataset_name}}"
- title="Trait Page">
- {{data_item.Id}}
- </a>
- </td>
- <td>{{data_item.InbredSetName}}</td>
- {%endif%}
- <td>
- <a href="https://gn1.genenetwork.org/webqtl/main.py?FormID=sharinginfo&GN_AccessionId={{data_item.accession_id}}&InfoPageName={{data_item.dataset_name}}"
- title="Link to information on dataset '{{data_item.dataset_fullname}}'"
- target="_blank">
- {{data_item.dataset_name}}
- </a>
- </td>
- <td>{{data_item.dataset_fullname}}</td>
- <td>
- <select name="group_id" required="required">
- <option value="">Select group</option>
- {%for group in groups%}
- <option value="{{group.group_id}}">{{group.group_name}}</option>
- {%endfor%}
- </select>
- </td>
- <td>
- <input type="submit" value="Link" class="btn btn-info" />
- </td>
- </form>
- </tr>
- {%else%}
- <tr>
- <td colspan="4">
- <span class="glyphicon glyphicon-info-sign text-danger">
- </span>
- &nbsp;
- <strong class="text-info">No available data to link</strong>
- </td>
- </tr>
- {%endfor%}
- </tbody>
- </table>
+ <table class="table">
+ <caption>Link Data to Group</caption>
- <form method="POST" action="{{url_for('oauth2.data.list_data')}}">
- <input type="hidden" name="dataset_type" value="{{dataset_type}}" />
- <input type="hidden" name="offset" value="{{offset or 0}}" />
- <div class="form-group" style="margin: auto;width: 50%;">
- {%if offset != 0%}
- <input type="submit" name="offset_submit" value="Previous" class="btn btn-warning" />
+ <thead>
+ <tr>
+ <th>Select</th>
+ {%if dataset_type == "phenotype"%}
+ <th>Trait ID</th>
+ <th>Data Group</th>
{%endif%}
- {%if data_items | length == 100:%}
- <input type="submit" name="offset_submit" value="Next" class="btn btn-warning" />
+ <th>Dataset Name</th>
+ <th>Dataset Full Name</th>
+ <th>Link</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ {%for data_item in data_items%}
+ <tr>
+ <td>
+ <input type="checkbox" value="{{data_item.Id}}"
+ name="dataset_ids" />
+ </td>
+ {%if dataset_type == "phenotype"%}
+ <td>
+ <a href="/show_trait?trait_id={{data_item.Id}}&dataset={{data_item.dataset_name}}"
+ title="Trait Page">
+ {{data_item.Id}}
+ </a>
+ </td>
+ <td>{{data_item.InbredSetName}}</td>
{%endif%}
- </div>
- </form>
+ <td>
+ <a href="https://gn1.genenetwork.org/webqtl/main.py?FormID=sharinginfo&GN_AccessionId={{data_item.accession_id}}&InfoPageName={{data_item.dataset_name}}"
+ title="Link to information on dataset '{{data_item.dataset_fullname}}'"
+ target="_blank">
+ {{data_item.dataset_name}}
+ </a>
+ </td>
+ <td>{{data_item.dataset_fullname}}</td>
+ <td>
+ <input type="submit" value="Link" class="btn btn-info" />
+ </td>
+ </tr>
+ {%else%}
+ <tr>
+ <td colspan="4">
+ <span class="glyphicon glyphicon-info-sign text-danger">
+ </span>
+ &nbsp;
+ <strong class="text-info">No available data to link</strong>
+ </td>
+ </tr>
+ {%endfor%}
+ </tbody>
+ </table>
+ </form>
+
+ <form method="POST" action="{{url_for('oauth2.data.list_data')}}">
+ <input type="hidden" name="dataset_type" value="{{dataset_type}}" />
+ <input type="hidden" name="offset" value="{{offset or 0}}" />
+ <div class="form-group" style="margin: auto;width: 50%;">
+ {%if offset != 0%}
+ <input type="submit" name="offset_submit" value="Previous" class="btn btn-warning" />
+ {%endif%}
+ {%if data_items | length == 100:%}
+ <input type="submit" name="offset_submit" value="Next" class="btn btn-warning" />
+ {%endif%}
</div>
- {%endif%}
+ </form>
+ </div>
+ {%endif%}
{%endif%}
</div>