about summary refs log tree commit diff
path: root/wqflask
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask')
-rw-r--r--wqflask/wqflask/do_search.py6
-rw-r--r--wqflask/wqflask/parser.py40
-rwxr-xr-xwqflask/wqflask/show_trait/show_trait.py16
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.coffee57
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.js46
-rw-r--r--wqflask/wqflask/templates/show_trait_edit_data.html130
6 files changed, 167 insertions, 128 deletions
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index 61bfbaba..fd03f359 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -5,8 +5,12 @@ from __future__ import print_function, division
 
 from pprint import pformat as pf
 
+import sys
+sys.path.append("..")
+
 from dbFunction import webqtlDatabaseFunction
 
+
 class DoSearch(object):
     """Parent class containing parameters/functions used for all searches"""
 
@@ -423,8 +427,6 @@ if __name__ == "__main__":
 
     import MySQLdb
     import sys
-    sys.path.append("/home/zas1024/gene/wqflask")
-    print("Path is:", sys.path)
 
 
     from base import webqtlConfig
diff --git a/wqflask/wqflask/parser.py b/wqflask/wqflask/parser.py
index 74343b8a..dc33fc52 100644
--- a/wqflask/wqflask/parser.py
+++ b/wqflask/wqflask/parser.py
@@ -1,12 +1,33 @@
+"""
+Parses search terms input by user
+
+Searches take two primary forms:
+- search term by itself (ex. "shh" or "brain")
+- key / separator / value(s) (ex. "LRS=(9 99 Chr4 122 155)" or "GO:342533")
+
+In the example of "LRS=(9 99 Chr4 122 155)", the key is "LRS", the separator is "=" and the value
+is everything within the parentheses.
+
+Both "=" and ":" can be used as separators; in the future, it would also be good to allow no
+separator at all (ex. "cisLRS(9 999 10)")
+
+Both square brackets and parentheses can be used interchangeably. Both can also be used to
+encapsulate a single value; "cisLRS=[9 999 10)" would
+be acceptable.]
+
+"""
+
 from __future__ import print_function, division
 
 import re
 
 from pprint import pformat as pf
 
-
 def parse(pstring):
-    pstring = re.split(r"""(?:(\w+\s*=\s*\([^)]*\))|(\w+\s*[=:]\w+)|(\w+))""", pstring)
+    pstring = re.split(r"""(?:(\w+\s*=\s*[\(\[][^)]*[\)\]])  |  # LRS=(1 2 3), cisLRS=[4 5 6], etc
+                       (\w+\s*[=:]\w+)  |  # wiki=bar, GO:foobar, etc
+                       (\w+))  # shh, brain, etc """, pstring,
+                                                    flags=re.VERBOSE)
     pstring = [item.strip() for item in pstring if item and item.strip()]
     print(pstring)
 
@@ -21,19 +42,12 @@ def parse(pstring):
             seperator = None
 
         if seperator:
-            if '(' in value:
-                assert value.startswith("("), "Invalid token"
-                assert value.endswith(")"), "Invalid token"
+            if '(' in value or '[' in value:
+                assert value.startswith(("(", "[")), "Invalid token"
+                assert value.endswith((")", "]")), "Invalid token"
                 value = value[1:-1] # Get rid of the parenthesis
                 values = re.split(r"""\s+|,""", value)
                 value = [value.strip() for value in values if value.strip()]
-            # Brackets can also be used to encapsulate values
-            elif '[' in value:
-                assert value.startswith("["), "Invalid token"
-                assert value.endswith("]"), "Invalid token"
-                value = value[1:-1] # Get rid of the brackets
-                values = re.split(r"""\s+|,""", value)
-                value = [value.strip() for value in values if value.strip()]                
             term = dict(key=key,
                         seperator=seperator,
                         search_term=value)
@@ -47,6 +61,8 @@ def parse(pstring):
     return(items)
 
 if __name__ == '__main__':
+    parse("foo=[3 2 1]")
+    parse("foo=[3 2 1)")
     parse("foo=(3 2 1)")
     parse("shh")
     parse("shh grep")
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index 86a0a992..19e67c43 100755
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -159,9 +159,9 @@ class ShowTrait(templatePage):
         self.hddn = hddn
 
         self.sample_group_types = OrderedDict()
-        self.sample_group_types['primary_only'] = fd.RISet + " Only"
-        self.sample_group_types['other_only'] = "Non-" + fd.RISet
-        self.sample_group_types['all_cases'] = "All Cases"
+        self.sample_group_types['samples_primary'] = fd.RISet + " Only"
+        self.sample_group_types['samples_other'] = "Non-" + fd.RISet
+        self.sample_group_types['samples_all'] = "All Cases"
         sample_lists = [group.sample_list for group in self.sample_groups]
         print("sample_lists is:", pf(sample_lists))
         js_data = dict(sample_group_types = self.sample_group_types,
@@ -176,16 +176,16 @@ class ShowTrait(templatePage):
         #if traitInfos:
         #    database, ProbeSetID, CellID = traitInfos
         #else:
-        database = self.fd['database']
-        probe_set_id = self.fd['ProbeSetID']
+        dataset = self.fd['dataset']
+        trait_id = self.fd['trait_id']
         cell_id = self.fd.get('CellID')        
 
-        this_trait =  webqtlTrait(db=database, name=probe_set_id, cellid=cell_id, cursor=self.cursor)
+        this_trait =  webqtlTrait(db=dataset, name=trait_id, cellid=cell_id, cursor=self.cursor)
     
         ##identification, etc.
-        self.fd.identification = '%s : %s' % (this_trait.db.shortname, probe_set_id)
+        self.fd.identification = '%s : %s' % (this_trait.db.shortname, trait_id)
         this_trait.returnURL = webqtlConfig.CGIDIR + webqtlConfig.SCRIPTFILE + '?FormID=showDatabase&database=%s\
-                &ProbeSetID=%s&RISet=%s&parentsf1=on' %(database, probe_set_id, self.fd['RISet'])
+                &ProbeSetID=%s&RISet=%s&parentsf1=on' %(dataset, trait_id, self.fd['RISet'])
 
         if cell_id:
             self.fd.identification = '%s/%s'%(self.fd.identification, cell_id)
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.coffee b/wqflask/wqflask/static/new/javascript/show_trait.coffee
index 10671e78..6e22119f 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.coffee
+++ b/wqflask/wqflask/static/new/javascript/show_trait.coffee
@@ -26,45 +26,62 @@ $ ->
         
         current_value = parseFloat($(in_box)).toFixed(decimal_places)
         
+        console.log("urgh:", category, value_type)
         the_value = sample_sets[category][value_type]()
+        console.log("After running sample_sets, the_value is:", the_value)
         if decimal_places > 0
             the_value = the_value.toFixed(decimal_places)
         
+        console.log("*-* the_value:", the_value)
+        console.log("*-* current_value:", current_value)
         if the_value != current_value
             $(id).html(the_value).effect("highlight")
 
     update_stat_values = (sample_sets)->
-        for category in ['primary_only', 'other_only', 'all_cases']
+        for category in ['samples_primary', 'samples_other', 'samples_all']
             change_stats_value(sample_sets, category, "n_of_samples", 0)
             for stat in ["mean", "median", "std_dev", "std_error"]
+                console.log("Calling change_stats_value")
                 change_stats_value(sample_sets, category, stat, 2)
 
     edit_data_change = ->                
         sample_sets =
-            primary_only: new Stats([])
-            other_only: new Stats([])
-            all_cases: new Stats([])
+            samples_primary: new Stats([])
+            samples_other: new Stats([])
+            samples_all: new Stats([])
                 
         console.log("at beginning:", sample_sets)
-        values = $('#value_table').find(".edit_sample_value")
 
-        for value in values
-            real_value = $(value).val()
-            row = $(value).closest("tr")
-            category = row[0].id
-            checkbox = $(row).find(".edit_sample_checkbox")
-            checked = $(checkbox).attr('checked')
-
-            if checked and is_number(real_value) and real_value != ""
-                real_value = parseFloat(real_value)
-                if _(category).startsWith("Primary")
-                    sample_sets.primary_only.add_value(real_value)
-                else if _(category).startsWith("Other")
-                    sample_sets.other_only.add_value(real_value)
-                sample_sets.all_cases.add_value(real_value)
+        # ##########
+        # Bug here #value_table doesn't exist and why is it a class?
+        # ##########
+
+        #values = $('.value_table').find(".edit_sample_value")
+
+
+        tables = ['samples_primary', 'samples_other']
+        for table in tables
+            rows = $("#" + table).find('tr')
+            console.log("[fuji3] rows:", rows)
+            for row in rows
+                real_value = $(row).find('.edit_sample_value').val()
+                #row = $(value).closest("tr")
+                #category = row[0].id
+                console.log("real_value:", real_value)
+                checkbox = $(row).find(".edit_sample_checkbox")
+                checked = $(checkbox).attr('checked')
+
+                if checked and is_number(real_value) and real_value != ""
+                    console.log("in the iffy if")
+                    real_value = parseFloat(real_value)
+                    #if _(category).startsWith("Primary")
+                    sample_sets[table].add_value(real_value)
+                    #else if _(category).startsWith("Other")
+                    #    sample_sets.other_only.add_value(real_value)
+                    sample_sets['samples_all'].add_value(real_value)
         console.log("towards end:", sample_sets)
         update_stat_values(sample_sets)
-        
+
 
     make_table = ->
         header = "<thead><tr><th>&nbsp;</th>"
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js
index db40b547..919bc766 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait.js
@@ -32,17 +32,21 @@
       console.log("the_id:", id);
       in_box = $(id).html;
       current_value = parseFloat($(in_box)).toFixed(decimal_places);
+      console.log("urgh:", category, value_type);
       the_value = sample_sets[category][value_type]();
+      console.log("After running sample_sets, the_value is:", the_value);
       if (decimal_places > 0) {
         the_value = the_value.toFixed(decimal_places);
       }
+      console.log("*-* the_value:", the_value);
+      console.log("*-* current_value:", current_value);
       if (the_value !== current_value) {
         return $(id).html(the_value).effect("highlight");
       }
     };
     update_stat_values = function(sample_sets) {
       var category, stat, _i, _len, _ref, _results;
-      _ref = ['primary_only', 'other_only', 'all_cases'];
+      _ref = ['samples_primary', 'samples_other', 'samples_all'];
       _results = [];
       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
         category = _ref[_i];
@@ -53,6 +57,7 @@
           _results1 = [];
           for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
             stat = _ref1[_j];
+            console.log("Calling change_stats_value");
             _results1.push(change_stats_value(sample_sets, category, stat, 2));
           }
           return _results1;
@@ -61,29 +66,30 @@
       return _results;
     };
     edit_data_change = function() {
-      var category, checkbox, checked, real_value, row, sample_sets, value, values, _i, _len;
+      var checkbox, checked, real_value, row, rows, sample_sets, table, tables, _i, _j, _len, _len1;
       sample_sets = {
-        primary_only: new Stats([]),
-        other_only: new Stats([]),
-        all_cases: new Stats([])
+        samples_primary: new Stats([]),
+        samples_other: new Stats([]),
+        samples_all: new Stats([])
       };
       console.log("at beginning:", sample_sets);
-      values = $('#value_table').find(".edit_sample_value");
-      for (_i = 0, _len = values.length; _i < _len; _i++) {
-        value = values[_i];
-        real_value = $(value).val();
-        row = $(value).closest("tr");
-        category = row[0].id;
-        checkbox = $(row).find(".edit_sample_checkbox");
-        checked = $(checkbox).attr('checked');
-        if (checked && is_number(real_value) && real_value !== "") {
-          real_value = parseFloat(real_value);
-          if (_(category).startsWith("Primary")) {
-            sample_sets.primary_only.add_value(real_value);
-          } else if (_(category).startsWith("Other")) {
-            sample_sets.other_only.add_value(real_value);
+      tables = ['samples_primary', 'samples_other'];
+      for (_i = 0, _len = tables.length; _i < _len; _i++) {
+        table = tables[_i];
+        rows = $("#" + table).find('tr');
+        console.log("[fuji3] rows:", rows);
+        for (_j = 0, _len1 = rows.length; _j < _len1; _j++) {
+          row = rows[_j];
+          real_value = $(row).find('.edit_sample_value').val();
+          console.log("real_value:", real_value);
+          checkbox = $(row).find(".edit_sample_checkbox");
+          checked = $(checkbox).attr('checked');
+          if (checked && is_number(real_value) && real_value !== "") {
+            console.log("in the iffy if");
+            real_value = parseFloat(real_value);
+            sample_sets[table].add_value(real_value);
+            sample_sets['samples_all'].add_value(real_value);
           }
-          sample_sets.all_cases.add_value(real_value);
         }
       }
       console.log("towards end:", sample_sets);
diff --git a/wqflask/wqflask/templates/show_trait_edit_data.html b/wqflask/wqflask/templates/show_trait_edit_data.html
index ce1642d3..6c9b1073 100644
--- a/wqflask/wqflask/templates/show_trait_edit_data.html
+++ b/wqflask/wqflask/templates/show_trait_edit_data.html
@@ -82,78 +82,76 @@
         <div>
             <h3>{{ sample_type.header }}</h3>
 
-            <div id="{{ sample_type.sample_group_type }}">
-                <table class="table table-hover table-striped"  {# Todo: Turn tablesorter back on #}
-                       id="{{ 'sortable%i' % (loop.index) }}">
-                    <tr>
-                        <th>Index</th>
-
-                        <th>Sample</th>
-
-                        <th>Value</th>
-                        {% if sample_type.se_exists() %}
-                        <th>&nbsp;</th>
-
-                        <th>SE</th>
-                        {% endif %}
-
-                        {% for attribute in sample_type.attributes|sort() %}
-                        <th>
-                            {{ sample_type.attributes[attribute].name }}
-                        </th>
-                        {% endfor %}
-                    </tr>
-
-                    {% for sample in sample_type.sample_list %}
-                    <tr class="{{ sample.class_outlier }} value_se" id="{{ sample.this_id }}">
-                    <td class="column_name-Index">
-                        {{ loop.index }}
-                        <input type="checkbox" name="selectCheck"
-                               class="checkbox edit_sample_checkbox"
-                               value="{{ sample.name }}" checked="checked">
-                    </td>
-
-                    <td class="column_name-Sample">
-                        <span class="edit_sample_sample_name">
-                            {{ sample.name }}
-                         </span>
-                    </td>
-
-                    {# Todo: Add IDs #}
-                    <td class="column_name-Value">
-                      <input type="text" data-value="{{ sample.display_value }}" name="{{ sample.name }}"
-                             class="trait_value_input edit_sample_value"
-                             value="{{ sample.display_value }}"
-                             size=8 maxlength=8
-                      >
-                    </td>
+            <table class="table table-hover table-striped"  {# Todo: Enable sorting on table #}
+                   id="samples_{{ sample_type.sample_group_type }}">
+                <tr>
+                    <th>Index</th>
 
+                    <th>Sample</th>
+
+                    <th>Value</th>
                     {% if sample_type.se_exists() %}
-                    <td>
-                      ±
-                    </td>
-
-                    {# Todo: Add IDs #}
-                    <td class="column_name-SE">
-                      <input type="text" data-value="{{ sample.display_variance }}" name=""{{ 'V' + sample.name}}"
-                             class="trait_value_input edit_sample_se"
-                             value="{{ sample.display_variance }}"
-                             size=8 maxlength=8
-                      >
-                    </td>
+                    <th>&nbsp;</th>
+
+                    <th>SE</th>
                     {% endif %}
 
-                    {# Loop through each attribute type and input value #}
                     {% for attribute in sample_type.attributes|sort() %}
-                    <td class="std_cell column_name-{{ sample_type.attributes[attribute].name.replace(' ', '_') }}">
-                      {{ sample.extra_attributes[sample_type.attributes[attribute].name] }}
-                    </td>
+                    <th>
+                        {{ sample_type.attributes[attribute].name }}
+                    </th>
                     {% endfor %}
-                  </tr>
-                  {% endfor %}
-
-                </table>
-            </div>
+                </tr>
+
+                {% for sample in sample_type.sample_list %}
+                <tr class="{{ sample.class_outlier }} value_se" id="{{ sample.this_id }}">
+                <td class="column_name-Index">
+                    {{ loop.index }}
+                    <input type="checkbox" name="selectCheck"
+                           class="checkbox edit_sample_checkbox"
+                           value="{{ sample.name }}" checked="checked">
+                </td>
+
+                <td class="column_name-Sample">
+                    <span class="edit_sample_sample_name">
+                        {{ sample.name }}
+                     </span>
+                </td>
+
+                {# Todo: Add IDs #}
+                <td class="column_name-Value">
+                  <input type="text" data-value="{{ sample.display_value }}" name="{{ sample.name }}"
+                         class="trait_value_input edit_sample_value"
+                         value="{{ sample.display_value }}"
+                         size=8 maxlength=8
+                  >
+                </td>
+
+                {% if sample_type.se_exists() %}
+                <td>
+                  ±
+                </td>
+
+                {# Todo: Add IDs #}
+                <td class="column_name-SE">
+                  <input type="text" data-value="{{ sample.display_variance }}" name=""{{ 'V' + sample.name}}"
+                         class="trait_value_input edit_sample_se"
+                         value="{{ sample.display_variance }}"
+                         size=8 maxlength=8
+                  >
+                </td>
+                {% endif %}
+
+                {# Loop through each attribute type and input value #}
+                {% for attribute in sample_type.attributes|sort() %}
+                <td class="std_cell column_name-{{ sample_type.attributes[attribute].name.replace(' ', '_') }}">
+                  {{ sample.extra_attributes[sample_type.attributes[attribute].name] }}
+                </td>
+                {% endfor %}
+              </tr>
+              {% endfor %}
+
+            </table>
         </div>
         {% endfor %}
     </div>