Unverified Commit 4c1c8e22 authored by Marius van den Beek's avatar Marius van den Beek Committed by GitHub
Browse files

Merge pull request #17384 from ahmedhamidawan/fix_genome_build_filter_postgres

[23.0] Fix History contents `genome_build` filter postgresql bug
parents c654c886 5ffa9e15
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -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 (
@@ -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):
@@ -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})
+2 −1
Original line number Diff line number Diff line
@@ -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)