From b5e66b7e3ea3b9352fa776de670593f87b32496f Mon Sep 17 00:00:00 2001 From: asherpasha Date: Thu, 7 Aug 2025 17:15:53 -0400 Subject: [PATCH 1/2] Enabled eFP Grape --- api/resources/efp_image.py | 1 + requirements.txt | 14 +++++++------- tests/resources/test_efp_image.py | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/api/resources/efp_image.py b/api/resources/efp_image.py index 89df2e2..899ed1a 100644 --- a/api/resources/efp_image.py +++ b/api/resources/efp_image.py @@ -24,6 +24,7 @@ def get(self): "efp_arabidopsis", "efp_arachis", "efp_cannabis", + "efp_grape", "efp_maize", "efp_rice", "efp_sorghum", diff --git a/requirements.txt b/requirements.txt index 486ab98..6452f2f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,10 +4,10 @@ attrs==25.3.0 black==25.1.0 blinker==1.9.0 cachelib==0.13.0 -certifi==2025.7.14 +certifi==2025.8.3 charset-normalizer==3.4.2 click==8.2.1 -coverage==7.10.0 +coverage==7.10.2 Deprecated==1.2.18 flake8==7.3.0 Flask==3.1.1 @@ -17,7 +17,7 @@ Flask-Limiter==3.12 flask-marshmallow==1.3.0 flask-restx==1.3.0 Flask-SQLAlchemy==3.1.1 -greenlet==3.2.3 +greenlet==3.2.4 idna==3.10 importlib_resources==6.5.2 iniconfig==2.1.0 @@ -25,7 +25,7 @@ itsdangerous==2.2.0 Jinja2==3.1.6 jsonschema==4.25.0 jsonschema-specifications==2025.4.1 -limits==5.4.0 +limits==5.5.0 markdown-it-py==3.0.0 MarkupSafe==3.0.2 marshmallow==4.0.0 @@ -45,14 +45,14 @@ pyrsistent==0.20.0 pytest==8.4.1 python-dateutil==2.9.0.post0 pytz==2025.2 -redis==6.2.0 +redis==6.4.0 referencing==0.36.2 requests==2.32.4 rich==13.9.4 -rpds-py==0.26.0 +rpds-py==0.27.0 setuptools==80.9.0 six==1.17.0 -SQLAlchemy==2.0.41 +SQLAlchemy==2.0.42 typing_extensions==4.14.1 urllib3==2.5.0 Werkzeug==3.1.3 diff --git a/tests/resources/test_efp_image.py b/tests/resources/test_efp_image.py index 82eb372..3efceb2 100644 --- a/tests/resources/test_efp_image.py +++ b/tests/resources/test_efp_image.py @@ -17,6 +17,7 @@ def test_get_efp_image_list(self): "efp_arabidopsis", "efp_arachis", "efp_cannabis", + "efp_grape", "efp_maize", "efp_rice", "efp_sorghum", From 6714223770c6ed2641a27f45df62557a30d097c0 Mon Sep 17 00:00:00 2001 From: asherpasha Date: Thu, 7 Aug 2025 18:20:57 -0400 Subject: [PATCH 2/2] Fixed a bug and updated tests. --- api/utils/bar_utils.py | 11 +++++++++++ api/utils/efp_utils.py | 10 ++++++++++ tests/utils/test_bar_utils.py | 8 ++++++++ tests/utils/test_efp_utils.py | 10 ++++++++++ 4 files changed, 39 insertions(+) diff --git a/api/utils/bar_utils.py b/api/utils/bar_utils.py index 7fe0739..12e5b7c 100644 --- a/api/utils/bar_utils.py +++ b/api/utils/bar_utils.py @@ -33,6 +33,17 @@ def is_arabidopsis_gene_valid(gene): else: return False + @staticmethod + def is_grape_gene_valid(gene): + """This function verifies if grape gene is valid: VIT_00s0120g00060 + :param gene: + :return: + """ + if re.search(r"^VIT_\d{0,3}\D\d{0,5}g\d{0,6}$", gene, re.I): + return True + else: + return False + @staticmethod def is_poplar_gene_valid(gene): """This function verifies if Poplar v3 gene is valid diff --git a/api/utils/efp_utils.py b/api/utils/efp_utils.py index 6405ccf..533016a 100644 --- a/api/utils/efp_utils.py +++ b/api/utils/efp_utils.py @@ -36,6 +36,7 @@ def is_efp_input_valid(efp, view, mode, gene_1, gene_2=None): "efp_arabidopsis", "efp_arachis", "efp_cannabis", + "efp_grape", "efp_maize", "efp_rice", "efp_sorghum", @@ -82,6 +83,15 @@ def is_efp_input_valid(efp, view, mode, gene_1, gene_2=None): if not BARUtils.is_cannabis_gene_valid(gene_2): return False, "Gene 2 is invalid." + if efp == "efp_grape": + # Validate gene Ids + if not BARUtils.is_grape_gene_valid(gene_1): + return False, "Gene 1 is invalid." + + if mode == "Compare": + if not BARUtils.is_grape_gene_valid(gene_2): + return False, "Gene 2 is invalid." + if efp == "efp_maize": # Validate gene ids if not BARUtils.is_maize_gene_valid(gene_1): diff --git a/tests/utils/test_bar_utils.py b/tests/utils/test_bar_utils.py index 796adf9..7396d66 100644 --- a/tests/utils/test_bar_utils.py +++ b/tests/utils/test_bar_utils.py @@ -37,6 +37,14 @@ def test_is_brassica_rapa_gene_valid(self): result = BARUtils.is_brassica_rapa_gene_valid("abc") self.assertFalse(result) + def test_is_grape_gene_valid(self): + result = BARUtils.is_grape_gene_valid("VIT_00s0120g00060") + self.assertTrue(result) + + # Invalid gene + result = BARUtils.is_grape_gene_valid("abc") + self.assertFalse(result) + def test_is_kalanchoe_gene_valid(self): # Valid gene result = BARUtils.is_kalanchoe_gene_valid("Kaladp0001s0001") diff --git a/tests/utils/test_efp_utils.py b/tests/utils/test_efp_utils.py index e0cb851..289b594 100644 --- a/tests/utils/test_efp_utils.py +++ b/tests/utils/test_efp_utils.py @@ -130,6 +130,16 @@ def test_is_efp_input_valid(self): self.assertFalse(result[0]) self.assertEqual(result[1], expected) + # eFP Grape Absolute + result = eFPUtils.is_efp_input_valid("efp_grape", "grape_developmental", "Absolute", "VIT_00s0120g00060") + self.assertTrue(result[0]) + self.assertIsNone(result[1]) + + result = eFPUtils.is_efp_input_valid("efp_grape", "grape_developmental", "Absolute", "Abc") + expected = "Gene 1 is invalid." + self.assertFalse(result[0]) + self.assertEqual(result[1], expected) + # eFP Sorghum Absolute result = eFPUtils.is_efp_input_valid("efp_sorghum", "Stress_Atlas", "Absolute", "Sobic.001G000100") self.assertTrue(result[0])