Loading lib/galaxy/managers/genomes.py +14 −4 Original line number Diff line number Diff line Loading @@ -4,7 +4,10 @@ from typing import ( TYPE_CHECKING, ) from sqlalchemy import func from sqlalchemy import ( func, text, ) from galaxy import model as m from galaxy.exceptions import ( Loading Loading @@ -75,6 +78,7 @@ class GenomesManager: class GenomeFilterMixin: orm_filter_parsers: "OrmFilterParsersType" database_connection: str valid_ops = ("eq", "contains", "has") def create_genome_filter(self, attr, op, val): Loading @@ -86,15 +90,21 @@ class GenomeFilterMixin: # Doesn't filter genome_build for collections if model_class.__name__ == "HistoryDatasetCollectionAssociation": return False # TODO: should use is_postgres(self.database_connection) in 23.2 if self.database_connection.startswith("postgres"): column = text("convert_from(metadata, 'UTF8')::json ->> 'dbkey'") else: column = func.json_extract(model_class.table.c._metadata, "$.dbkey") lower_val = val.lower() # Ignore case # dbkey can either be "hg38" or '["hg38"]', so we need to check both if op == "eq": cond = func.lower(column) == lower_val cond = func.lower(column) == lower_val or func.lower(column) == f'["{lower_val}"]' else: cond = func.lower(column).contains(lower_val, autoescape=True) return cond return _create_genome_filter def _add_parsers(self): def _add_parsers(self, database_connection: str): self.database_connection = database_connection self.orm_filter_parsers.update({"genome_build": self.create_genome_filter}) lib/galaxy/managers/history_contents.py +2 −1 Original line number Diff line number Diff line Loading @@ -632,8 +632,9 @@ class HistoryContentsFilters( def _add_parsers(self): super()._add_parsers() database_connection: str = self.app.config.database_connection annotatable.AnnotatableFilterMixin._add_parsers(self) genomes.GenomeFilterMixin._add_parsers(self) genomes.GenomeFilterMixin._add_parsers(self, database_connection) deletable.PurgableFiltersMixin._add_parsers(self) taggable.TaggableFilterMixin._add_parsers(self) tools.ToolFilterMixin._add_parsers(self) Loading Loading
lib/galaxy/managers/genomes.py +14 −4 Original line number Diff line number Diff line Loading @@ -4,7 +4,10 @@ from typing import ( TYPE_CHECKING, ) from sqlalchemy import func from sqlalchemy import ( func, text, ) from galaxy import model as m from galaxy.exceptions import ( Loading Loading @@ -75,6 +78,7 @@ class GenomesManager: class GenomeFilterMixin: orm_filter_parsers: "OrmFilterParsersType" database_connection: str valid_ops = ("eq", "contains", "has") def create_genome_filter(self, attr, op, val): Loading @@ -86,15 +90,21 @@ class GenomeFilterMixin: # Doesn't filter genome_build for collections if model_class.__name__ == "HistoryDatasetCollectionAssociation": return False # TODO: should use is_postgres(self.database_connection) in 23.2 if self.database_connection.startswith("postgres"): column = text("convert_from(metadata, 'UTF8')::json ->> 'dbkey'") else: column = func.json_extract(model_class.table.c._metadata, "$.dbkey") lower_val = val.lower() # Ignore case # dbkey can either be "hg38" or '["hg38"]', so we need to check both if op == "eq": cond = func.lower(column) == lower_val cond = func.lower(column) == lower_val or func.lower(column) == f'["{lower_val}"]' else: cond = func.lower(column).contains(lower_val, autoescape=True) return cond return _create_genome_filter def _add_parsers(self): def _add_parsers(self, database_connection: str): self.database_connection = database_connection self.orm_filter_parsers.update({"genome_build": self.create_genome_filter})
lib/galaxy/managers/history_contents.py +2 −1 Original line number Diff line number Diff line Loading @@ -632,8 +632,9 @@ class HistoryContentsFilters( def _add_parsers(self): super()._add_parsers() database_connection: str = self.app.config.database_connection annotatable.AnnotatableFilterMixin._add_parsers(self) genomes.GenomeFilterMixin._add_parsers(self) genomes.GenomeFilterMixin._add_parsers(self, database_connection) deletable.PurgableFiltersMixin._add_parsers(self) taggable.TaggableFilterMixin._add_parsers(self) tools.ToolFilterMixin._add_parsers(self) Loading