Files
galaxy/lib/tool_shed_client/trs_util.py
T

25 lines
804 B
Python

from typing import NamedTuple
class EncodedIdentifier(NamedTuple):
tool_shed_base: str
encoded_id: str
# TRS specified encoding/decoding according to...
# https://datatracker.ietf.org/doc/html/rfc3986#section-2.4
# Failed to get whole tool shed IDs working with FastAPI
# - https://github.com/tiangolo/fastapi/issues/791#issuecomment-742799299
# - urllib.parse.quote(identifier, safe='') will produce the URL fragements but
# but FastAPI eat them.
def decode_identifier(tool_shed_base: str, quoted_tool_id: str) -> str:
suffix = "/".join(quoted_tool_id.split("~"))
return f"{tool_shed_base}/repos/{suffix}"
def encode_identifier(identifier: str) -> EncodedIdentifier:
base, rest = identifier.split("/repos/", 1)
return EncodedIdentifier(base, "~".join(rest.split("/")))