From c960dcfdfae77ea2ff5d4f14575df0446a5a77be Mon Sep 17 00:00:00 2001 From: Nick Moore Date: Fri, 5 Apr 2024 16:36:30 +1100 Subject: [PATCH] fix for saving & restoring ColumnOrStringParam value --- countess/core/parameters.py | 18 ++++++------------ countess/gui/config.py | 1 + tests/plugins/test_variant.py | 22 +++++++++++++++++++++- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/countess/core/parameters.py b/countess/core/parameters.py index 11173e3..dcda12e 100644 --- a/countess/core/parameters.py +++ b/countess/core/parameters.py @@ -417,21 +417,15 @@ def get_column_name(self): def get_value(self, data: dict): if self.value.startswith(self.PREFIX): - return data[self.value[len(self.PREFIX):]] + return data[self.value[len(self.PREFIX) :]] else: return self.value - -class ColumnOrIntegerParam(ColumnOrStringParam): - def clean_value(self, value): - if isinstance(value, str): - return int("".join(re.split(r"\D+", value))) - else: - return int(value) - - -class MultipleChoiceParam(ChoiceParam): - pass + def set_choices(self, choices: Iterable[str]): + self.choices = list(choices) + if self._value is not None and self._value.startswith(self.PREFIX) and self._value not in self.choices: + self._value = self.DEFAULT_VALUE + self._choice = None class ArrayParam(BaseParam): diff --git a/countess/gui/config.py b/countess/gui/config.py index 0ac31bb..556ca0e 100644 --- a/countess/gui/config.py +++ b/countess/gui/config.py @@ -198,6 +198,7 @@ def update(self): elif isinstance(self.parameter, ChoiceParam): choices = self.parameter.choices or [""] self.entry["values"] = choices + self.var.set(self.parameter.value) elif isinstance(self.parameter, BooleanParam): self.set_checkbox_value() elif isinstance(self.parameter, TextParam): diff --git a/tests/plugins/test_variant.py b/tests/plugins/test_variant.py index 94be184..09bef85 100644 --- a/tests/plugins/test_variant.py +++ b/tests/plugins/test_variant.py @@ -6,6 +6,26 @@ logger = MultiprocessLogger() +def test_variant_ref_value(): + input_df = pd.DataFrame( + [{"seq": "TGAAGTAGAGG"}, {"seq": "AGAAGTTGTGG"}, {"seq": "ATAAGAAGAGG"}] + ) + plugin = VariantPlugin() + plugin.set_parameter("column", "seq") + plugin.set_parameter("reference", "AGAAGTAGAGG") + plugin.set_parameter("output", "out") + + plugin.prepare(["test"], None) + + output_df = plugin.process_dataframe(input_df, logger) + + output = output_df.to_records() + + assert output[0]["out"] == "g.1A>T" + assert output[1]["out"] == "g.[7A>T;9A>T]" + assert output[2]["out"] == "g.[2G>T;6T>A]" + + def test_variant_ref_column(): input_df = pd.DataFrame( @@ -14,7 +34,7 @@ def test_variant_ref_column(): plugin = VariantPlugin() plugin.set_parameter("column", "seq") - plugin.set_parameter("reference", "ref") + plugin.set_parameter("reference", "— ref") plugin.set_parameter("output", "out") plugin.prepare(["test"], None)