# HG changeset patch # User iuc # Date 1568400881 14400 # Node ID 02c3e335a695ac1ede92fc9f4925e8f88f13c2f9 # Parent dddadbbac949df48c789ad3100194d707b2d43ba "planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/table_compute commit d00a518202228b990aeeea2ec3f842501fd2ec09" diff -r dddadbbac949 -r 02c3e335a695 scripts/safety.py --- a/scripts/safety.py Fri Aug 30 05:28:18 2019 -0400 +++ b/scripts/safety.py Fri Sep 13 14:54:41 2019 -0400 @@ -11,7 +11,6 @@ '(', ')', 'if', 'else', 'or', 'and', 'not', 'in', '+', '-', '*', '/', '%', ',', '!=', '==', '>', '>=', '<', '<=', 'min', 'max', 'sum', - 'str', 'int', 'float' ) __allowed_ref_types = { 'pd.DataFrame': { @@ -177,12 +176,13 @@ # ['vec.median', '(', ')', '+', 'vec.sum', '(', ')'] tokens = [ e for e in re.split( - r'("[a-zA-Z%0-9_.]+"|[a-zA-Z0-9_.]+|[^a-zA-Z0-9_.() ]+|[()])', self.expr + r'([a-zA-Z0-9_.]+|[^a-zA-Z0-9_.() ]+|[()])', self.expr ) if e.strip() ] # 2. Subtract allowed standard tokens rem = [e for e in tokens if e not in self.__allowed_tokens] + # 3. Subtract allowed qualified objects from allowed modules # and whitelisted references and their attributes rem2 = [] @@ -194,32 +194,18 @@ if len(parts) == 2: if parts[0] in self.these: parts[0] = '_this' - elif parts[0] == "": - # e.g. '.T' gives ['','.T'] - # Here we assume that the blank part[0] refers to the - # self.ref_type (e.g. "pd.DataFrame"), and that - # the second part is a function of that type. - if parts[1] in self.allowed_qualified['_this']: - continue - if parts[0] in self.allowed_qualified: if parts[1] in self.allowed_qualified[parts[0]]: continue - rem2.append(e) - # Debug - # for x in (tokens, rem, rem2):print(x) - # 4. Assert that rest are real numbers or strings e = '' for e in rem2: try: _ = float(e) except ValueError: - # e.g. '"TEXT"' is okay. - if not(e[0] == '"' and e[-1] == '"'): - safe = False - break + safe = False + break return safe, e diff -r dddadbbac949 -r 02c3e335a695 scripts/table_compute.py --- a/scripts/table_compute.py Fri Aug 30 05:28:18 2019 -0400 +++ b/scripts/table_compute.py Fri Sep 13 14:54:41 2019 -0400 @@ -4,7 +4,7 @@ """ -__version__ = "0.9.1" +__version__ = "0.9.2" import csv import math @@ -265,7 +265,12 @@ mode = params["element_mode"] if mode == "replace": replacement_val = params["element_replace"] - out_table = data.mask(bool_mat, replacement_val) + out_table = data.mask( + bool_mat, + data.where(bool_mat).applymap( + lambda x: replacement_val.format(elem=x) + ) + ) elif mode == "modify": mod_op = Utils.getOneValueMathOp(params["element_modify_op"]) out_table = data.mask( @@ -300,7 +305,9 @@ elif user_mode_single == "fulltable": general_mode = params["mode"] - if general_mode == "melt": + if general_mode == "transpose": + out_table = data.T + elif general_mode == "melt": melt_ids = params["MELT"]["melt_ids"] melt_values = params["MELT"]["melt_values"] diff -r dddadbbac949 -r 02c3e335a695 table_compute.xml --- a/table_compute.xml Fri Aug 30 05:28:18 2019 -0400 +++ b/table_compute.xml Fri Sep 13 14:54:41 2019 -0400 @@ -1,7 +1,7 @@ computes operations on table data - 0.9.1 + 0.9.2 ]]> ]]> allowed_functions.xml @@ -23,7 +23,7 @@ - ^['"\w !\-+=/*%,.<>()]+$ + ^[\w !\-+=/*%,.<>()]+$ @@ -51,8 +51,9 @@ - - + + + @@ -133,6 +134,7 @@ } #if str($singtabop.use_type) == "single": + #set $op_mode = str($singtabop.user.mode) Data = { "tables": [ { @@ -159,12 +161,12 @@ } ], "params": { - "user_mode_single": '$singtabop.user.mode.value', - #if $singtabop.user.mode.value == 'precision': + "user_mode_single": '$op_mode', + #if $op_mode == 'precision': ## Literally do nothing, the user just sets the precision slider ## at the top default level } - #elif $singtabop.user.mode.value == 'select': + #elif $op_mode == 'select': "select_cols_unique": #echo 'select_cols_keepdupe' in str($singtabop.user.select_keepdupe)#, "select_rows_unique": #echo 'select_rows_keepdupe' in str($singtabop.user.select_keepdupe)#, #if $singtabop.user.select_cols_wanted: @@ -178,24 +180,25 @@ "select_rows_wanted": None, #end if } - #elif $singtabop.user.mode.value == 'filtersumval': - "filtersumval_mode": '$singtabop.user.filtersumval_mode.use.value', - "filtersumval_axis": $singtabop.user.axis.value, - #if $singtabop.user.filtersumval_mode.use.value == 'operation': - "filtersumval_compare": '$singtabop.user.filtersumval_mode.compare_op.value', - "filtersumval_op": '$singtabop.user.filtersumval_mode.operation.value', + #elif $op_mode == 'filtersumval': + #set $filter_type = str($singtabop.user.filtersumval_mode.use) + "filtersumval_mode": '$filter_type', + "filtersumval_axis": $singtabop.user.axis, + #if $filter_type == 'operation': + "filtersumval_compare": '$singtabop.user.filtersumval_mode.compare_op', + "filtersumval_op": '$singtabop.user.filtersumval_mode.operation', "filtersumval_against": $singtabop.user.filtersumval_mode.against, "filtersumval_minmatch": None, - #elif $singtabop.user.filtersumval_mode.use.value == 'element': + #elif $filter_type == 'element': "filtersumval_compare": None, - "filtersumval_op": '$singtabop.user.filtersumval_mode.operation.value', + "filtersumval_op": '$singtabop.user.filtersumval_mode.operation', ## against could be string or float, so we parse this in the code "filtersumval_against": '$singtabop.user.filtersumval_mode.against', "filtersumval_minmatch": $singtabop.user.filtersumval_mode.minmatch, #end if } - #elif $singtabop.user.mode.value == 'matrixapply': - "matrixapply_dimension": $singtabop.user.dimension.value, + #elif $op_mode == 'matrixapply': + "matrixapply_dimension": $singtabop.user.dimension, #if str($singtabop.user.matrixapply_func.vector_op) == 'custom': #set $custom_func = str($singtabop.user.matrixapply_func.custom_func).strip() "matrixapply_custom": True, @@ -207,10 +210,12 @@ "matrixapply_op": '$singtabop.user.matrixapply_func.vector_op', #end if } - #elif $singtabop.user.mode.value == 'element': - #if str($singtabop.user.elem_val.element_op) == "None": + #elif $op_mode == 'element': + #set $filter_type = str($singtabop.user.elem_val.element_op) + #set $element_mode = str($singtabop.user.element.mode) + #if $filter_type == "None": "element_op": None, - #elif str($singtabop.user.elem_val.element_op) == "rowcol": + #elif $filter_type == "rowcol": "element_op": "rowcol", #if $singtabop.user.elem_val.select_rows_wanted "element_rows": '$singtabop.user.elem_val.select_rows_wanted', @@ -220,24 +225,24 @@ #end if "element_inclusive": $singtabop.user.elem_val.inclusive_selection, #else: - "element_op": '$singtabop.user.elem_val.element_op.value', + "element_op": '$filter_type', ## Value is string or float, parsed in code later "element_value" : '$singtabop.user.elem_val.element_value', #end if - "element_mode": '$singtabop.user.element.mode.value', - #if str($singtabop.user.element.mode) == "replace": - "element_replace": '$singtabop.user.element.replace_value.value', - #elif str($singtabop.user.element.mode) == "modify": - "element_modify_op": '$singtabop.user.element.modify_op.value', - #elif str($singtabop.user.element.mode) == "scale": - "element_scale_op": '$singtabop.user.element.scale_op.value', + "element_mode": '$element_mode', + #if $element_mode == "replace": + "element_replace": '$singtabop.user.element.replace_value', + #elif $element_mode == "modify": + "element_modify_op": '$singtabop.user.element.modify_op', + #elif $element_mode == "scale": + "element_scale_op": '$singtabop.user.element.scale_op', "element_scale_value": $singtabop.user.element.scale_value, - #elif str($singtabop.user.element.mode) == "custom": + #elif $element_mode == "custom": #set $custom_func = str($singtabop.user.element.custom_expr).strip() "element_customop": '$custom_func', #end if } - #elif $singtabop.user.mode.value == 'fulltable': + #elif $op_mode == 'fulltable': "mode": '$singtabop.user.general.use', #if str($singtabop.user.general.use) == 'melt': #if str($singtabop.user.general.id_vars).strip(): @@ -273,7 +278,7 @@ "pivot_values": $pivot_values, }, #elif str($singtabop.user.general.use) == 'custom': - #set $custom_func = str($singtabop.user.general.fulltable_custom_expr.value).strip() + #set $custom_func = str($singtabop.user.general.fulltable_custom_expr).strip() "fulltable_customop": '$custom_func', #end if @@ -282,7 +287,7 @@ } #elif str($singtabop.use_type) == "multiple": -#set $custom_func = str($singtabop.fulltable_custom_expr).strip() + #set $custom_func = str($singtabop.fulltable_custom_expr).strip() Data = { "tables": [ #for $i, $s in enumerate($singtabop.tables) @@ -424,10 +429,12 @@ - - - + + + + + @@ -474,7 +481,14 @@ - + + + + + + + + @@ -820,7 +834,22 @@ - + + + + + + + + + + + + + + + + @@ -839,7 +868,7 @@ - + @@ -860,7 +889,7 @@ - + @@ -881,7 +910,7 @@ - + @@ -906,7 +935,7 @@ - + @@ -931,7 +960,7 @@ - + @@ -953,7 +982,7 @@ - + @@ -978,7 +1007,7 @@ - + @@ -1000,7 +1029,7 @@ - + @@ -1026,7 +1055,7 @@ - + @@ -1049,7 +1078,7 @@ - + @@ -1073,74 +1102,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -1154,7 +1116,7 @@ - + @@ -1169,7 +1131,7 @@ - + @@ -1192,7 +1154,7 @@ - + @@ -1216,7 +1178,7 @@ - + @@ -1224,8 +1186,8 @@ - - + + @@ -1244,7 +1206,7 @@ - + @@ -1252,8 +1214,8 @@ - - + + @@ -1271,13 +1233,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + `_). * *Operate on elements* → **Specific Rows and/or Columns** * *List of columns to select* → "2"