Skip to content

Commit c4605da

Browse files
authored
Merge pull request #20239 from natefoo/fix-ucsc-display-as
[24.1] Refactor display_as URL generation for UCSC links and fix to remove double slashes in URL
2 parents 4e1acd0 + 94721e3 commit c4605da

File tree

3 files changed

+26
-34
lines changed

3 files changed

+26
-34
lines changed

lib/galaxy/datatypes/genetics.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
unicodify,
5050
)
5151
from galaxy.util.compression_utils import FileObjType
52+
from .util.generic_util import display_as_url
5253

5354
gal_Log = logging.getLogger(__name__)
5455
verbose = False
@@ -121,13 +122,7 @@ def ucsc_links(self, dataset: DatasetProtocol, type: str, app, base_url: str) ->
121122
action="display_at",
122123
filename=f"ucsc_{site_name}",
123124
)
124-
display_url = "%s%s/display_as?id=%i&display_app=%s&authz_method=display_at" % (
125-
base_url,
126-
app.url_for(controller="root"),
127-
dataset.id,
128-
type,
129-
)
130-
display_url = quote_plus(display_url)
125+
display_url = display_as_url(app, base_url, str(dataset.id), type)
131126
# was display_url = quote_plus( "%s/display_as?id=%i&display_app=%s" % (base_url, dataset.id, type) )
132127
# redirect_url = quote_plus( "%sdb=%s&position=%s:%s-%s&hgt.customText=%%s" % (site_url, dataset.dbkey, chrom, start, stop) )
133128
sl = [

lib/galaxy/datatypes/interval.py

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
data,
5353
dataproviders,
5454
)
55+
from .util.generic_util import display_as_url
5556

5657
log = logging.getLogger(__name__)
5758

@@ -345,15 +346,7 @@ def ucsc_links(self, dataset: DatasetProtocol, type: str, app, base_url: str) ->
345346
action="display_at",
346347
filename="ucsc_" + site_name,
347348
)
348-
display_url = quote_plus(
349-
"%s%s/display_as?id=%i&display_app=%s&authz_method=display_at"
350-
% (
351-
base_url,
352-
app.url_for(controller="root"),
353-
dataset.id,
354-
type,
355-
)
356-
)
349+
display_url = display_as_url(app, base_url, str(dataset.id), type)
357350
redirect_url = quote_plus(f"{site_url}db={dataset.dbkey}&position={chrom}:{start}-{stop}&hgt.customText=%s")
358351
link = f"{internal_url}?redirect_url={redirect_url}&display_url={display_url}"
359352
ret_val.append((site_name, link))
@@ -783,15 +776,7 @@ def _get_remote_call_url(
783776
"""
784777
internal_url = f"{app.url_for(controller='dataset', dataset_id=dataset.id, action='display_at', filename=f'{type}_{site_name}')}"
785778
base_url = app.config.get("display_at_callback", base_url)
786-
display_url = quote_plus(
787-
"%s%s/display_as?id=%i&display_app=%s&authz_method=display_at"
788-
% (
789-
base_url,
790-
app.url_for(controller="root"),
791-
dataset.id,
792-
type,
793-
)
794-
)
779+
display_url = display_as_url(app, base_url, str(dataset.id), type)
795780
link = f"{internal_url}?redirect_url={redirect_url}&display_url={display_url}"
796781
return link
797782

@@ -1566,15 +1551,7 @@ def ucsc_links(self, dataset: DatasetProtocol, type: str, app, base_url: str) ->
15661551
for site_name, site_url in app.datatypes_registry.get_legacy_sites_by_build("ucsc", dataset.dbkey):
15671552
if site_name in app.datatypes_registry.get_display_sites("ucsc"):
15681553
internal_url = f"{app.url_for(controller='dataset', dataset_id=dataset.id, action='display_at', filename='ucsc_' + site_name)}"
1569-
display_url = quote_plus(
1570-
"%s%s/display_as?id=%i&display_app=%s&authz_method=display_at"
1571-
% (
1572-
base_url,
1573-
app.url_for(controller="root"),
1574-
dataset.id,
1575-
type,
1576-
)
1577-
)
1554+
display_url = display_as_url(app, base_url, str(dataset.id), type)
15781555
redirect_url = quote_plus(
15791556
f"{site_url}db={dataset.dbkey}&position={chrom}:{start}-{stop}&hgt.customText=%s"
15801557
)

lib/galaxy/datatypes/util/generic_util.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
from urllib.parse import (
2+
quote_plus,
3+
urlencode,
4+
urljoin,
5+
)
6+
17
from galaxy.util import commands
28

39

@@ -16,3 +22,17 @@ def count_special_lines(word, filename, invert=False):
1622
except commands.CommandLineException:
1723
return 0
1824
return int(out)
25+
26+
27+
def display_as_url(app, base_url: str, dataset_id: str, display_app: str) -> str:
28+
"""Generate a link to the ``display_as`` action the the ``root`` controller, encoded for use as a query param."""
29+
display_base_url = urljoin(base_url, app.url_for(controller="root", action="display_as"))
30+
display_query = urlencode(
31+
{
32+
"id": dataset_id,
33+
"display_app": display_app,
34+
"authz_method": "display_at",
35+
}
36+
)
37+
display_url = quote_plus(f"{display_base_url}?{display_query}")
38+
return display_url

0 commit comments

Comments
 (0)